From dd9c6b1f3ec34a2710c906523698f04069ba4c2c Mon Sep 17 00:00:00 2001 From: Sevenfm Date: Fri, 30 Oct 2020 17:55:11 +0000 Subject: [PATCH] ArtilleryStrike: supply GetArtilleryLaunchParams with launcher item and not just mortar shell, as it will check it's range later. Add smoke after explosion: improved code. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8913 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Weapons.cpp | 8 +++++++- TileEngine/Explosion Control.cpp | 29 +++++++++++------------------ 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 5c13734d1..faa52c561 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -11893,8 +11893,14 @@ BOOLEAN ArtilleryStrike( UINT16 usItem, UINT8 ubOwnerID, UINT32 usStartingGridNo OBJECTTYPE shellobj; CreateItem( usItem, 100, &shellobj ); + // sevenfm: find launcher for usItem + UINT16 usLauncher = GetLauncherFromLaunchable(usItem); + if (usLauncher == NOTHING) + return FALSE; + // Get basic launch params... - if (!GetArtilleryLaunchParams(usStartingGridNo, sTargetGridNo, ubLevel, sStartZ, sEndZ, usItem, &shellobj, &dForce, &dDegrees)) + // sevenfm: we need to supply GetArtilleryLaunchParams with launcher item and not just mortar shell, as it will check it's range later + if (!GetArtilleryLaunchParams(usStartingGridNo, sTargetGridNo, ubLevel, sStartZ, sEndZ, usLauncher, &shellobj, &dForce, &dDegrees)) return FALSE; // Get XY from gridno diff --git a/TileEngine/Explosion Control.cpp b/TileEngine/Explosion Control.cpp index 816bff9fd..dd241345d 100644 --- a/TileEngine/Explosion Control.cpp +++ b/TileEngine/Explosion Control.cpp @@ -404,26 +404,19 @@ void InternalIgniteExplosion( UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 // sevenfm: add smoke effect, only for normal explosions if (gGameExternalOptions.bAddSmokeAfterExplosion && - !Water(sGridNo, bLevel)) + (bLevel == 0 || IsRoofPresentAtGridNo(sGridNo)) && + !Water(sGridNo, bLevel) && + GridNoOnVisibleWorldTile(sGridNo) && + Explosive[Item[usItem].ubClassIndex].ubType == 0 && + Item[usItem].usBuddyItem == 0 && + Explosive[Item[usItem].ubClassIndex].ubDamage > 20) { - if (Explosive[Item[usItem].ubClassIndex].ubType == 0 && - Item[usItem].usBuddyItem == 0 && - Explosive[Item[usItem].ubClassIndex].ubDamage > 20) - { - NewSmokeEffect(sGridNo, SMOKE_GRENADE, bLevel, ubOwner, 0, 2, 1); - } + UINT16 usSmokeItem = SMOKE_GRENADE; + if (HasItemFlag(usItem, JUMP_GRENADE)) + NewSmokeEffect(sGridNo, usSmokeItem, bLevel, ubOwner, 0, 1, 0); + else + NewSmokeEffect(sGridNo, usSmokeItem, bLevel, ubOwner, 0, 2, 1); } - - // sevenfm: add light for fire and signal effects - /*if (gGameExternalOptions.bAddLightAfterExplosion && - ((gubEnvLightValue >= NORMAL_LIGHTLEVEL_NIGHT - 3) || gbWorldSectorZ) && - (Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_BURNABLEGAS || Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_SIGNAL_SMOKE) && - bLevel == 0 && - !Water(sGridNo, bLevel)) - { - // add light - NewLightEffect(sGridNo, (UINT8)Explosive[Item[usItem].ubClassIndex].ubDuration + Explosive[Item[usItem].ubClassIndex].ubRadius - Explosive[Item[usItem].ubClassIndex].ubStartRadius, (UINT8)Explosive[Item[usItem].ubClassIndex].ubRadius + 1); - }*/ }