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,6 +2,8 @@
2 2
 #
3 3
 # Copyright (C) 2025 Thomas Buck <thomas@xythobuz.de>
4 4
 #
5
+# https://gbdk.org/docs/api/docs_toolchain_settings.html
6
+#
5 7
 # This program is free software: you can redistribute it and/or modify
6 8
 # it under the terms of the GNU General Public License as published by
7 9
 # the Free Software Foundation, either version 3 of the License, or
@@ -35,7 +37,10 @@ PNGA := $(GBDK_HOME)/bin/png2asset
35 37
 ROMU := $(GBDK_HOME)/bin/romusage
36 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 44
 EMUFLAGS := $(BIN)
40 45
 
41 46
 ifndef GBDK_RELEASE
@@ -48,7 +53,12 @@ endif
48 53
 
49 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 63
 all: $(BIN)
54 64
 
@@ -69,7 +79,6 @@ run: $(BIN)
69 79
 	@echo Emulating $<
70 80
 	@$(GB_EMU) $(EMUFLAGS)
71 81
 
72
-.PRECIOUS: $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h
73 82
 $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h: $(DATA_DIR)/%.png
74 83
 	@mkdir -p $(@D)
75 84
 	$(if $(findstring _map,$<),           \
@@ -99,8 +108,9 @@ $(BUILD_DIR)/$(BIN): $(OBJS)
99 108
 	@echo Linking $@
100 109
 	@$(LCC) $(LCCFLAGS) -o $@ $(OBJS)
101 110
 
102
-$(BIN): $(BUILD_DIR)/$(BIN) usage
111
+$(BIN): $(BUILD_DIR)/$(BIN)
103 112
 	@cp $< $@
113
+	@make usage
104 114
 
105 115
 clean:
106 116
 	rm -rf $(BUILD_DIR) $(BIN)

+ 3
- 1
src/main.c View File

@@ -47,7 +47,7 @@ enum ACCELERATION {
47 47
 
48 48
 #define SPEED_INC 1
49 49
 #define SPEED_MAX 16
50
-#define SHOT_SPEED 8
50
+#define SHOT_SPEED 23
51 51
 
52 52
 #define BAR_OFFSET_X (4 - 80)
53 53
 #define HEALTH_OFFSET_Y -16
@@ -134,6 +134,8 @@ static void game(void) {
134 134
     // TODO remove
135 135
     obj_add(SPR_LIGHT, 64, 64, 0, 0);
136 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 140
     while(1) {
139 141
         KEY_INPUT;

+ 50
- 3
src/obj.c View File

@@ -24,8 +24,34 @@
24 24
 #include "obj.h"
25 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 56
 struct obj {
31 57
     uint8_t active;
@@ -43,7 +69,20 @@ void obj_init(void) {
43 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 86
     uint8_t obj_cnt = 0xFF;
48 87
     for (uint8_t i = 0; i < MAX_OBJ; i++) {
49 88
         if (!objs[i].active) {
@@ -55,6 +94,14 @@ int8_t obj_add(enum SPRITES sprite, int16_t off_x, int16_t off_y, int16_t spd_x,
55 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 105
     objs[obj_cnt].active = 1;
59 106
     objs[obj_cnt].sprite = sprite;
60 107
     objs[obj_cnt].off_x = off_x << 4;

+ 6
- 3
src/obj.h View File

@@ -23,11 +23,14 @@
23 23
 #include <stdint.h>
24 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 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 34
 void obj_draw(int16_t spd_x, int16_t spd_y, uint8_t *hiwater);
32 35
 
33 36
 #endif // __OBJ_H__

+ 14
- 0
src/sprites.c View File

@@ -103,6 +103,20 @@ static struct sprites metasprites[SPRITE_COUNT] = {
103 103
         .cnt = shoot_TILE_COUNT,
104 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 120
         .ms = health_metasprites,
107 121
         .ti = health_tiles,
108 122
         .pa = health_palettes,

+ 2
- 0
src/sprites.h View File

@@ -32,6 +32,8 @@ enum SPRITES {
32 32
     SPR_LIGHT,
33 33
     SPR_DARK,
34 34
     SPR_SHOT,
35
+    SPR_SHOT_LIGHT,
36
+    SPR_SHOT_DARK,
35 37
     SPR_HEALTH,
36 38
     SPR_POWER,
37 39
 

Loading…
Cancel
Save