Browse Source

small sprites. try dependency generation but doesnt work.

Thomas B 2 months ago
parent
commit
eb33db3d7c
6 changed files with 89 additions and 11 deletions
  1. 14
    4
      Makefile
  2. 3
    1
      src/main.c
  3. 50
    3
      src/obj.c
  4. 6
    3
      src/obj.h
  5. 14
    0
      src/sprites.c
  6. 2
    0
      src/sprites.h

+ 14
- 4
Makefile View File

2
 #
2
 #
3
 # Copyright (C) 2025 Thomas Buck <thomas@xythobuz.de>
3
 # Copyright (C) 2025 Thomas Buck <thomas@xythobuz.de>
4
 #
4
 #
5
+# https://gbdk.org/docs/api/docs_toolchain_settings.html
6
+#
5
 # This program is free software: you can redistribute it and/or modify
7
 # This program is free software: you can redistribute it and/or modify
6
 # it under the terms of the GNU General Public License as published by
8
 # it under the terms of the GNU General Public License as published by
7
 # the Free Software Foundation, either version 3 of the License, or
9
 # the Free Software Foundation, either version 3 of the License, or
35
 ROMU := $(GBDK_HOME)/bin/romusage
37
 ROMU := $(GBDK_HOME)/bin/romusage
36
 GB_EMU := gearboy
38
 GB_EMU := gearboy
37
 
39
 
38
-LCCFLAGS := -Wa-l -Wl-m -Wm"-yn Duality" -I$(BUILD_DIR)/$(DATA_DIR) -Wm-yc
40
+LCCFLAGS := -Wa-l -Wl-m -Wp-MMD
41
+LCCFLAGS += -I$(BUILD_DIR)/$(DATA_DIR)
42
+LCCFLAGS += -Wm"-yn Duality" -Wm-yc
43
+
39
 EMUFLAGS := $(BIN)
44
 EMUFLAGS := $(BIN)
40
 
45
 
41
 ifndef GBDK_RELEASE
46
 ifndef GBDK_RELEASE
48
 
53
 
49
 $(info BUILD_TYPE is $(BUILD_TYPE))
54
 $(info BUILD_TYPE is $(BUILD_TYPE))
50
 
55
 
51
-.PHONY: all run $(BIN) clean compile_commands.json usage
56
+# TODO this is not working. why?!
57
+#DEPS=$(OBJS:%.o=%.d)
58
+#-include $(DEPS)
59
+
60
+.PHONY: all run clean compile_commands.json usage
61
+.PRECIOUS: $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h
52
 
62
 
53
 all: $(BIN)
63
 all: $(BIN)
54
 
64
 
69
 	@echo Emulating $<
79
 	@echo Emulating $<
70
 	@$(GB_EMU) $(EMUFLAGS)
80
 	@$(GB_EMU) $(EMUFLAGS)
71
 
81
 
72
-.PRECIOUS: $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h
73
 $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h: $(DATA_DIR)/%.png
82
 $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h: $(DATA_DIR)/%.png
74
 	@mkdir -p $(@D)
83
 	@mkdir -p $(@D)
