Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.
|
Forum Index : Microcontroller and PC projects : PicoRocks - A Teaser
Page 1 of 7 | |||||
Author | Message | ||||
vegipete Guru Joined: 29/01/2013 Location: CanadaPosts: 1109 |
To test some things, I bashed this together for the PicoMiteVGA. It shows some potential. (Delete the first 2 lines if you are not transferring via AUTOSAVE.) I am puzzled by something, though. When you pilot the ship slowly off the top or left edges, the intensity drops. It appears normal everywhere else. Hmmm. (It might be related to framebuffer copying. If you hit ctrl-C while the ship is in the dim zone, it goes back to full intensity.) (PicoMiteVGA MMBasic Version 5.07.08RC21) Edited 2024-01-09 14:15 by vegipete Visit Vegipete's *Mite Library for cool programs. |
||||
Volhout Guru Joined: 05/03/2018 Location: NetherlandsPosts: 4222 |
Hi Vegipete, I see no "rocks" yet...only the spaceship. But when I accelerate it gets warp speed 10.... Wauw. You are busy with a zillion projects at the same time. Need any help to finish one of them ? LR, RIS, Qbert ... ? Volhout P.S. I wonder if the "vector graphics" resolution of the arcade game could be implemented in mode 1 (640x480) using a "tile" to color the plane if you like. But the original game was B/W only. Edited 2024-01-10 01:16 by Volhout PicomiteVGA PETSCII ROBOTS |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2120 |
I looked at the code cos asteroids was a favourite and not tried but looks interesting. I was thinking of polygons not sprites and no trig. the original arcade used phosphor fade and the rocks were drawn not erased |
||||
vegipete Guru Joined: 29/01/2013 Location: CanadaPosts: 1109 |
As I said, this was to test some things. The little demo uses 144 sprites. I wasn't about to draw them by hand. Instead, the ship was defined by 4 points, rotated to each angle and drawn. The images were then read and converted to CSub data. Stan has pointed out something else to test - how long does it take to draw the ship as a polygon instead of as a CSub sprite, and can rotation be calculated on the fly or must it be precalculated? Do CSub sprites work in mode 1 (640x480)? I haven't tried... Visit Vegipete's *Mite Library for cool programs. |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2120 |
tried the code and got rotating ship and thrust. nice. I'll try polygons and frames for fps, see fastest way. stan |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2120 |
Polygons need all the elements in the x,y arrays changed to move them. using joined lines relative to x,y may be faster. testing |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2120 |
rotating ship? xcentre=63 ycentre=58 radius=8 do for d=0 to 359 step 10 cls xp = xcentre + radius * sin (rad(d)) yp = ycentre - radius * cos (rad(d)) e=d+140:if e>359 then e=e-359 f=d+220:if f>359 then f=f-359 xe1 = xcentre + radius * sin (rad(e)) ye1 = ycentre - radius * cos (rad(e)) xe2 = xcentre + radius * sin (rad(f)) ye2 = ycentre - radius * cos (rad(f)) line xe1,ye1,xp,yp,,1 line xp,yp,xe2,ye2,,1 pause 50 next d loop |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2120 |
The firing shots at different degrees will be fun to implement. the rotating ship seems low memory and drawing the rocks could be fast enough. use frames no erase . a smaller display area to get wrap around and frames. I'll try to chip in for the picomite asteroids if I can help. stan |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2120 |
bit more efficient rotating ship xcentre=63 ycentre=58 radius=8 do for d=0 to 359 step 10 cls rd=rad(d) xp = xcentre + radius * sin (rd) yp = ycentre - radius * cos (rd) e=d+140:if e>359 then e=e-359 rd=rad(e) xe1 = xcentre + radius * sin (rd) ye1 = ycentre - radius * cos (rd) e=d+220:if e>359 then e=e-359 rd=rad(e) xe2 = xcentre + radius * sin (rd) ye2 = ycentre - radius * cos (rd) line xe1,ye1,xp,yp,,1 line xp,yp,xe2,ye2,,1 pause 50 next d loop Footnote added 2024-01-11 07:32 by stanleyella add line xe2,ye2,xcentre,ycentre,,1 line xcentre,ycentre,xe1,ye1,,1 for a proper ship :) |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2120 |
how many angles for the ship? 16 with no trig except the ship rotate, so many x,y pixels for missiles and ship forward.? stan |
||||
vegipete Guru Joined: 29/01/2013 Location: CanadaPosts: 1109 |
Ship rotation thoughts: I started with my Rocks in Space for the CMM2. It used 96 steps for the full rotation of a 32ish pixel square ship canvas on an 800x600 screen. Scaling that ship size to the PicoMite resolution gave me a 13 pixel square canvas - convenient because that results in an actual center point. Sketched a 4-point ship, put the coordinates into a little program, plotted it, fettled a bit, sorted. Then I started rotating the resulting ship to see what number of steps looked good. 96 was unnecessarily many, 72 was aesthetically pleasing. Here's the code I used to generate the ships: Option DEFAULT INTEGER option angle degrees MODE 2 cls 0 ' ship data: 4 points for ship, 5 points for flame dim float body(8,1):for i=0 to 8:read body(i,0):read body(i,1):next data 0,-6,-3,4,0,2,3,4,0,4,0,5,-1,5,0,6,1,5 dim float rc(8,1) ' work copy of ship dim float sa,ca mx = 6 : my = 56 for a = 0 to 359 step 5 ' rotate a copy of the ship sa = sin(a) : ca = cos(a) ' only do this once! for i = 0 to 8 rc(i,0) = body(i,0) * ca - body(i,1) * sa rc(i,1) = body(i,0) * sa + body(i,1) * ca next ' ship body line mx+rc(0,0),my+rc(0,1),mx+rc(1,0),my+rc(1,1),,rgb(green) line mx+rc(1,0),my+rc(1,1),mx+rc(2,0),my+rc(2,1),,rgb(green) line mx+rc(2,0),my+rc(2,1),mx+rc(3,0),my+rc(3,1),,rgb(green) line mx+rc(3,0),my+rc(3,1),mx+rc(0,0),my+rc(0,1),,rgb(green) ' rocket flames pixel mx+rc(4,0),my+rc(4,1),rgb(yellow) pixel mx+rc(5,0),my+rc(5,1),rgb(brown) pixel mx+rc(6,0),my+rc(6,1),rgb(rust) pixel mx+rc(7,0),my+rc(7,1),rgb(rust) pixel mx+rc(8,0),my+rc(8,1),rgb(rust) ' advance to next image location mx = mx + 13 if mx >= 239 then mx = 6 my = my + 13 endif next a Visit Vegipete's *Mite Library for cool programs. |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2120 |
radius=16 is nice mode 1 xcentre=100 ycentre=100 radius=16 do for d=0 to 359 step 16 cls rd=rad(d) xp = xcentre + radius * sin (rd)'ship yp = ycentre - radius * cos (rd)'direction ' e=d+140:if e>359 then e=e-359 rd=rad(e) xe1 = xcentre + radius * sin (rd)'ship ye1 = ycentre - radius * cos (rd)'tail left ' e=d+220:if e>359 then e=e-359 rd=rad(e) xe2 = xcentre + radius * sin (rd)'ship ye2 = ycentre - radius * cos (rd)'tail right ' line xe1,ye1,xp,yp,,1' : line xp,yp,xe2,ye2,,1' :draw line xe2,ye2,xcentre,ycentre,,1' :ship line xcentre,ycentre,xe1,ye1,,1' : pause 100 next d loop |
||||
lizby Guru Joined: 17/05/2016 Location: United StatesPosts: 3150 |
In MMB4W: PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on fruitoftheshed |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2120 |
if drawn then 360 but how many in atari original game? I was thinking of x,y centre to ship point ratio to get increments for movement and missile vector. reminds me of startrek https://www.youtube.com/watch?v=CBj6AUrMVls |
||||
pwillard Senior Member Joined: 07/06/2022 Location: United StatesPosts: 292 |
The original atari game had one "shape" and used vector math to rotate... no sprites at all. |
||||
Mixtel90 Guru Joined: 05/10/2019 Location: United KingdomPosts: 6779 |
I'd suggest keeping the number of rotation steps as small as possible. The rotation won't actually be as smooth, but it will be faster - and you'll need CPU capacity to handle the drawing and movement of rocks. This is one of those cases where using a lookup table for the vertices of objects could be faster and easier than calculating them, but in order to keep the lookup table reasonable you have to keep the steps down. Note that you can use just one or two lookup tables for rocks and simply scale them as needed. Edited 2024-01-11 18:22 by Mixtel90 Mick Zilog Inside! nascom.info for Nascom & Gemini Preliminary MMBasic docs & my PCB designs |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2120 |
For the classic atari asteroids look vga mode 1. should it use sprites, line, or polygon? I thought the sprite or blit on lcd had changed to not record black, dunno , which mmbasic version. joined lines with 1 x,y start and the other points x,y with offset. polygons, all points in the x,y arrays needing offset. I got 16 16x16 sprites bouncing around very fast. a few rocks should be ok. For the rock and ship and missile wrap around I thought copy a smaller frame than the drawing frame to the screen. just thoughts. stan |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2120 |
I'm trying lines for rocksfrom x,y corner as sprite to move change rx1,ry1 and draws rock there. sprite alternative? sub rock1 line rx1+6,ry1,rx1+14,ry1+6 line rx1+14,ry1+6,rx1+22,ry1 line rx1+22,ry1,rx1+30,ry1+6 line rx1+30,ry1+6,rx1+22,ry1+14 line rx1+22,ry1+14,rx1+30,ry1+22 line rx1+30,ry1+22,rx1+18,ry1+30 line rx1+18,ry1+30,rx1+8,ry1+30 line rx1+8,ry1+30,rx1,ry1+26 line rx1,ry1+26,rx1,ry1+6 line rx1,ry1+6,rx1+6,ry1 end sub sub rock2 line rx1+12,ry1,rx1+28,ry1+12 line rx1+28,ry1+12,rx1+44,ry1 line rx1+44,ry1,rx1+60,ry1+12 line rx1+60,ry1+12,rx1+44,ry1+28 line rx1+44,ry1+28,rx1+60,ry1+44 line rx1+60,ry1+44,rx1+36,ry1+60 line rx1+36,ry1+60,rx1+16,ry1+60 line rx1+16,ry1+60,rx1,ry1+44 line rx1,ry1+44,rx1,ry1+16 line rx1,ry1+16,rx1+12,ry1 end sub sub rock3 line rx1+9,ry1,rx1+21,ry1+9 line rx1+21,ry1+9,rx1+33,ry1 line rx1+33,ry1,rx1+40,ry1+9 line rx1+40,ry1+9,rx1+33,ry1+21 line rx1+33,ry1+21,rx1+40,ry1+33 line rx1+40,ry1+33,rx1+24,ry1+40 line rx1+24,ry1+40,rx1+12,ry1+40 line rx1+12,ry1+40,rx1,ry1+36 line rx1,ry1+36,rx1,ry1+12 line rx1,ry1+12,rx1+9,ry1 end sub |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2120 |
A 6502 board with dacs connected to x,y b/w vector monitor. if you turned the brightness control up you saw the the lines between the graphics as it drew a rock then moved to draw the next and all graphics. In the original asteroids only the ship rotated. I would make the saucer a sprite.. lot to draw. Edited 2024-01-14 04:46 by stanleyella |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2120 |
yes,thinking that. please see rocks are multiples. Edited 2024-01-14 05:20 by stanleyella |
||||
Page 1 of 7 |
Print this page |