Browse Source

start working on 8-way movement

Thomas B 1 month ago
parent
commit
47c1d6fbdc
10 changed files with 98 additions and 67 deletions
  1. 12
    2
      Makefile
  2. BIN
      data/rockshp_0.png
  3. BIN
      data/rockshp_90.png
  4. BIN
      data/rockshp_spr24.png
  5. BIN
      data/thrust_0.png
  6. BIN
      data/thrust_90.png
  7. 52
    0
      src/game.c
  8. 9
    45
      src/sprite_data.c
  9. 20
    16
      src/sprites.c
  10. 5
    4
      src/sprites.h

+ 12
- 2
Makefile View File

@@ -37,6 +37,7 @@ PNGA := $(GBDK_HOME)/bin/png2asset
37 37
 ROMU := $(GBDK_HOME)/bin/romusage
38 38
 GB_EMU := gearboy
39 39
 SGB_EMU := sameboy
40
+FLASHER := flashgbx
40 41
 
41 42
 LCCFLAGS := -Wa-l -Wl-m -Wp-MMD -Wf--opt-code-speed
42 43
 LCCFLAGS += -I$(BUILD_DIR)/$(DATA_DIR)
@@ -53,13 +54,15 @@ else
53 54
 	BUILD_TYPE = Release
54 55
 endif
55 56
 
57
+FLASHFLAGS := --mode dmg --action flash-rom
58
+
56 59
 $(info BUILD_TYPE is $(BUILD_TYPE))
57 60
 
58 61
 # TODO this is not working. why?!
59 62
 #DEPS=$(OBJS:%.o=%.d)
60 63
 #-include $(DEPS)
61 64
 
62
-.PHONY: all run sgb_run clean compile_commands.json usage
65
+.PHONY: all run sgb_run flash clean compile_commands.json usage
63 66
 .PRECIOUS: $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h
64 67
 
65 68
 all: $(BIN)
@@ -85,6 +88,10 @@ sgb_run: $(BIN)
85 88
 	@echo Emulating $<
86 89
 	@$(SGB_EMU) $(BIN)
87 90
 
91
+flash: $(BIN)
92
+	@echo Flasing $<
93
+	$(FLASHER) $(FLASHFLAGS) $<
94
+
88 95
 $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h: $(DATA_DIR)/%.png
89 96
 	@mkdir -p $(@D)
90 97
 	$(if $(findstring _map,$<),                                                             \
@@ -99,13 +106,16 @@ $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h: $(DATA_DIR)/%.png
99 106
 	,$(if $(findstring _spr16,$<),                                                          \
100 107
 		@echo "Converting 16x16 sprite $<" &&                                           \
101 108
 		$(PNGA) $< -o $@ -spr8x8 -sw 16 -sh 16 -noflip                                  \
109
+	,$(if $(findstring _spr24,$<),                                                          \
110
+		@echo "Converting 24x24 sprite $<" &&                                           \
111
+		$(PNGA) $< -o $@ -spr8x8 -sw 24 -sh 24 -noflip                                  \
102 112
 	,$(if $(findstring _sgb,$<),                                                            \
103 113
 		@echo "Converting sgb border $<" &&                                             \
104 114
 		$(PNGA) $< -o $@ -map -bpp 4 -max_palettes 4 -pack_mode sgb -use_map_attributes \
105 115
 	,                                                                                       \
106 116
 		@echo "Converting tile $<" &&                                                   \
107 117
 		$(PNGA) $< -o $@ -spr8x8                                                        \
108
-	)))))
118
+	))))))
109 119
 
110 120
 $(BUILD_DIR)/%.o: %.c $(SPRITES)
111 121
 	@mkdir -p $(@D)

BIN
data/rockshp_0.png View File


BIN
data/rockshp_90.png View File


BIN
data/rockshp_spr24.png View File


BIN
data/thrust_0.png View File


BIN
data/thrust_90.png View File


+ 52
- 0
src/game.c View File

