Sorry for my long missing, but ALL my PCs was suddenly broken in the one damned week... x_x But now everything is ok.
Well it's time to catch up.
Spoiler: And it's time for some Angry Boobs. ;)
Just check the first post.
Also there an some related sprites update:
Andariel sprites updated, sprites for Poison Bolt and Fire Pillar also added.
old new
old new
Spoiler: closest wana-TODO-list
1. Duriel actor
2. Greater mummy\Radament set (actor+sprites+sfx)
3. Scarab set OR
3. D1 Hidden actor OR
3. Regurgitator actor OR
4. Baal set maybe OR
4. A some new monster sprites
5. Abyss Knight set OR
5. Oblivion Knight set
Besides, STUN and HOLY FREEZE aura overlay sprites was added into the Duriel sprites pack.
Unfortunately Du's sprites are still have a very bad layout; I guess what there is nothing to deal with it, aside from sprites editing. As like as with lot of others cool Di2 monsters (Regurgitators, Vile Mothers, Defilers, Maggots, etc.), whose are oriented in length rather than in height. :\
Note:
Achmel (Greater Mummy) and Radament have a bit different sprites, but their actors are different too. Achmel is much stronger in general. Pay attention for INFO lumps.
D2 Achmel (Greater Mummy)
D2 Radament
Hope that will be more Undeads here in the nex time.
ACTORS GLOBAL UPDATE v.1.1:
=============================== Andariel:
1. MissileHeight fixed.
2. "MeleePDoT" attacks fixed.
3. "MeleePDoT" attacks isn't spawned missiles anymore but warped to, therefore it precise and melee-range limited now.
4. +NOICEDEATH added.
5. "PoisonSprayMissile" are scaled up.
6. "PoisonSprayMissile" is +RIPPER now.
7. "PoisonSprayMissile" poisoning radius decreased from 64 to 40.
8. "Death" state and "FirePillar" animation fixed.
9. "Poison Bolt" scale changed, also its trail turned off.
10. +FORCEXYBILLBOARD added.
11. Overall code optimization.
-------------------------------- Butcher:
1. "Stun" revorked.
2. "Charge" jump-out states fixed.
3. "Stun", "Slow" and "Critical Strike" are warped to, therefore it precise and melee-range limited now.
4. Attack animation missed frames fixed.
5. +FORCEXYBILLBOARD added.
6. "Bleed" damagetype changed to "Bleed".
7. "Criticals" now cause LOT of blood.
8. +NOICEDEATH added.
9. Some junk removed.
10. Overall code optimization.
-------------------------------- Cow King:
1. Ice death fixed.
2. Some junk removed.
3. +FORCEXYBILLBOARD added.
4. "ShockHit" attacks aren't spawned missiles anymore but warped to, therefore it precise and melee-range limited now.
5. "Lightning Aura" revamped.
6. "ShockHit" attacks now work in lowwater.
7. Overall code optimization.
-------------------------------- Diablo (Hellfire):
1. "Apocalypse" cast goes via A_VileTarget, but its damage is range correlated now.
2. Some junk removed.
3. +FORCEXYBILLBOARD added.
4. +NOICEDEATH added.
--------------------------------
Diablo (LoD): TBFixed
-------------------------------- Duriel:
1. "IceHit" and "Stun" attacks aren't spawned missiles anymore but warped to, therefore it precise and melee-range limited now.
2. Finaly fixed "Charge" - actor doesn't get stuck anymore! Also momentum stop added.
3. "Stun" revorked, no more annoying timefreeze.
4. Attack, "Jab" and "Charge" animation fixed.
5. "Mass Stun" now works only after charge-stun.
6. Projectiles deflecting now works after each stun.
7. +NOICEDEATH added.
8. +FORCEXYBILLBOARD added.
-------------------------------- Frenzytaurы:
1. Elemental attacks aren't spawned missiles anymore but warped to, therefore it precise and melee-range limited now.
2. "Raise" state added.
3. Melee5,6 patterns optimized and reduced.
4. Frenzy overlay removes after icy death now.
5. GLDEFS lights fixed and "FireHit" light added.
6. +FORCEXYBILLBOARD added.
-------------------------------- Greater Mummies (Achmel):
1. Fixed mass revive, now Reanimateds can be raised within mass raise radius.
2. Fixed Poison Aura zoffset - now it can work in lowwater.
3. Totally revamped necromancy mechanics - now it based on A_RadiusGive+A_CheckProximity, so they can find a corpse in any mess. Now it REALLY POWERFUL Necromancy!
4. Slightly redused walking speed, so they are more ranged now.
5. "Pulsar" a bit scaled-up.
6. Base "Unholy" missiles speed increased from 23,75 to 33,75.
7. "Unholy" missiles height reduced to 10 for avoiding "dead" missile bug.
8. Fixed "PoisonBreathCloud" cast offset.
9. +FORCEXYBILLBOARD added.
--------------------------------
Mephisto: TBFixed
-------------------------------- Radament:
1. Totally revamped necromancy mechanics - now it based on A_RadiusGive+A_CheckProximity, so he can find a corpse in any mess. Now it REALLY POWERFUL Necromancy!
2. Fixed "PoisonBreathCloud" cast offset.
3. +FORCEXYBILLBOARD added.
-------------------------------- Reanimateds:
1. Fixed "Death" state, so:
a) they can be raised by Achmel AND
b) their corpses can't be squashed anymore by standing on them while they are rests for new round.
c) projectiles can pass over their restin bodies.
2. DeathHeigh property added for successfully execution of 1.b)
3. Added melee-hit\-miss sounds for common attacks.
4. Reduced auto-reviving chances:
a) 2nd - from 75 to 50
b) 3rd - from 50 to 25
5. Fixed "Stun" animation in lowwater.
6. When highly charged, can run through undeads now. Because it's funny.
7. Finaly fixed "Charge" - actor doesn't get stuck anymore! Also momentum stop added.
8. Min. range for "Charge" increased from 160 to 192.
9. +FORCEXYBILLBOARD added.
_D2_Reanimated Horde sfx pack also updated.
--------------------------------
Each actor's changelog placed in UPDATES lump.
Meph and Diablo (LoD) actors will be updated with the next monsters release.
i had to disable the RH... After testing it, in a level the level's frame rate dropped to 3 FPS.. I'm trying to find a way to make them work without a framerate drop.
As you wish, you're the boss.
But if you want to try to fix it then show me the decorate please, looks like you did broke a something, because when I tested the wad there is wasn't any lags even with lots of RHs on a map.
Void Weaver wrote:As you wish, you're the boss.
But if you want to try to fix it then show me the decorate please, looks like you did broke a something, because when I tested the wad there is wasn't any lags even with lots of RHs on a map.
Spoiler:
Actor RH 31626
{
Monster
//+BOSS //Only for Pindleskin boss
+FLOORCLIP
+JUMPDOWN
+DROPOFF
+FORCEXYBILLBOARD
+BLOODSPLATTER
//+DONTMORPH //Only for Pindleskin boss
+CAUSEPAIN
+MISSILEMORE
//+MISSILEEVENMORE //For higher kinds of them
+FORCERADIUSDMG
+DONTHARMSPECIES
Species "Undead"
Health 1000
Radius 25
Height 60
DeathHeight 60 //Need for solid corpse - that prevent it from "step-crushing"
Mass 1800
Speed 10
Scale 1.0
PainChance 64
MaxStepHeight 50
MaxDropOffHeight 100
DamageFactor Fire, 2.0
DamageFactor Ice, 0.0
Tag "Reanimated Horde"
DamageFactor Electric, 1.0
DamageFactor Lightning, 1.5
DamageFactor Poison, 0.22
DamageFactor Arcane, 0.9 //For WoC-based
DamageFactor Shadow, 0.9 //For WoC-based
DamageFactor Holy, 4.0 //For WoC-based
DamageFactor Physical, 0.5
DamageFactor Melee, 0.5
DamageFactor None, 2
AttackSound "Reanimated/Attack"
ActiveSound "Reanimated/Idle"
PainSound "Reanimated/GetHit"
DeathSound "Reanimated/Die"
//MinMissileChance 128
Meleerange 96
MaxTargetRange 2048
DropItem "Cell", 255, 20
DropItem "PhoenixRodAmmo", 255, 5
var int user_chrgdmg; //Charge damage counter-multiplier
var int user_CLOFangle; //CheckLOF angle counter
States
{
Spawn:
RHIL A 0 NoDelay A_Jump(32,"DeathWait") //50% chance to be spawned as "dead" body
SpawnTrue:
RHIL ABCDEFGHIJK 4 A_LookEx(0,0,0,0,360,"See")
RHIL A 0 ACS_NamedExecuteAlways("WOC Monster Init",0,70,0)
Idle:
RHIL ABCDEFGHIJK 4 A_LookEx(0,0,0,0,360,"See")
Loop
DeathWait:
RHDT N 0 A_ChangeFlag("NONSHOOTABLE",1) //Now projectiles can pass over their resting bodies
RHDT N 0 A_ChangeFlag("SHOOTABLE",0) //Can't be damaged while resting
RHDT N 1 A_CheckProximity("Awake","PlayerPawn",640.0,1,CPXF_ANCESTOR|CPXF_CHECKSIGHT) //Raises as soon as any type of Player class near
Loop
Awake:
RHDT N random(175,350) //Wait between 5-10 seconds before rising
RHDT N 0 A_ChangeFlag("CORPSE",1)
RHDT N -1 Thing_Raise(0)
Stop
Melee:
TNT1 A 0 A_Jump(256,"MeleeRight","MeleeUp")
MeleeRight:
RHAR ABCD 2 A_FaceTarget
RHAR E random(1,2) A_CustomMeleeAttack(random(12,33),"Reanimated/Hit","Reanimated/Swing")
RHAR E 0 A_Jump(192,5) //25% chance to cast Stun when hit target
RHAR E 0 A_JumpIfTargetOutsideMeleeRange(4) //Stun wouldn't activates if target out of melee range
RHAR E 0 A_VileTarget("Stun")
RHAR E 0 A_PlaySound("Reanimated/Stun",0,1.0,False,ATTN_NORM)
RHAR E 0 A_RadiusThrust(2000,Meleerange+1,RTF_NOIMPACTDAMAGE|RTF_NOTMISSILE,Meleerange+1)
RHAR FGHIJKL 2
Goto See
MeleeUp:
RHAT AB 2 A_FaceTarget
RHAT C random(1,2) A_CustomMeleeAttack(random(15,27),"Reanimated/Hit","Reanimated/Swing")
RHAT C 0 A_Jump(160,5) //37,5% chance to cast Stun when hit target
RHAT C 0 A_JumpIfTargetOutsideMeleeRange(4) //No stun cast if target outside melee range
RHAT C 0 A_VileTarget("Stun")
RHAT C 0 A_PlaySound("Reanimated/Stun",0,1.0,False,ATTN_NORM)
RHAT C 0 A_RadiusThrust(2000,Meleerange+1,RTF_NOIMPACTDAMAGE|RTF_NOTMISSILE,Meleerange+1)
RHAT DEFGHIJKL 2
Goto See
Missile:
TNT1 A 0 A_JumpifCloser(Radius+192.0,"See")
Charge: //Yep, it fixed now. No more sudden stuck.
RHRN A 0 A_ChangeFlag("NOPAIN",1)
RHRN A 0 A_SetUserVar("user_chrgdmg",0) //assignment of uservar damage multiplier initial value
StepA: //Mechanics core is RADIAL checkLOF in EACH frame which you want to check. It's massive, but very effective.
RHRN A 2 Fast A_FaceTarget
RHRN A 2 Bright A_Recoil(-5)
RHRN A 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+1) //uservar damage multiplier increasement per distance
TNT1 A 0 A_SetUserVar("user_CLOFangle",0) //setting of uservar initial value
CLOFCircleA:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0) //uservar assignment to CheckLOF angle
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1) //1 degree uservar increasement
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepB") //360 degrees uservar check, then jumping out of loop
Goto CLOFCircleA
StepB:
RHRN B 0 A_FaceTarget
RHRN B 2 Bright A_Recoil(-5.5)
RHRN B 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+2)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleB:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepC")
Goto CLOFCircleB
StepC:
RHRN C 0 A_FaceTarget
RHRN C 2 Bright A_Recoil(-6)
RHRN C 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+3)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleC:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepD")
Goto CLOFCircleC
StepD:
RHRN D 0 A_FaceTarget
RHRN D 2 Bright A_Recoil(-6.5)
RHRN D 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+4)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleD:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepE")
Goto CLOFCircleD
StepE:
RHRN E 0 A_FaceTarget
RHRN E 2 Bright A_Recoil(-7)
RHRN E 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+5)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleE:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepF")
Goto CLOFCircleE
StepF:
RHRN F 0 A_FaceTarget
RHRN F 2 Bright A_Recoil(-7.5)
RHRN F 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+6)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleF:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepG")
Goto CLOFCircleF
StepG:
RHRN G 0 A_FaceTarget
RHRN G 2 Bright A_Recoil(-8)
RHRN G 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+7)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleG:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepH")
Goto CLOFCircleG
StepH:
RHRN H 0 A_FaceTarget
RHRN H 2 Bright A_Recoil(-8.5)
RHRN H 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+8)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleH:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepI")
Goto CLOFCircleH
StepI:
RHRN I 0 A_FaceTarget
RHRN I 2 Bright A_Recoil(-9)
RHRN I 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+9)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleI:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepJ")
Goto CLOFCircleI
StepJ:
RHRN J 0 A_FaceTarget
RHRN J 2 Bright A_Recoil(-9.5)
RHRN J 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+10)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleJ:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepK")
Goto CLOFCircleJ
StepK:
RHRN K 0 A_FaceTarget
RHRN K 2 Bright A_Recoil(-10)
RHRN K 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+10)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleK:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"ChargeRUN")
Goto CLOFCircleK
ChargeRUN:
RHRN A 0 A_SetTranslucent(0.6,0)
RHRN A 0 A_ChangeFlag("THRUSPECIES",1) //Undead-walkthrough
StepAl:
//RHRN A 0 A_FaceTarget //Активированные А_ФэйсТаргет в цикле делает чардж практически неизбежным!
RHRN A 2 Bright A_Recoil(-10)
RHRN A 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+10)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleAl:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepBl")
Goto CLOFCircleAl
StepBl:
//RHRN B 0 A_FaceTarget
RHRN B 2 Bright A_Recoil(-10)
RHRN B 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+10)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleBl:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepCl")
Goto CLOFCircleBl
StepCl:
//RHRN C 0 A_FaceTarget
RHRN C 2 Bright A_Recoil(-10)
RHRN C 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+10)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleCl:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepDl")
Goto CLOFCircleCl
StepDl:
//RHRN D 0 A_FaceTarget
RHRN D 2 Bright A_Recoil(-10)
RHRN D 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+10)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleDl:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepEl")
Goto CLOFCircleDl
StepEl:
//RHRN E 0 A_FaceTarget
RHRN E 2 Bright A_Recoil(-10)
RHRN E 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+10)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleEl:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepFl")
Goto CLOFCircleEl
StepFl:
//RHRN F 0 A_FaceTarget
RHRN F 2 Bright A_Recoil(-10)
RHRN F 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+10)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleFl:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepGl")
Goto CLOFCircleFl
StepGl:
//RHRN G 0 A_FaceTarget
RHRN G 2 Bright A_Recoil(-10)
RHRN G 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+10)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleGl:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepHl")
Goto CLOFCircleGl
StepHl:
//RHRN H 0 A_FaceTarget
RHRN H 2 Bright A_Recoil(-10)
RHRN H 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+10)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleHl:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepIl")
Goto CLOFCircleHl
StepIl:
//RHRN I 0 A_FaceTarget
RHRN I 2 Bright A_Recoil(-10)
RHRN I 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+10)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleIl:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepJl")
Goto CLOFCircleIl
StepJl:
//RHRN J 0 A_FaceTarget
RHRN J 2 Bright A_Recoil(-10)
RHRN J 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+10)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleJl:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS|CLOFF_ALLOWNULL|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepKl")
Goto CLOFCircleJl
StepKl:
//RHRN K 0 A_FaceTarget
RHRN K 2 Bright A_Recoil(-10)
RHRN K 0 A_SetUserVar("user_chrgdmg",user_chrgdmg+10)
TNT1 A 0 A_SetUserVar("user_CLOFangle",0)
CLOFCircleKl:
TNT1 A 0 A_CheckLOF("ChargeEND",CLOFF_JUMPENEMY|CLOFF_JUMPFRIEND|CLOFF_JUMPOBJECT|CLOFF_JUMPNONHOSTILE|CLOFF_MUSTBESOLID|CLOFF_JUMP_ON_MISS/*|CLOFF_ALLOWNULL*/|CLOFF_CHECKPARTIAL,Radius+25,0,user_CLOFangle,0,20,0,AAPTR_DEFAULT,0)
TNT1 A 0 A_SetUserVar("user_CLOFangle",user_CLOFangle+1)
TNT1 A 0 A_JumpIf(user_CLOFangle==360,"StepAl")
Goto CLOFCircleKl
ChargeEND:
RHAT A 0 Thing_Stop(0)
RHAT AB 1 Bright A_FaceTarget
RHAT C 0 A_PlaySound("Reanimated/Bash",0,1.0,False,ATTN_NORM)
RHAT C 1 Bright A_Explode(15+(random(2.82,3.56)*user_chrgdmg),65,XF_NOTMISSILE,0,65) //Надо сбалансировать урон...
RHAT C 0 A_SetTranslucent(1.0,0)
RHAT C 0 A_Jump(96,5) //62,5% chance to cast Stun when hit target
RHAT C 0 A_JumpIfTargetOutsideMeleeRange(4)
RHAT C 0 A_VileTarget("Stun")
RHAT C 0 A_PlaySound("Reanimated/Stun",0,1.0,False,ATTN_NORM)
RHAT C 0 A_RadiusThrust(250*user_chrgdmg,Meleerange+10,RTF_NOIMPACTDAMAGE|RTF_NOTMISSILE,Meleerange+10) //Также нужна балансировка...
RHAT DEFGHIJKL 1
TNT1 A 0 A_ChangeFlag("NOPAIN",0)
TNT1 A 0 A_ChangeFlag("THRUSPECIES",0) //But can get stuck into one of mates
Goto See
Pain:
RHGH A 0 A_Pain
RHGH ABCDEF 1
Goto See
Raise:
RHRE A 0 A_PlaySound("Reanimated/Up",0,1.0,False,ATTN_NORM)
RHRE A 0 A_ChangeFlag("NONSHOOTABLE",0)
RHRE A 0 A_ChangeFlag("NOPAIN",1)
RHRE ABCDEFGHIJKLMNO 3
RHRE O 0 A_ChangeFlag("NOPAIN",0)
Goto See
Death:
RHDT A 0 A_SetTranslucent(1.0,0)
RHDT A 0 A_ChangeFlag("NONSHOOTABLE",1) //Now projectiles can pass over their resting bodies
RHDT A 0 A_ChangeFlag("CORPSE",0) //They can't be DIRECTLY revived, but Achmel can raise them by radius revive
RHDT A 0 A_Scream
RHDT ABCDEFGHIJKLM 3
RHDT N 0 A_NoBlocking //Here they are provides loot drop
RHDT N 0 A_ChangeFlag("SOLID",1) //Here they are return SOLID for safety
RHDT N 0 A_JumpIfInventory("RaiseMark",3,"FinalDeath") //Final death
RHDT N 0 A_JumpIfInventory("RaiseMark",2,4) //3rd raise 50% chance
RHDT N 0 A_JumpIfInventory("RaiseMark",1,2) //2nd raise 75% chance
RHDT N 0 A_Jump(256,3) //1st raise 100% chance
RHDT N 0 A_Jump(128,"FinalDeath") //2nd raise 50% chance
Goto Death+22
RHDT N 0 A_Jump(192,"FinalDeath") //3rd raise 25% chance
Goto Death+22
RHDT N random(175,350)
RHDT N 0 A_GiveInventory("RaiseMark",1) //Death counter
RHDT N 0 A_ChangeFlag("CORPSE",1)
RHDT N -1 Thing_Raise(0)
FinalDeath:
RHDT N 0 A_ChangeFlag("SOLID",0) //Here they are finaly RIP
RHDT N -1
Stop
XDeath:
Goto RH::Death
Ice:
"----" A 5 A_GenericFreezeDeath
"----" A 1 A_FreezeDeathChunks
Wait
}
}
Actor RaiseMark : Inventory
{Inventory.MaxAmount 3}
//---Universal stun mechanics without +NOTIMEFREEZE---//
Actor Stun
{
+FORCEPAIN //Need for stun monsters
+RIPPER //Need for stun monsters and players
Projectile
Height 5
Radius 5
Damage 0
ReactionTime 28 //Total stun duration
States
{
Spawn:
TNT1 A 0 NoDelay Thing_Stop(0) //Stoping momentum
TNT1 A 0 A_GiveInventory("StunSpawner",1,AAPTR_TRACER)
Spawnn:
TNT1 A 0 A_Countdown
TNT1 A 1 A_Warp(AAPTR_TRACER,0,0,0,0,WARPF_NOCHECKPOSITION|WARPF_COPYINTERPOLATION)
Loop
Death:
TNT1 A 0 A_GiveInventory("StunRemover",1,AAPTR_TRACER)
Stop
}
}
//Поскольку SetPlayerProperty не может быть вызвана игроком
//непосредственно из снаряда, то вводим следующие кастоминвентори активаторы
Actor StunSpawner : CustomInventory
{
+INVENTORY.ALWAYSPICKUP
Inventory.MaxAmount 0
States
{
Spawn:
TNT1 A 1
Loop
Pickup:
TNT1 A 0 A_SpawnItemEx("StunEffect",0,0,20,0,0,0,0,SXF_NOCHECKPOSITION|SXF_SETTRACER)
TNT1 A 0 SetPlayerProperty(0,1,PROP_TOTALLYFROZEN) //Turning off player's control
Stop
}
}
Actor StunRemover : StunSpawner
{
States
{
Pickup:
TNT1 A 0 SetPlayerProperty(0,0,PROP_TOTALLYFROZEN)
Stop
}
}
//Just visual effect of stun
Actor StunEffect
{
//+NOTIMEFREEZE
+BRIGHT
+RIPPER
Projectile
Height 2
Radius 2
Damage 0
ReactionTime 3 //Visual sprites synchronization to stun duration - 12 frames(tics) per 1 loop
Scale 1.0
Renderstyle Add
Alpha 1.0
States
{
Spawn:
STUN A 0 A_Countdown
STUN ABCDEFGHIJKL 1 A_Warp(AAPTR_TRACER,0,0,25,0,WARPF_NOCHECKPOSITION|WARPF_COPYINTERPOLATION)
Loop
Death:
TNT1 A 0
Stop
}
}
Wow, there is unnecessary to post whole code, I just asked about yours editings. ))
Meanwhile I tested your variant and mine original one on GZDoom 3.6.0: 100+ RHs doesn't cause any lags during 15+ minutes of gameplay, nor while they idle, nor while they active. But in your variant are placed a two potentially significant lines:
a) Tag "Reanimated Horde" //I dunno what are connected to this Tag in your case
b) RHIL A 0 ACS_NamedExecuteAlways("WOC Monster Init",0,70,0) //I also dunno what does it WoC script
Well, since I can't check it I want ask you for a few questions:
1. On which port those lags appears? Only on Zandro or on GZDoom too?
2. Are you sure in the fact that Reanimateds indeed are cause lags?
3. Had are you tried my original code without your editings? It's laggy too?
4. Which amount of them does initiate lags? Less of 10 or more of 100?
5. In which state Reanimateds are when those lags begins? Spawn, Idle, Attack or after\during Death?
Btw,
a) DamageFactor Electric, 1.0 //Needless, since WoC operates only with "Lightning" DamageType
b)
DropItem "Cell", 255, 20 //Both lines are needless too, I use it only for testin auto-revive chances
DropItem "PhoenixRodAmmo", 255, 5 //Both lines are needless too, I use it only for testin auto-revive chances
c)
Idle: //Needless state and line in our case
RHIL ABCDEFGHIJK 4 A_LookEx(0,0,0,0,360,"See") //Needless state and line in our case
d) RHAT C 1 Bright A_Explode(15+(random(2.82,3.56)*user_chrgdmg),65,XF_NOTMISSILE,0,65) //Here should be frandom(2.82,3.56) OR random(2,3), that's my misstep.
e) CLOFCircleKl:
TNT1 A 0 A_CheckLOF //Need to delete block-quotes around CLOFF_ALLOWNULL
An small fix-update for Reanimateds, hope that they works correctly at last...
Reanimateds:
//===Version 1.3===//
1. Fixed being SOLID bug during autorevive in "Death" state.
2. Fixed being SOLID bug while in "DeathWait" state.
3. Fixed COUNTKILL bug.
4. Code is cleaned up a bit.
//===Version 1.2===//
1. Fixed autorevive bug in "Death" state.
Void Weaver wrote:An small fix-update for Reanimateds, hope that they works correctly at last...
Reanimateds:
//===Version 1.3===//
1. Fixed being SOLID bug during autorevive in "Death" state.
2. Fixed being SOLID bug while in "DeathWait" state.
3. Fixed COUNTKILL bug.
4. Code is cleaned up a bit.
//===Version 1.2===//
1. Fixed autorevive bug in "Death" state.
Reuploaded; check the OP.
Are Diablo 3 sprites too incompatible to be used? i thought about adding like "corrupted angels, or something, or just use variants of sprites that i have"