|
@@ -54,13 +54,20 @@
|
54
|
54
|
#define MAX_SHOT_LIGHT 3
|
55
|
55
|
#define MAX_OBJ ((4 * MAX_DARK) + (4 * MAX_LIGHT) + MAX_SHOT + MAX_SHOT_DARK + MAX_SHOT_LIGHT)
|
56
|
56
|
|
57
|
|
-#define MAX_TRAVEL 32
|
|
57
|
+#define MAX_TRAVEL 128
|
58
|
58
|
|
59
|
59
|
#define GRAVITY_RANGE (32 << POS_SCALE_OBJS)
|
60
|
60
|
#define GRAVITY_SHIFT (POS_SCALE_OBJS + 4)
|
61
|
61
|
#define DAMAGE_RANGE (16 << POS_SCALE_OBJS)
|
62
|
62
|
#define DAMAGE_INC 3
|
63
|
63
|
|
|
64
|
+#define PICKUP_SMALL_RANGE (10 << POS_SCALE_OBJS)
|
|
65
|
+#define PICKUP_LARGE_RANGE (16 << POS_SCALE_OBJS)
|
|
66
|
+#define SHOT_RANGE (10 << POS_SCALE_OBJS)
|
|
67
|
+
|
|
68
|
+#define SCORE_SMALL 5
|
|
69
|
+#define SCORE_LARGE 10
|
|
70
|
+
|
64
|
71
|
struct obj {
|
65
|
72
|
uint8_t active;
|
66
|
73
|
enum SPRITES sprite;
|
|
@@ -122,9 +129,6 @@ enum OBJ_STATE obj_add(enum SPRITES sprite, int16_t off_x, int16_t off_y, int16_
|
122
|
129
|
return OBJ_ADDED;
|
123
|
130
|
}
|
124
|
131
|
|
125
|
|
-#define PICKUP_SMALL_RANGE (10 << POS_SCALE_OBJS)
|
126
|
|
-#define PICKUP_LARGE_RANGE (16 << POS_SCALE_OBJS)
|
127
|
|
-
|
128
|
132
|
int16_t obj_act(int16_t *spd_off_x, int16_t *spd_off_y, int32_t *score) NONBANKED {
|
129
|
133
|
int16_t damage = 0;
|
130
|
134
|
|
|
@@ -174,18 +178,40 @@ int16_t obj_act(int16_t *spd_off_x, int16_t *spd_off_y, int32_t *score) NONBANKE
|
174
|
178
|
|
175
|
179
|
case SPR_SHOT_DARK:
|
176
|
180
|
if ((abs(objs[i].off_x) <= PICKUP_SMALL_RANGE) && (abs(objs[i].off_y) <= PICKUP_SMALL_RANGE)) {
|
177
|
|
- (*score) -= 5;
|
|
181
|
+ (*score) -= SCORE_SMALL;
|
178
|
182
|
objs[i].active = 0;
|
179
|
183
|
}
|
180
|
184
|
break;
|
181
|
185
|
|
182
|
186
|
case SPR_SHOT_LIGHT:
|
183
|
187
|
if ((abs(objs[i].off_x) <= PICKUP_SMALL_RANGE) && (abs(objs[i].off_y) <= PICKUP_SMALL_RANGE)) {
|
184
|
|
- (*score) += 5;
|
|
188
|
+ (*score) += SCORE_SMALL;
|
185
|
189
|
objs[i].active = 0;
|
186
|
190
|
}
|
187
|
191
|
break;
|
188
|
192
|
|
|
193
|
+ case SPR_SHOT:
|
|
194
|
+ for (uint8_t j = 0; j < MAX_OBJ; j++) {
|
|
195
|
+ if ((!objs[j].active) || ((objs[j].sprite != SPR_LIGHT) && (objs[j].sprite != SPR_DARK))) {
|
|
196
|
+ continue;
|
|
197
|
+ }
|
|
198
|
+
|
|
199
|
+ if ((abs(objs[i].off_x - objs[j].off_x) <= SHOT_RANGE)
|
|
200
|
+ && (abs(objs[i].off_y - objs[j].off_y) <= SHOT_RANGE)) {
|
|
201
|
+ objs[i].active = 0;
|
|
202
|
+ objs[j].active = 0;
|
|
203
|
+
|
|
204
|
+ if (objs[j].sprite == SPR_LIGHT) {
|
|
205
|
+ (*score) += SCORE_LARGE;
|
|
206
|
+ } else {
|
|
207
|
+ (*score) -= SCORE_LARGE;
|
|
208
|
+ }
|
|
209
|
+
|
|
210
|
+ break;
|
|
211
|
+ }
|
|
212
|
+ }
|
|
213
|
+ break;
|
|
214
|
+
|
189
|
215
|
default:
|
190
|
216
|
break;
|
191
|
217
|
}
|