diff --git a/zscript/dvds-armor_resistance.zc b/zscript/dvds-armor_resistance.zc index 13b39d422..89cfdf961 100644 --- a/zscript/dvds-armor_resistance.zc +++ b/zscript/dvds-armor_resistance.zc @@ -8172,7 +8172,7 @@ class BaseFloraArmorItemZSC : ResistanceGrantingItem Super.PostBeginPlay(); } - override void Tick() + override void Tick() { int gfxeffectlvl = dvds_gfxeffectlevel; if (Owner == null) diff --git a/zscript/dvds-monsters.zc b/zscript/dvds-monsters.zc index 6165704e6..df8051c24 100644 --- a/zscript/dvds-monsters.zc +++ b/zscript/dvds-monsters.zc @@ -79,39 +79,13 @@ class AetheriusMonsterZSC : AetheriusBaseZSC } int glitterheight, glitterheight2, glitterwidth; - int CritChance; override void Tick() { - string ActorClass = self.GetClassName(); bullet_tracer_mode = dvds_monsterbulletstracers; levelbehavior = dvds_monsterlevelbehavior; gfxeffectlevel = dvds_gfxeffectlevel; if (self.health > 0 && CountInv("MonsterHasBuffs") == 0) { A_AetheriusStats(0); } - //***************************************************** - //**Allows Monsters to deal crits [4/256 base chance]** - //***************************************************** - // Base Chances - CritChance = 4; // 4 - CritChance += (user_monsterlevel / 22.5); // +4 every 90 levels - if (CountInv(LDLCheck)) CritChance *= 2; // Legendaries have double crit rate - - // Actor Checks - if (ActorClass == "DSLostSoul" || ActorClass == "DSLostSoul2") CritChance *= 4; // Lost Souls are Crit-happy nuisances - if (ActorClass == "NightmareNew" || ActorClass == "SirenNightmareNew") CritChance *= 4; // Nightmares are good at crits too - if (ActorClass == "SatyrNew") CritChance *= 8; // Satyrs are very likely to crit too - - // Final Crit Roll - if (random(1,256) <= CritChance && self.health > 0 && !(level.frozen || globalfreeze) && dvds_monstercrits != 0) - { - self.A_SetInventory("DealCriticalHit",1); - //Console.Printf("Has Crit Item", CritChance); - } - else - { - self.A_SetInventory("DealCriticalHit",0); - } - if (((gametic + (ActorRandomBits & 15)) & 15) == 1) { if (self.bFRIENDLY > 0 && self.health > 0 && !(level.frozen || globalfreeze)) @@ -302,16 +276,57 @@ class AetheriusMonsterZSC : AetheriusBaseZSC if (dvdsdebug_actordmgdisplays > 0 && damage > 0) Console.Printf(" (\czActor Defensive Input [STEP 2x - Player Dmg]\c-: \cxprefdmg = %d\c-, \cxprefrienddmg = %d\c-, \cxprecritdmg = %d\c-, \cxpreldldmg = %d\c-, \cydmg = %d\c-)", preplayerdmg, prefriendlydmg, precritdmg, preldldmg, damage); } else - if (enemyactor && damage > 0) + if (enemyactor && damage > 0 && dvds_monstercrits != 0) { // Dealing with Critical hits precritdmg = damage; - if (enemyactor.CountInv("DealCriticalHit") > 0) - { - damage *= critdmgmulti; - A_GiveInventory("TookCriticalHit",1); - dealtcrit = true; - if (dvdsdebug_actordmgdisplays > 0 && damage > 0) Console.Printf(" (\czActor Defensive Input [STEP 2b - Monster-Crit Dmg]\c-: \cxolddmg = %d\c-, \cydmg = %d\c-, \cacritdmgmulti = %3f\c-)", precritdmg, damage, critdmgmulti); + int CritRoll, CritChance; + string ActorClass = enemyactor.GetClassName(); + if (dvds_monstercrits != 0) + { + //***************************************************** + //**Allows Monsters to deal crits [4/256 base chance]** + //***************************************************** + // Base Chances + CritChance = 8 + (enemyactor.user_monsterlevel / 11.25); // 8 (+ 8 every 90 levels) + if (enemyactor && enemyactor.bBOSS) CritChance = (CritChance * 5) / 4; // Boss Flag Check + if (enemyactor && enemyactor.user_charmed > 0) CritChance = (CritChance * 5) / 4; // Charm Flag Check + if (enemyactor && enemyactor.user_legendaryevolved) CritChance *= 2; // Legendaries have double crit rate + + // Actor Checks + if (ActorClass == "DSHelperDog") CritChance *= 3; // Helper Dogs get triple crit rate + if (ActorClass == "DSPainElemental" || ActorClass == "FPainElemental" || ActorClass == "DSPainElemental64" || ActorClass == "DSLostSoul" || ActorClass == "DSLostSoul2" || ActorClass == "DSLostSoul64" || ActorClass == "DSLostSoul642" || + ActorClass == "FLostSoul1" || ActorClass == "FLostSoul2") CritChance *= 4; // Pain-Elementals/Lost Souls are Crit-happy nuisances + if (ActorClass == "DSDemon" || ActorClass == "DSDemon64" || ActorClass == "DSSpectre" || ActorClass == "DSSpectre64" || ActorClass == "BloodDemon" || ActorClass == "BloodSpectre" || + ActorClass == "FDemon" || ActorClass == "FSpectre" || ActorClass == "FBloodDemon" || ActorClass == "FBloodSpectre") CritChance = (CritChance * 6) / 4; // Pinkies have 50% more crit + if (ActorClass == "DSRevenant" || ActorClass == "FRevenant" || ActorClass == "DeathIncarnate" || ActorClass == "FDeathIncarnate") CritChance = (CritChance * 6) / 4; // Death Incarnates have 50% more crit + if (ActorClass == "ClinkNew" || ActorClass == "FClink") CritChance = (CritChance * 6) / 4; // SabreClaws have 50% more crit + if (ActorClass == "OStalkerNew") CritChance = (CritChance * 6) / 4; // Strife Stalkers have 50% more crit + if (ActorClass == "ChainsawZombieNew") CritChance = (CritChance * 10) / 4; // Chainsaw Zombies have 150% more crit + if (ActorClass == "NightmareNew" || ActorClass == "SirenNightmareNew") CritChance *= 4; // Nightmares are good at crits too + if (ActorClass == "EvilDeadHandNew" || ActorClass == "BabyClownNew" || + ActorClass == "BabyClown2New" || ActorClass == "BouncingClownNew") CritChance *= 4; + if (ActorClass == "SatyrNew") CritChance *= 8; // Satyrs are very likely to crit too + // Bpss Checks + if (ActorClass == "ClericBossNew" || ActorClass == "FighterBossNew" || ActorClass == "MageBossNew" || + ActorClass == "ProgrammerNew" || ActorClass == "StrifeBishopNew" || ActorClass == "LoremasterNew" || ActorClass == "Macil1New" || ActorClass == "StrifMacil2NeweBishopNew") CritChance *= 4; + if (ActorClass == "AlienSpectre1New" || ActorClass == "AlienSpectre2New" || ActorClass == "AlienSpectre3New" || ActorClass == "AlienSpectre4New" || ActorClass == "AlienSpectre5New" || + ActorClass == "AvatarNew" || ActorClass == "Benellus1DS" || ActorClass == "Benellus2DS" || ActorClass == "Benellus3DS" || + ActorClass == "TNTSpider" || ActorClass == "SourceGuardian" || ActorClass == "AdolfHitlerDS") CritChance *= 6; + if (ActorClass == "DSparilMountedNew" || ActorClass == "DSparilUnmountedNew" || ActorClass == "KoraxNew" || ActorClass == "PennywiseBoss" || + ActorClass == "EntityBossNew" || ActorClass == "EntitySecondNew" || ActorClass == "EntityAscended" || ActorClass == "ThamuzNew" || ActorClass == "TchernobogNew" || + ActorClass == "Magmantis") CritChance *= 8; + + // Final Crit Roll + CritRoll = random(1,512); + if (dvdsdebug_actordmgdisplays > 0 && damage > 0) Console.Printf(" (\czActor Defensive Input [Monster Crit Rate]\c-: %d / 512 (%d) \c-, \cyActorClass: = %s\c-)", CritRoll, CritChance, ActorClass); + if (CritRoll <= CritChance && enemyactor.health > 0 && !(level.frozen || globalfreeze) && dvds_monstercrits != 0) + { + damage *= critdmgmulti; + A_GiveInventory("TookCriticalHit",1); + dealtcrit = true; + if (dvdsdebug_actordmgdisplays > 0 && damage > 0) Console.Printf(" (\czActor Defensive Input [STEP 2b - Monster-Crit Dmg]\c-: \cxolddmg = %d\c-, \cydmg = %d\c-, \cacritdmgmulti = %3f\c-)", precritdmg, damage, critdmgmulti); + } } } diff --git a/zscript/dvds-playerclass.zc b/zscript/dvds-playerclass.zc index 8fdddd870..1cb4bf146 100644 --- a/zscript/dvds-playerclass.zc +++ b/zscript/dvds-playerclass.zc @@ -297,8 +297,53 @@ class AetheriusPlayerPawn : PlayerPawn double MonsterLevelIgnoreFactor; if (DVDSActor) MonsterLevelIgnoreFactor = (DVDSActor.user_monsterlevel * 0.00022223); int LegendaryIgnoreDefenseFactor = 0.5 - (CallACS("MiscVarCheckDECORATE",10057) * 0.05) - (CallACS("MiscVarCheckDECORATE",10058) * 0.125); + + //************************************* + //**Player Taking Crits from Monsters** + //************************************* int criticalhit = 0; - if (DVDSActor && dvds_monstercrits != 0) criticalhit = DVDSActor.CountInv("DealCriticalHit"); + int CritChance, CritRoll; + if (DVDSActor && dvds_monstercrits != 0) + { + string ActorClass = DVDSActor.GetClassName(); + //***************************************************** + //**Allows Monsters to deal crits [4/256 base chance]** + //***************************************************** + // Base Chances + CritChance = 8 + (DVDSActor.user_monsterlevel / 11.25); // 8 (+ 8 every 90 levels) + if (DVDSActor && DVDSActor.bBOSS) CritChance = (CritChance * 5) / 4; // Boss Flag Check + if (DVDSActor && DVDSActor.user_charmed > 0) CritChance = (CritChance * 5) / 4; // Charm Flag Check + if (DVDSActor && DVDSActor.user_legendaryevolved) CritChance *= 2; // Legendaries have double crit rate + + // Actor Checks + if (ActorClass == "DSHelperDog") CritChance *= 3; // Helper Dogs get triple crit rate + if (ActorClass == "DSPainElemental" || ActorClass == "FPainElemental" || ActorClass == "DSPainElemental64" || ActorClass == "DSLostSoul" || ActorClass == "DSLostSoul2" || ActorClass == "DSLostSoul64" || ActorClass == "DSLostSoul642" || + ActorClass == "FLostSoul1" || ActorClass == "FLostSoul2") CritChance *= 4; // Pain-Elementals/Lost Souls are Crit-happy nuisances + if (ActorClass == "DSDemon" || ActorClass == "DSDemon64" || ActorClass == "DSSpectre" || ActorClass == "DSSpectre64" || ActorClass == "BloodDemon" || ActorClass == "BloodSpectre" || + ActorClass == "FDemon" || ActorClass == "FSpectre" || ActorClass == "FBloodDemon" || ActorClass == "FBloodSpectre") CritChance = (CritChance * 6) / 4; // Pinkies have 50% more crit + if (ActorClass == "DSRevenant" || ActorClass == "FRevenant" || ActorClass == "DeathIncarnate" || ActorClass == "FDeathIncarnate") CritChance = (CritChance * 6) / 4; // Death Incarnates have 50% more crit + if (ActorClass == "ClinkNew" || ActorClass == "FClink") CritChance = (CritChance * 6) / 4; // SabreClaws have 50% more crit + if (ActorClass == "OStalkerNew") CritChance = (CritChance * 6) / 4; // Strife Stalkers have 50% more crit + if (ActorClass == "ChainsawZombieNew") CritChance = (CritChance * 10) / 4; // Chainsaw Zombies have 150% more crit + if (ActorClass == "NightmareNew" || ActorClass == "SirenNightmareNew") CritChance *= 4; // Nightmares are good at crits too + if (ActorClass == "EvilDeadHandNew" || ActorClass == "BabyClownNew" || + ActorClass == "BabyClown2New" || ActorClass == "BouncingClownNew") CritChance *= 4; + if (ActorClass == "SatyrNew") CritChance *= 8; // Satyrs are very likely to crit too + // Bpss Checks + if (ActorClass == "ClericBossNew" || ActorClass == "FighterBossNew" || ActorClass == "MageBossNew" || + ActorClass == "ProgrammerNew" || ActorClass == "StrifeBishopNew" || ActorClass == "LoremasterNew" || ActorClass == "Macil1New" || ActorClass == "StrifMacil2NeweBishopNew") CritChance *= 4; + if (ActorClass == "AlienSpectre1New" || ActorClass == "AlienSpectre2New" || ActorClass == "AlienSpectre3New" || ActorClass == "AlienSpectre4New" || ActorClass == "AlienSpectre5New" || + ActorClass == "AvatarNew" || ActorClass == "Benellus1DS" || ActorClass == "Benellus2DS" || ActorClass == "Benellus3DS" || + ActorClass == "TNTSpider" || ActorClass == "SourceGuardian" || ActorClass == "AdolfHitlerDS") CritChance *= 6; + if (ActorClass == "DSparilMountedNew" || ActorClass == "DSparilUnmountedNew" || ActorClass == "KoraxNew" || ActorClass == "PennywiseBoss" || + ActorClass == "EntityBossNew" || ActorClass == "EntitySecondNew" || ActorClass == "EntityAscended" || ActorClass == "ThamuzNew" || ActorClass == "TchernobogNew" || + ActorClass == "Magmantis") CritChance *= 8; + + // Final Crit Roll + CritRoll = random(1,512); + if (dvdsdebug_playerdmgdisplays > 0 && damage > 0) Console.Printf(" (\cz[STEP 1a] Monster Crit Rate\c-: %d / 512 (%d) \c-, \cyActorClass: = %s\c-)", CritRoll, CritChance, ActorClass); + if (CritRoll <= CritChance && DVDSActor.health > 0 && !(level.frozen || globalfreeze) && dvds_monstercrits != 0) criticalhit = 1; + } double dmgmulti = 2.0 + (0.01 * random(-10,10)); int defense; diff --git a/zscript/dvds-projectiles.zc b/zscript/dvds-projectiles.zc index fa3a385d4..4a3153619 100644 --- a/zscript/dvds-projectiles.zc +++ b/zscript/dvds-projectiles.zc @@ -210,13 +210,13 @@ class AetheriusProjectileZSC : AetheriusBaseProjectileZSC if (dvdsdebug_showmiscdmginformation && IsMonster) Console.Printf("PROJECTILE SPEED: \czXVelOld\c-: \cz%.4f\c-, \cyXVelNew\c-: \cy%.4f\c-, \czYVelOld\c-: \cz%.4f\c-, \cyYVelNew\c-: \cy%.4f\c-, \czZVelOld\c-: \cz%.4f\c-, \cyZVelNew\c-: \cy%.4f\c-, \cxSpeedMulti\c-: \cx%.4f\c-, \cwSpeedMulti2\c-: \cw%.4f\c-, \cvSpeedMulti3\c-: \cv%.4f\c-", basexvel, newxvel, baseyvel, newyvel, basezvel, newzvel, speedmulti, speedmulti2, speedmulti3); Super.PostBeginPlay(); // KEEP THIS HERE ELSE OTHER FUNCTIONS RELATED TO PostBeginPlay() BREAK :V } - +/* override void Tick() { if (dvdsdebug_showmiscdmginformation) Console.Printf("PROJECTILE SPEED: \cyXVel\c-: \cy%.4f\c-, \cyYVel\c-: \cy%.4f\c-, \cyZVelNew\c-: \cy%.4f\c-", vel.x, vel.y, vel.z); Super.Tick(); } - +*/ void A_PlayCrisisAtkSound () { A_PlaySound("crisisattack",6); @@ -1525,13 +1525,14 @@ class HealMissile : AetheriusProjectileZSC return -1; } - +/* override void Tick() { //if (tracer.bFRIENDLY) tracer = null; //This space for rent. super.Tick(); // KEEP THIS HERE ELSE OTHER FUNCTIONS RELATED TO THIS BREAK :V } +*/ } // Converts Monsters to Friendlys [base for items like Monster Munchies]