diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index 580364f44..b8450d7bd 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -243,6 +243,7 @@ char ckbag[100]; int REPORT_NAME; int WEAPON_READIED_BONUS; int ALLOW_CUSTOM_NIV; + int DISABLE_SPEC_MODE; int ENEMY_ENABLED; int CREATURE_ENABLED; @@ -1894,6 +1895,7 @@ void recieveSETTINGS (RPCParameters *rpcParameters) //recive settings from serve WEAPON_READIED_BONUS=cl_lan->WEAPON_READIED_BONUS; ALLOW_CUSTOM_NIV=cl_lan->ALLOW_CUSTOM_NIV; + DISABLE_SPEC_MODE=cl_lan->DISABLE_SPEC_MODE; if(ALLOW_CUSTOM_NIV==0) @@ -2268,8 +2270,12 @@ BOOLEAN check_status (void)// any 'enemies' and clients left to fight ?? { wiped=1; ScreenMsg( FONT_LTGREEN, MSG_CHAT, MPClientMessage[40] ); - gTacticalStatus.uiFlags |= SHOW_ALL_MERCS;//hayden - ScreenMsg( FONT_YELLOW, MSG_CHAT, MPClientMessage[41] ); + if(!DISABLE_SPEC_MODE) + { + gTacticalStatus.uiFlags |= SHOW_ALL_MERCS;//hayden + ScreenMsg( FONT_YELLOW, MSG_CHAT, MPClientMessage[41] ); + } + else ScreenMsg( FONT_LTBLUE, MSG_CHAT, L"spectator mode disabled"); teamwiped(); ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, MPClientMessage[42] ); @@ -2310,7 +2316,7 @@ void UpdateSoldierToNetwork ( SOLDIERTYPE *pSoldier ) SUpdateNetworkSoldier.bLife=pSoldier->stats.bLife; SUpdateNetworkSoldier.bBleeding=pSoldier->bBleeding; - + SUpdateNetworkSoldier.ubNewStance=pSoldier->ubDesiredHeight; if((gTacticalStatus.ubTopMessageType == PLAYER_TURN_MESSAGE || gTacticalStatus.ubTopMessageType == PLAYER_INTERRUPT_MESSAGE || ((gTacticalStatus.ubTopMessageType == COMPUTER_INTERRUPT_MESSAGE || gTacticalStatus.ubTopMessageType == COMPUTER_TURN_MESSAGE )&& is_server)) && (gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT))//update progress bar, not supporting coop yet... @@ -2354,6 +2360,11 @@ void UpdateSoldierFromNetwork (RPCParameters *rpcParameters) pSoldier->EVENT_SetSoldierDesiredDirection( SUpdateNetworkSoldier->ubDirection ); //ScreenMsg( FONT_LTBLUE, MSG_CHAT, L"sync ubid:%d dir %d to %d",pSoldier->ubID, pSoldier->ubDirection, SUpdateNetworkSoldier->ubDirection ); } + if(pSoldier->ubDesiredHeight != SUpdateNetworkSoldier->ubNewStance && pSoldier->bCollapsed != TRUE) + { + pSoldier->ChangeSoldierStance( SUpdateNetworkSoldier->ubNewStance ); + //ScreenMsg( FONT_LTBLUE, MSG_CHAT, L"update stance"); + } pSoldier->bBleeding=SUpdateNetworkSoldier->bBleeding; @@ -2719,6 +2730,7 @@ void connect_client ( void ) //INTERRUPTS=0; DAMAGE_MULTIPLIER=0; SAME_MERC=0; + DISABLE_SPEC_MODE=0; GetPrivateProfileString( "Ja2_mp Settings","SERVER_IP", "", ip, MAX_PATH, "..\\Ja2_mp.ini" ); GetPrivateProfileString( "Ja2_mp Settings","SERVER_PORT", "", port, MAX_PATH, "..\\Ja2_mp.ini" ); diff --git a/Multiplayer/fresh_header.h b/Multiplayer/fresh_header.h index a6c081d9f..233ec8461 100644 --- a/Multiplayer/fresh_header.h +++ b/Multiplayer/fresh_header.h @@ -71,4 +71,6 @@ BOOLEAN check_status (void); extern UINT8 NumEnemyInSector( ); extern INT8 NumActiveAndConsciousTeamMembers( UINT8 ubTeam ); -void send_heal (SOLDIERTYPE *pSoldier ); \ No newline at end of file +void send_heal (SOLDIERTYPE *pSoldier ); + +extern int DISABLE_SPEC_MODE; \ No newline at end of file diff --git a/Multiplayer/network.h b/Multiplayer/network.h index 7a483aca4..6901a7602 100644 --- a/Multiplayer/network.h +++ b/Multiplayer/network.h @@ -51,6 +51,7 @@ typedef struct float TIME; int WEAPON_READIED_BONUS; int ALLOW_CUSTOM_NIV; + int DISABLE_SPEC_MODE; } settings_struct; //typedef struct diff --git a/Multiplayer/server.cpp b/Multiplayer/server.cpp index 3f642753b..e6e355738 100644 --- a/Multiplayer/server.cpp +++ b/Multiplayer/server.cpp @@ -49,6 +49,7 @@ INT32 gsstarting_balance; float TIME; int sWEAPON_READIED_BONUS; int sALLOW_CUSTOM_NIV; +int sDISABLE_SPEC_MODE; unsigned char SGetPacketIdentifier(Packet *p); unsigned char SpacketIdentifier; @@ -365,6 +366,7 @@ void requestSETTINGS(RPCParameters *rpcParameters ) lan.TIME=TIME; lan.WEAPON_READIED_BONUS=sWEAPON_READIED_BONUS; lan.ALLOW_CUSTOM_NIV=sALLOW_CUSTOM_NIV; + lan.DISABLE_SPEC_MODE=sDISABLE_SPEC_MODE; server->RPC("recieveSETTINGS",(const char*)&lan, (int)sizeof(settings_struct)*8, HIGH_PRIORITY, RELIABLE, 0, UNASSIGNED_SYSTEM_ADDRESS, true, 0, UNASSIGNED_NETWORK_ID,0); @@ -512,6 +514,10 @@ if(gsPLAYER_BSIDE==2)//only enable ai during coop GetPrivateProfileString( "Ja2_mp Settings","ALLOW_CUSTOM_NIV", "", acniv, MAX_PATH, "..\\Ja2_mp.ini" ); sALLOW_CUSTOM_NIV=atoi(acniv); + char dspec[30]; + GetPrivateProfileString( "Ja2_mp Settings","DISABLE_SPEC_MODE", "", dspec, MAX_PATH, "..\\Ja2_mp.ini" ); + sDISABLE_SPEC_MODE=atoi(dspec); + //********************** diff --git a/Multiplayer/test_space.cpp b/Multiplayer/test_space.cpp index 171e278d4..7cf4a38f9 100644 --- a/Multiplayer/test_space.cpp +++ b/Multiplayer/test_space.cpp @@ -113,7 +113,7 @@ void test_func2 (void)//now bound to "0" //currently displays coordinates of the SOLDIERTYPE * pSoldier=MercPtrs[ 0 ]; -RemoveOneOpponent( pSoldier ); +//RemoveOneOpponent( pSoldier ); //SOLDIERTYPE * pSoldier2=MercPtrs[ 127 ]; // ////pSoldier->AdjustNoAPToFinishMove( TRUE ); diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index fe7a4bbfd..0703d2081 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -6100,8 +6100,12 @@ void DeathNoMessageTimerCallback( void ) else { ScreenMsg( FONT_LTGREEN, MSG_CHAT, MPClientMessage[40] ); + if(!DISABLE_SPEC_MODE) + { gTacticalStatus.uiFlags |= SHOW_ALL_MERCS;//hayden ScreenMsg( FONT_YELLOW, MSG_CHAT, MPClientMessage[41] ); + } + else ScreenMsg( FONT_LTBLUE, MSG_CHAT, L"spectator mode disabled"); teamwiped(); } } @@ -8175,8 +8179,12 @@ void EndBattleWithUnconsciousGuysCallback( UINT8 bExitValue ) else { ScreenMsg( FONT_LTGREEN, MSG_CHAT, MPClientMessage[40] ); + if(!DISABLE_SPEC_MODE) + { gTacticalStatus.uiFlags |= SHOW_ALL_MERCS;//hayden ScreenMsg( FONT_YELLOW, MSG_CHAT, MPClientMessage[41] ); + } + else ScreenMsg( FONT_LTBLUE, MSG_CHAT, L"spectator mode disabled"); teamwiped(); } } diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 2be81cce1..efaee3540 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -2514,20 +2514,19 @@ BOOLEAN SOLDIERTYPE::ChangeSoldierState( UINT16 usNewState, UINT16 usStartingAni //AddGameEvent( S_CHANGESTATE, 0, &SChangeState ); - if(is_server && this->ubID < 120) + if((is_server && this->ubID < 120)||(is_client && this->ubID < 20)) { - this->EVENT_InitNewSoldierAnim( SChangeState.usNewState, SChangeState.usStartingAniCode, SChangeState.fForce ); send_changestate(&SChangeState); } - else if((is_client && !is_server) && (this->ubID < 20 || (this->ubID < 120 && gTacticalStatus.ubCurrentTeam == OUR_TEAM))) - { + //else if((is_client && !is_server) && (this->ubID < 20 || (this->ubID < 120 && gTacticalStatus.ubCurrentTeam == OUR_TEAM))) + //{ + // this->EVENT_InitNewSoldierAnim( SChangeState.usNewState, SChangeState.usStartingAniCode, SChangeState.fForce ); + // send_changestate(&SChangeState); + //} + //else if (!is_client) + //{ this->EVENT_InitNewSoldierAnim( SChangeState.usNewState, SChangeState.usStartingAniCode, SChangeState.fForce ); - send_changestate(&SChangeState); - } - else if (!is_client) - { - this->EVENT_InitNewSoldierAnim( SChangeState.usNewState, SChangeState.usStartingAniCode, SChangeState.fForce ); - } + //} return( TRUE ); } @@ -11913,7 +11912,8 @@ void SoldierCollapse( SOLDIERTYPE *pSoldier ) else { pSoldier->BeginTyingToFall( ); - pSoldier->EVENT_InitNewSoldierAnim( FALLFORWARD_FROMHIT_STAND, 0, FALSE ); + if(!is_networked)pSoldier->EVENT_InitNewSoldierAnim( FALLFORWARD_FROMHIT_STAND, 0, FALSE ); + else pSoldier->ChangeSoldierState( FALLFORWARD_FROMHIT_STAND, 0, FALSE ); } break; @@ -11926,7 +11926,8 @@ void SoldierCollapse( SOLDIERTYPE *pSoldier ) // then when real anims come, use them instead. //if ( fMerc ) //{ - pSoldier->EVENT_InitNewSoldierAnim( FALLFORWARD_FROMHIT_CROUCH, 0 , FALSE); + if(!is_networked)pSoldier->EVENT_InitNewSoldierAnim( FALLFORWARD_FROMHIT_CROUCH, 0 , FALSE); + else pSoldier->ChangeSoldierState( FALLFORWARD_FROMHIT_CROUCH, 0, FALSE ); //} //else //{ @@ -11950,7 +11951,8 @@ void SoldierCollapse( SOLDIERTYPE *pSoldier ) break; default: - pSoldier->EVENT_InitNewSoldierAnim( PRONE_LAY_FROMHIT, 0 , FALSE ); + if(!is_networked)pSoldier->EVENT_InitNewSoldierAnim( PRONE_LAY_FROMHIT, 0 , FALSE ); + else pSoldier->ChangeSoldierState( PRONE_LAY_FROMHIT, 0, FALSE ); break; } break; diff --git a/Utils/Event Pump.h b/Utils/Event Pump.h index b32ffc822..b23318891 100644 --- a/Utils/Event Pump.h +++ b/Utils/Event Pump.h @@ -258,6 +258,7 @@ typedef struct UINT16 usTactialTurnLimitCounter; UINT16 usTactialTurnLimitMax; UINT8 ubDirection; + UINT8 ubNewStance; } EV_S_UPDATENETWORKSOLDIER;