summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.vscode/settings.json5
-rw-r--r--build.zipbin0 -> 16555725 bytes
-rw-r--r--data/imgs/objects/plants.pngbin9545 -> 0 bytes
-rw-r--r--data/imgs/objects/space_control_panel.pngbin0 -> 26864 bytes
-rw-r--r--data/imgs/objects/wall1.pngbin4613 -> 0 bytes
-rw-r--r--data/maps/map1.datbin8322408 -> 8322408 bytes
-rw-r--r--data/psd/space_control_panel.psdbin0 -> 185234 bytes
-rw-r--r--include/asset_defs.h6
-rw-r--r--include/map.h1
-rw-r--r--include/objects.h13
-rw-r--r--include/players.h11
-rw-r--r--include/protocol.h2
-rw-r--r--main.c2
-rw-r--r--src/asset_defs.c6
-rw-r--r--src/audio.c4
-rw-r--r--src/editor.c12
-rw-r--r--src/map.c9
-rw-r--r--src/objects.c9
-rw-r--r--src/players.c55
-rw-r--r--src/zombies.c4
20 files changed, 102 insertions, 37 deletions
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..30eb399
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,5 @@
+{
+ "files.associations": {
+ "project_base.h": "c"
+ }
+} \ No newline at end of file
diff --git a/build.zip b/build.zip
new file mode 100644
index 0000000..ae1f86d
--- /dev/null
+++ b/build.zip
Binary files differ
diff --git a/data/imgs/objects/plants.png b/data/imgs/objects/plants.png
deleted file mode 100644
index fc936a8..0000000
--- a/data/imgs/objects/plants.png
+++ /dev/null
Binary files differ
diff --git a/data/imgs/objects/space_control_panel.png b/data/imgs/objects/space_control_panel.png
new file mode 100644
index 0000000..b9dace2
--- /dev/null
+++ b/data/imgs/objects/space_control_panel.png
Binary files differ
diff --git a/data/imgs/objects/wall1.png b/data/imgs/objects/wall1.png
deleted file mode 100644
index 980513f..0000000
--- a/data/imgs/objects/wall1.png
+++ /dev/null
Binary files differ
diff --git a/data/maps/map1.dat b/data/maps/map1.dat
index aef35fc..0b01ded 100644
--- a/data/maps/map1.dat
+++ b/data/maps/map1.dat
Binary files differ
diff --git a/data/psd/space_control_panel.psd b/data/psd/space_control_panel.psd
new file mode 100644
index 0000000..0508707
--- /dev/null
+++ b/data/psd/space_control_panel.psd
Binary files differ
diff --git a/include/asset_defs.h b/include/asset_defs.h
index 60ad94a..97cea1c 100644
--- a/include/asset_defs.h
+++ b/include/asset_defs.h
@@ -34,10 +34,10 @@ image* img_disconnected;
image* img_icon_grenade;
image* img_icon_molotov;
-// Objects
+// Objects // @NEWOBJECT
image* img_spawner;
-image* img_obj_plants;
-image* img_obj_wall1;
+image* img_space_control_panel;
+image* img_space_window;
image* img_metal_wall;
image* img_metal_wall2;
diff --git a/include/map.h b/include/map.h
index ed8cbed..8b11634 100644
--- a/include/map.h
+++ b/include/map.h
@@ -67,6 +67,7 @@ typedef struct t_extracted_map_data {
light_emitter light_emitters[MAX_LIGHT_EMITTERS];
} extracted_map_data;
+extern int player_zoom;
map_data map_to_load = {0};
extracted_map_data loaded_map = {0};
diff --git a/include/objects.h b/include/objects.h
index 62396fa..4444253 100644
--- a/include/objects.h
+++ b/include/objects.h
@@ -20,10 +20,10 @@ typedef struct t_light_emitter {
typedef enum t_object_type {
OBJECT_NONE,
- OBJECT_COBBLESTONEWALL1,
- OBJECT_PLANTBOX1,
- OBJECT_METAL_WALL,
- OBJECT_METAL_WALL2,
+ OBJECT_SPACE_CONTROL_PANEL = 1,
+ OBJECT_SPACE_WINDOW = 2,
+ OBJECT_METAL_WALL = 3,
+ OBJECT_METAL_WALL2 = 4,
OBJECT_END,
} object_type;
@@ -47,9 +47,10 @@ typedef struct t_box {
vec2f br_u;
} box;
+// @NEWOBJECT
object object_dict[OBJECT_END] = {
- {0,(vec3f){0, 0, 0},{1,1,1},OBJECT_COBBLESTONEWALL1},
- {0,(vec3f){0, 0, 0},{1,1,2},OBJECT_PLANTBOX1},
+ {0,(vec3f){0, 0, 0},{1,3,1},OBJECT_SPACE_CONTROL_PANEL},
+ {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},
};
diff --git a/include/players.h b/include/players.h
index d230d0c..ccf91b9 100644
--- a/include/players.h
+++ b/include/players.h
@@ -19,9 +19,16 @@
typedef enum t_player_interact_state {
INTERACT_IDLE,
INTERACT_RELOADING,
- INTERACT_DEAD
+ INTERACT_DEAD,
} player_interact_state;
+typedef enum t_player_move_state
+{
+ PLAYER_MOVE_STATE_RUNNING,
+ PLAYER_MOVE_STATE_IDLE,
+ PLAYER_MOVE_STATE_JUMPING,
+} player_move_state;
+
typedef enum t_player_direction {
DIRECTION_UP,
DIRECTION_RIGHT,
@@ -58,6 +65,7 @@ typedef struct t_player {
float guny;
float dirx;
float diry;
+ player_move_state move_state;
float gun_height;
float sec_since_last_step;
player_direction direction;
@@ -70,6 +78,7 @@ typedef struct t_player {
u64 ping;
sprite sprite;
sprite sprite_death;
+ sprite sprite_idle;
network_state connection_state;
u32 points;
struct {
diff --git a/include/protocol.h b/include/protocol.h
index 6113682..9ca7226 100644
--- a/include/protocol.h
+++ b/include/protocol.h
@@ -100,6 +100,8 @@ typedef enum t_protocol_move_type
MOVE_UPLEFT,
MOVE_DOWNRIGHT,
MOVE_DOWNLEFT,
+
+ MOVE_NONE,
} protocol_move_type;
typedef struct t_protocol_move
diff --git a/main.c b/main.c
index 7fbb345..aa42770 100644
--- a/main.c
+++ b/main.c
@@ -3,7 +3,7 @@
#define ASSET_FONT_COUNT 20
#define NUM_AUDIO_CHANNELS 64
-#include <projectbase/project_base.h>
+#include "project-base/src/project_base.h"
#include "include/SDL2/SDL_mixer.h"
diff --git a/src/asset_defs.c b/src/asset_defs.c
index 33f50d8..d40771b 100644
--- a/src/asset_defs.c
+++ b/src/asset_defs.c
@@ -42,10 +42,10 @@ void load_assets() {
img_grenade_explode = assets_load_image_from_file("data/imgs/throwables/grenade_explode.png");
img_molotov_explode = assets_load_image_from_file("data/imgs/throwables/molotov_explode.png");
- // Objects
+ // Objects // @NEWOBJECT
img_spawner = assets_load_image_from_file("data/imgs/spawner.png");
- img_obj_plants = assets_load_image_from_file("data/imgs/objects/plants.png");
- img_obj_wall1 = assets_load_image_from_file("data/imgs/objects/wall1.png");
+ img_space_control_panel = assets_load_image_from_file("data/imgs/objects/space_control_panel.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");
diff --git a/src/audio.c b/src/audio.c
index b933f35..72127ae 100644
--- a/src/audio.c
+++ b/src/audio.c
@@ -100,9 +100,9 @@ static Mix_Chunk* get_sample_from_audio_event(audio_event event, u32 playerid) {
}
}
else if (event.obj != OBJECT_NONE) {
- switch (event.obj)
+ switch (event.obj) // @NEWOBJECT
{
- case OBJECT_PLANTBOX1: return wav_impact_wood;
+ //case OBJECT_PLANTBOX1: return wav_impact_wood;
case OBJECT_METAL_WALL:
case OBJECT_METAL_WALL2: return wav_impact_metal;
default: return wav_error;
diff --git a/src/editor.c b/src/editor.c
index c908b74..c506cbc 100644
--- a/src/editor.c
+++ b/src/editor.c
@@ -85,6 +85,15 @@ 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;
@@ -375,6 +384,7 @@ void update_object_editor(platform_window* window) {
if (keyboard_is_key_down(KEY_ESCAPE)) {
object_edit_state = OBJECT_EDITOR_SELECTING;
}
+ if (_global_mouse.x < editor_width) return;
if (pos.x < 0 || pos.y < 0) return;
if (pos.x >= loaded_map.width || pos.y >= loaded_map.height) return;
@@ -415,7 +425,7 @@ void draw_object_panel(platform_window* window) {
y += offset_y;
image* img = get_image_from_objecttype((object_type)i);
- if (push_icon_button(x, y, tile_w, img, object_to_place == (object_type)i && object_edit_state == OBJECT_EDITOR_PLACING)) {
+ if (push_icon_button(x, y, tile_w, img, object_to_place == (object_type)i)) {
object_to_place = (object_type)i;
object_edit_state = OBJECT_EDITOR_PLACING;
}
diff --git a/src/map.c b/src/map.c
index 4ebd930..8ec60fb 100644
--- a/src/map.c
+++ b/src/map.c
@@ -1,5 +1,6 @@
#include "../include/map.h"
+int player_zoom = 30;
static int get_height_of_tile_tl(int current_height, int x, int y) {
int highest_point = current_height;
if (y > 0) {
@@ -299,9 +300,11 @@ static int round_up(int numToRound, int multiple)
}
inline int get_tile_width(platform_window* window) {
- int tile_width = window->height / 30;
- if (window->width > window->height) tile_width = window->width / 30;
- return round_up(tile_width, 8);
+ //int tile_width = window->height / player_zoom;
+ //if (window->width > window->height) tile_width = window->width / player_zoom;
+ //return round_up(tile_width, 8);
+
+ return 32;
}
inline int get_tile_height(platform_window* window) {
diff --git a/src/objects.c b/src/objects.c
index ce1d261..213879c 100644
--- a/src/objects.c
+++ b/src/objects.c
@@ -77,13 +77,14 @@ void add_object(object obj) {
log_info("Object limit reached.");
}
+// @NEWOBJECT
image* get_image_from_objecttype(object_type tile) {
switch (tile)
{
- case OBJECT_COBBLESTONEWALL1:
- return img_obj_wall1;
- case OBJECT_PLANTBOX1:
- return img_obj_plants;
+ case OBJECT_SPACE_CONTROL_PANEL:
+ return img_space_control_panel;
+ case OBJECT_SPACE_WINDOW:
+ return img_space_window;
case OBJECT_METAL_WALL:
return img_metal_wall;
case OBJECT_METAL_WALL2:
diff --git a/src/players.c b/src/players.c
index 32b62cd..cb7842e 100644
--- a/src/players.c
+++ b/src/players.c
@@ -57,14 +57,17 @@ void spawn_player(u32 id, network_client client) {
players[i].guny = 0.0f;
players[i].gun_height = 0.0f;
players[i].id = id;
+ players[i].move_state = PLAYER_MOVE_STATE_IDLE;
players[i].guntype = GUN_MP5;
players[i].height = 0.0f;
players[i].client = client;
players[i].sprite = create_sprite(img_gunner_blue_run, 6, 48, 48, 0.1f);
players[i].sprite_death = create_sprite(img_gunner_blue_run, 8, 48, 48, 0.1f);
+ players[i].sprite_idle = create_sprite(img_gunner_blue_idle, 5, 48, 48, 0.1f);
players[i].sprite_death.loop = false;
players[i].sprite.zoom = 1.1f;
players[i].sprite_death.zoom = 1.1f;
+ players[i].sprite_idle.zoom = 1.1f;
players[i].health = 500;
players[i].max_health = 500;
@@ -133,6 +136,12 @@ void move_user(platform_window* window, u32 id, protocol_move_type move, float d
if (p->interact_state == INTERACT_DEAD) return;
+ if (move == MOVE_NONE) {
+ p->move_state = PLAYER_MOVE_STATE_IDLE;
+ return;
+ }
+ p->move_state = PLAYER_MOVE_STATE_RUNNING;
+
if (p->sec_since_last_step > 0.2f) {
add_audio_event_to_queue(EVENT_FOOTSTEP, p->id, (vec3f){.x = p->playerx, .y = p->playery, .z = p->height});
p->sec_since_last_step = 0.0f;
@@ -274,6 +283,11 @@ void take_player_input(platform_window* window) {
add_message_to_outgoing_queuex(message, *global_state.client);
move_user(window, player_id,MOVE_DOWN, update_delta);
}
+ else if (p->move_state == PLAYER_MOVE_STATE_RUNNING) {
+ network_message message = create_protocol_user_moved(MOVE_NONE, player_id);
+ add_message_to_outgoing_queuex(message, *global_state.client);
+ move_user(window, player_id,MOVE_NONE, update_delta);
+ }
#ifdef MODE_DEBUG
@@ -514,6 +528,17 @@ image* get_player_run_sprite_from_index(int index) {
return imgs[index];
}
+image* get_player_idle_sprite_from_index(int index) {
+ image* imgs[] = {
+ img_gunner_blue_idle,
+ img_gunner_black_idle,
+ img_gunner_green_idle,
+ img_gunner_yellow_idle,
+ img_gunner_red_idle,
+ };
+ return imgs[index];
+}
+
void draw_player(platform_window* window, player* p, int index) {
float size = get_player_size(window);
map_info info = get_map_info(window);
@@ -528,27 +553,31 @@ void draw_player(platform_window* window, player* p, int index) {
{
sprite_frame frame = sprite_get_frame(img_gunner_blue_run, &p->sprite);
float rads = -atan2(p->diry, p->dirx);
- if (rads > M_PI/2 || rads < -M_PI/2) {
- frame = sprite_swap_frame_horizontally(frame);
- }
+ image* img;
if (p->interact_state == INTERACT_DEAD) {
- frame = sprite_get_frame(img_gunner_blue_die, &p->sprite_death);
- renderer->render_image_quad_partial(get_player_death_sprite_from_index(index),
- player_render_x, player_render_y,
- player_render_x, player_render_y + size,
- player_render_x + size, player_render_y + size,
- player_render_x + size, player_render_y,
- frame.tl, frame.tr, frame.bl, frame.br);
+ frame = sprite_get_frame(get_player_death_sprite_from_index(index), &p->sprite_death);
+ img = get_player_death_sprite_from_index(index);
+ }
+ else if (p->move_state == PLAYER_MOVE_STATE_IDLE) {
+ frame = sprite_get_frame(get_player_idle_sprite_from_index(index), &p->sprite_idle);
+ img = get_player_idle_sprite_from_index(index);
+ }
+ // TODO: other movement states
+ else if (p->move_state == PLAYER_MOVE_STATE_RUNNING) {
+ img = get_player_run_sprite_from_index(index);
}
- else {
- renderer->render_image_quad_partial(get_player_run_sprite_from_index(index),
+
+ if (rads > M_PI/2 || rads < -M_PI/2) {
+ frame = sprite_swap_frame_horizontally(frame);
+ }
+
+ renderer->render_image_quad_partial(img,
player_render_x, player_render_y,
player_render_x, player_render_y + size,
player_render_x + size, player_render_y + size,
player_render_x + size, player_render_y,
frame.tl, frame.tr, frame.bl, frame.br);
- }
}
// Nametag
diff --git a/src/zombies.c b/src/zombies.c
index 116b5fa..c128a0c 100644
--- a/src/zombies.c
+++ b/src/zombies.c
@@ -342,6 +342,10 @@ static void update_zombie_attacks_server(zombie *zombie) {
}
void update_zombies_server(platform_window* window) {
+ #ifdef MODE_DEBUG
+ if (is_editing_map) return;
+ #endif
+
for (int i = 0; i < SERVER_MAX_ZOMBIES; i++) {
zombie o = zombies[i];
if (!o.alive) continue;