Coolcrab Posted September 24, 2017 Share Posted September 24, 2017 (edited) Main Website: http://pietrow.net/atari/astronomer/ Buy your cartridge here: http://atariage.com/forums/topic/281647-fs-astronomer-for-the-atari-2600-ntsc-or-pal/?do=findComment&comment=4087293 Get 20 point and win a patch + official letter! (See attachment) Update 18/10/2018 - Version 1.2. Score glitch fixed so it should not roll over to 999999 anymore. Update 27/2/2018 - Version 1.0. The game is officially done. I've used the 4k to the max and nothing more can be added sadly. Since I want to work on my other game I decided to not go 8k. (Maybe at some point in the future) The good news is that the game got picked up for publication at Packrat video games! It will be sold as a cart+manual. So no box, but I designed one anyway for anyone who wants to print one themselves. Game now comes in NTSC and PAL. You are an astronomer and you are working at a telescope. You are tasked to observe a certain star for your research project. Point your telescope at the star and observe! But look out for clouds, as they ruin your observations. Other astronomers also want to use the telescope, so make sure to finish your observations before the time runs out. Otherwise you will be banned for wasting time. Goals: *Fill the healthbar before the score reaches 0 *Don't observe clouds Flip the left difficulty switch to A for playing with paddles, B for joystick. Flip the right difficulty switch for extra time on the telescope Gamemode 1 gets harder with standard increments Gamemode 2 has more random leveles Use reset button to reset For convenience, you can play the game by clicking this link: http://javatari.org/?ROM=http://pietrow.net/games/astronomerV0.9.bin Any feedback and suggestions for gameplay would be welcome! Thanks to Bogax, RandomTerrain and Atari Age in general! astronomerV1.2_ntsc.bas astronomerV1.2_pal.bas astronomerV1.2_ntsc.bin astronomerV1.2_pal.bin Edited October 18, 2018 by Coolcrab 8 Quote Link to comment Share on other sites More sharing options...
mika Posted September 24, 2017 Share Posted September 24, 2017 original! I like it Quote Link to comment Share on other sites More sharing options...
Keatah Posted September 24, 2017 Share Posted September 24, 2017 (edited) Could be interesting. Get some intermittent clouds wafting by where you have to predict the location of the object. Have bonus meteors. Hidden DSOs. Satellites. Bonus planets. Wind shaking the telescope.. And more! A psychedelic eclipse boss round, and 2-player Battle of the Observatories where you rack up $$$ to build more telescopes. A solar flare that temporarily blinds you and knocks the electrics off-line. Multiple telescopes to pick from, wide or narrow field. Unlock the space telescope and radio telescope.. Edited September 24, 2017 by Keatah Quote Link to comment Share on other sites More sharing options...
+Karl G Posted September 24, 2017 Share Posted September 24, 2017 I appreciate the cleverness of this one as well. Making an action game based on astronomy? Awesome! Quote Link to comment Share on other sites More sharing options...
Keatah Posted September 24, 2017 Share Posted September 24, 2017 Reminded me of Return of the Jedi where you have the swinging light sabers.. Quote Link to comment Share on other sites More sharing options...
+KaeruYojimbo Posted September 24, 2017 Share Posted September 24, 2017 Really cool concept. You could make diagonals with the missile in assembly (it's how the vines in Pitfall are done), but there isn't a way to do that with batari basic as far as I know. Quote Link to comment Share on other sites More sharing options...
Coolcrab Posted September 24, 2017 Author Share Posted September 24, 2017 (edited) Reminded me of Return of the Jedi where you have the swinging light sabers.. Oh I didn't think of that game. Any clue on how they programmed this? Is it a sprite or a background? And did they just draw each position? Really cool concept. You could make diagonals with the missile in assembly (it's how the vines in Pitfall are done), but there isn't a way to do that with batari basic as far as I know. I haven't looked into assembly at all, are there tutorial sites on that? This guy also did it in the same way I did, i.e. with backgrounds. http://sebastianmihai.com/main.php?t=47So perhaps this is the only way Could be interesting. Get some intermittent clouds wafting by where you have to predict the location of the object. Have bonus meteors. Hidden DSOs. Satellites. Bonus planets. Wind shaking the telescope.. And more! A psychedelic eclipse boss round, and 2-player Battle of the Observatories where you rack up $$$ to build more telescopes. A solar flare that temporarily blinds you and knocks the electrics off-line. Multiple telescopes to pick from, wide or narrow field. Unlock the space telescope and radio telescope.. The clouds are a good idea! It would probably be cool if the stars were 'immune' while in a cloud. Multiplayer would also be awesome, but I will focus on 1p first. I'm sure that I'll have to remake the whole thing a few times anyhow. Edited September 24, 2017 by Coolcrab Quote Link to comment Share on other sites More sharing options...
Keatah Posted September 24, 2017 Share Posted September 24, 2017 Oh I didn't think of that game. Any clue on how they programmed this? Is it a sprite or a background? And did they just draw each position? You'll want to ask an expert VCS programmer, and that is definitely most absolutely not me. Quote Link to comment Share on other sites More sharing options...
Coolcrab Posted September 24, 2017 Author Share Posted September 24, 2017 Added a newer version. 1 Quote Link to comment Share on other sites More sharing options...
+SpiceWare Posted September 24, 2017 Share Posted September 24, 2017 Oh I didn't think of that game. Any clue on how they programmed this? Is it a sprite or a background? And did they just draw each position? I posted a reply about that this morning in your other topic. Quote Link to comment Share on other sites More sharing options...
Keatah Posted September 24, 2017 Share Posted September 24, 2017 Versions should have a date in them so they can be referenced for comparisons. Quote Link to comment Share on other sites More sharing options...
mika Posted September 24, 2017 Share Posted September 24, 2017 Versions should have a date in them so they can be referenced for comparisons. I would also suggest adding a name, for those of us checking the newest build with Stella - it's hard to navigate within a folder full of default.bas.bins! 1 Quote Link to comment Share on other sites More sharing options...
+Random Terrain Posted September 25, 2017 Share Posted September 25, 2017 I would also suggest adding a name, for those of us checking the newest build with Stella - it's hard to navigate within a folder full of default.bas.bins! Related link: atariage.com/forums/topic/181075-posting-tips-for-new-bb-users/ Quote Link to comment Share on other sites More sharing options...
+KaeruYojimbo Posted September 25, 2017 Share Posted September 25, 2017 It might be possible to use the pfvline to draw lines with the playfield blocks if you can come up with a good way to programmatically determine where the vertical sections should begin and end to create diagonal lines. Quote Link to comment Share on other sites More sharing options...
Coolcrab Posted September 28, 2017 Author Share Posted September 28, 2017 It might be possible to use the pfvline to draw lines with the playfield blocks if you can come up with a good way to programmatically determine where the vertical sections should begin and end to create diagonal lines. I tried the function but I couldn't find a good way of implementing it. However, I decided to just draw every option by hand. But for some reason it does not accept my code. Could it be that it is too long? It compiles but gives a black screen that doesn't respond to anything. Code below main1 y=0 player1x=80:player1y=85 player0x=0:player0y=10 c =10 l=0 score = 10 main COLUBK=$0E COLUP1=$28 if y=0 then playfield: ............................. ............................. ............................. ............................. ............................. ............................. ............................. ............................. XXXXXXXXXXXXXXX.............. ............................. ............................. end if y=5 then playfield: ............................. ............................. ............................. ............................. ............................. ............................. ............................. XXXXXXXX..................... ........XXXXXXX.............. ............................. ............................. end if y=10 then playfield: ............................. ............................. ............................. ............................. ............................. ............................. XXXX......................... ....XXXXXXX.................. ...........XXXX.............. ............................. ............................. end if y=15 then playfield: ............................. ............................. ............................. ............................. ............................. XXX.......................... ...XXXXX..................... ........XXXX................. ............XXX.............. ............................. ............................. end if y=20 then playfield: ............................. ............................. ............................. ............................. ............................. XXX.......................... ...XXXXX..................... ........XXXX................. ............XXX.............. ............................. ............................. end if y=25 then playfield: ............................. ............................. ............................. ............................. XX........................... ..XXXX....................... .....XXXX.................... .........XXXX................ .............XX.............. ............................. ............................. end if y=30 then playfield: ............................. ............................. ............................. XX........................... ..XXX........................ .....XXX..................... ........XX................... ..........XXX................ .............XX.............. ............................. ............................. end if y=35 then playfield: ............................. ............................. XX........................... ..XX......................... ....XX....................... ......XXX.................... .........XX.................. ...........XX................ .............XX.............. ............................. ............................. end if y=40 then playfield: ............................. XX........................... ..XX......................... ....XX....................... ......XX..................... ........XX................... ..........XX................. ............XX............... ..............X.............. ............................. ............................. end if y=45 then playfield: X............................ .XX.......................... ...XX........................ .....XX...................... .......XX.................... .........X................... ..........XX................. ............XX............... ..............X.............. ............................. ............................. end if y=50 then playfield: .X........................... ..XX......................... ....XX....................... ......X...................... .......XX.................... .........X................... ..........XX................. ............XX............... ..............X.............. ............................. ............................. end if y=55 then playfield: ..X.......................... ...XX........................ .....X....................... ......XX..................... ........X.................... .........XX.................. ...........X................. ............XX............... ..............X.............. ............................. ............................. end if y=60 then playfield: ...X......................... ....XX....................... ......X...................... .......X..................... ........XX................... ..........X.................. ...........X................. ............XX............... ..............X.............. ............................. ............................. end if y=65 then playfield: ....X........................ .....X....................... ......XX..................... ........X.................... .........X................... ..........X.................. ...........XX................ .............X............... ..............X.............. ............................. ............................. end if y=70 then playfield: .....X....................... ......X...................... .......X..................... ........X.................... .........XX.................. ...........X................. ............X................ .............X............... ..............X.............. ............................. ............................. ............................. end if y=75 then playfield: .......X..................... ........X.................... .........X................... ..........X.................. ...........X................. ............X................ .............X............... ..............X.............. ............................. ............................. end if y=80 then playfield: .......X..................... ........X.................... .........X................... ..........X.................. ..........X.................. ...........X................. ............X................ .............X............... ..............X.............. ............................. ............................. end if y=85 then playfield: ........X.................... .........X................... .........X................... ..........X.................. ...........X................. ............X................ ............X................ .............X............... ..............X.............. ............................. ............................. end if y=90 then playfield: .........X................... ..........X.................. ..........X.................. ...........X................. ...........X................. ............X................ .............X............... .............X............... ..............X.............. ............................. ............................. end if y=100 then playfield: ..........X.................. ..........X.................. ...........X................. ...........X................. ............X................ ............X................ .............X............... .............X............... ..............X.............. ............................. ............................. end if y=110 then playfield: ...........X................. ...........X................. ............X................ ............X................ ............X................ .............X............... .............X............... ..............X.............. ..............X.............. ............................. ............................. end if y=120 then playfield: ............X................ ............X................ ............X................ .............X............... .............X............... .............X............... .............X............... ..............X.............. ..............X.............. ............................. ............................. end if y=130 then playfield: .............X............... .............X............... .............X............... .............X............... .............X............... ..............X.............. ..............X.............. ..............X.............. ..............X.............. ............................. ............................. end if y=140 then playfield: ..............X.............. ..............X.............. ..............X.............. ..............X.............. ..............X.............. ..............X.............. ..............X.............. ..............X.............. ..............X.............. ............................. ............................. end if y=150 then playfield: ...............X............. ...............X............. ...............X............. ...............X............. ...............X............. ..............X.............. ..............X.............. ..............X.............. ..............X.............. ............................. ............................. end if y=160 then playfield: ................X............ ................X............ ................X............ ...............X............. ...............X............. ...............X............. ...............X............. ..............X.............. ..............X.............. ............................. ............................. end if y=170 then playfield: .................X........... .................X........... ................X............ ................X............ ................X............ ...............X............. ...............X............. ..............X.............. ..............X.............. ............................. ............................. end if y=180 then playfield: ..................X.......... ..................X.......... .................X........... .................X........... ................X............ ................X............ ...............X............. ...............X............. ..............X.............. ............................. ............................. end if y=190 then playfield: ...................X......... ..................X.......... ..................X.......... .................X........... .................X........... ................X............ ...............X............. ...............X............. ..............X.............. ............................. ............................. end if y=200 then playfield: ....................X........ ...................X......... ...................X......... ..................X.......... .................X........... ................X............ ................X............ ...............X............. ..............X.............. ............................. ............................. end if y=210 then playfield: .....................X....... ....................X........ ...................X......... ..................X.......... ..................X.......... .................X........... ................X............ ...............X............. ..............X.............. ............................. ............................. end if y=220 then playfield: .....................X....... ....................X........ ...................X......... ..................X.......... .................X........... ................X............ ...............X............. ..............X.............. ............................. ............................. end if y=230 then playfield: .......................X..... ......................X...... .....................X....... ....................X........ ..................XX......... .................X........... ................X............ ...............X............. ..............X.............. ............................. ............................. ............................. end if y=240 then playfield: ........................X.... .......................X..... .....................XX...... ....................X........ ...................X......... ..................X.......... ................XX........... ...............X............. ..............X.............. ............................. ............................. end if y=250 then playfield: .........................X... .......................XX.... ......................X...... .....................X....... ...................XX........ ..................X.......... .................X........... ...............XX............ ..............X.............. ............................. ............................. end if y=260 then playfield: ..........................X.. ........................XX... .......................X..... .....................XX...... ....................X........ ..................XX......... .................X........... ...............XX............ ..............X.............. ............................. ............................. end if y=270 then playfield: ...........................X. .........................XX.. .......................XX.... ......................X...... ....................XX....... ...................X......... .................XX.......... ...............XX............ ..............X.............. ............................. ............................. end if y=280 then playfield: ............................X ..........................XX. ........................XX... ......................XX..... ....................XX....... ...................X......... .................XX.......... ...............XX............ ..............X.............. ............................. ............................. end if y=290 then playfield: ............................. ...........................XX .........................XX.. .......................XX.... .....................XX...... ...................XX........ .................XX.......... ...............XX............ ..............X.............. ............................. ............................. end if y=300 then playfield: ............................. ............................. ...........................XX .........................XX.. .......................XX.... ....................XXX...... ..................XX......... ................XX........... ..............XX............. ............................. ............................. end if y=310 then playfield: ............................. ............................. ............................. ...........................XX ........................XXX.. .....................XXX..... ...................XX........ ................XXX.......... ..............XX............. ............................. ............................. end if y=320 then playfield: ............................. ............................. ............................. ............................. ...........................XX .......................XXXX.. ....................XXXX..... ................XXXX......... ..............XX............. ............................. ............................. end if y=330 then playfield: ............................. ............................. ............................. ............................. ............................. ..........................XXX .....................XXXXX... .................XXXX........ ..............XXX............ ............................. ............................. end if y=340 then playfield: ............................. ............................. ............................. ............................. ............................. ..........................XXX .....................XXXXX... .................XXXX........ ..............XXX............ ............................. ............................. end if y=350 then playfield: ............................. ............................. ............................. ............................. ............................. ............................. .........................XXXX ..................XXXXXXX.... ..............XXXX........... ............................. ............................. end if y=360 then playfield: ............................. ............................. ............................. ............................. ............................. ............................. ............................. .....................XXXXXXXX ..............XXXXXXX........ ............................. ............................. end if y=370 then playfield: ............................. ............................. ............................. ............................. ............................. ............................. ............................. ............................. ..............XXXXXXXXXXXXXXX ............................. ............................. end player0: %00000000 %00000000 %00011000 %00111100 %00111100 %00011000 %00000000 %00000000 end if y=0 then player1: %01111110 %00111100 %00011000 %00011000 %00111100 %00000000 %00000000 %00000000 end if y=10 then player1: %01111110 %00111100 %00011100 %00001000 %00000101 %00000010 %00000100 %00000000 end if y=20 then player1: %01111110 %00111100 %00011001 %00001111 %00000001 %00000000 %00000000 %00000000 end if joy0right then y=y+1 if joy0left then y=y-1 if c>10 then player0x=player0x+1: c=0 c=c+1 if collision(player0,playfield) then l=l+1 if l>100 then score=score+1: player0x=5:player0y=70: l=0 drawscreen goto main Quote Link to comment Share on other sites More sharing options...
+Random Terrain Posted September 29, 2017 Share Posted September 29, 2017 I don't see this in your code: randomterrain.com/atari-2600-memories-batari-basic-commands.html#colupf Quote Link to comment Share on other sites More sharing options...
Keatah Posted September 29, 2017 Share Posted September 29, 2017 It's fun to scroll post #15 up and down at hi-speed. Swish-Swoom-Swish-Swoom! Anyone want to do a game about windshield wipers? 1 Quote Link to comment Share on other sites More sharing options...
Coolcrab Posted September 29, 2017 Author Share Posted September 29, 2017 I don't see this in your code: randomterrain.com/atari-2600-memories-batari-basic-commands.html#colupf Put it in the main right under the other colors but it doesn't seem to fix it. main COLUBK=$0E COLUP1=$28 COLUPF = $26 The code worked when I had less rooms, could that be it? Also their size is 29x11, to get more symmetry, does it possibly not like that? Quote Link to comment Share on other sites More sharing options...
+Random Terrain Posted September 29, 2017 Share Posted September 29, 2017 Variables can hold a value ranging from 0 to 255: randomterrain.com/atari-2600-memories-batari-basic-commands.html#bq_what_is_a_variable It won't compile because of the code that is trying to go beyond 255. It works with the offending lines REMed out, but you only have 449 bytes of ROM space left after doing that, so you'll run out of space once you fix your variable problem. You'll probably need to use a different technique. As far as I know, the two line commands make straight lines, not diagonals, so you'd probably have to use pfpixel. Quote Link to comment Share on other sites More sharing options...
+Karl G Posted September 29, 2017 Share Posted September 29, 2017 If I were doing this, I would make an integer-based line-drawing function that reads start and end coordinates from a data table, and plots them with pfpixel as RT suggested. If I have time, I'll try to make an example program that does this. Quote Link to comment Share on other sites More sharing options...
Coolcrab Posted September 29, 2017 Author Share Posted September 29, 2017 (edited) Variables can hold a value ranging from 0 to 255: randomterrain.com/atari-2600-memories-batari-basic-commands.html#bq_what_is_a_variable It won't compile because of the code that is trying to go beyond 255. It works with the offending lines REMed out, but you only have 449 bytes of ROM space left after doing that, so you'll run out of space once you fix your variable problem. You'll probably need to use a different technique. As far as I know, the two line commands make straight lines, not diagonals, so you'd probably have to use pfpixel. Yes this works thanks! But now when I try to run it it gives black static unless I remove like a quarter of the rooms. I'm guessing that that is the space issue. It looks a lot better in transition though. So It's a pity that this does not work. You can't make an 8k game with batari basic? I've looked into pfpixel and the other two line commands, but I can't think of a way to draw the lines without programming in all pixels manually. And that would probably take up more space? Is space defined as the amount of characters used? I guess you'd have less lines per room, as a lot of the pixels can be seen as a 1x2 hline or vline. So might be worth a try. Do you think it will be worth the effort or still be too long? If I were doing this, I would make an integer-based line-drawing function that reads start and end coordinates from a data table, and plots them with pfpixel as RT suggested. If I have time, I'll try to make an example program that does this. This would be great. If you do not have time, could you tell me how you would tackle such a problem. I don't know how to atomize the process and keep the lines symmetrical. Edited September 29, 2017 by Coolcrab Quote Link to comment Share on other sites More sharing options...
bogax Posted September 29, 2017 Share Posted September 29, 2017 This would be great. If you do not have time, could you tell me how you would tackle such a problem. I don't know how to atomize the process and keep the lines symmetrical. You could adapt this to draw lines (Bresenhams algorithm is for drawing lines) I don't know if it would be fast enough I'd do the pixel setting and clearing in bB for speed Quote Link to comment Share on other sites More sharing options...
Coolcrab Posted September 30, 2017 Author Share Posted September 30, 2017 (edited) You could adapt this to draw lines (Bresenhams algorithm is for drawing lines) I don't know if it would be fast enough I'd do the pixel setting and clearing in bB for speed Yes thank you, this is also what I found on stack overflow. I'm trying to implement the code to draw squares but i'm messing up and not sure how to fix it. Instead of an object I make a variable xpos, ypos that 'walks' to the chosen coordinate and whenever it is not touching the playfield it turns the pfpixel to on. Then when it reaches the desired position it stops altogether. This is fast and perfect.. Now I am trying to couple this to a paddle, but it seems not to accept the paddle keyword. (And I tried to copy the readpaddle example) It's getting there though Thanks all for the help! If you replace if p <> paddle then x = paddle : goto center by if joy0fire then x = x + 1 : y = 2 : goto enter for example then the code works in plotting the lines. set kernel_options no_blank_lines readpaddle currentpaddle = 0 drawscreen dim ea = a dim dy = b dim dx = c dim x1 = temp1 dim x0 = temp2 dim y1 = temp3 dim y0 = temp4 dim delay = h dim rand16 = z dim xpos = k dim ypos = l x = 0 y = 3 t = 0 p = paddle player0: %11000000 %11000000 %00000000 %00000000 %00000000 %00000000 %00000000 %00000000 end player1: %11110000 %11110000 %11110000 %11110000 %00000000 %00000000 %00000000 %00000000 end xpos = 14 : ypos = 9 pfpixel xpos ypos on goto enter loop COLUP0 = $1C COLUP1 = $B4 COLUPF = $62 drawscreen if xpos <> x && ypos <> y then pfpixel xpos ypos on: gosub move if p <> paddle then x = paddle : goto center goto loop enter xpos=14 : ypos=9 pfpixel xpos ypos on x0 = xpos : y0 = ypos x1 = x : y1 = y gosub setup_move goto pf move temp1 = ea if f{0} then skip ypos = ypos + yinc[f] ea = ea - dx if temp1 < ea then ea = ea + dy : xpos = xpos + xinc[f] return skip xpos = xpos + xinc[f] ea = ea - dy if temp1 < ea then ea = ea + dx : ypos = ypos + yinc[f] return setup_move if x0 < x1 then f{2} = 1 : dx = x1 - x0 else f{2} = 0 : dx = x0 - x1 if y0 < y1 then f{1} = 1 : dy = y1 - y0 else f{1} = 0 : dy = y0 - y1 if dx > dy then f{0} = 1 : ea = dx else f{0} = 0 : ea = dy var36 = f return data yinc $FF, $FF, $01, $01, $FF, $FF,$01, $01 end data xinc $FF, $FF, $FF, $FF, $01, $01, $01, $01 end pf playfield: ................................ ................................ ................................ ................................ ................................ ................................ ................................ ................................ ................................ ................................ ................................ end goto loop Edited September 30, 2017 by Coolcrab Quote Link to comment Share on other sites More sharing options...
+KaeruYojimbo Posted September 30, 2017 Share Posted September 30, 2017 You have "goto center" but the label is "enter" Quote Link to comment Share on other sites More sharing options...
Coolcrab Posted September 30, 2017 Author Share Posted September 30, 2017 You have "goto center" but the label is "enter" Wow good call I missed that, but it still does not seem to react properly. I also hooked paddle to score to see how it behaves, but it stays at 64. (score = paddle) (And I changed the stella settings to use a paddle instead of a joystick in the settings.) Once that is done I think its just a matter of normalizing the paddle output and bam. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.