diff --git a/Strategic/Auto Resolve.cpp b/Strategic/Auto Resolve.cpp index 54ae42c5..2ca00412 100644 --- a/Strategic/Auto Resolve.cpp +++ b/Strategic/Auto Resolve.cpp @@ -90,6 +90,7 @@ INT32 giMaxMilitiaToRender = 20;//Changes depending on merc amount extern UINT8 gubReinforcementMinEnemyStaticGroupSize; extern BOOLEAN gfStrategicMilitiaChangesMade; +extern BOOLEAN gfGodModeCheat; extern void ResetMilitia(); extern BOOLEAN AutoReload( SOLDIERTYPE *pSoldier ); @@ -5001,7 +5002,14 @@ void TargetHitCallback( SOLDIERCELL *pTarget, INT32 index ) break; } - iNewLife = pTarget->pSoldier->stats.bLife - pTarget->usHitDamage[index]; + if (gfGodModeCheat && pTarget->pSoldier->bTeam == OUR_TEAM) + { + iNewLife = pTarget->pSoldier->stats.bLife; + } + else + { + iNewLife = pTarget->pSoldier->stats.bLife - pTarget->usHitDamage[index]; + } if( !pTarget->usHitDamage[index] ) { //bullet missed -- play a ricochet sound. if( pTarget->uiFlags & CELL_MERC ) diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 8ae51471..0764b28e 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -708,6 +708,7 @@ extern CHAR16 gzUserDefinedButton1[ 128 ]; extern CHAR16 gzUserDefinedButton2[ 128 ]; extern BOOLEAN gfMilitiaPopupCreated; +extern BOOLEAN gfGodModeCheat; #ifdef JA2TESTVERSION extern INT16 MSYS_CurrentMX; @@ -7775,6 +7776,16 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) } } break; + case 'G': + if (fCtrl) + { + if (CHEATER_CHEAT_LEVEL()) + { + ScreenMsg(FONT_MCOLOR_RED, MSG_INTERFACE, gfGodModeCheat ? L"God mode deactivated." : L"God mode activated."); + gfGodModeCheat = !gfGodModeCheat; + } + } + break; case 'g': break; case 'h': diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 98dd2694..f6308fac 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -1713,6 +1713,7 @@ PaletteReplacementType *guipPaletteReplacements = NULL; extern BOOLEAN fReDrawFace; extern UINT8 gubWaitingForAllMercsToExitCode; BOOLEAN gfGetNewPathThroughPeople = FALSE; +BOOLEAN gfGodModeCheat = FALSE; // LOCAL FUNCTIONS // DO NOT CALL UNLESS THROUGH EVENT_SetSoldierPosition @@ -10315,6 +10316,12 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr } } } + + if (gfGodModeCheat && this->bTeam == OUR_TEAM) + { + sLifeDeduct = 0; + sBreathLoss = 0; + } // Deduct life!, Show damage if we want! bOldLife = this->stats.bLife; diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index dd8cb257..00b10641 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -218,6 +218,7 @@ extern int iWindowedMode; extern OBJECTTYPE *gpItemDescObject; extern BOOLEAN gfInItemStackPopup; extern BOOLEAN gfInKeyRingPopup; +extern BOOLEAN gfGodModeCheat; //Little functions called by keyboard input @@ -3512,7 +3513,12 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) case 'G': if( fCtrl ) - { + { + if (CHEATER_CHEAT_LEVEL()) + { + ScreenMsg(FONT_MCOLOR_RED, MSG_INTERFACE, gfGodModeCheat ? L"God mode deactivated." : L"God mode activated."); + gfGodModeCheat = !gfGodModeCheat; + } } else if ( gGameSettings.fOptions[TOPTION_GL_BURST_CURSOR] ) {