@@ -152,24 +152,60 @@ int32_t game(void) NONBANKED {
152 152
                     acc |= ACC_Y;
153 153
                     break;
154 154
 
155
+                case ROT_45:
156
+                    spd_y -= SPEED_INC;
157
+                    if (spd_y < -SPEED_MAX_ACC) spd_y = -SPEED_MAX_ACC;
158
+                    acc |= ACC_Y;
159
+                    spd_x += SPEED_INC;
160
+                    if (spd_x > SPEED_MAX_ACC) spd_x = SPEED_MAX_ACC;
161
+                    acc |= ACC_X;
162
+                    break;
163
+
155 164
                 case ROT_90:
156 165
                     spd_x += SPEED_INC;
157 166
                     if (spd_x > SPEED_MAX_ACC) spd_x = SPEED_MAX_ACC;
158 167
                     acc |= ACC_X;
159 168
                     break;
160 169
 
170
+                case ROT_135:
171
+                    spd_x += SPEED_INC;
172
+                    if (spd_x > SPEED_MAX_ACC) spd_x = SPEED_MAX_ACC;
173
+                    acc |= ACC_X;
174
+                    spd_y += SPEED_INC;
175
+                    if (spd_y > SPEED_MAX_ACC) spd_y = SPEED_MAX_ACC;
176
+                    acc |= ACC_Y;
177
+                    break;
178
+
161 179
                 case ROT_180:
162 180
                     spd_y += SPEED_INC;
163 181
                     if (spd_y > SPEED_MAX_ACC) spd_y = SPEED_MAX_ACC;
164 182
                     acc |= ACC_Y;
165 183
                     break;
166 184
 
185
+                case ROT_225:
186
+                    spd_y += SPEED_INC;
187
+                    if (spd_y > SPEED_MAX_ACC) spd_y = SPEED_MAX_ACC;
188
+                    acc |= ACC_Y;
189
+                    spd_x -= SPEED_INC;
190
+                    if (spd_x < -SPEED_MAX_ACC) spd_x = -SPEED_MAX_ACC;
191
+                    acc |= ACC_X;
192
+                    break;
193
+
167 194
                 case ROT_270:
168 195
                     spd_x -= SPEED_INC;
169 196
                     if (spd_x < -SPEED_MAX_ACC) spd_x = -SPEED_MAX_ACC;
170 197
                     acc |= ACC_X;
171 198
                     break;
172 199
 
200
+                case ROT_315:
201
+                    spd_x -= SPEED_INC;
202
+                    if (spd_x < -SPEED_MAX_ACC) spd_x = -SPEED_MAX_ACC;
203
+                    acc |= ACC_X;
204
+                    spd_y -= SPEED_INC;
205
+                    if (spd_y < -SPEED_MAX_ACC) spd_y = -SPEED_MAX_ACC;
206
+                    acc |= ACC_Y;
207
+                    break;
208
+
173 209
                 default:
174 210
                     break;
175 211
             }
@@ -224,18 +260,34 @@ int32_t game(void) NONBANKED {
224 260
                     ret = obj_add(SPR_SHOT, 0, -SHIP_OFF, spd_x, spd_y - SHOT_SPEED);
225 261
                     break;
226 262
 
263
+                case ROT_45:
264
+                    ret = obj_add(SPR_SHOT, SHIP_OFF / 2, -SHIP_OFF / 2, spd_x + SHOT_SPEED, spd_y - SHOT_SPEED);
265
+                    break;
266
+
227 267
                 case ROT_90:
228 268
                     ret = obj_add(SPR_SHOT, SHIP_OFF, 0, spd_x + SHOT_SPEED, spd_y);
229 269
                     break;
230 270
 
271
+                case ROT_135:
272
+                    ret = obj_add(SPR_SHOT, SHIP_OFF / 2, SHIP_OFF / 2, spd_x + SHOT_SPEED, spd_y + SHOT_SPEED);
273
+                    break;
274
+
231 275
                 case ROT_180:
232 276
                     ret = obj_add(SPR_SHOT, 0, SHIP_OFF, spd_x, spd_y + SHOT_SPEED);
233 277
                     break;
234 278
 
279
+                case ROT_225:
280
+                    ret = obj_add(SPR_SHOT, -SHIP_OFF / 2, SHIP_OFF / 2, spd_x - SHOT_SPEED, spd_y + SHOT_SPEED);
281
+                    break;
282
+
235 283
                 case ROT_270:
236 284
                     ret = obj_add(SPR_SHOT, -SHIP_OFF, 0, spd_x - SHOT_SPEED, spd_y);
237 285
                     break;
238 286
 
287
+                case ROT_315:
288
+                    ret = obj_add(SPR_SHOT, -SHIP_OFF / 2, -SHIP_OFF / 2, spd_x - SHOT_SPEED, spd_y - SHOT_SPEED);
289
+                    break;
290
+
239 291
                 default:
240 292
                     break;
241 293
             }

