Page 1 of 1

New "DECORATEor" needs help with weapon flags

Posted: Tue Jun 23, 2015 10:46 pm
by Hardbash
So, in my weapon pack I use, I have many different weapons I've been tinkering with (all pulled off of the 667 website for my personal enjoyment).

My chaingun replacement is meant to be a pain-locker with wide area spray and low damage, and I want my minigun replacement to use +Ripper and +ForcePain so that weapon may greater utilize that painlock affect. I can't get it to work. Any help?

[spoiler]Actor Repeater : Weapon replaces Minigun
{
Weapon.Slotnumber 4
Weapon.SelectionOrder 5
Inventory.PickupSound "misc/w_pkup"
Inventory.PickupMessage "You got the plasma repeater!"
Obituary "%o was disintegrated by %k's repeater."
Weapon.AmmoType1 "AMCell"
Weapon.AmmoGive 20
Weapon.AmmoUse 1
+Weapon.Explosive
+Weapon.NoAlert
+Ripper
+ForcePain
AttackSound "Weapons/RepeaterFire"
States
{
Spawn:
REPG I -1
Loop
Ready:
REPG A 0 A_TakeInventory("RepeaterSpin", 3)
REPG A 0 A_GiveInventory("RepeaterFrameA", 1)
REPG A 1 A_WeaponReady
Loop
Deselect:
REPG A 0 A_TakeInventory("RepeaterSpin", 3)
REPG A 0 A_GiveInventory("RepeaterFrameA", 1)
REPG A 1 A_Lower
Loop
Select:
REPG A 1 A_Raise
Loop
Fire:
//===========Spinup
REPG A 0 A_PlaySound("Weapons/RepeaterSpinup")
REPG A 0 A_JumpIfInventory("RepeaterSpin", 1, 8)
REPG A 0 A_JumpIfInventory("RepeaterB", 1, 4)
REPG A 0 A_JumpIfInventory("RepeaterC", 1, 4)
REPG A 0 A_JumpIfInventory("RepeaterD", 1, 4)
REPG A 4
REPG B 4
REPG C 4
REPG D 4 A_GiveInventory("RepeaterFrameA")
REPG A 0 A_JumpIfInventory("RepeaterSpin", 2, 9)
REPG A 0 A_GiveInventory("RepeaterSpin", 1)
REPG A 0 A_JumpIfInventory("RepeaterB", 1, 4)
REPG A 0 A_JumpIfInventory("RepeaterC", 1, 4)
REPG A 0 A_JumpIfInventory("RepeaterD", 1, 4)
REPG A 3
REPG B 3
REPG C 3
REPG D 3 A_GiveInventory("RepeaterFrameA")
REPG A 0 A_JumpIfInventory("RepeaterB", 1, 4)
REPG A 0 A_JumpIfInventory("RepeaterC", 1, 4)
REPG A 0 A_JumpIfInventory("RepeaterD", 1, 4)
REPG A 2
REPG B 2
REPG C 2
REPG D 2 A_GiveInventory("RepeaterFrameA")
//===========Fire
REPG A 0 A_Refire
//===========Spindown
REPG A 0 A_PlaySound("Weapons/RepeaterSpindown")
REPG A 0 A_GiveInventory("RepeaterFrameA", 1)
REPG AA 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameB", 1)
REPG BB 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameC", 1)
REPG CC 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameD", 1)
REPG DD 1 A_WeaponReady(11)
REPG A 0 A_TakeInventory("RepeaterSpin", 1)
REPG A 0 A_GiveInventory("RepeaterFrameA", 1)
REPG AAA 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameB", 1)
REPG BBB 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameC", 1)
REPG CCC 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameD", 1)
REPG DDD 1 A_WeaponReady(11)
REPG A 0 A_TakeInventory("RepeaterSpin", 1)
REPG A 0 A_GiveInventory("RepeaterFrameA", 1)
REPG AAAA 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameB", 1)
REPG BBBB 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameC", 1)
REPG CCCC 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameD", 1)
REPG DDDD 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameA", 1)
REPG AAAA 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameB", 1)
REPG BBBB 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameC", 1)
REPG CCCC 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameD", 1)
REPG DDDD 1 A_WeaponReady(11)
Goto Ready
Hold:
//===========Fire
REPG E 0 Bright A_Gunflash
REPG E 0 Bright A_AlertMonsters
REPG E 2 Bright A_FireBullets(25, 5, 4, 1, "RepPuff", 1, 10240)
REPG F 2 Bright
REPG G 0 Bright A_AlertMonsters
REPG G 2 Bright A_FireBullets(50, 50, 1, 8, "RepPuff", 1, 10240)
REPG H 2 Bright
REPG A 0 A_Refire
//===========Spindown - smartgun 1: 5, 5, 3, 3, smartgun 2: 50, 50, 1, 15,
REPG A 0 A_PlaySound("Weapons/RepeaterSpindown")
REPG A 0 A_GiveInventory("RepeaterFrameA", 1)
REPG AA 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameB", 1)
REPG BB 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameC", 1)
REPG CC 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameD", 1)
REPG DD 1 A_WeaponReady(11)
REPG A 0 A_TakeInventory("RepeaterSpin", 1)
REPG A 0 A_GiveInventory("RepeaterFrameA", 1)
REPG AAA 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameB", 1)
REPG BBB 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameC", 1)
REPG CCC 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameD", 1)
REPG DDD 1 A_WeaponReady(11)
REPG A 0 A_TakeInventory("RepeaterSpin", 1)
REPG A 0 A_GiveInventory("RepeaterFrameA", 1)
REPG AAAA 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameB", 1)
REPG BBBB 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameC", 1)
REPG CCCC 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameD", 1)
REPG DDDD 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameA", 1)
REPG AAAA 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameB", 1)
REPG BBBB 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameC", 1)
REPG CCCC 1 A_WeaponReady(11)
REPG A 0 A_GiveInventory("RepeaterFrameD", 1)
REPG DDDD 1 A_WeaponReady(11)
Goto Ready
Flash:
TNT1 A 2 A_Light2
TNT1 A 2 A_Light1
TNT1 A 0 A_Light0
Stop
}
}
Actor RepeaterSpin : Inventory { Inventory.MaxAmount 2 }
Actor RepeaterB : Inventory { Inventory.MaxAmount 1 }
Actor RepeaterC : Inventory { Inventory.MaxAmount 1 }
Actor RepeaterD : Inventory { Inventory.MaxAmount 1 }

