Invaders Progress

The author of CPM Tetris and Snake.
User avatar
DJ Sures
Posts: 306
Joined: Tue Mar 28, 2023 8:36 pm
Location: nabu.ca
Contact:

Re: Invaders Progress

Post by DJ Sures »

Do you have any cost savings by using a pointer instead of the array reference? In some cases I find z88 is much happier with a pointer. I did the LST between builds for comparison. Although just seeing the file size decrease is a good telltale :)
User avatar
productiondave
Posts: 93
Joined: Tue Mar 28, 2023 10:01 pm

Re: Invaders Progress

Post by productiondave »

I don't know for sure. For now I am keeping the code as simple as I can. the idea is to get it working and then look at performance after.

I have an array of structs that let me track each invader's location in the tile space as well as the location in pixel space. The pixel space is so that I can know which tiles to display at any given point along the x axis and the tile space is for a quick lookup if I need it. I know I can infer the tile from the pixel, but I would rather do that once and then look it up the multiple times I need it. I think this is faster than doing the math each time.

The compiler appears to use pointers to manage this access and it's quite liberal with it's use of the IX register. This was one of the reasons I was moving away from C to begin with. However, I don't think it's making much material difference. I might not be getting 60 FPS, but I don't need to.

TO answer my own question about the compiler using AND to do a MOD...

This little program is the simplest I could come up with to see how it handles the modulus.

Code: Select all

#include <stdio.h>
int main(void) {
        for (uint8_t i = 0; i < 20; i ++) {
                uint8_t ox = i % 8;
                printf("%d\n", ox);
        }
        return 0;
}
and here is the relevant part of the listing.

Code: Select all

   384                          _main:
   385  0000  0e00                      ld      c,0x00
   386                          l_main_00103:
   387  0002  79                        ld      a,c
   388  0003  fe14                      cp      a,0x14
   389  0005  3014                      jr      NC,l_main_00101
   390  0007  e607                      and     a,0x07
   391  0009  1600                      ld      d,0x00
   392  000b  c5                        push    bc
   393  000c  5f                        ld      e, a
   394  000d  d5                        push    de
   395  000e  210000                    ld      hl,___str_0
   396  0011  e5                        push    hl
   397  0012  cd0000                    call    _printf
   398  0015  f1                        pop     af
   399  0016  f1                        pop     af
   400  0017  c1                        pop     bc
   401  0018  0c                        inc     c
   402  0019  18e7                      jr      l_main_00103
   403                          l_main_00101:
   404  001b  210000                    ld      hl,0x0000
   405  001e  c9                        ret
User avatar
DJ Sures
Posts: 306
Joined: Tue Mar 28, 2023 8:36 pm
Location: nabu.ca
Contact:

Re: Invaders Progress

Post by DJ Sures »

Do you notice printf with z88 sometimes has strange output? I find that happens but I haven’t raised an issue with their forum yet. I haven’t done enough tests to understand why it’s happening.
User avatar
productiondave
Posts: 93
Joined: Tue Mar 28, 2023 10:01 pm

Re: Invaders Progress

Post by productiondave »

I haven't noticed. I don't use it too much. Typically I'm writing text to the framebuffer these days. Score and lives etc
User avatar
productiondave
Posts: 93
Joined: Tue Mar 28, 2023 10:01 pm

Re: Invaders Progress

Post by productiondave »

Daily stand-up

Forcing myself to take a couple nights off. Development will resume in a few days.

DONE:
  • animate aliens back and forth across the screen until at least one alien hits the edge of the screen before changing direction and dropping down 1 tile row.. (This took me a long time to figure out.)
  • draw shields on the screen
  • controllable player cannon
  • bullets (player shooting) - shoot event, bullet animation, clear bullet logic when bullet hits an invader or flies off the top of the screen.
  • detect bullets colliding with aliens - Tile level collision only.
  • implement game-over detection (player has defeated all the aliens)
  • implement shield damage from player bullets
  • implement shield defense and damage from alien bombs
  • let aliens drop bombs - all code as per bullets but going down and with a different sprite pattern and colour.
  • alien death animation / explosion
  • detect collision between bomb sprites and player sprite (player dies)
TO DO:
  • implement 3 lives system
  • implement scoring system and score display text
  • implement ufo
  • sound effects
  • game music
  • implement start menu - including ability to play again etc.
  • implement high score system.
  • implement game levels. Options include increased number of alien bombs at once, faster aliens etc.
User avatar
productiondave
Posts: 93
Joined: Tue Mar 28, 2023 10:01 pm

Re: Invaders Progress

Post by productiondave »

Daily stand-up

I am ready for people to start having a go. I don't seem to be able to upload COM files here. So here is a link to a compiled com file that will work on Cloud CPM.



I have also committed the latest code to the invaders branch on the nabu-games github. https://github.com/linuxplayground/nabu ... e/invaders

And my progress is below. Audio is a bit of a challenge with only the one PSG. So no game music yet.

DONE:
  • animate aliens back and forth across the screen until at least one alien hits the edge of the screen before changing direction and dropping down 1 tile row.. (This took me a long time to figure out.)
  • draw shields on the screen
  • controllable player cannon
  • bullets (player shooting) - shoot event, bullet animation, clear bullet logic when bullet hits an invader or flies off the top of the screen.
  • detect bullets colliding with aliens - Tile level collision only.
  • implement game-over detection (player has defeated all the aliens)
  • implement shield damage from player bullets
  • implement shield defense and damage from alien bombs
  • let aliens drop bombs - all code as per bullets but going down and with a different sprite pattern and colour.
  • alien death animation / explosion
  • detect collision between bomb sprites and player sprite (player dies)
  • implement scoring system and score display text
  • sound effects
  • implement start menu - including ability to play again etc.
  • implement high score system.
  • implement game levels. (invaders move a bit faster each time you clear them all out.)
TO DO:
  • implement 3 lives system
  • implement ufo
  • game music
Post Reply