diff options
Diffstat (limited to 'src/game/client')
| -rw-r--r-- | src/game/client/gc_client.cpp | 7 | ||||
| -rw-r--r-- | src/game/client/gc_client.hpp | 12 | ||||
| -rw-r--r-- | src/game/client/gc_hooks.cpp | 71 | ||||
| -rw-r--r-- | src/game/client/gc_menu.cpp | 2 | ||||
| -rw-r--r-- | src/game/client/gc_render.cpp | 8 | ||||
| -rw-r--r-- | src/game/client/gc_render.hpp | 2 | ||||
| -rw-r--r-- | src/game/client/gc_render_obj.cpp | 21 |
7 files changed, 65 insertions, 58 deletions
diff --git a/src/game/client/gc_client.cpp b/src/game/client/gc_client.cpp index c42c354e..f0195a47 100644 --- a/src/game/client/gc_client.cpp +++ b/src/game/client/gc_client.cpp @@ -880,7 +880,7 @@ void render_game() // don't use predicted } else - local_character_pos = mix(predicted_prev_player.pos, predicted_player.pos, client_predintratick()); + local_character_pos = mix(predicted_prev_char.pos, predicted_char.pos, client_predintratick()); } else if(netobjects.local_character && netobjects.local_prev_character) { @@ -1663,3 +1663,8 @@ void render_game() } + +extern "C" const char *modc_getitemname(int type) +{ + return netobj_get_name(type); +} diff --git a/src/game/client/gc_client.hpp b/src/game/client/gc_client.hpp index 750154b3..f19766bf 100644 --- a/src/game/client/gc_client.hpp +++ b/src/game/client/gc_client.hpp @@ -1,5 +1,5 @@ #include <game/g_vmath.hpp> -#include <game/g_protocol.hpp> +#include <game/generated/g_protocol.hpp> #include <game/g_game.hpp> #include <game/client/gc_render.hpp> @@ -22,8 +22,8 @@ extern vec2 local_target_pos; // snap pointers struct SNAPSTATE { - const NETOBJ_PLAYER_CHARACTER *local_character; - const NETOBJ_PLAYER_CHARACTER *local_prev_character; + const NETOBJ_CHARACTER *local_character; + const NETOBJ_CHARACTER *local_prev_character; const NETOBJ_PLAYER_INFO *local_info; const NETOBJ_FLAG *flags[2]; const NETOBJ_GAME *gameobj; @@ -46,8 +46,8 @@ extern const NETOBJ_GAME *gameobj; extern TUNING_PARAMS tuning; // predicted players -extern PLAYER_CORE predicted_prev_player; -extern PLAYER_CORE predicted_player; +extern CHARACTER_CORE predicted_prev_char; +extern CHARACTER_CORE predicted_char; // input extern NETOBJ_PLAYER_INPUT input_data; @@ -148,7 +148,7 @@ struct CLIENT_DATA int team; int emoticon; int emoticon_start; - PLAYER_CORE predicted; + CHARACTER_CORE predicted; TEE_RENDER_INFO skin_info; // this is what the server reports TEE_RENDER_INFO render_info; // this is what we use diff --git a/src/game/client/gc_hooks.cpp b/src/game/client/gc_hooks.cpp index 2aaca900..5d9570fb 100644 --- a/src/game/client/gc_hooks.cpp +++ b/src/game/client/gc_hooks.cpp @@ -56,6 +56,9 @@ static void load_sounds_thread(void *do_render) extern "C" void modc_init() { + for(int i = 0; i < NUM_NETOBJTYPES; i++) + snap_set_staticsize(i, netobj_get_size(i)); + static FONT_SET default_font; int64 start = time_get(); @@ -128,17 +131,17 @@ extern "C" void modc_shutdown() } -PLAYER_CORE predicted_prev_player; -PLAYER_CORE predicted_player; +CHARACTER_CORE predicted_prev_char; +CHARACTER_CORE predicted_char; static int predicted_tick = 0; static int last_new_predicted_tick = -1; extern "C" void modc_predict() { - PLAYER_CORE before_prev_player = predicted_prev_player; - PLAYER_CORE before_player = predicted_player; + CHARACTER_CORE before_prev_char = predicted_prev_char; + CHARACTER_CORE before_char = predicted_char; - // repredict player + // repredict character WORLD_CORE world; world.tuning = tuning; int local_cid = -1; @@ -150,11 +153,11 @@ extern "C" void modc_predict() const void *data = snap_get_item(SNAP_CURRENT, i, &item); int client_id = item.id; - if(item.type == NETOBJTYPE_PLAYER_CHARACTER) + if(item.type == NETOBJTYPE_CHARACTER) { - const NETOBJ_PLAYER_CHARACTER *character = (const NETOBJ_PLAYER_CHARACTER *)data; + const NETOBJ_CHARACTER *character = (const NETOBJ_CHARACTER *)data; client_datas[client_id].predicted.world = &world; - world.players[client_id] = &client_datas[client_id].predicted; + world.characters[client_id] = &client_datas[client_id].predicted; client_datas[client_id].predicted.read(character); } @@ -174,45 +177,45 @@ extern "C" void modc_predict() for(int tick = client_tick()+1; tick <= client_predtick(); tick++) { // fetch the local - if(tick == client_predtick() && world.players[local_cid]) - predicted_prev_player = *world.players[local_cid]; + if(tick == client_predtick() && world.characters[local_cid]) + predicted_prev_char = *world.characters[local_cid]; // first calculate where everyone should move for(int c = 0; c < MAX_CLIENTS; c++) { - if(!world.players[c]) + if(!world.characters[c]) continue; - mem_zero(&world.players[c]->input, sizeof(world.players[c]->input)); + mem_zero(&world.characters[c]->input, sizeof(world.characters[c]->input)); if(local_cid == c) { // apply player input int *input = client_get_input(tick); if(input) - world.players[c]->input = *((NETOBJ_PLAYER_INPUT*)input); + world.characters[c]->input = *((NETOBJ_PLAYER_INPUT*)input); } - world.players[c]->tick(); + world.characters[c]->tick(); } // move all players and quantize their data for(int c = 0; c < MAX_CLIENTS; c++) { - if(!world.players[c]) + if(!world.characters[c]) continue; - world.players[c]->move(); - world.players[c]->quantize(); + world.characters[c]->move(); + world.characters[c]->quantize(); } if(tick > last_new_predicted_tick) { last_new_predicted_tick = tick; - if(local_cid != -1 && world.players[local_cid]) + if(local_cid != -1 && world.characters[local_cid]) { - vec2 pos = world.players[local_cid]->pos; - int events = world.players[local_cid]->triggered_events; + vec2 pos = world.characters[local_cid]->pos; + int events = world.characters[local_cid]->triggered_events; if(events&COREEVENT_GROUND_JUMP) snd_play_random(CHN_WORLD, SOUND_PLAYER_JUMP, 1.0f, pos); if(events&COREEVENT_AIR_JUMP) { @@ -232,26 +235,26 @@ extern "C" void modc_predict() (int)world.players[c]->vel.x, (int)world.players[c]->vel.y);*/ } - if(tick == client_predtick() && world.players[local_cid]) - predicted_player = *world.players[local_cid]; + if(tick == client_predtick() && world.characters[local_cid]) + predicted_char = *world.characters[local_cid]; } if(config.debug && predicted_tick == client_predtick()) { - if(predicted_player.pos.x != before_player.pos.x || - predicted_player.pos.y != before_player.pos.y) + if(predicted_char.pos.x != before_char.pos.x || + predicted_char.pos.y != before_char.pos.y) { dbg_msg("client", "prediction error, (%d %d) (%d %d)", - (int)before_player.pos.x, (int)before_player.pos.y, - (int)predicted_player.pos.x, (int)predicted_player.pos.y); + (int)before_char.pos.x, (int)before_char.pos.y, + (int)predicted_char.pos.x, (int)predicted_char.pos.y); } - if(predicted_prev_player.pos.x != before_prev_player.pos.x || - predicted_prev_player.pos.y != before_prev_player.pos.y) + if(predicted_prev_char.pos.x != before_prev_char.pos.x || + predicted_prev_char.pos.y != before_prev_char.pos.y) { dbg_msg("client", "prediction error, prev (%d %d) (%d %d)", - (int)before_prev_player.pos.x, (int)before_prev_player.pos.y, - (int)predicted_prev_player.pos.x, (int)predicted_prev_player.pos.y); + (int)before_prev_char.pos.x, (int)before_prev_char.pos.y, + (int)predicted_prev_char.pos.x, (int)predicted_prev_char.pos.y); } } @@ -316,15 +319,15 @@ extern "C" void modc_newsnapshot() if(info->local) { netobjects.local_info = info; - const void *data = snap_find_item(SNAP_CURRENT, NETOBJTYPE_PLAYER_CHARACTER, item.id); + const void *data = snap_find_item(SNAP_CURRENT, NETOBJTYPE_CHARACTER, item.id); if(data) { - netobjects.local_character = (const NETOBJ_PLAYER_CHARACTER *)data; + netobjects.local_character = (const NETOBJ_CHARACTER *)data; local_character_pos = vec2(netobjects.local_character->x, netobjects.local_character->y); - const void *p = snap_find_item(SNAP_PREV, NETOBJTYPE_PLAYER_CHARACTER, item.id); + const void *p = snap_find_item(SNAP_PREV, NETOBJTYPE_CHARACTER, item.id); if(p) - netobjects.local_prev_character = (NETOBJ_PLAYER_CHARACTER *)p; + netobjects.local_prev_character = (NETOBJ_CHARACTER *)p; } } } diff --git a/src/game/client/gc_menu.cpp b/src/game/client/gc_menu.cpp index cb8324a7..3a1e9cee 100644 --- a/src/game/client/gc_menu.cpp +++ b/src/game/client/gc_menu.cpp @@ -15,7 +15,7 @@ extern "C" { } #include "../g_version.hpp" -#include "../g_protocol.hpp" +#include <game/generated/g_protocol.hpp> #include "../generated/gc_data.hpp" #include "gc_render.hpp" diff --git a/src/game/client/gc_render.cpp b/src/game/client/gc_render.cpp index 2e5a3d50..afb827fb 100644 --- a/src/game/client/gc_render.cpp +++ b/src/game/client/gc_render.cpp @@ -3,7 +3,7 @@ #include <engine/e_client_interface.h> #include <engine/e_config.h> #include <game/generated/gc_data.hpp> -#include <game/g_protocol.hpp> +#include <game/generated/g_protocol.hpp> #include <game/g_math.hpp> #include <game/g_layers.hpp> #include "gc_render.hpp" @@ -473,7 +473,7 @@ static void render_players() SNAP_ITEM item; const void *data = snap_get_item(SNAP_CURRENT, i, &item); - if(item.type == NETOBJTYPE_PLAYER_CHARACTER) + if(item.type == NETOBJTYPE_CHARACTER) { const void *prev = snap_find_item(SNAP_PREV, item.type, item.id); const void *prev_info = snap_find_item(SNAP_PREV, NETOBJTYPE_PLAYER_INFO, item.id); @@ -482,8 +482,8 @@ static void render_players() if(prev && prev_info && info) { render_player( - (const NETOBJ_PLAYER_CHARACTER *)prev, - (const NETOBJ_PLAYER_CHARACTER *)data, + (const NETOBJ_CHARACTER *)prev, + (const NETOBJ_CHARACTER *)data, (const NETOBJ_PLAYER_INFO *)prev_info, (const NETOBJ_PLAYER_INFO *)info ); diff --git a/src/game/client/gc_render.hpp b/src/game/client/gc_render.hpp index 02bc224d..d819c194 100644 --- a/src/game/client/gc_render.hpp +++ b/src/game/client/gc_render.hpp @@ -66,7 +66,7 @@ void render_pickup(const struct NETOBJ_PICKUP *prev, const struct NETOBJ_PICKUP void render_projectile(const struct NETOBJ_PROJECTILE *current, int itemid); void render_laser(const struct NETOBJ_LASER *current); void render_player( - const struct NETOBJ_PLAYER_CHARACTER *prev_char, const struct NETOBJ_PLAYER_CHARACTER *player_char, + const struct NETOBJ_CHARACTER *prev_char, const struct NETOBJ_CHARACTER *player_char, const struct NETOBJ_PLAYER_INFO *prev_info, const struct NETOBJ_PLAYER_INFO *player_info); // map render methods (gc_render_map.cpp) diff --git a/src/game/client/gc_render_obj.cpp b/src/game/client/gc_render_obj.cpp index 119db4d6..daba5ceb 100644 --- a/src/game/client/gc_render_obj.cpp +++ b/src/game/client/gc_render_obj.cpp @@ -3,8 +3,8 @@ #include <stdio.h> #include <engine/e_client_interface.h> #include <engine/e_config.h> -#include "../generated/gc_data.hpp" -#include "../g_protocol.hpp" +#include <game/generated/gc_data.hpp> +#include <game/generated/g_protocol.hpp> #include "../g_math.hpp" #include "gc_render.hpp" #include "gc_anim.hpp" @@ -265,14 +265,14 @@ static void render_hand(TEE_RENDER_INFO *info, vec2 center_pos, vec2 dir, float } void render_player( - const NETOBJ_PLAYER_CHARACTER *prev_char, - const NETOBJ_PLAYER_CHARACTER *player_char, + const NETOBJ_CHARACTER *prev_char, + const NETOBJ_CHARACTER *player_char, const NETOBJ_PLAYER_INFO *prev_info, const NETOBJ_PLAYER_INFO *player_info ) { - NETOBJ_PLAYER_CHARACTER prev; - NETOBJ_PLAYER_CHARACTER player; + NETOBJ_CHARACTER prev; + NETOBJ_CHARACTER player; prev = *prev_char; player = *player_char; @@ -330,8 +330,8 @@ void render_player( else { // apply predicted results - predicted_player.write(&player); - predicted_prev_player.write(&prev); + predicted_char.write(&player); + predicted_prev_char.write(&prev); intratick = client_predintratick(); } } @@ -403,8 +403,8 @@ void render_player( { if(netobjects.local_info && player_char->hooked_player == netobjects.local_info->cid) { - hook_pos = mix(vec2(predicted_prev_player.pos.x, predicted_prev_player.pos.y), - vec2(predicted_player.pos.x, predicted_player.pos.y), client_predintratick()); + hook_pos = mix(vec2(predicted_prev_char.pos.x, predicted_prev_char.pos.y), + vec2(predicted_char.pos.x, predicted_char.pos.y), client_predintratick()); } else hook_pos = mix(vec2(prev_char->hook_x, prev_char->hook_y), vec2(player_char->hook_x, player_char->hook_y), client_intratick()); @@ -541,7 +541,6 @@ void render_player( vec2 diry(-dir.y,dir.x); vec2 muzzlepos = p + dir * data->weapons.id[iw].muzzleoffsetx + diry * offsety; - dbg_msg("", "%d", data->weapons.id[iw].num_sprite_muzzles); draw_sprite(muzzlepos.x, muzzlepos.y, data->weapons.id[iw].visual_size); } } |