75
 	$(if $(findstring _map,$<),           \
84
 	$(if $(findstring _map,$<),           \
99
 	@echo Linking $@
108
 	@echo Linking $@
100
 	@$(LCC) $(LCCFLAGS) -o $@ $(OBJS)
109
 	@$(LCC) $(LCCFLAGS) -o $@ $(OBJS)
101
 
110
 
102
-$(BIN): $(BUILD_DIR)/$(BIN) usage
111
+$(BIN): $(BUILD_DIR)/$(BIN)
103
 	@cp $< $@
112
 	@cp $< $@
113
+	@make usage
104
 
114
 
105
 clean:
115
 clean:
106
 	rm -rf $(BUILD_DIR) $(BIN)
116
 	rm -rf $(BUILD_DIR) $(BIN)

+ 3
- 1
src/main.c View File

47
 
47
 
48
 #define SPEED_INC 1
48
 #define SPEED_INC 1
49
 #define SPEED_MAX 16
49
 #define SPEED_MAX 16
50
-#define SHOT_SPEED 8
50
+#define SHOT_SPEED 23
51
 
51
 
52
 #define BAR_OFFSET_X (4 - 80)
52
 #define BAR_OFFSET_X (4 - 80)
53
 #define HEALTH_OFFSET_Y -16
53
 #define HEALTH_OFFSET_Y -16
134
     // TODO remove
134
     // TODO remove
135
     obj_add(SPR_LIGHT, 64, 64, 0, 0);
135
     obj_add(SPR_LIGHT, 64, 64, 0, 0);
136
     obj_add(SPR_DARK, -64, -64, 0, 0);
136
     obj_add(SPR_DARK, -64, -64, 0, 0);
137
+    obj_add(SPR_SHOT_LIGHT, 32, 32, 0, 0);
138
+    obj_add(SPR_SHOT_DARK, -32, -32, 0, 0);
137
 
139
 
138
     while(1) {
140
     while(1) {
139
         KEY_INPUT;
141
         KEY_INPUT;

+ 50
- 3
src/obj.c View File

24
 #include "obj.h"
24
 #include "obj.h"
25
 #include "sprites.h"
25
 #include "sprites.h"
26
 
26
 
27
-#define MAX_OBJ 10
28
-#define MAX_TRAVEL 250
27
+/*
28
+ * sprite budget:
29
+ *
30
+ * fixed:
31
+ * ship: 4
32
+ * thruster: 1
33
+ * health: 4
34
+ * power: 4
35
+ * --> 13 fixed
36
+ *
37
+ * hardware tiles: 40 - 13 = 27
38
+ *
39
+ * dynamic:
40
+ * shot: 1
41
+ * light: 4
42
+ * dark: 4
43
+ * --> 2x dark & 2x light = 16
44
+ * --> 5x shot & 6x small = 11
45
+ * --> 16 + 11 = 27
46
+ */
47
+#define MAX_DARK 2
48
+#define MAX_LIGHT 2
49
+#define MAX_SHOT 5
50
+#define MAX_SHOT_DARK 3
51
+#define MAX_SHOT_LIGHT 3
52
+#define MAX_OBJ ((4 * MAX_DARK) + (4 * MAX_LIGHT) + MAX_SHOT + MAX_SHOT_DARK + MAX_SHOT_LIGHT)
53
+
54
+#define MAX_TRAVEL 32
29
 
55
 
30
 struct obj {
56
 struct obj {
31
     uint8_t active;
57
     uint8_t active;
43
     memset(objs, 0, sizeof(objs));
69
     memset(objs, 0, sizeof(objs));
44
 }
70
 }
45
 
71
 
46
-int8_t obj_add(enum SPRITES sprite, int16_t off_x, int16_t off_y, int16_t spd_x, int16_t spd_y) {
72
+static uint8_t cnt_sprite(enum SPRITES sprite) {
73
+    uint8_t cnt = 0;
74
+    for (uint8_t i = 0; i < MAX_OBJ; i++) {
75
+        if (!objs[i].active) {
76
+            continue;
77
+        }
78
+        if (objs[i].sprite == sprite) {
79
+            cnt++;
80
+        }
81
+    }
82
+    return cnt;
83
+}
84
+
85
+enum OBJ_STATE obj_add(enum SPRITES sprite, int16_t off_x, int16_t off_y, int16_t spd_x, int16_t spd_y) {
47
     uint8_t obj_cnt = 0xFF;
86
     uint8_t obj_cnt = 0xFF;
48
     for (uint8_t i = 0; i < MAX_OBJ; i++) {
87
     for (uint8_t i = 0; i < MAX_OBJ; i++) {
49
         if (!objs[i].active) {
88
         if (!objs[i].active) {
55
         return OBJ_LIST_FULL;
94
         return OBJ_LIST_FULL;
56
     }
95
     }
57
 
96
 
97
+    if (((sprite == SPR_DARK) && (cnt_sprite(sprite) >= MAX_DARK))
98
+            || ((sprite == SPR_LIGHT) && (cnt_sprite(sprite) >= MAX_LIGHT))
99
+            || ((sprite == SPR_SHOT) && (cnt_sprite(sprite) >= MAX_SHOT))
100
+            || ((sprite == SPR_SHOT_DARK) && (cnt_sprite(sprite) >= MAX_SHOT_DARK))
101
+            || ((sprite == SPR_SHOT_LIGHT) && (cnt_sprite(sprite) >= MAX_SHOT_LIGHT))) {
102
+        return OBJ_TYPE_FULL;
103
+    }
104
+
58
     objs[obj_cnt].active = 1;
105
     objs[obj_cnt].active = 1;
59
     objs[obj_cnt].sprite = sprite;
106
     objs[obj_cnt].sprite = sprite;
60
     objs[obj_cnt].off_x = off_x << 4;
107
     objs[obj_cnt].off_x = off_x << 4;

+ 6
- 3
src/obj.h View File

23
 #include <stdint.h>
23
 #include <stdint.h>
24
 #include "sprites.h"
24
 #include "sprites.h"
25
 
25
 
26
-#define OBJ_ADDED 0
27
-#define OBJ_LIST_FULL -1
26
+enum OBJ_STATE {
27
+    OBJ_ADDED = 0,
28
+    OBJ_LIST_FULL,
29
+    OBJ_TYPE_FULL,
30
+};
28
 
31
 
29
 void obj_init(void);
32
 void obj_init(void);
30
-int8_t obj_add(enum SPRITES sprite, int16_t off_x, int16_t off_y, int16_t spd_x, int16_t spd_y);
33
+enum OBJ_STATE obj_add(enum SPRITES sprite, int16_t off_x, int16_t off_y, int16_t spd_x, int16_t spd_y);
31
 void obj_draw(int16_t spd_x, int16_t spd_y, uint8_t *hiwater);
34
 void obj_draw(int16_t spd_x, int16_t spd_y, uint8_t *hiwater);
32
 
35
 
33
 #endif // __OBJ_H__
36
 #endif // __OBJ_H__

+ 14
- 0
src/sprites.c View File

103
         .cnt = shoot_TILE_COUNT,
103
         .cnt = shoot_TILE_COUNT,
104
         .off = TILE_NUM_START
104
         .off = TILE_NUM_START
105
     }, {
105
     }, {
106
+        .ms = shoot_metasprites,
107
+        .ti = shoot_tiles,
108
+        .pa = NULL,
109
+        .pa_i = OAMF_CGB_PAL2,
110
+        .cnt = shoot_TILE_COUNT,
111
+        .off = SPR_SHOT
112
+    }, {
113
+        .ms = shoot_metasprites,
114
+        .ti = shoot_tiles,
115
+        .pa = NULL,
116
+        .pa_i = OAMF_CGB_PAL3,
117
+        .cnt = shoot_TILE_COUNT,
118
+        .off = SPR_SHOT
119
+    }, {
106
         .ms = health_metasprites,
120
         .ms = health_metasprites,
107
         .ti = health_tiles,
121
         .ti = health_tiles,
108
         .pa = health_palettes,
122
         .pa = health_palettes,

+ 2
- 0
src/sprites.h View File

32
     SPR_LIGHT,
32
     SPR_LIGHT,
33
     SPR_DARK,
33
     SPR_DARK,
34
     SPR_SHOT,
34
     SPR_SHOT,
35
+    SPR_SHOT_LIGHT,
36
+    SPR_SHOT_DARK,
35
     SPR_HEALTH,
37
     SPR_HEALTH,
36
     SPR_POWER,
38
     SPR_POWER,
37
 
39
 

Loading…
Cancel
Save