| version 1.1 | | version 1.2 |
|---|
| | |
| * Code to make a complete demo playback system. | | * Code to make a complete demo playback system. |
| * | | * |
| * $Log$ | | * $Log$ |
| * Revision 1.1 1999/06/14 22:10:14 donut | | * Revision 1.2 2003/03/09 06:41:01 donut |
| * Initial revision | | * change byte typedef to sbyte to avoid conflict with win32 byte which is unsigned |
| | | * |
| | | * Revision 1.1.1.1 1999/06/14 22:10:14 donut |
| | | * Import of d1x 1.37 source. |
| * | | * |
| * Revision 2.7 1995/05/26 16:16:06 john | | * Revision 2.7 1995/05/26 16:16:06 john |
| * Split SATURN into define's for requiring cd, using cd, etc. | | * Split SATURN into define's for requiring cd, using cd, etc. |
| | |
| int Newdemo_num_written; | | int Newdemo_num_written; |
| int Newdemo_game_mode; | | int Newdemo_game_mode; |
| int Newdemo_old_cockpit; | | int Newdemo_old_cockpit; |
| byte Newdemo_no_space; | | sbyte Newdemo_no_space; |
| byte Newdemo_at_eof; | | sbyte Newdemo_at_eof; |
| byte Newdemo_do_interpolate = 1; | | sbyte Newdemo_do_interpolate = 1; |
| byte Newdemo_players_cloaked; | | sbyte Newdemo_players_cloaked; |
| byte Newdemo_warning_given = 0; | | sbyte Newdemo_warning_given = 0; |
| byte Newdemo_cntrlcen_destroyed = 0; | | sbyte Newdemo_cntrlcen_destroyed = 0; |
| static byte nd_bad_read; | | static sbyte nd_bad_read; |
| int NewdemoFrameCount; | | int NewdemoFrameCount; |
| short frame_bytes_written = 0; | | short frame_bytes_written = 0; |
| fix nd_playback_total; | | fix nd_playback_total; |
| fix nd_recorded_total; | | fix nd_recorded_total; |
| fix nd_recorded_time; | | fix nd_recorded_time; |
| byte playback_style; | | sbyte playback_style; |
| | | |
| FILE *infile; | | FILE *infile; |
| FILE *outfile; | | FILE *outfile; |
| | |
| void my_extract_shortpos(object *objp, shortpos *spp) | | void my_extract_shortpos(object *objp, shortpos *spp) |
| { | | { |
| int segnum; | | int segnum; |
| byte *sp; | | sbyte *sp; |
| | | |
| sp = spp->bytemat; | | sp = spp->bytemat; |
| objp->orient.rvec.x = *sp++ << MATRIX_PRECISION; | | objp->orient.rvec.x = *sp++ << MATRIX_PRECISION; |
| | |
| * just a gamesave | | * just a gamesave |
| */ | | */ |
| | | |
| static void nd_write_byte(byte b) | | static void nd_write_byte(sbyte b) |
| { | | { |
| newdemo_write(&b, 1, 1); | | newdemo_write(&b, 1, 1); |
| } | | } |
| | |
| nd_write_short(sp.velz); | | nd_write_short(sp.velz); |
| } | | } |
| | | |
| static void nd_read_byte(byte *b) | | static void nd_read_byte(sbyte *b) |
| { | | { |
| newdemo_read(b, 1, 1); | | newdemo_read(b, 1, 1); |
| } | | } |
| | |
| | | |
| static void nd_read_string(char *str) | | static void nd_read_string(char *str) |
| { | | { |
| byte len; | | sbyte len; |
| | | |
| nd_read_byte(&len); | | nd_read_byte(&len); |
| newdemo_read(str, len, 1); | | newdemo_read(str, len, 1); |
| | |
| #ifndef SHAREWARE | | #ifndef SHAREWARE |
| if (obj->type == OBJ_ROBOT) { | | if (obj->type == OBJ_ROBOT) { |
| if (Robot_info[obj->id].boss_flag) { | | if (Robot_info[obj->id].boss_flag) { |
| byte cloaked; | | sbyte cloaked; |
| | | |
| nd_read_byte(&cloaked); | | nd_read_byte(&cloaked); |
| obj->ctype.ai_info.CLOAKED = cloaked; | | obj->ctype.ai_info.CLOAKED = cloaked; |
| | |
| #ifndef SHAREWARE | | #ifndef SHAREWARE |
| | | |
| if (Game_mode & GM_MULTI) { | | if (Game_mode & GM_MULTI) { |
| nd_write_byte((byte)N_players); | | nd_write_byte((sbyte)N_players); |
| for (i = 0; i < N_players; i++) { | | for (i = 0; i < N_players; i++) { |
| nd_write_string(Players[i].callsign); | | nd_write_string(Players[i].callsign); |
| nd_write_byte(Players[i].connected); | | nd_write_byte(Players[i].connected); |
| | |
| for (i = 0; i < MAX_SECONDARY_WEAPONS; i++) | | for (i = 0; i < MAX_SECONDARY_WEAPONS; i++) |
| nd_write_short((short)Players[Player_num].secondary_ammo[i]); | | nd_write_short((short)Players[Player_num].secondary_ammo[i]); |
| | | |
| nd_write_byte((byte)Players[Player_num].laser_level); | | nd_write_byte((sbyte)Players[Player_num].laser_level); |
| | | |
| // Support for missions added here | | // Support for missions added here |
| | | |
| | |
| | | |
| #endif | | #endif |
| | | |
| nd_write_byte((byte)(f2ir(Players[Player_num].energy))); | | nd_write_byte((sbyte)(f2ir(Players[Player_num].energy))); |
| nd_write_byte((byte)(f2ir(Players[Player_num].shields))); | | nd_write_byte((sbyte)(f2ir(Players[Player_num].shields))); |
| nd_write_int(Players[Player_num].flags); // be sure players flags are set | | nd_write_int(Players[Player_num].flags); // be sure players flags are set |
| nd_write_byte((byte)Primary_weapon); | | nd_write_byte((sbyte)Primary_weapon); |
| nd_write_byte((byte)Secondary_weapon); | | nd_write_byte((sbyte)Secondary_weapon); |
| Newdemo_start_frame = FrameCount; | | Newdemo_start_frame = FrameCount; |
| newdemo_set_new_level(Current_level_num); | | newdemo_set_new_level(Current_level_num); |
| start_time(); | | start_time(); |
| | |
| stop_time(); | | stop_time(); |
| nd_write_byte( ND_EVENT_PLAYER_ENERGY ); | | nd_write_byte( ND_EVENT_PLAYER_ENERGY ); |
| #ifndef SHAREWARE | | #ifndef SHAREWARE |
| nd_write_byte((byte) old_energy); | | nd_write_byte((sbyte) old_energy); |
| #endif | | #endif |
| nd_write_byte((byte) energy); | | nd_write_byte((sbyte) energy); |
| start_time(); | | start_time(); |
| } | | } |
| | | |
| | |
| stop_time(); | | stop_time(); |
| nd_write_byte( ND_EVENT_PLAYER_SHIELD ); | | nd_write_byte( ND_EVENT_PLAYER_SHIELD ); |
| #ifndef SHAREWARE | | #ifndef SHAREWARE |
| nd_write_byte((byte)old_shield); | | nd_write_byte((sbyte)old_shield); |
| #endif | | #endif |
| nd_write_byte((byte)shield); | | nd_write_byte((sbyte)shield); |
| start_time(); | | start_time(); |
| } | | } |
| | | |
| | |
| { | | { |
| stop_time(); | | stop_time(); |
| nd_write_byte( ND_EVENT_PLAYER_WEAPON ); | | nd_write_byte( ND_EVENT_PLAYER_WEAPON ); |
| nd_write_byte((byte)weapon_type); | | nd_write_byte((sbyte)weapon_type); |
| nd_write_byte((byte)weapon_num); | | nd_write_byte((sbyte)weapon_num); |
| #ifndef SHAREWARE | | #ifndef SHAREWARE |
| if (weapon_type) | | if (weapon_type) |
| nd_write_byte((byte)Secondary_weapon); | | nd_write_byte((sbyte)Secondary_weapon); |
| else | | else |
| nd_write_byte((byte)Primary_weapon); | | nd_write_byte((sbyte)Primary_weapon); |
| #endif | | #endif |
| start_time(); | | start_time(); |
| } | | } |
| | |
| stop_time(); | | stop_time(); |
| nd_write_byte (ND_EVENT_EFFECT_BLOWUP); | | nd_write_byte (ND_EVENT_EFFECT_BLOWUP); |
| nd_write_short(segment); | | nd_write_short(segment); |
| nd_write_byte((byte)side); | | nd_write_byte((sbyte)side); |
| nd_write_vector(pnt); | | nd_write_vector(pnt); |
| start_time(); | | start_time(); |
| } | | } |
| | |
| { | | { |
| stop_time(); | | stop_time(); |
| nd_write_byte(ND_EVENT_MULTI_CLOAK); | | nd_write_byte(ND_EVENT_MULTI_CLOAK); |
| nd_write_byte((byte)pnum); | | nd_write_byte((sbyte)pnum); |
| start_time(); | | start_time(); |
| } | | } |
| | | |
| | |
| { | | { |
| stop_time(); | | stop_time(); |
| nd_write_byte(ND_EVENT_MULTI_DECLOAK); | | nd_write_byte(ND_EVENT_MULTI_DECLOAK); |
| nd_write_byte((byte)pnum); | | nd_write_byte((sbyte)pnum); |
| start_time(); | | start_time(); |
| } | | } |
| | | |
| | |
| { | | { |
| stop_time(); | | stop_time(); |
| nd_write_byte(ND_EVENT_MULTI_DEATH); | | nd_write_byte(ND_EVENT_MULTI_DEATH); |
| nd_write_byte((byte)pnum); | | nd_write_byte((sbyte)pnum); |
| start_time(); | | start_time(); |
| } | | } |
| | | |
| void newdemo_record_multi_kill(int pnum, byte kill) | | void newdemo_record_multi_kill(int pnum, sbyte kill) |
| { | | { |
| stop_time(); | | stop_time(); |
| nd_write_byte(ND_EVENT_MULTI_KILL); | | nd_write_byte(ND_EVENT_MULTI_KILL); |
| nd_write_byte((byte)pnum); | | nd_write_byte((sbyte)pnum); |
| nd_write_byte(kill); | | nd_write_byte(kill); |
| start_time(); | | start_time(); |
| } | | } |
| | |
| { | | { |
| stop_time(); | | stop_time(); |
| nd_write_byte(ND_EVENT_MULTI_CONNECT); | | nd_write_byte(ND_EVENT_MULTI_CONNECT); |
| nd_write_byte((byte)pnum); | | nd_write_byte((sbyte)pnum); |
| nd_write_byte((byte)new_player); | | nd_write_byte((sbyte)new_player); |
| if (!new_player) { | | if (!new_player) { |
| nd_write_string(Players[pnum].callsign); | | nd_write_string(Players[pnum].callsign); |
| nd_write_int(Players[pnum].net_killed_total); | | nd_write_int(Players[pnum].net_killed_total); |
| | |
| { | | { |
| stop_time(); | | stop_time(); |
| nd_write_byte(ND_EVENT_MULTI_RECONNECT); | | nd_write_byte(ND_EVENT_MULTI_RECONNECT); |
| nd_write_byte((byte)pnum); | | nd_write_byte((sbyte)pnum); |
| start_time(); | | start_time(); |
| } | | } |
| | | |
| | |
| { | | { |
| stop_time(); | | stop_time(); |
| nd_write_byte(ND_EVENT_MULTI_DISCONNECT); | | nd_write_byte(ND_EVENT_MULTI_DISCONNECT); |
| nd_write_byte((byte)pnum); | | nd_write_byte((sbyte)pnum); |
| start_time(); | | start_time(); |
| } | | } |
| | | |
| | |
| { | | { |
| stop_time(); | | stop_time(); |
| nd_write_byte(ND_EVENT_MULTI_SCORE); | | nd_write_byte(ND_EVENT_MULTI_SCORE); |
| nd_write_byte((byte)pnum); | | nd_write_byte((sbyte)pnum); |
| nd_write_int(score - Players[pnum].score); // called before score is changed!!!! | | nd_write_int(score - Players[pnum].score); // called before score is changed!!!! |
| start_time(); | | start_time(); |
| } | | } |
| | |
| stop_time(); | | stop_time(); |
| nd_write_byte(ND_EVENT_DOOR_OPENING); | | nd_write_byte(ND_EVENT_DOOR_OPENING); |
| nd_write_short((short)segnum); | | nd_write_short((short)segnum); |
| nd_write_byte((byte)side); | | nd_write_byte((sbyte)side); |
| start_time(); | | start_time(); |
| } | | } |
| | | |
| #endif | | #endif |
| | | |
| void newdemo_record_laser_level(byte old_level, byte new_level) | | void newdemo_record_laser_level(sbyte old_level, sbyte new_level) |
| { | | { |
| stop_time(); | | stop_time(); |
| nd_write_byte(ND_EVENT_LASER_LEVEL); | | nd_write_byte(ND_EVENT_LASER_LEVEL); |
| | |
| { | | { |
| stop_time(); | | stop_time(); |
| nd_write_byte(ND_EVENT_NEW_LEVEL); | | nd_write_byte(ND_EVENT_NEW_LEVEL); |
| nd_write_byte((byte)level_num); | | nd_write_byte((sbyte)level_num); |
| nd_write_byte((byte)Current_level_num); | | nd_write_byte((sbyte)Current_level_num); |
| start_time(); | | start_time(); |
| } | | } |
| | | |
| int newdemo_read_demo_start(int rnd_demo) | | int newdemo_read_demo_start(int rnd_demo) |
| { | | { |
| byte version, game_type; | | sbyte version, game_type; |
| char c, energy, shield; | | char c, energy, shield; |
| char text[128]; | | char text[128]; |
| byte i, laser_level; | | sbyte i, laser_level; |
| char current_mission[9]; | | char current_mission[9]; |
| | | |
| nd_read_byte(&c); | | nd_read_byte(&c); |
| | |
| if (Newdemo_game_mode & GM_MULTI) { | | if (Newdemo_game_mode & GM_MULTI) { |
| | | |
| multi_new_game(); | | multi_new_game(); |
| nd_read_byte((byte *)&N_players); | | nd_read_byte((sbyte *)&N_players); |
| for (i = 0 ; i < N_players; i++) { | | for (i = 0 ; i < N_players; i++) { |
| Players[i].cloak_time = 0; | | Players[i].cloak_time = 0; |
| Players[i].invulnerable_time = 0; | | Players[i].invulnerable_time = 0; |
| | |
| if (Players[Player_num].flags & PLAYER_FLAGS_INVULNERABLE) | | if (Players[Player_num].flags & PLAYER_FLAGS_INVULNERABLE) |
| Players[Player_num].invulnerable_time = GameTime - (INVULNERABLE_TIME_MAX / 2); | | Players[Player_num].invulnerable_time = GameTime - (INVULNERABLE_TIME_MAX / 2); |
| | | |
| nd_read_byte((byte *)&Primary_weapon); | | nd_read_byte((sbyte *)&Primary_weapon); |
| nd_read_byte((byte *)&Secondary_weapon); | | nd_read_byte((sbyte *)&Secondary_weapon); |
| | | |
| // Next bit of code to fix problem that I introduced between 1.0 and 1.1 | | // Next bit of code to fix problem that I introduced between 1.0 and 1.1 |
| // check the next byte -- it _will_ be a load_new_level event. If it is | | // check the next byte -- it _will_ be a load_new_level event. If it is |
| | |
| int done, segnum, side, objnum, soundno, angle, volume, i; | | int done, segnum, side, objnum, soundno, angle, volume, i; |
| object *obj; | | object *obj; |
| ubyte c; | | ubyte c; |
| static byte saved_letter_cockpit; | | static sbyte saved_letter_cockpit; |
| static byte saved_rearview_cockpit; | | static sbyte saved_rearview_cockpit; |
| | | |
| done = 0; | | done = 0; |
| | | |
| | |
| | | |
| #ifdef SHAREWARE | | #ifdef SHAREWARE |
| case ND_EVENT_PLAYER_WEAPON: { | | case ND_EVENT_PLAYER_WEAPON: { |
| byte weapon_type, weapon_num; | | sbyte weapon_type, weapon_num; |
| | | |
| nd_read_byte(&weapon_type); | | nd_read_byte(&weapon_type); |
| nd_read_byte(&weapon_num); | | nd_read_byte(&weapon_num); |
| | |
| } | | } |
| #else | | #else |
| case ND_EVENT_PLAYER_WEAPON: { | | case ND_EVENT_PLAYER_WEAPON: { |
| byte weapon_type, weapon_num; | | sbyte weapon_type, weapon_num; |
| byte old_weapon; | | sbyte old_weapon; |
| | | |
| nd_read_byte(&weapon_type); | | nd_read_byte(&weapon_type); |
| nd_read_byte(&weapon_num); | | nd_read_byte(&weapon_num); |
| | |
| | | |
| case ND_EVENT_EFFECT_BLOWUP: { | | case ND_EVENT_EFFECT_BLOWUP: { |
| short segnum; | | short segnum; |
| byte side; | | sbyte side; |
| vms_vector pnt; | | vms_vector pnt; |
| | | |
| nd_read_short(&segnum); | | nd_read_short(&segnum); |
| | |
| } | | } |
| | | |
| case ND_EVENT_MULTI_CLOAK: { | | case ND_EVENT_MULTI_CLOAK: { |
| byte pnum; | | sbyte pnum; |
| | | |
| nd_read_byte(&pnum); | | nd_read_byte(&pnum); |
| if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) { | | if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) { |
| | |
| } | | } |
| | | |
| case ND_EVENT_MULTI_DECLOAK: { | | case ND_EVENT_MULTI_DECLOAK: { |
| byte pnum; | | sbyte pnum; |
| | | |
| nd_read_byte(&pnum); | | nd_read_byte(&pnum); |
| | | |
| | |
| | | |
| #ifndef SHAREWARE | | #ifndef SHAREWARE |
| case ND_EVENT_MULTI_DEATH: { | | case ND_EVENT_MULTI_DEATH: { |
| byte pnum; | | sbyte pnum; |
| | | |
| nd_read_byte(&pnum); | | nd_read_byte(&pnum); |
| if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) | | if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) |
| | |
| | | |
| #ifdef NETWORK | | #ifdef NETWORK |
| case ND_EVENT_MULTI_KILL: { | | case ND_EVENT_MULTI_KILL: { |
| byte pnum, kill; | | sbyte pnum, kill; |
| | | |
| nd_read_byte(&pnum); | | nd_read_byte(&pnum); |
| nd_read_byte(&kill); | | nd_read_byte(&kill); |
| | |
| } | | } |
| | | |
| case ND_EVENT_MULTI_CONNECT: { | | case ND_EVENT_MULTI_CONNECT: { |
| byte pnum, new_player; | | sbyte pnum, new_player; |
| int killed_total, kills_total; | | int killed_total, kills_total; |
| char new_callsign[CALLSIGN_LEN+1], old_callsign[CALLSIGN_LEN+1]; | | char new_callsign[CALLSIGN_LEN+1], old_callsign[CALLSIGN_LEN+1]; |
| | | |
| | |
| } | | } |
| | | |
| case ND_EVENT_MULTI_RECONNECT: { | | case ND_EVENT_MULTI_RECONNECT: { |
| byte pnum; | | sbyte pnum; |
| | | |
| nd_read_byte(&pnum); | | nd_read_byte(&pnum); |
| if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) | | if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) |
| | |
| } | | } |
| | | |
| case ND_EVENT_MULTI_DISCONNECT: { | | case ND_EVENT_MULTI_DISCONNECT: { |
| byte pnum; | | sbyte pnum; |
| | | |
| nd_read_byte(&pnum); | | nd_read_byte(&pnum); |
| if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) | | if ((Newdemo_vcr_state == ND_STATE_REWINDING) || (Newdemo_vcr_state == ND_STATE_ONEFRAMEBACKWARD)) |
| | |
| | | |
| case ND_EVENT_MULTI_SCORE: { | | case ND_EVENT_MULTI_SCORE: { |
| int score; | | int score; |
| byte pnum; | | sbyte pnum; |
| | | |
| nd_read_byte(&pnum); | | nd_read_byte(&pnum); |
| nd_read_int(&score); | | nd_read_int(&score); |
| | |
| | | |
| case ND_EVENT_DOOR_OPENING: { | | case ND_EVENT_DOOR_OPENING: { |
| short segnum; | | short segnum; |
| byte side; | | sbyte side; |
| | | |
| nd_read_short(&segnum); | | nd_read_short(&segnum); |
| nd_read_byte(&side); | | nd_read_byte(&side); |
| | |
| } | | } |
| | | |
| case ND_EVENT_LASER_LEVEL: { | | case ND_EVENT_LASER_LEVEL: { |
| byte old_level, new_level; | | sbyte old_level, new_level; |
| | | |
| nd_read_byte(&old_level); | | nd_read_byte(&old_level); |
| nd_read_byte(&new_level); | | nd_read_byte(&new_level); |
| | |
| #endif | | #endif |
| | | |
| case ND_EVENT_NEW_LEVEL: { | | case ND_EVENT_NEW_LEVEL: { |
| byte new_level, old_level, loaded_level; | | sbyte new_level, old_level, loaded_level; |
| | | |
| nd_read_byte (&new_level); | | nd_read_byte (&new_level); |
| nd_read_byte (&old_level); | | nd_read_byte (&old_level); |
| | |
| void newdemo_goto_end() | | void newdemo_goto_end() |
| { | | { |
| short frame_length; | | short frame_length; |
| byte level; | | sbyte level; |
| int i; | | int i; |
| | | |
| fseek(infile, -2, SEEK_END); | | fseek(infile, -2, SEEK_END); |
| | |
| void newdemo_goto_end() | | void newdemo_goto_end() |
| { | | { |
| short frame_length, byte_count, bshort; | | short frame_length, byte_count, bshort; |
| byte level, bbyte, laser_level; | | sbyte level, bbyte, laser_level; |
| ubyte energy, shield; | | ubyte energy, shield; |
| int i, loc, bint; | | int i, loc, bint; |
| | | |
| | |
| } | | } |
| if (Players[Player_num].flags & PLAYER_FLAGS_INVULNERABLE) | | if (Players[Player_num].flags & PLAYER_FLAGS_INVULNERABLE) |
| Players[Player_num].invulnerable_time = GameTime - (INVULNERABLE_TIME_MAX / 2); | | Players[Player_num].invulnerable_time = GameTime - (INVULNERABLE_TIME_MAX / 2); |
| nd_read_byte((byte *)&Primary_weapon); | | nd_read_byte((sbyte *)&Primary_weapon); |
| nd_read_byte((byte *)&Secondary_weapon); | | nd_read_byte((sbyte *)&Secondary_weapon); |
| for (i = 0; i < MAX_PRIMARY_WEAPONS; i++) | | for (i = 0; i < MAX_PRIMARY_WEAPONS; i++) |
| nd_read_short((short *)&(Players[Player_num].primary_ammo[i])); | | nd_read_short((short *)&(Players[Player_num].primary_ammo[i])); |
| for (i = 0; i < MAX_SECONDARY_WEAPONS; i++) | | for (i = 0; i < MAX_SECONDARY_WEAPONS; i++) |
| | |
| } | | } |
| | | |
| if (Newdemo_game_mode & GM_MULTI) { | | if (Newdemo_game_mode & GM_MULTI) { |
| nd_read_byte((byte *)&N_players); | | nd_read_byte((sbyte *)&N_players); |
| for (i = 0; i < N_players; i++) { | | for (i = 0; i < N_players; i++) { |
| nd_read_string(Players[i].callsign); | | nd_read_string(Players[i].callsign); |
| nd_read_byte(&(Players[i].connected)); | | nd_read_byte(&(Players[i].connected)); |
| | |
| #ifndef SHAREWARE | | #ifndef SHAREWARE |
| byte_count += 10; // from frame_bytes_written | | byte_count += 10; // from frame_bytes_written |
| | | |
| nd_write_byte((byte)(f2ir(Players[Player_num].energy))); | | nd_write_byte((sbyte)(f2ir(Players[Player_num].energy))); |
| nd_write_byte((byte)(f2ir(Players[Player_num].shields))); | | nd_write_byte((sbyte)(f2ir(Players[Player_num].shields))); |
| nd_write_int(Players[Player_num].flags); // be sure players flags are set | | nd_write_int(Players[Player_num].flags); // be sure players flags are set |
| nd_write_byte((byte)Primary_weapon); | | nd_write_byte((sbyte)Primary_weapon); |
| nd_write_byte((byte)Secondary_weapon); | | nd_write_byte((sbyte)Secondary_weapon); |
| byte_count += 8; | | byte_count += 8; |
| | | |
| for (l = 0; l < MAX_PRIMARY_WEAPONS; l++) | | for (l = 0; l < MAX_PRIMARY_WEAPONS; l++) |
| | |
| byte_count++; | | byte_count++; |
| | | |
| if (Game_mode & GM_MULTI) { | | if (Game_mode & GM_MULTI) { |
| nd_write_byte((byte)N_players); | | nd_write_byte((sbyte)N_players); |
| byte_count++; | | byte_count++; |
| for (l = 0; l < N_players; l++) { | | for (l = 0; l < N_players; l++) { |
| nd_write_string(Players[l].callsign); | | nd_write_string(Players[l].callsign); |