Browse Source

can shoot and score large spheres

Thomas B 1 month ago
parent
commit
94d87687eb
1 changed files with 32 additions and 6 deletions
  1. 32
    6
      src/obj.c

+ 32
- 6
src/obj.c View File

54
 #define MAX_SHOT_LIGHT 3
54
 #define MAX_SHOT_LIGHT 3
55
 #define MAX_OBJ ((4 * MAX_DARK) + (4 * MAX_LIGHT) + MAX_SHOT + MAX_SHOT_DARK + MAX_SHOT_LIGHT)
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
 #define GRAVITY_RANGE (32 << POS_SCALE_OBJS)
59
 #define GRAVITY_RANGE (32 << POS_SCALE_OBJS)
60
 #define GRAVITY_SHIFT (POS_SCALE_OBJS + 4)
60
 #define GRAVITY_SHIFT (POS_SCALE_OBJS + 4)
61
 #define DAMAGE_RANGE (16 << POS_SCALE_OBJS)
61
 #define DAMAGE_RANGE (16 << POS_SCALE_OBJS)
62
 #define DAMAGE_INC 3
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
 struct obj {
71
 struct obj {
65
     uint8_t active;
72
     uint8_t active;
66
     enum SPRITES sprite;
73
     enum SPRITES sprite;
122
     return OBJ_ADDED;
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
 int16_t obj_act(int16_t *spd_off_x, int16_t *spd_off_y, int32_t *score) NONBANKED {
132
 int16_t obj_act(int16_t *spd_off_x, int16_t *spd_off_y, int32_t *score) NONBANKED {
129
     int16_t damage = 0;
133
     int16_t damage = 0;
130
 
134
 
174
 
178
 
175
             case SPR_SHOT_DARK:
179
             case SPR_SHOT_DARK:
176
                 if ((abs(objs[i].off_x) <= PICKUP_SMALL_RANGE) && (abs(objs[i].off_y) <= PICKUP_SMALL_RANGE)) {
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
                     objs[i].active = 0;
182
                     objs[i].active = 0;
179
                 }
183
                 }
180
                 break;
184
                 break;
181
 
185
 
182
             case SPR_SHOT_LIGHT:
186
             case SPR_SHOT_LIGHT:
183
                 if ((abs(objs[i].off_x) <= PICKUP_SMALL_RANGE) && (abs(objs[i].off_y) <= PICKUP_SMALL_RANGE)) {
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
                     objs[i].active = 0;
189
                     objs[i].active = 0;
186
                 }
190
                 }
187
                 break;
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
             default:
215
             default:
190
                 break;
216
                 break;
191
         }
217
         }

Loading…
Cancel
Save