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
 ROMU := $(GBDK_HOME)/bin/romusage
37
 ROMU := $(GBDK_HOME)/bin/romusage
38
 GB_EMU := gearboy
38
 GB_EMU := gearboy
39
 SGB_EMU := sameboy
39
 SGB_EMU := sameboy
40
+FLASHER := flashgbx
40
 
41
 
41
 LCCFLAGS := -Wa-l -Wl-m -Wp-MMD -Wf--opt-code-speed
42
 LCCFLAGS := -Wa-l -Wl-m -Wp-MMD -Wf--opt-code-speed
42
 LCCFLAGS += -I$(BUILD_DIR)/$(DATA_DIR)
43
 LCCFLAGS += -I$(BUILD_DIR)/$(DATA_DIR)
53
 	BUILD_TYPE = Release
54
 	BUILD_TYPE = Release
54
 endif
55
 endif
55
 
56
 
57
+FLASHFLAGS := --mode dmg --action flash-rom
58
+
56
 $(info BUILD_TYPE is $(BUILD_TYPE))
59
 $(info BUILD_TYPE is $(BUILD_TYPE))
57
 
60
 
58
 # TODO this is not working. why?!
61
 # TODO this is not working. why?!
59
 #DEPS=$(OBJS:%.o=%.d)
62
 #DEPS=$(OBJS:%.o=%.d)
60
 #-include $(DEPS)
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
 .PRECIOUS: $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h
66
 .PRECIOUS: $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h
64
 
67
 
65
 all: $(BIN)
68
 all: $(BIN)
85
 	@echo Emulating $<
88
 	@echo Emulating $<
86
 	@$(SGB_EMU) $(BIN)
89
 	@$(SGB_EMU) $(BIN)
87
 
90
 
91
+flash: $(BIN)
92
+	@echo Flasing $<
93
+	$(FLASHER) $(FLASHFLAGS) $<
94
+
88
 $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h: $(DATA_DIR)/%.png
95
 $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h: $(DATA_DIR)/%.png
89
 	@mkdir -p $(@D)
96
 	@mkdir -p $(@D)
90
 	$(if $(findstring _map,$<),                                                             \
97
 	$(if $(findstring _map,$<),                                                             \
99
 	,$(if $(findstring _spr16,$<),                                                          \
106
 	,$(if $(findstring _spr16,$<),                                                          \
100
 		@echo "Converting 16x16 sprite $<" &&                                           \
107
 		@echo "Converting 16x16 sprite $<" &&                                           \
101
 		$(PNGA) $< -o $@ -spr8x8 -sw 16 -sh 16 -noflip                                  \
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
 	,$(if $(findstring _sgb,$<),                                                            \
112
 	,$(if $(findstring _sgb,$<),                                                            \
103
 		@echo "Converting sgb border $<" &&                                             \
113
 		@echo "Converting sgb border $<" &&                                             \
104
 		$(PNGA) $< -o $@ -map -bpp 4 -max_palettes 4 -pack_mode sgb -use_map_attributes \
114
 		$(PNGA) $< -o $@ -map -bpp 4 -max_palettes 4 -pack_mode sgb -use_map_attributes \
105
 	,                                                                                       \
115
 	,                                                                                       \
106
 		@echo "Converting tile $<" &&                                                   \
116
 		@echo "Converting tile $<" &&                                                   \
107
 		$(PNGA) $< -o $@ -spr8x8                                                        \
117
 		$(PNGA) $< -o $@ -spr8x8                                                        \
108
-	)))))
118
+	))))))
109
 
119
 
110
 $(BUILD_DIR)/%.o: %.c $(SPRITES)
120
 $(BUILD_DIR)/%.o: %.c $(SPRITES)
111
 	@mkdir -p $(@D)
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
                     acc |= ACC_Y;
152
                     acc |= ACC_Y;
153
                     break;
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
                 case ROT_90:
164
                 case ROT_90:
156
                     spd_x += SPEED_INC;
165
                     spd_x += SPEED_INC;
157
                     if (spd_x > SPEED_MAX_ACC) spd_x = SPEED_MAX_ACC;
166
                     if (spd_x > SPEED_MAX_ACC) spd_x = SPEED_MAX_ACC;
158
                     acc |= ACC_X;
167
                     acc |= ACC_X;
159
                     break;
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
                 case ROT_180:
179
                 case ROT_180:
162
                     spd_y += SPEED_INC;
180
                     spd_y += SPEED_INC;
163
                     if (spd_y > SPEED_MAX_ACC) spd_y = SPEED_MAX_ACC;
181
                     if (spd_y > SPEED_MAX_ACC) spd_y = SPEED_MAX_ACC;
