summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2024-05-11 14:37:34 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2024-05-11 14:37:34 +0200
commit2f9e8a6033075f68bbed46a66d22712a84b8f678 (patch)
tree78a4062a238ae048d0b04fe3ceb9c9b368255457
parent0ed1a617a897cf241406b3b7d5ddda5b74f4d9f4 (diff)
spawner
-rw-r--r--data/imgs/objects/metal_wall_window_h.pngbin0 -> 478 bytes
-rw-r--r--data/imgs/objects/zombie_spawner.pngbin0 -> 3874 bytes
-rw-r--r--data/maps/map1.datbin8322408 -> 8344008 bytes
-rw-r--r--data/psd/metal_wall_window_h.psdbin0 -> 50032 bytes
-rw-r--r--data/psd/zombie_spawner.psdbin0 -> 45037 bytes
-rw-r--r--include/asset_defs.h2
-rw-r--r--include/map.h2
-rw-r--r--include/objects.h6
-rw-r--r--src/asset_defs.c2
-rw-r--r--src/editor.c24
-rw-r--r--src/map.c36
-rw-r--r--src/objects.c8
-rw-r--r--src/players.c2
-rw-r--r--src/zombies.c5
14 files changed, 74 insertions, 13 deletions
diff --git a/data/imgs/objects/metal_wall_window_h.png b/data/imgs/objects/metal_wall_window_h.png
new file mode 100644
index 0000000..4e06bdd
--- /dev/null
+++ b/data/imgs/objects/metal_wall_window_h.png
Binary files differ
diff --git a/data/imgs/objects/zombie_spawner.png b/data/imgs/objects/zombie_spawner.png
new file mode 100644
index 0000000..146f475
--- /dev/null
+++ b/data/imgs/objects/zombie_spawner.png
Binary files differ
diff --git a/data/maps/map1.dat b/data/maps/map1.dat
index 4d1c2cc..963babd 100644
--- a/data/maps/map1.dat
+++ b/data/maps/map1.dat
Binary files differ
diff --git a/data/psd/metal_wall_window_h.psd b/data/psd/metal_wall_window_h.psd
new file mode 100644
index 0000000..46fc179
--- /dev/null
+++ b/data/psd/metal_wall_window_h.psd
Binary files differ
diff --git a/data/psd/zombie_spawner.psd b/data/psd/zombie_spawner.psd
new file mode 100644
index 0000000..7a6f0dc
--- /dev/null
+++ b/data/psd/zombie_spawner.psd
Binary files differ
diff --git a/include/asset_defs.h b/include/asset_defs.h
index 3de8bbf..fc770cb 100644
--- a/include/asset_defs.h
+++ b/include/asset_defs.h
@@ -39,9 +39,11 @@ image* img_spawner;
image* img_space_control_panel;
image* img_space_control_panel2;
image* img_space_window;
+image* img_space_window_h;
image* img_metal_wall;
image* img_metal_wall2;
image* img_chair_up;
+image* img_zombie_spawner;
// Throwables
image* img_grenade;
diff --git a/include/map.h b/include/map.h
index 50e3941..3980c8a 100644
--- a/include/map.h
+++ b/include/map.h
@@ -33,7 +33,7 @@ typedef struct t_tile {
#define MAP_SIZE_X 1000
#define MAP_SIZE_Y 1000
-#define MAX_LIGHT_EMITTERS 100
+#define MAX_LIGHT_EMITTERS 1000
typedef struct t_map_info {
int tile_width;
diff --git a/include/objects.h b/include/objects.h
index f5b9255..da1459e 100644
--- a/include/objects.h
+++ b/include/objects.h
@@ -27,6 +27,8 @@ typedef enum t_object_type {
OBJECT_METAL_WALL2 = 4,
OBJECT_SPACE_CONTROL_PANEL2 = 5,
OBJECT_CHAIR_UP = 6,
+ OBJECT_SPACE_WINDOW_H = 7,
+ OBJECT_ZOMBIE_SPAWNER = 8, // Substitute.
OBJECT_END,
} object_type;
@@ -53,11 +55,13 @@ typedef struct t_box {
// @NEWOBJECT
object object_dict[OBJECT_END] = {
{0,(vec3f){0, 0, 0},{1,3,0.5f},OBJECT_SPACE_CONTROL_PANEL},
- {0,(vec3f){0, 0, 0},{1,1,2},OBJECT_SPACE_WINDOW},
+ {0,(vec3f){0, 0, 0},{1,1,1},OBJECT_SPACE_WINDOW},
{0,(vec3f){0, 0, 0},{1,1,1},OBJECT_METAL_WALL},
{0,(vec3f){0, 0, 0},{1,1,1},OBJECT_METAL_WALL2},
{0,(vec3f){0, 0, 0},{3,1,0.5f},OBJECT_SPACE_CONTROL_PANEL2},
{0,(vec3f){0, 0, 0},{1,1,0.5f},OBJECT_CHAIR_UP},
+ {0,(vec3f){0, 0, 0},{1,1,1},OBJECT_SPACE_WINDOW_H},
+ {0,(vec3f){0, 0, 0},{1,1,0.5},OBJECT_ZOMBIE_SPAWNER},
};
object get_object_at_tile(float x, float y);
diff --git a/src/asset_defs.c b/src/asset_defs.c
index 434d1ed..cccbc7b 100644
--- a/src/asset_defs.c
+++ b/src/asset_defs.c
@@ -47,9 +47,11 @@ void load_assets() {
img_space_control_panel = assets_load_image_from_file("data/imgs/objects/space_control_panel.png");
img_space_control_panel2 = assets_load_image_from_file("data/imgs/objects/space_control_panel2.png");
img_space_window = assets_load_image_from_file("data/imgs/objects/metal_wall_window.png");
+ img_space_window_h = assets_load_image_from_file("data/imgs/objects/metal_wall_window_h.png");
img_metal_wall = assets_load_image_from_file("data/imgs/objects/metal_wall.png");
img_metal_wall2 = assets_load_image_from_file("data/imgs/objects/metal_wall2.png");
img_chair_up = assets_load_image_from_file("data/imgs/objects/chair_up.png");
+ img_zombie_spawner = assets_load_image_from_file("data/imgs/objects/zombie_spawner.png");
// Players
img_gunner_black_run = assets_load_image_from_file("data/imgs/players/Black/Gunner_Black_Run.png");
diff --git a/src/editor.c b/src/editor.c
index 1183517..79a5503 100644
--- a/src/editor.c
+++ b/src/editor.c
@@ -62,6 +62,25 @@ static void update_tile_editor(platform_window* window) {
}
}
+void update_lighting_panel(platform_window* window, vec2 cursor_pos) {
+ if (keyboard_is_key_pressed(KEY_ENTER)) {
+ for (int i = 0; i < MAX_LIGHT_EMITTERS; i++) {
+ light_emitter emitter = loaded_map.light_emitters[i];
+ if (emitter.active) continue;
+
+ map_to_load.light_emitters[i].position.x = cursor_pos.x;
+ map_to_load.light_emitters[i].position.y = cursor_pos.y;
+ map_to_load.light_emitters[i].position.z = 1;
+ map_to_load.light_emitters[i].active = 1;
+ map_to_load.light_emitters[i].brightness = 1.0f;
+ map_to_load.light_emitters[i].range = 10.0f;
+
+ load_mapdata_into_world();
+ return;
+ }
+ }
+}
+
void update_editor(platform_window* window)
{
if (keyboard_is_key_pressed(KEY_F1)) {
@@ -97,11 +116,12 @@ void update_editor(platform_window* window)
_next_camera_pos.x = -(window->width / 2) + camera_x;
_next_camera_pos.y = -(window->height / 2) + camera_y;
+ vec2 pos = screen_pos_to_world_pos(window, _global_mouse.x + window->width/2, _global_mouse.y + window->height/2);
switch (edit_state)
{
case EDITING_TILES: update_tile_editor(window); break;
case EDITING_OBJECTS: update_object_editor(window); break;
- case EDITING_LIGHTING: break;
+ case EDITING_LIGHTING: update_lighting_panel(window, pos); break;
}
@@ -418,7 +438,7 @@ void update_object_editor(platform_window* window) {
case OBJECT_EDITOR_SELECTING:
update_object_selection(window, pos);
break;
-
+
default:
break;
}
diff --git a/src/map.c b/src/map.c
index ccc4257..e0454aa 100644
--- a/src/map.c
+++ b/src/map.c
@@ -261,6 +261,16 @@ void load_mapdata_into_world() {
// Load objects
memcpy(loaded_map.objects, map_to_load.objects, sizeof(loaded_map.objects));
+
+ // Load special objects
+ for (int i = 0; i < MAX_OBJECTS; i++) {
+ object o = loaded_map.objects[i];
+ if (!o.active) continue;
+
+ if (o.type == OBJECT_ZOMBIE_SPAWNER) {
+ create_spawner((vec2){.x = o.position.x, .y = o.position.y});
+ }
+ }
}
void create_empty_map() {
@@ -277,8 +287,8 @@ void create_empty_map() {
map_to_load.objects[x] = (object){.active = true, .position = (vec3f){x, 0, 0}, .size = (vec3f){1,1,1}, .type = OBJECT_METAL_WALL};
}
- map_to_load.light_emitters[0] = (light_emitter){.brightness = 1.0f, .position = (vec3f){0, 0, 10}, .range = 20.0f, .active = true};
- map_to_load.light_emitters[1] = (light_emitter){.brightness = 1.0f, .position = (vec3f){0, 30, 10}, .range = 20.0f, .active = true};
+ //map_to_load.light_emitters[0] = (light_emitter){.brightness = 1.0f, .position = (vec3f){0, 0, 10}, .range = 20.0f, .active = true};
+ //map_to_load.light_emitters[1] = (light_emitter){.brightness = 1.0f, .position = (vec3f){0, 30, 10}, .range = 20.0f, .active = true};
load_mapdata_into_world();
}
@@ -391,12 +401,13 @@ static void draw_backdrop(platform_window* window)
map_info info = get_map_info(window);
int tilemap_render_min_y = (_global_camera.y / info.tile_height)-1;
- int tilemap_render_max_y = tilemap_render_min_y + (window->height/ info.tile_height) + 1;
+ int tilemap_render_max_y = tilemap_render_min_y + (window->height/ info.tile_height) + 2;
int tilemap_render_min_x = (_global_camera.x / info.tile_width)-1;
- int tilemap_render_max_x = tilemap_render_min_x + (window->width/ info.tile_width) + 1;
+ int tilemap_render_max_x = tilemap_render_min_x + (window->width/ info.tile_width) + 2;
- for (int y = -40; y <= 0; y++)
+ // north of spaceship
+ for (int y = -40; y <= 7; y++)
{
if (y < tilemap_render_min_y) continue;
if (y > tilemap_render_max_y) continue;
@@ -409,6 +420,21 @@ static void draw_backdrop(platform_window* window)
renderer->render_image(img_mars_surface, x*info.tile_width, y*info.tile_width, info.tile_width, info.tile_height);
}
}
+
+ // west of spaceship
+ for (int y = 0; y <= MAP_SIZE_Y; y++)
+ {
+ if (y < tilemap_render_min_y) continue;
+ if (y > tilemap_render_max_y) continue;
+
+ for (int x = -40; x <= 10; x++)
+ {
+ if (x < tilemap_render_min_x) continue;
+ if (x > tilemap_render_max_x) continue;
+
+ renderer->render_image(img_mars_surface, x*info.tile_width, y*info.tile_width, info.tile_width, info.tile_height);
+ }
+ }
}
static float offset = 0.0f;
diff --git a/src/objects.c b/src/objects.c
index c723168..7782ff5 100644
--- a/src/objects.c
+++ b/src/objects.c
@@ -108,6 +108,10 @@ image* get_image_from_objecttype(object_type tile) {
return img_metal_wall2;
case OBJECT_CHAIR_UP:
return img_chair_up;
+ case OBJECT_SPACE_WINDOW_H:
+ return img_space_window_h;
+ case OBJECT_ZOMBIE_SPAWNER:
+ return img_zombie_spawner;
default:
return 0;
}
@@ -148,6 +152,6 @@ void draw_objects(platform_window* window) {
}
void create_objects() {
- create_spawner((vec2){11, 18});
- create_wallitem((vec3f){14, 1, 0}, WALLITEM_GUN, (wall_item_data){.gun = GUN_NOVA});
+ //create_spawner((vec2){11, 18});
+ //create_wallitem((vec3f){14, 1, 0}, WALLITEM_GUN, (wall_item_data){.gun = GUN_NOVA});
} \ No newline at end of file
diff --git a/src/players.c b/src/players.c
index 2454c28..82a2815 100644
--- a/src/players.c
+++ b/src/players.c
@@ -51,7 +51,7 @@ void spawn_player(u32 id, network_client client) {
players[i].active = true;
players[i].sec_since_last_shot = 10.0f;
players[i].sec_since_last_damage_taken = 10.0f;
- players[i].playerx = 3;
+ players[i].playerx = 30;
players[i].playery = 3;
players[i].gunx = 0.0f;
players[i].guny = 0.0f;
diff --git a/src/zombies.c b/src/zombies.c
index 04253b8..205097e 100644
--- a/src/zombies.c
+++ b/src/zombies.c
@@ -54,7 +54,7 @@ void create_spawner(vec2 position) {
s.active = true;
s.position = position;
s.sec_since_last_spawn = 999.0f;
- s.sprite = create_sprite(img_spawner, 14, 64, 64, 1.0f);
+ s.sprite = create_sprite(img_spawner, 1, 256, 384, 1.0f);
for (int i = 0; i < MAX_SPAWNERS; i++) {
spawner o = spawner_tiles[i];
@@ -198,6 +198,8 @@ void update_spawners_server() {
}
void draw_spawners(platform_window* window) {
+ return;
+ #if 0
map_info info = get_map_info(window);
for (int x = 0; x < MAX_SPAWNERS; x++) {
@@ -233,6 +235,7 @@ void draw_spawners(platform_window* window) {
renderer->render_line(tile.tr.x, tile.tr.y, tile.br.x, tile.br.y, 1, rgb(0,255,255)); // right
renderer->render_line(tile.bl.x, tile.bl.y, tile.br.x, tile.br.y, 1, rgb(0,255,255)); // bottom*/
}
+ #endif
}
static void draw_path_of_zombie(platform_window* window, zombie o) {