From d6f07a7ef52b7fe277cd85358dc8e1b9e7bc8cc0 Mon Sep 17 00:00:00 2001 From: Shadooow Date: Tue, 6 Jul 2021 19:06:23 +0000 Subject: [PATCH] godmode reworked: reused existing mechanism in code = same functionality, less code changes, also when enabled GOD MODE text will now show up in left corner in red color, this was already there I just uncommented it git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9128 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Cheats.h | 1 - SaveLoadGame.cpp | 1 - Strategic/Auto Resolve.cpp | 4 ++-- Strategic/Game Init.cpp | 2 -- Strategic/mapscreen.cpp | 12 ++++++++++-- Tactical/Soldier Control.cpp | 6 +++--- Tactical/Turn Based Input.cpp | 12 ++++++++++-- Tactical/Weapons.cpp | 7 +------ jascreens.cpp | 4 ++-- 9 files changed, 28 insertions(+), 21 deletions(-) diff --git a/Cheats.h b/Cheats.h index d3c9f4c8..8e683a7e 100644 --- a/Cheats.h +++ b/Cheats.h @@ -4,7 +4,6 @@ #include "Language Defines.h" extern UINT8 gubCheatLevel; -extern BOOLEAN gfGodModeCheat; // GLOBALS FOR CHEAT MODE...... #ifdef JA2TESTVERSION diff --git a/SaveLoadGame.cpp b/SaveLoadGame.cpp index 93f8759a..d1054395 100644 --- a/SaveLoadGame.cpp +++ b/SaveLoadGame.cpp @@ -6737,7 +6737,6 @@ BOOLEAN LoadSavedGame( int ubSavedGameID ) ACTIVATE_CHEAT_LEVEL(); else RESET_CHEAT_LEVEL(); - gfGodModeCheat = FALSE; #endif #ifdef JA2BETAVERSION diff --git a/Strategic/Auto Resolve.cpp b/Strategic/Auto Resolve.cpp index 96beb413..da548e23 100644 --- a/Strategic/Auto Resolve.cpp +++ b/Strategic/Auto Resolve.cpp @@ -4782,7 +4782,7 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget ) // WANNE: Why is impact here always set to 0? The impact was calculated a few lines before! //iImpact = 0; - if (gfGodModeCheat && pTarget->pSoldier->bTeam == OUR_TEAM) + if (gTacticalStatus.uiFlags & GODMODE && pTarget->pSoldier->bTeam == OUR_TEAM) { iImpact = 0; } @@ -5005,7 +5005,7 @@ void TargetHitCallback( SOLDIERCELL *pTarget, INT32 index ) break; } - if (gfGodModeCheat && pTarget->pSoldier->bTeam == OUR_TEAM) + if (gTacticalStatus.uiFlags & GODMODE && pTarget->pSoldier->bTeam == OUR_TEAM) { iNewLife = pTarget->pSoldier->stats.bLife; } diff --git a/Strategic/Game Init.cpp b/Strategic/Game Init.cpp index c2c386bd..dacd8005 100644 --- a/Strategic/Game Init.cpp +++ b/Strategic/Game Init.cpp @@ -104,7 +104,6 @@ extern BOOLEAN gfGamePaused; extern UNDERGROUND_SECTORINFO* FindUnderGroundSector( INT16 sMapX, INT16 sMapY, UINT8 bMapZ ); UINT8 gubCheatLevel = STARTING_CHEAT_LEVEL; -BOOLEAN gfGodModeCheat = FALSE; UINT8 gubScreenCount=0; @@ -1231,7 +1230,6 @@ void ReStartingGame() gubCheatLevel = STARTING_CHEAT_LEVEL; else gubCheatLevel = 0; - gfGodModeCheat = FALSE; } diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 42ffd2eb..3e41bb31 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -7780,8 +7780,16 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { if (CHEATER_CHEAT_LEVEL()) { - ScreenMsg(FONT_MCOLOR_RED, MSG_INTERFACE, gfGodModeCheat ? L"God mode deactivated." : L"God mode activated."); - gfGodModeCheat = !gfGodModeCheat; + if (gTacticalStatus.uiFlags & GODMODE) + { + //ScreenMsg(FONT_MCOLOR_RED, MSG_INTERFACE, L"God mode deactivated."); + gTacticalStatus.uiFlags &= (~GODMODE); + } + else + { + //ScreenMsg(FONT_MCOLOR_RED, MSG_INTERFACE, L"God mode activated."); + gTacticalStatus.uiFlags |= GODMODE; + } } } break; diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 4b49fbb1..43e81b7c 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -5873,7 +5873,7 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 UINT8 ubCombinedLoss, ubVolume, ubReason; // SOLDIERTYPE * pNewSoldier; - if (gfGodModeCheat && this->bTeam == OUR_TEAM) + if (gTacticalStatus.uiFlags & GODMODE && this->bTeam == OUR_TEAM) { sDamage = 0; ubSpecial = FIRE_WEAPON_NO_SPECIAL; @@ -6722,7 +6722,7 @@ void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sD // MAYBE CHANGE TO SPECIAL ANIMATION BASED ON VALUE SET BY DAMAGE CALCULATION CODE // ALL THESE ONLY WORK ON STANDING PEOPLE - if ( !(pSoldier->flags.uiStatusFlags & SOLDIER_MONSTER) && gAnimControl[pSoldier->usAnimState].ubEndHeight == ANIM_STAND && (!gfGodModeCheat || pSoldier->bTeam != OUR_TEAM)) + if ( !(pSoldier->flags.uiStatusFlags & SOLDIER_MONSTER) && gAnimControl[pSoldier->usAnimState].ubEndHeight == ANIM_STAND && (!(gTacticalStatus.uiFlags & GODMODE) || pSoldier->bTeam != OUR_TEAM)) { if ( gAnimControl[pSoldier->usAnimState].ubEndHeight == ANIM_STAND ) { @@ -10322,7 +10322,7 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr } } - if (gfGodModeCheat && this->bTeam == OUR_TEAM) + if (gTacticalStatus.uiFlags & GODMODE && this->bTeam == OUR_TEAM) { sLifeDeduct = 0; sBreathLoss = 0; diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index 3365ad35..09d48545 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -3516,8 +3516,16 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) { if (CHEATER_CHEAT_LEVEL()) { - ScreenMsg(FONT_MCOLOR_RED, MSG_INTERFACE, gfGodModeCheat ? L"God mode deactivated." : L"God mode activated."); - gfGodModeCheat = !gfGodModeCheat; + if (gTacticalStatus.uiFlags & GODMODE) + { + //ScreenMsg(FONT_MCOLOR_RED, MSG_INTERFACE, L"God mode deactivated."); + gTacticalStatus.uiFlags &= (~GODMODE); + } + else + { + //ScreenMsg(FONT_MCOLOR_RED, MSG_INTERFACE, L"God mode activated."); + gTacticalStatus.uiFlags |= GODMODE; + } } } else if ( gGameSettings.fOptions[TOPTION_GL_BURST_CURSOR] ) diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 7c39400c..715b8bae 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -8320,7 +8320,7 @@ INT32 BulletImpact( SOLDIERTYPE *pFirer, BULLET *pBullet, SOLDIERTYPE * pTarget, } } - if (iImpactForCrits > 0 && iImpactForCrits < pTarget->stats.bLife && !(pTarget->flags.uiStatusFlags & SOLDIER_MONSTER) && !(pTarget->flags.uiStatusFlags & SOLDIER_VEHICLE)) // not to monsters - SANDRO + if (iImpactForCrits > 0 && iImpactForCrits < pTarget->stats.bLife && !(pTarget->flags.uiStatusFlags & SOLDIER_MONSTER) && !(pTarget->flags.uiStatusFlags & SOLDIER_VEHICLE) && (!(gTacticalStatus.uiFlags & GODMODE) || pTarget->bTeam != OUR_TEAM)) { UINT32 uiCritChance = 0; if (fFragment) @@ -8342,11 +8342,6 @@ INT32 BulletImpact( SOLDIERTYPE *pFirer, BULLET *pBullet, SOLDIERTYPE * pTarget, } } - if (gfGodModeCheat && pTarget->bTeam == OUR_TEAM) - { - uiCritChance = 0;//no crit against player in god mode either - } - // SANDRO - with new traits, the chance for stat loss is higher as we are now able to repair it if ((PreRandom( uiCritChance ) + 1) > (UINT8)(gGameOptions.fNewTraitSystem ? gSkillTraitValues.ubDamageNeededToLoseStats : CRITICAL_HIT_THRESHOLD)) { diff --git a/jascreens.cpp b/jascreens.cpp index cb42d6bc..8b0a3f4b 100644 --- a/jascreens.cpp +++ b/jascreens.cpp @@ -173,8 +173,8 @@ void DisplayFrameRate( ) SetFont( SMALLFONT1 ); SetFontBackground( FONT_MCOLOR_BLACK ); SetFontForeground( FONT_MCOLOR_DKRED ); - //gprintfdirty( 0, 0, L"GOD MODE" ); - //mprintf( 0, 0, L"GOD MODE" ); + gprintfdirty( 0, 0, L"GOD MODE" ); + mprintf( 0, 0, L"GOD MODE" ); } if ( ( gTacticalStatus.uiFlags & DEMOMODE ) )