Actor RepeaterFrameA : CustomInventory
{
Inventory.MaxAmount 0
+Inventory.AutoActivate
States
{
Spawn:
TNT1 A 1
Stop
Use:
TNT1 A 0 A_TakeInventory("RepeaterB", 1)
TNT1 A 0 A_TakeInventory("RepeaterC", 1)
TNT1 A 0 A_TakeInventory("RepeaterD", 1)
Stop
}
}

Actor RepeaterFrameB : RepeaterFrameA
{
States
{
Spawn:
TNT1 A 1
Stop
Use:
TNT1 A 0 A_GiveInventory("RepeaterB", 1)
TNT1 A 0 A_TakeInventory("RepeaterC", 1)
TNT1 A 0 A_TakeInventory("RepeaterD", 1)
Stop
}
}

Actor RepeaterFrameC : RepeaterFrameA
{
States
{
Spawn:
TNT1 A 1
Stop
Use:
TNT1 A 0 A_TakeInventory("RepeaterB", 1)
TNT1 A 0 A_GiveInventory("RepeaterC", 1)
TNT1 A 0 A_TakeInventory("RepeaterD", 1)
Stop
}
}

Actor RepeaterFrameD : RepeaterFrameA
{
States
{
Spawn:
TNT1 A 1
Stop
Use:
TNT1 A 0 A_TakeInventory("RepeaterB", 1)
TNT1 A 0 A_TakeInventory("RepeaterC", 1)
TNT1 A 0 A_GiveInventory("RepeaterD", 1)
Stop
}
}

