laser shots
authorJohn Tsiombikas <nuclear@member.fsf.org>
Sun, 30 Oct 2022 10:05:57 +0000 (12:05 +0200)
committerJohn Tsiombikas <nuclear@member.fsf.org>
Sun, 30 Oct 2022 10:05:57 +0000 (12:05 +0200)
src/data.h
src/gamescr.c
src/gba/main.c
src/logoscr.c

index 11fe418..2e3b1da 100644 (file)
@@ -27,7 +27,11 @@ enum {
        SPRID_LEDGRN    = SPRID(56, 16),
        /*SPRID_ENEMY           = SPRID(0, 64)*/
        SPRID_ENEMY0    = SPRID(0, 32),
-       SPRID_HUSK              = SPRID(112, 64)
+       SPRID_HUSK              = SPRID(112, 64),
+       SPRID_LAS0              = SPRID(0, 64),
+       SPRID_LAS1              = SPRID(32, 64),
+       SPRID_LAS2              = SPRID(64, 64),
+       SPRID_LAS3              = SPRID(0, 96)
 };
 
 /* main game data */
index e467381..4fce8f7 100644 (file)
@@ -19,6 +19,7 @@
 
 #define P_RATE 500
 #define E_RATE 500
+#define SHOT_TIME      50
 
 static int gamescr_start(void);
 static void gamescr_stop(void);
@@ -284,8 +285,8 @@ static int update(void)
                        pos[0] += fwd[0];
                        pos[1] += fwd[1];
                }
+
                if((keystate & BN_B) && (timer_msec - last_shot >= P_RATE)) {
-                       emuprint("pew");
                        last_shot = timer_msec;
                        for(i=0; i<total_enemies; i++) {
                                if(enemies[i].hp && enemies[i].vobj.px >= 0) {
@@ -372,6 +373,17 @@ static int update(void)
                }
                enemy++;
        }
+       if(timer_msec - last_shot <= SHOT_TIME) {
+               spr_oam(oam, dynspr_base + snum++, SPRID_LAS0, -8, 118, SPR_SZ32 | SPR_256COL);
+               spr_oam(oam, dynspr_base + snum++, SPRID_LAS1, 22, 103, SPR_SZ32 | SPR_256COL);
+               spr_oam(oam, dynspr_base + snum++, SPRID_LAS2, 54, 88, SPR_SZ32 | SPR_256COL);
+               spr_oam(oam, dynspr_base + snum++, SPRID_LAS3, 86, 72, SPR_SZ32 | SPR_256COL);
+
+               spr_oam(oam, dynspr_base + snum++, SPRID_LAS0, 240 + 8 - 32, 118, SPR_SZ32 | SPR_256COL | SPR_HFLIP);
+               spr_oam(oam, dynspr_base + snum++, SPRID_LAS1, 240 - 22 - 32, 103, SPR_SZ32 | SPR_256COL | SPR_HFLIP);
+               spr_oam(oam, dynspr_base + snum++, SPRID_LAS2, 240 - 54 - 32, 88, SPR_SZ32 | SPR_256COL | SPR_HFLIP);
+               spr_oam(oam, dynspr_base + snum++, SPRID_LAS3, 240 - 86 - 32, 72, SPR_SZ32 | SPR_256COL | SPR_HFLIP);
+       }
        for(i=snum; i<dynspr_count; i++) {
                spr_oam_clear(oam, dynspr_base + i);
        }
index 925aebf..5240dff 100644 (file)
@@ -5,6 +5,7 @@
 #include "game.h"
 #include "maxmod.h"
 #include "input.h"
+#include "timer.h"
 #include "xgl.h"
 
 static void vblank(void);
@@ -44,6 +45,7 @@ int main(void)
                panic(get_pc(), "failed to find starting screen");
        }
 
+       reset_msec_timer();
        intr_enable();
 
        for(;;) {
index f94b3e5..0cd6f49 100644 (file)
@@ -87,7 +87,6 @@ static int logoscr_start(void)
        spr_transform(oam, 0, sprmat);
 
        nframes = 0;
-       reset_msec_timer();
        return 0;
 }