Browse Source

optimize ship offsets. add explosion sound. tweak pickup ranges.

Thomas B 1 month ago
parent
commit
fae5d2cb39
5 changed files with 28 additions and 15 deletions
  1. 3
    1
      src/game.c
  2. 7
    4
      src/obj.c
  3. 8
    1
      src/sound.c
  4. 2
    1
      src/sound.h
  5. 8
    8
      src/sprites.c

+ 3
- 1
src/game.c View File

@@ -102,6 +102,8 @@ static void status(uint8_t health, uint8_t power, uint8_t *hiwater) NONBANKED {
102 102
 }
103 103
 
104 104
 static void show_explosion(uint16_t power) NONBANKED {
105
+    snd_explode();
106
+
105 107
     for (uint8_t n = 0; n < (4 * 4); n++) {
106 108
         uint8_t hiwater = SPR_NUM_START;
107 109
         spr_draw(SPR_EXPL, FLIP_NONE, 0, 0, n >> 2, &hiwater);
@@ -297,7 +299,7 @@ int32_t game(void) NONBANKED {
297 299
             }
298 300
 
299 301
             if (ret == OBJ_ADDED) {
300
-                snd_noise();
302
+                snd_shot();
301 303
             }
302 304
         }
303 305
 

+ 7
- 4
src/obj.c View File

@@ -58,11 +58,14 @@
58 58
 
59 59
 #define GRAVITY_RANGE (24 << POS_SCALE_OBJS)
60 60
 #define GRAVITY_SHIFT (POS_SCALE_OBJS + 4)
61
+
61 62
 #define DAMAGE_RANGE (16 << POS_SCALE_OBJS)
62 63
 #define DAMAGE_INC 5
63 64
 
64
-#define PICKUP_SMALL_RANGE (10 << POS_SCALE_OBJS)
65
-#define PICKUP_LARGE_RANGE (18 << POS_SCALE_OBJS)
65
+#define HEALTH_RANGE (18 << POS_SCALE_OBJS)
66
+#define HEALTH_INC HEALTH_MAX
67
+
68
+#define PICKUP_SMALL_RANGE (12 << POS_SCALE_OBJS)
66 69
 #define SHOT_RANGE (10 << POS_SCALE_OBJS)
67 70
 
68 71
 #define SCORE_SMALL 5
@@ -173,8 +176,8 @@ int16_t obj_do(int16_t *spd_off_x, int16_t *spd_off_y, int32_t *score, uint8_t *
173 176
                     }
174 177
                 }
175 178
 
176
-                if ((abs_off_x <= PICKUP_LARGE_RANGE) && (abs_off_y <= PICKUP_LARGE_RANGE)) {
177
-                    damage -= HEALTH_MAX;
179
+                if ((abs_off_x <= HEALTH_RANGE) && (abs_off_y <= HEALTH_RANGE)) {
180
+                    damage -= HEALTH_INC;
178 181
                 }
179 182
                 break;
180 183
 

+ 8
- 1
src/sound.c View File

@@ -38,9 +38,16 @@ void snd_init(void) NONBANKED {
38 38
 #endif
39 39
 }
40 40
 
41
-void snd_noise(void) NONBANKED {
41
+void snd_shot(void) NONBANKED {
42 42
     NR41_REG = 0x2F; // length timer, higher value is shorter time (up to 0x3F)
43 43
     NR42_REG = 0xF0; // initially full volume, no volume changes over time
44 44
     NR43_REG = 0x11; // frequency distribution
45 45
     NR44_REG = 0xC0; // trigger and enable length
46 46
 }
47
+
48
+void snd_explode(void) NONBANKED {
49
+    NR41_REG = 0x00; // length timer, higher value is shorter time (up to 0x3F)
50
+    NR42_REG = 0xF1; // initially full volume, then fade sound out
51
+    NR43_REG = 0x46; // frequency distribution
52
+    NR44_REG = 0xC0; // trigger and enable length
53
+}

+ 2
- 1
src/sound.h View File

@@ -21,6 +21,7 @@
21 21
 #define __SOUND_H__
22 22
 
23 23
 void snd_init(void);
24
-void snd_noise(void);
24
+void snd_shot(void);
25
+void snd_explode(void);
25 26
 
26 27
 #endif // __SOUND_H__

+ 8
- 8
src/sprites.c View File

@@ -117,35 +117,35 @@ void spr_draw(enum SPRITES sprite, enum SPRITE_FLIP flip,
117 117
 void spr_ship(enum SPRITE_ROT rot, uint8_t moving, uint8_t *hiwater) NONBANKED {
118 118
     switch (rot) {
119 119
         case ROT_0:
120
-            spr_draw(SPR_SHIP, FLIP_NONE, 0, 4, moving ? 1 : 0, hiwater);
120
+            spr_draw(SPR_SHIP, FLIP_NONE, -1, 4, moving ? 1 : 0, hiwater);
121 121
             break;
122 122
 
123 123
         case ROT_45:
124
-            spr_draw(SPR_SHIP, FLIP_NONE, -4, 0, moving ? 3 : 2, hiwater);
124
+            spr_draw(SPR_SHIP, FLIP_NONE, -6, 0, moving ? 3 : 2, hiwater);
125 125
             break;
126 126
 
127 127
         case ROT_90:
128
-            spr_draw(SPR_SHIP, FLIP_NONE, -4, 0, moving ? 5 : 4, hiwater);
128
+            spr_draw(SPR_SHIP, FLIP_NONE, -4, -1, moving ? 5 : 4, hiwater);
129 129
             break;
130 130
 
131 131
         case ROT_135:
132
-            spr_draw(SPR_SHIP, FLIP_Y, -4, 0, moving ? 3 : 2, hiwater);
132
+            spr_draw(SPR_SHIP, FLIP_Y, -6, 0, moving ? 3 : 2, hiwater);
133 133
             break;
134 134
 
135 135
         case ROT_180:
136
-            spr_draw(SPR_SHIP, FLIP_Y, 0, -4, moving ? 1 : 0, hiwater);
136
+            spr_draw(SPR_SHIP, FLIP_Y, -1, -4, moving ? 1 : 0, hiwater);
137 137
             break;
138 138
 
139 139
         case ROT_225:
140
-            spr_draw(SPR_SHIP, FLIP_XY, 4, 0, moving ? 3 : 2, hiwater);
140
+            spr_draw(SPR_SHIP, FLIP_XY, 6, 0, moving ? 3 : 2, hiwater);
141 141
             break;
142 142
 
143 143
         case ROT_270:
144
-            spr_draw(SPR_SHIP, FLIP_X, 4, 0, moving ? 5 : 4, hiwater);
144
+            spr_draw(SPR_SHIP, FLIP_X, 4, -1, moving ? 5 : 4, hiwater);
145 145
             break;
146 146
 
147 147
         case ROT_315:
148
-            spr_draw(SPR_SHIP, FLIP_X, 4, 0, moving ? 3 : 2, hiwater);
148
+            spr_draw(SPR_SHIP, FLIP_X, 6, 0, moving ? 3 : 2, hiwater);
149 149
             break;
150 150
 
151 151
         default:

Loading…
Cancel
Save