Actor RepPuff
{
Radius 3
Height 3
RenderStyle Add
Alpha 0.75
+ForcePain
+Ripper
+AlwaysPuff
+PuffOnActors
+NoGravity
+NoBlockMap
+PuffGetsOwner
+ForceRadiusDmg
+BloodlessImpact
Decal MummyScorch
States
{
Spawn:
RPUF A 1 Bright
RPUF A 0 Bright A_PlaySound("Weapons/RepeaterHit")
RPUF A 2 Bright A_Explode(7, 44, 0)
RPUF BCDEFG 3 Bright
Stop
}
}


Actor AMCell : Ammo
{
Inventory.PickupSound "misc/i_pkup"
Inventory.Amount 10
Inventory.MaxAmount 300
Ammo.BackpackAmount 10
Ammo.BackpackMaxAmount 600
Inventory.PickupMessage "You picked up an antimatter capsule."
Inventory.Icon WAMCA0
States
{
Spawn:
WAMC A 3 Bright
WAMC B 9
Loop
}
}

Actor AMBox : AMCell
{
Inventory.Amount 50
Inventory.PickupMessage "You picked up a box of antimatter capsules."
States
{
Spawn:
WAMC D 3 Bright
WAMC C 9
Loop
}
}
//clipboxes
Actor VanillaClipBox : ClipBox {}
Actor VanillaClipBoxReplacer : RandomSpawner replaces ClipBox
{
DropItem "VanillaClipBox" 255
DropItem "AMBox" 255
}

//clips
Actor VanillaClip : Clip {}
Actor VanillaClipReplacer : RandomSpawner replaces Clip
{
DropItem "VanillaClip" 255
DropItem "AMCell" 255
}

//spawnable w/o a minigun spawn so it's available anywhere
Actor AMB : AMBox {}
Actor AMBoxReplacer : RandomSpawner replaces AMBox
{
DropItem "AMB" 255, 6
DropItem "Repeater" 255, 1
}[/spoiler]


and a download link if anyone wants to give their opinion on it. Still refining :)

[spoiler]http://www.mediafire.com/download/wh8sb ... 05.wad.zip[/spoiler]

RE: New "DECORATEor" needs help with weapon flags

Posted: Tue Jun 23, 2015 11:15 pm
by Ænima
Lol wat. +RIPPER is a flag for only projectiles, it allows them to clip through actors and still do damage. On a weapon itself it does nothing.


If you want a weapon with more pain chance than vanilla hitscans offer, you'll need to make a custom bulletpuff for just that gun, with a custom damage type. Then make your monsters super sensitive to it with the DamageFactor property.

http://zdoom.org/wiki/Custom_damage_types

RE: New "DECORATEor" needs help with weapon flags

Posted: Tue Jun 23, 2015 11:39 pm
by Untitled
Ænima wrote: Lol wat. +RIPPER is a flag for only projectiles, it allows them to clip through actors and still do damage. On a weapon itself it does nothing.


If you want a weapon with more pain chance than vanilla hitscans offer, you'll need to make a custom bulletpuff for just that gun, with a custom damage type. Then make your monsters super sensitive to it with the DamageFactor property.

http://zdoom.org/wiki/Custom_damage_types
If you looked at the code, he also put +RIPPER and +FORCEPAIN on the bullet puff, too.

EDIT: I'm not sure about FORCEPAIN, but Anima's right - RIPPER is a projectile-only flag. I don't think it's possible to have ripping hitscans.

So how do we do this? Well, you're probably not gonna like the answer.

Basically, you need to convert your weapon from hitscans to fake bullets (Invisible projectiles with speed about 320), and put +RIPPER and +FORCEPAIN on those projectiles.

RE: New "DECORATEor" needs help with weapon flags

Posted: Tue Jun 23, 2015 11:40 pm
by Catastrophe
I'm assuming you're using +ripper so it can hit through multiple monsters. Unfortunately you can't do that with hitscan BUT you can do this if you use railgun shots instead. All you'd need to do is call a_railattack in place of a_firebullets and remove the +ripper flag, as a_railattack always goes through enemies.

