summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2024-05-11 12:27:41 +0200
committerAldrik Ramaekers <aldrikboy@gmail.com>2024-05-11 12:27:41 +0200
commit0ed1a617a897cf241406b3b7d5ddda5b74f4d9f4 (patch)
tree74e5537902360e8bc2ea0e165eeb44f3ee479c5c
parent981d99c229161c8afa508468032fe3ea0b924d3b (diff)
backdrop, floors, chairs
-rw-r--r--data/imgs/objects/chair_up.pngbin0 -> 15712 bytes
-rw-r--r--data/imgs/objects/space_control_panel2.pngbin0 -> 1417 bytes
-rw-r--r--data/imgs/tiles/floor1.pngbin0 -> 156 bytes
-rw-r--r--data/imgs/tiles/floor2.pngbin0 -> 156 bytes
-rw-r--r--data/imgs/tiles/mars_surface.pngbin0 -> 19659 bytes
-rw-r--r--data/imgs/tiles/tile2.pngbin18025 -> 0 bytes
-rw-r--r--data/imgs/tiles/tile_cobblestone.pngbin18002 -> 0 bytes
-rw-r--r--data/maps/map1.datbin8322408 -> 8322408 bytes
-rw-r--r--data/psd/chair_up.psdbin0 -> 97115 bytes
-rw-r--r--data/psd/space_control_panel2.psdbin0 -> 158038 bytes
-rw-r--r--include/asset_defs.h7
-rw-r--r--include/map.h8
-rw-r--r--include/objects.h5
-rw-r--r--include/wall_item.h2
-rw-r--r--src/asset_defs.c7
-rw-r--r--src/editor.c21
-rw-r--r--src/game.c6
-rw-r--r--src/map.c85
-rw-r--r--src/objects.c12
19 files changed, 127 insertions, 26 deletions
diff --git a/data/imgs/objects/chair_up.png b/data/imgs/objects/chair_up.png
new file mode 100644
index 0000000..e665be7
--- /dev/null
+++ b/data/imgs/objects/chair_up.png
Binary files differ
diff --git a/data/imgs/objects/space_control_panel2.png b/data/imgs/objects/space_control_panel2.png
new file mode 100644
index 0000000..b36a823
--- /dev/null
+++ b/data/imgs/objects/space_control_panel2.png
Binary files differ
diff --git a/data/imgs/tiles/floor1.png b/data/imgs/tiles/floor1.png
new file mode 100644
index 0000000..2307eef
--- /dev/null
+++ b/data/imgs/tiles/floor1.png
Binary files differ
diff --git a/data/imgs/tiles/floor2.png b/data/imgs/tiles/floor2.png
new file mode 100644
index 0000000..8ec3b8b
--- /dev/null
+++ b/data/imgs/tiles/floor2.png
Binary files differ
diff --git a/data/imgs/tiles/mars_surface.png b/data/imgs/tiles/mars_surface.png
new file mode 100644
index 0000000..2beb364
--- /dev/null
+++ b/data/imgs/tiles/mars_surface.png
Binary files differ
diff --git a/data/imgs/tiles/tile2.png b/data/imgs/tiles/tile2.png
deleted file mode 100644
index 8371f2c..0000000
--- a/data/imgs/tiles/tile2.png
+++ /dev/null
Binary files differ
diff --git a/data/imgs/tiles/tile_cobblestone.png b/data/imgs/tiles/tile_cobblestone.png
deleted file mode 100644
index f8e329b..0000000
--- a/data/imgs/tiles/tile_cobblestone.png
+++ /dev/null
Binary files differ
diff --git a/data/maps/map1.dat b/data/maps/map1.dat
index 90f5b7d..4d1c2cc 100644
--- a/data/maps/map1.dat
+++ b/data/maps/map1.dat
Binary files differ
diff --git a/data/psd/chair_up.psd b/data/psd/chair_up.psd
new file mode 100644
index 0000000..6f47e54
--- /dev/null
+++ b/data/psd/chair_up.psd
Binary files differ
diff --git a/data/psd/space_control_panel2.psd b/data/psd/space_control_panel2.psd
new file mode 100644
index 0000000..ae3d12a
--- /dev/null
+++ b/data/psd/space_control_panel2.psd
Binary files differ
diff --git a/include/asset_defs.h b/include/asset_defs.h
index 97cea1c..3de8bbf 100644
--- a/include/asset_defs.h
+++ b/include/asset_defs.h
@@ -37,9 +37,11 @@ image* img_icon_molotov;
// Objects // @NEWOBJECT
image* img_spawner;
image* img_space_control_panel;
+image* img_space_control_panel2;
image* img_space_window;
image* img_metal_wall;
image* img_metal_wall2;
+image* img_chair_up;
// Throwables
image* img_grenade;
@@ -80,8 +82,9 @@ image* img_zombie_chunk_foot;
image* img_zombie_chunk_blood;
// Tiles
-image* img_tile_cobblestone;
-image* img_tile_grass1;
+image* img_mars_surface;
+image* img_tile_floor1;
+image* img_tile_floor2;
// Sounds
Mix_Chunk* wav_throwable_bounce;
diff --git a/include/map.h b/include/map.h
index 8b11634..50e3941 100644
--- a/include/map.h
+++ b/include/map.h
@@ -8,8 +8,8 @@
typedef enum t_tile_type {
TILE_NONE = 0,
- TILE_COBBLESTONE1 = 1,
- TILE_GRASS1 = 2,
+ TILE_FLOOR1 = 1,
+ TILE_FLOOR2 = 2,
TILE_END,
} tile_type;
@@ -42,7 +42,7 @@ typedef struct t_map_info {
float px_incline;
} map_info;
-typedef struct t_map_data {
+typedef struct t_map_data { // Data written to disk.
int width;
int height;
int heightmap[MAP_SIZE_Y][MAP_SIZE_X];
@@ -58,7 +58,7 @@ typedef struct t_light_data {
float br;
} light_data;
-typedef struct t_extracted_map_data {
+typedef struct t_extracted_map_data { // Data extracted from file on disk.
int width;
int height;
tile heightmap[MAP_SIZE_Y][MAP_SIZE_X]; // tilemap
diff --git a/include/objects.h b/include/objects.h
index ef53d78..f5b9255 100644
--- a/include/objects.h
+++ b/include/objects.h
@@ -18,12 +18,15 @@ typedef struct t_light_emitter {
float range;
} light_emitter;
+// @NEWOBJECT
typedef enum t_object_type {
OBJECT_NONE,
OBJECT_SPACE_CONTROL_PANEL = 1,
OBJECT_SPACE_WINDOW = 2,
OBJECT_METAL_WALL = 3,
OBJECT_METAL_WALL2 = 4,
+ OBJECT_SPACE_CONTROL_PANEL2 = 5,
+ OBJECT_CHAIR_UP = 6,
OBJECT_END,
} object_type;
@@ -53,6 +56,8 @@ object object_dict[OBJECT_END] = {
{0,(vec3f){0, 0, 0},{1,1,2},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},
};
object get_object_at_tile(float x, float y);
diff --git a/include/wall_item.h b/include/wall_item.h
index 4d437e0..231788e 100644
--- a/include/wall_item.h
+++ b/include/wall_item.h
@@ -24,7 +24,7 @@ typedef struct t_wall_item {
image* img;
} wall_item;
-#define MAX_WALLITEMS (20)
+#define MAX_WALLITEMS (200)
wall_item wallitems[MAX_WALLITEMS] = {0};
void update_wallitems_server();
diff --git a/src/asset_defs.c b/src/asset_defs.c
index d40771b..434d1ed 100644
--- a/src/asset_defs.c
+++ b/src/asset_defs.c
@@ -45,9 +45,11 @@ void load_assets() {
// Objects // @NEWOBJECT
img_spawner = assets_load_image_from_file("data/imgs/spawner.png");
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_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");
// Players
img_gunner_black_run = assets_load_image_from_file("data/imgs/players/Black/Gunner_Black_Run.png");
@@ -83,8 +85,9 @@ void load_assets() {
img_zombie_chunk_blood = assets_load_image_from_file("data/imgs/zombie_chunk_blood.png");
// Tiles
- img_tile_cobblestone = assets_load_image_from_file("data/imgs/tiles/tile_cobblestone.png");
- img_tile_grass1 = assets_load_image_from_file("data/imgs/tiles/tile_grass1.png");
+ img_mars_surface = assets_load_image_from_file("data/imgs/tiles/mars_surface.png");
+ img_tile_floor1 = assets_load_image_from_file("data/imgs/tiles/floor1.png");
+ img_tile_floor2 = assets_load_image_from_file("data/imgs/tiles/floor2.png");
// sounds
wav_throwable_bounce = Mix_LoadWAV("data/sounds/throwable_bounce.wav");
diff --git a/src/editor.c b/src/editor.c
index de9a33f..1183517 100644
--- a/src/editor.c
+++ b/src/editor.c
@@ -85,14 +85,14 @@ void update_editor(platform_window* window)
camera_x += update_delta*cam_speed;
}
+/*
if (_global_mouse.scroll_state == SCROLL_UP) {
player_zoom++;
- printf("%d %d\n", player_zoom, get_tile_width(window));
}
if (_global_mouse.scroll_state == SCROLL_DOWN) {
player_zoom--;
- printf("%d %d\n", player_zoom, get_tile_width(window));
}
+*/
_next_camera_pos.x = -(window->width / 2) + camera_x;
_next_camera_pos.y = -(window->height / 2) + camera_y;
@@ -150,7 +150,13 @@ void draw_placing_rectangle(platform_window* window) {
}
static bool push_icon_button(int x, int y, int w, image* img, bool isSelected) {
- if (img) renderer->render_image(img,_global_camera.x+ x,_global_camera.y+ y, w, w);
+ if (img) {
+ int imgw = w;
+ int imgh = w;
+ if (img->height > img->width) imgw = w*(img->width/(float)img->height);
+ if (img->height < img->width) imgh = w*(img->height/(float)img->width);
+ renderer->render_image(img,_global_camera.x+ x,_global_camera.y+ y, imgw, imgh);
+ }
renderer->render_rectangle_outline(_global_camera.x+ x,_global_camera.y+ y, w+1, w+1, 1, rgb(255,255,255));
if (isSelected) {
@@ -217,7 +223,7 @@ void draw_lighting_panel(platform_window* window) {
renderer->render_rectangle(_global_camera.x, _global_camera.y + offset_y + row_h + offsety, editor_width, row_h, rgba(255,0,0,40));
char buf[50];
- sprintf(buf, "{x: %.0f y: %.0f, z: %.0f}", emitter.position.x, emitter.position.y, emitter.position.z);
+ sprintf(buf, "{x: %.0f y: %.0f, z: %.0f} {%.0f}", emitter.position.x, emitter.position.y, emitter.position.z, emitter.range);
renderer->render_text(fnt_20, _global_camera.x, _global_camera.y + offset_y + row_h + offsety + 5, buf, rgb(0,0,0));
vec2f pos = world_pos_to_screen_pos(window, emitter.position.x, emitter.position.y, emitter.position.z);
@@ -247,6 +253,13 @@ void draw_lighting_panel(platform_window* window) {
map_to_load.light_emitters[i].position.x = orig_x + newpos.x;
map_to_load.light_emitters[i].position.y = orig_y + newpos.y;
+
+ if (_global_mouse.scroll_state == SCROLL_UP) {
+ map_to_load.light_emitters[i].range++;
+ }
+ if (_global_mouse.scroll_state == SCROLL_DOWN) {
+ map_to_load.light_emitters[i].range--;
+ }
load_mapdata_into_world();
}
else {
diff --git a/src/game.c b/src/game.c
index b3fd0b2..a7689d3 100644
--- a/src/game.c
+++ b/src/game.c
@@ -217,7 +217,7 @@ void update_server(platform_window* window) {
if (update_timer >= SERVER_TICK_RATE) { // send at 60 ticks
update_spawners_server();
update_drops_server();
- update_wallitems_server();
+ //update_wallitems_server();
update_throwables_server();
update_zombie_chunks_server();
update_round_server();
@@ -383,10 +383,10 @@ void update_game(platform_window* window) {
if (global_state.network_state == CONNECTED) {
take_player_input(window);
-
+
draw_grid(window);
draw_objects(window);
- draw_wallitems(window);
+ //draw_wallitems(window);
draw_zombie_chunks(window);
draw_drops(window);
draw_bullets(window);
diff --git a/src/map.c b/src/map.c
index 47f8a07..ccc4257 100644
--- a/src/map.c
+++ b/src/map.c
@@ -99,6 +99,37 @@ static float distance_between_3f(vec3f v1, vec3f v2)
return sqrt((v1.x-v2.x)*(v1.x-v2.x)+(v1.y-v2.y)*(v1.y-v2.y)+(v1.z-v2.z)*(v1.z-v2.z));
}
+bool check_if_bullet_collided_with_section(float* dist_of_closest_intersect, vec2f bstart,
+ vec2f bend, vec2f l1, vec2f l2, vec2f* intersect_point_buf);
+
+static bool ray_intersects_with_object(vec3f begin, vec3f end) {
+ float dist_of_closest_intersect = __FLT_MAX__;
+ vec2f bstart = (vec2f){begin.x, begin.y};
+ vec2f bend = (vec2f){end.x, end.y};
+
+ for (int i = 0; i < MAX_OBJECTS; i++) {
+ object o = loaded_map.objects[i];
+ if (!o.active) continue;
+ if (begin.z <= o.position.z + o.size.z && begin.z >= o.position.z) {
+ box obj_box = get_box_of_square((vec3f){o.position.x, o.position.y, o.position.z}, o.size);
+ vec2f intersect_point;
+ if (check_if_bullet_collided_with_section(&dist_of_closest_intersect, bstart, bend, obj_box.bl_d, obj_box.br_d, &intersect_point)) {
+ return true;
+ }
+ if (check_if_bullet_collided_with_section(&dist_of_closest_intersect, bstart, bend, obj_box.tl_d, obj_box.tr_d, &intersect_point)) {
+ return true;
+ }
+ if (check_if_bullet_collided_with_section(&dist_of_closest_intersect, bstart, bend, obj_box.tl_d, obj_box.bl_d, &intersect_point)) {
+ return true;
+ }
+ if (check_if_bullet_collided_with_section(&dist_of_closest_intersect, bstart, bend, obj_box.tr_d, obj_box.br_d, &intersect_point)) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
static bool ray_intersects_with_ground(vec3f begin, vec3f end) {
float dirx = (end.x - begin.x);
float diry = (end.y - begin.y);
@@ -146,6 +177,7 @@ void load_mapdata_into_world() {
// Load emitters
for (int i = 0; i < MAX_LIGHT_EMITTERS; i++) {
loaded_map.light_emitters[i] = map_to_load.light_emitters[i];
+ loaded_map.light_emitters[i].position.z = 1;
}
// Load lightmap
@@ -196,7 +228,20 @@ void load_mapdata_into_world() {
if (ray_intersects_with_ground((vec3f){x, y, loaded_map.heightmap[y][x].bottomright}, emitter.position)) {
p_br = 0.0f;
}
-
+/*
+ if (ray_intersects_with_object((vec3f){x, y, loaded_map.heightmap[y][x].topleft}, emitter.position)) {
+ p_tl = 0.0f;
+ }
+ if (ray_intersects_with_object((vec3f){x, y, loaded_map.heightmap[y][x].topright}, emitter.position)) {
+ p_tr = 0.0f;
+ }
+ if (ray_intersects_with_object((vec3f){x, y, loaded_map.heightmap[y][x].bottomleft}, emitter.position)) {
+ p_bl = 0.0f;
+ }
+ if (ray_intersects_with_object((vec3f){x, y, loaded_map.heightmap[y][x].bottomright}, emitter.position)) {
+ p_br = 0.0f;
+ }
+*/
p_tl += loaded_map.lightmap[y][x].tl;
p_tr += loaded_map.lightmap[y][x].tr;
p_bl += loaded_map.lightmap[y][x].bl;
@@ -224,7 +269,7 @@ void create_empty_map() {
for (int y = 0; y < MAP_SIZE_Y; y++) {
for (int x = 0; x < MAP_SIZE_X; x++) {
- map_to_load.tiles[y][x] = TILE_COBBLESTONE1;
+ map_to_load.tiles[y][x] = TILE_FLOOR1;
}
}
@@ -319,8 +364,8 @@ bool is_in_bounds(float x, float y) {
image* get_image_from_tiletype(tile_type tile) {
switch (tile)
{
- case TILE_COBBLESTONE1: return img_tile_cobblestone;
- case TILE_GRASS1: return img_tile_grass1;
+ case TILE_FLOOR1: return img_tile_floor1;
+ case TILE_FLOOR2: return img_tile_floor2;
default: return 0;
}
}
@@ -341,16 +386,38 @@ vec2f world_pos_to_screen_pos(platform_window* window, float x, float y, float z
return (vec2f){.x = render_x, .y = render_y};
}
+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_min_x = (_global_camera.x / info.tile_width)-1;
+ int tilemap_render_max_x = tilemap_render_min_x + (window->width/ info.tile_width) + 1;
+
+ for (int y = -40; y <= 0; y++)
+ {
+ if (y < tilemap_render_min_y) continue;
+ if (y > tilemap_render_max_y) continue;
+
+ for (int x = -40; x <= MAP_SIZE_X + 40; 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;
static bool dir = true;
void draw_grid(platform_window* window) {
- /*if (dir) offset += 0.005f;
- else offset -= 0.005f;
- if (offset >= 0.5f) dir = false;
- if (offset <= -0.5f) dir = true;*/
-
map_info info = get_map_info(window);
+ draw_backdrop(window);
+
int tilemap_render_min_y = (_global_camera.y / info.tile_height);
int tilemap_render_max_y = tilemap_render_min_y + (window->height/ info.tile_height) + 1;
diff --git a/src/objects.c b/src/objects.c
index d5dc0ce..c723168 100644
--- a/src/objects.c
+++ b/src/objects.c
@@ -96,6 +96,8 @@ void add_object(object obj) {
image* get_image_from_objecttype(object_type tile) {
switch (tile)
{
+ case OBJECT_SPACE_CONTROL_PANEL2:
+ return img_space_control_panel2;
case OBJECT_SPACE_CONTROL_PANEL:
return img_space_control_panel;
case OBJECT_SPACE_WINDOW:
@@ -104,6 +106,8 @@ image* get_image_from_objecttype(object_type tile) {
return img_metal_wall;
case OBJECT_METAL_WALL2:
return img_metal_wall2;
+ case OBJECT_CHAIR_UP:
+ return img_chair_up;
default:
return 0;
}
@@ -124,16 +128,22 @@ void draw_objects(platform_window* window) {
renderer->render_image(img, box.tl_u.x, box.tl_u.y,
box.br_d.x - box.tl_d.x, box.br_d.y - box.tr_u.y);
}
- render_box_outline(box, rgb(255,0,0));
+ //render_box_outline(box, rgb(255,0,0));
if (prev_y < o.position.y) {
prev_y = o.position.y;
draw_zombies(window, prev_y, prev_y);
+ #ifdef MODE_DEBUG
+ if (!is_editing_map)
+ #endif
draw_players(window, prev_y, prev_y);
}
}
draw_zombies(window, prev_y, MAP_SIZE_Y);
+ #ifdef MODE_DEBUG
+ if (!is_editing_map)
+ #endif
draw_players(window, prev_y, MAP_SIZE_Y);
}