+ 9
- 45
src/sprite_data.c View File

@@ -22,10 +22,7 @@
22 22
 
23 23
 #include "sprite_data.h"
24 24
 
25
-#include "rockshp_0.h"
26
-#include "rockshp_90.h"
27
-#include "thrust_0.h"
28
-#include "thrust_90.h"
25
+#include "rockshp_spr24.h"
29 26
 #include "light.h"
30 27
 #include "dark.h"
31 28
 #include "shoot.h"
@@ -40,49 +37,16 @@ const palette_color_t power_palettes[4] = {
40 37
 };
41 38
 
42 39
 struct sprites metasprites[SPRITE_COUNT] = {
43
-    { // SPR_SHIP_0
44
-        .ms = rockshp_0_metasprites,
45
-        .ms_n = ARR_LEN(rockshp_0_metasprites),
46
-        .ti = rockshp_0_tiles,
47
-        .pa = rockshp_0_palettes,
48
-        .pa_n = rockshp_0_PALETTE_COUNT,
40
+    { // SPR_SHIP
41
+        .ms = rockshp_spr24_metasprites,
42
+        .ms_n = ARR_LEN(rockshp_spr24_metasprites),
43
+        .ti = rockshp_spr24_tiles,
44
+        .pa = rockshp_spr24_palettes,
45
+        .pa_n = rockshp_spr24_PALETTE_COUNT,
49 46
         .pa_i = OAMF_CGB_PAL0,
50
-        .cnt = rockshp_0_TILE_COUNT,
47
+        .cnt = rockshp_spr24_TILE_COUNT,
51 48
         .off = TILE_NUM_START,
52
-        .bank = BANK(rockshp_0),
53
-    },
54
-    { // SPR_SHIP_90
55
-        .ms = rockshp_90_metasprites,
56
-        .ms_n = ARR_LEN(rockshp_90_metasprites),
57
-        .ti = rockshp_90_tiles,
58
-        .pa = NULL,
59
-        .pa_n = rockshp_90_PALETTE_COUNT,
60
-        .pa_i = OAMF_CGB_PAL0,
61
-        .cnt = rockshp_90_TILE_COUNT,
62
-        .off = TILE_NUM_START,
63
-        .bank = BANK(rockshp_90),
64
-    },
65
-    { // SPR_THRUST_0
66
-        .ms = thrust_0_metasprites,
67
-        .ms_n = ARR_LEN(thrust_0_metasprites),
68
-        .ti = thrust_0_tiles,
69
-        .pa = thrust_0_palettes,
70
-        .pa_n = thrust_0_PALETTE_COUNT,
71
-        .pa_i = OAMF_CGB_PAL1,
72
-        .cnt = thrust_0_TILE_COUNT,
73
-        .off = TILE_NUM_START,
74
-        .bank = BANK(thrust_0),
75
-    },
76
-    { // SPR_THRUST_90
77
-        .ms = thrust_90_metasprites,
78
-        .ms_n = ARR_LEN(thrust_90_metasprites),
79
-        .ti = thrust_90_tiles,
80
-        .pa = NULL,
81
-        .pa_n = thrust_90_PALETTE_COUNT,
82
-        .pa_i = OAMF_CGB_PAL1,
83
-        .cnt = thrust_90_TILE_COUNT,
84
-        .off = TILE_NUM_START,
85
-        .bank = BANK(thrust_90),
49
+        .bank = BANK(rockshp_spr24),
86 50
     },
87 51
     { // SPR_LIGHT
88 52
         .ms = light_metasprites,

+ 20
- 16
src/sprites.c View File

@@ -109,31 +109,35 @@ void spr_draw(enum SPRITES sprite, enum SPRITE_FLIP flip,
109 109
 void spr_ship(enum SPRITE_ROT rot, uint8_t moving, uint8_t *hiwater) NONBANKED {
110 110
     switch (rot) {
111 111
         case ROT_0:
112
-            spr_draw(SPR_SHIP_0, FLIP_NONE, 0, 0, 0, hiwater);
113
-            if (moving) {
114
-                spr_draw(SPR_THRUST_0, FLIP_NONE, 0, SHIP_OFF, 0, hiwater);
115
-            }
112
+            spr_draw(SPR_SHIP, FLIP_NONE, 0, 4, moving ? 1 : 0, hiwater);
113
+            break;
114
+
115
+        case ROT_45:
116
+            spr_draw(SPR_SHIP, FLIP_NONE, -4, 0, moving ? 3 : 2, hiwater);
116 117
             break;
117 118
 
118 119
         case ROT_90:
119
-            spr_draw(SPR_SHIP_90, FLIP_NONE, 0, 0, 0, hiwater);
120
-            if (moving) {
121
-                spr_draw(SPR_THRUST_90, FLIP_NONE, -SHIP_OFF, 0, 0, hiwater);
122
-            }
120
+            spr_draw(SPR_SHIP, FLIP_NONE, -4, 0, moving ? 5 : 4, hiwater);
121
+            break;
122
+
123
+        case ROT_135:
124
+            spr_draw(SPR_SHIP, FLIP_Y, -4, 0, moving ? 3 : 2, hiwater);
123 125
             break;
124 126
 
125 127
         case ROT_180:
126
-            spr_draw(SPR_SHIP_0, FLIP_Y, 0, 0, 0, hiwater);
127
-            if (moving) {
128
-                spr_draw(SPR_THRUST_0, FLIP_Y, 0, -SHIP_OFF, 0, hiwater);
129
-            }
128
+            spr_draw(SPR_SHIP, FLIP_Y, 0, -4, moving ? 1 : 0, hiwater);
129
+            break;
130
+
131
+        case ROT_225:
132
+            spr_draw(SPR_SHIP, FLIP_XY, 4, 0, moving ? 3 : 2, hiwater);
130 133
             break;
131 134
 
132 135
         case ROT_270:
133
-            spr_draw(SPR_SHIP_90, FLIP_X, 0, 0, 0, hiwater);
134
-            if (moving) {
135
-                spr_draw(SPR_THRUST_90, FLIP_X, SHIP_OFF, 0, 0, hiwater);
136
-            }
136
+            spr_draw(SPR_SHIP, FLIP_X, 4, 0, moving ? 5 : 4, hiwater);
137
+            break;
138
+
139
+        case ROT_315:
140
+            spr_draw(SPR_SHIP, FLIP_X, 4, 0, moving ? 3 : 2, hiwater);
137 141
             break;
138 142
 
139 143
         default:

+ 5
- 4
src/sprites.h View File

@@ -26,10 +26,7 @@
26 26
 #define SHIP_OFF (8 + 4)
27 27
 
28 28
 enum SPRITES {
29
-    SPR_SHIP_0 = 0,
30
-    SPR_SHIP_90,
31
-    SPR_THRUST_0,
32
-    SPR_THRUST_90,
29
+    SPR_SHIP = 0,
33 30
     SPR_LIGHT,
34 31
     SPR_DARK,
35 32
     SPR_SHOT,
@@ -51,9 +48,13 @@ enum SPRITE_FLIP {
51 48
 
52 49
 enum SPRITE_ROT {
53 50
     ROT_0 = 0,
51
+    ROT_45,
54 52
     ROT_90,
53
+    ROT_135,
55 54
     ROT_180,
55
+    ROT_225,
56 56
     ROT_270,
57
+    ROT_315,
57 58
 
58 59
     ROT_INVALID
59 60
 };

Loading…
Cancel
Save