|
@@ -18,6 +18,7 @@
|
18
|
18
|
*/
|
19
|
19
|
|
20
|
20
|
#include <gbdk/platform.h>
|
|
21
|
+#include <stdint.h>
|
21
|
22
|
#include <string.h>
|
22
|
23
|
#include <stdlib.h>
|
23
|
24
|
|
|
@@ -116,9 +117,11 @@ enum OBJ_STATE obj_add(enum SPRITES sprite, int16_t off_x, int16_t off_y, int16_
|
116
|
117
|
return OBJ_ADDED;
|
117
|
118
|
}
|
118
|
119
|
|
119
|
|
-void obj_act(int16_t pos_x, int16_t pos_y, int16_t *spd_off_x, int16_t *spd_off_y) {
|
120
|
|
- pos_x += DEVICE_SPRITE_PX_OFFSET_X + (DEVICE_SCREEN_PX_WIDTH / 2) - 16;
|
121
|
|
- pos_y += DEVICE_SPRITE_PX_OFFSET_Y + (DEVICE_SCREEN_PX_HEIGHT / 2);
|
|
120
|
+#define GRAVITY_RANGE (32 << POS_SCALE_OBJS)
|
|
121
|
+#define GRAVITY_SHIFT (POS_SCALE_OBJS + 4)
|
|
122
|
+
|
|
123
|
+uint8_t obj_act(int16_t *spd_off_x, int16_t *spd_off_y) {
|
|
124
|
+ uint8_t damage = 0;
|
122
|
125
|
|
123
|
126
|
for (uint8_t i = 0; i < MAX_OBJ; i++) {
|
124
|
127
|
if (!objs[i].active) {
|
|
@@ -127,14 +130,30 @@ void obj_act(int16_t pos_x, int16_t pos_y, int16_t *spd_off_x, int16_t *spd_off_
|
127
|
130
|
|
128
|
131
|
switch (objs[i].sprite) {
|
129
|
132
|
case SPR_DARK: {
|
130
|
|
- *spd_off_x += (objs[i].off_x - pos_x) >> 8;
|
131
|
|
- *spd_off_y += (objs[i].off_y - pos_y) >> 8;
|
|
133
|
+ if ((abs(objs[i].off_x) <= GRAVITY_RANGE) && (abs(objs[i].off_y) <= GRAVITY_RANGE)) {
|
|
134
|
+ if (objs[i].off_x > 0) {
|
|
135
|
+ *spd_off_x += (GRAVITY_RANGE - objs[i].off_x) >> GRAVITY_SHIFT;
|
|
136
|
+ } else if (objs[i].off_x < 0) {
|
|
137
|
+ *spd_off_x += (-GRAVITY_RANGE - objs[i].off_x) >> GRAVITY_SHIFT;
|
|
138
|
+ }
|
|
139
|
+ if (objs[i].off_y > 0) {
|
|
140
|
+ *spd_off_y += (GRAVITY_RANGE - objs[i].off_y) >> GRAVITY_SHIFT;
|
|
141
|
+ } else if (objs[i].off_y < 0) {
|
|
142
|
+ *spd_off_y += (-GRAVITY_RANGE - objs[i].off_y) >> GRAVITY_SHIFT;
|
|
143
|
+ }
|
|
144
|
+ }
|
|
145
|
+
|
|
146
|
+ if ((abs(objs[i].off_x) <= 32) && (abs(objs[i].off_y) <= 32)) {
|
|
147
|
+ damage += 64;
|
|
148
|
+ }
|
132
|
149
|
} break;
|
133
|
150
|
|
134
|
151
|
default:
|
135
|
152
|
break;
|
136
|
153
|
}
|
137
|
154
|
}
|
|
155
|
+
|
|
156
|
+ return damage;
|
138
|
157
|
}
|
139
|
158
|
|
140
|
159
|
void obj_draw(int16_t spd_x, int16_t spd_y, uint8_t *hiwater) {
|