Also +forcepain is only supposed to be used on monsters, not weapons. If you'd like it to stun enemies, you'd need some heavy ACS witchcraft or wait until Zandronum 3.0 comes out to utilize some advanced decorate features. But hey, if your gun is rapid fire, rng should be in your favor for it to always stun lock.

RE: New "DECORATEor" needs help with weapon flags

Posted: Tue Jun 23, 2015 11:42 pm
by Untitled
Catastrophe wrote: I'm assuming you're using +ripper so it can hit through multiple monsters. Unfortunately you can't do that with hitscan BUT you can do this if you use railgun shots instead. All you'd need to do is call a_railattack instead and remove the +ripper flag, as railguns will always hit multiple enemies.
EDIT: I'm not sure Zandronum 2.0 supports spread_xy and spread_z parameters for A_RailAttack. I should test that.
Catastrophe wrote: Also +forcepain is only supposed to be used on monsters, not weapons. If you'd like it to stun enemies, you'd need some heavy ACS witchcraft or wait until Zandronum 3.0 comes out to utilize some advanced decorate features. But hey, if your gun is rapid fire, rng should be in your favor for it to always stun lock.
ZDoom Wiki wrote: FORCEPAIN
Actors will always enter the Pain state appropriate to the type of damage received if hit by a projectile with this flag set, even if the projectile does zero damage. The PAINLESS flag has precedence (a projectile with both PAINLESS and FORCEPAIN will not cause actors to enter their Pain state), and pain cannot be forced on actors with the NOPAIN flag set.
Actually, +FORCEPAIN is based on the projectile, not the monster.

RE: New "DECORATEor" needs help with weapon flags

Posted: Tue Jun 23, 2015 11:46 pm
by Catastrophe
Ah, my mistake. In that case I'd probably fire a bunch of extremely fast, invisible projectiles with the +ripper and +bloodlessimpact flags.

Though it's strange that bulletpuffs can't use +forcepain :hmm:

RE: New "DECORATEor" needs help with weapon flags

Posted: Wed Jun 24, 2015 12:15 am
by Ænima
You could always stack multiple hitscan attacks into one tic, that has the benefit of increased pain chance AND penetration through multiple (weak) monsters. Buuuuuut it has to be 100% precise shots otherwise it looks like a shotgun (because it's basically the same thing just concentrated).


Might be a way to spawn an actor with an offset from your weapon and then make THAT fire stacked hitscans.

RE: New "DECORATEor" needs help with weapon flags

Posted: Wed Jun 24, 2015 1:00 am
by Catastrophe
In that case OP, since you're new, I'd say hold off from doing +forcepain trickery until you have more experience. These methods are too complicated for beginners.

RE: New "DECORATEor" needs help with weapon flags

Posted: Wed Jun 24, 2015 11:05 pm
by Hardbash
Catastrophe wrote: I'm assuming you're using +ripper so it can hit through multiple monsters. Unfortunately you can't do that with hitscan BUT you can do this if you use railgun shots instead. All you'd need to do is call a_railattack in place of a_firebullets and remove the +ripper flag, as a_railattack always goes through enemies.

Also +forcepain is only supposed to be used on monsters, not weapons. If you'd like it to stun enemies, you'd need some heavy ACS witchcraft or wait until Zandronum 3.0 comes out to utilize some advanced decorate features. But hey, if your gun is rapid fire, rng should be in your favor for it to always stun lock.
This is exactly what I needed. I just needed it to penetrate through enemies and hit those who are in the back. Thanks.

Catastrophe wrote: In that case OP, since you're new, I'd say hold off from doing +forcepain trickery until you have more experience. These methods are too complicated for beginners.
I appreciate the help, guys!


And no,
Untitled wrote: EDIT: I'm not sure Zandronum 2.0 supports spread_xy and spread_z parameters for A_RailAttack. I should test that.
it does not, sadly :(