164
                     acc |= ACC_Y;
182
                     acc |= ACC_Y;
165
                     break;
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
                 case ROT_270:
194
                 case ROT_270:
168
                     spd_x -= SPEED_INC;
195
                     spd_x -= SPEED_INC;
169
                     if (spd_x < -SPEED_MAX_ACC) spd_x = -SPEED_MAX_ACC;
196
                     if (spd_x < -SPEED_MAX_ACC) spd_x = -SPEED_MAX_ACC;
170
                     acc |= ACC_X;
197
                     acc |= ACC_X;
171
                     break;
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
                 default:
209
                 default:
174
                     break;
210
                     break;
175
             }
211
             }
224
                     ret = obj_add(SPR_SHOT, 0, -SHIP_OFF, spd_x, spd_y - SHOT_SPEED);
260
                     ret = obj_add(SPR_SHOT, 0, -SHIP_OFF, spd_x, spd_y - SHOT_SPEED);
225
                     break;
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
                 case ROT_90:
267
                 case ROT_90:
228
                     ret = obj_add(SPR_SHOT, SHIP_OFF, 0, spd_x + SHOT_SPEED, spd_y);
268
                     ret = obj_add(SPR_SHOT, SHIP_OFF, 0, spd_x + SHOT_SPEED, spd_y);
229
                     break;
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
                 case ROT_180:
275
                 case ROT_180:
232
                     ret = obj_add(SPR_SHOT, 0, SHIP_OFF, spd_x, spd_y + SHOT_SPEED);
276
                     ret = obj_add(SPR_SHOT, 0, SHIP_OFF, spd_x, spd_y + SHOT_SPEED);
233
                     break;
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
                 case ROT_270:
283
                 case ROT_270:
236
                     ret = obj_add(SPR_SHOT, -SHIP_OFF, 0, spd_x - SHOT_SPEED, spd_y);
284
                     ret = obj_add(SPR_SHOT, -SHIP_OFF, 0, spd_x - SHOT_SPEED, spd_y);
237
                     break;
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
                 default:
291
                 default:
240
                     break;
292
                     break;
241
             }
293
             }

+ 9
- 45
src/sprite_data.c View File

22
 
22
 
23
 #include "sprite_data.h"
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
 #include "light.h"
26
 #include "light.h"
30
 #include "dark.h"
27
 #include "dark.h"
31
 #include "shoot.h"
28
 #include "shoot.h"
40
 };
37
 };
41
 
38
 
42
 struct sprites metasprites[SPRITE_COUNT] = {
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
         .pa_i = OAMF_CGB_PAL0,
46
         .pa_i = OAMF_CGB_PAL0,
50
-        .cnt = rockshp_0_TILE_COUNT,
47
+        .cnt = rockshp_spr24_TILE_COUNT,
51
         .off = TILE_NUM_START,
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
     { // SPR_LIGHT
51
     { // SPR_LIGHT
88
         .ms = light_metasprites,
52
         .ms = light_metasprites,

+ 20
- 16
src/sprites.c View File

109
 void spr_ship(enum SPRITE_ROT rot, uint8_t moving, uint8_t *hiwater) NONBANKED {
109
 void spr_ship(enum SPRITE_ROT rot, uint8_t moving, uint8_t *hiwater) NONBANKED {
110
     switch (rot) {
110
     switch (rot) {
111
         case ROT_0:
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
             break;
117
             break;
117
 
118
 
118
         case ROT_90:
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
             break;
125
             break;
124
 
126
 
125
         case ROT_180:
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
             break;
133
             break;
131
 
134
 
132
         case ROT_270:
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
             break;
141
             break;
138
 
142
 
139
         default:
143
         default:

+ 5
- 4
src/sprites.h View File

26
 #define SHIP_OFF (8 + 4)
26
 #define SHIP_OFF (8 + 4)
27
 
27
 
28
 enum SPRITES {
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
     SPR_LIGHT,
30
     SPR_LIGHT,
34
     SPR_DARK,
31
     SPR_DARK,
35
     SPR_SHOT,
32
     SPR_SHOT,
51
 
48
 
52
 enum SPRITE_ROT {
49
 enum SPRITE_ROT {
53
     ROT_0 = 0,
50
     ROT_0 = 0,
51
+    ROT_45,
54
     ROT_90,
52
     ROT_90,
53
+    ROT_135,
55
     ROT_180,
54
     ROT_180,
55
+    ROT_225,
56
     ROT_270,
56
     ROT_270,
57
+    ROT_315,
57
 
58
 
58
     ROT_INVALID
59
     ROT_INVALID
59
 };
60
 };

Loading…
Cancel
Save