New "DECORATEor" needs help with weapon flags

Discuss all aspects related to modding Zandronum here.
Post Reply
Hardbash
 
Posts: 79
Joined: Tue Jul 03, 2012 5:01 pm
Location: USA! USA!

New "DECORATEor" needs help with weapon flags

#1

Post by Hardbash » Tue Jun 23, 2015 10:46 pm

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]
Last edited by Hardbash on Tue Jun 23, 2015 10:47 pm, edited 1 time in total.
Shut up, nurse!

User avatar
Ænima
Addicted to Zandronum
Posts: 3583
Joined: Tue Jun 05, 2012 6:12 pm

RE: New "DECORATEor" needs help with weapon flags

#2

Post by Ænima » Tue Jun 23, 2015 11:15 pm

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
Last edited by Ænima on Tue Jun 23, 2015 11:16 pm, edited 1 time in total.
Reinforcements: midgame Survival joining/respawning
Doom64: Unabsolved: Doom64 + Diablo II
ZandroSkins: a pack made by our community
AeniPuffs: 3D blood and bullet puff effects, free to use for your own mods
Squad Radio: a WASD-based radio chat menu, add your own custom sounds!
Mercenaries (on hold)
Image

Untitled
Forum Regular
Posts: 519
Joined: Sat Dec 29, 2012 4:41 pm
Location: it is a mystery

RE: New "DECORATEor" needs help with weapon flags

#3

Post by Untitled » Tue Jun 23, 2015 11:39 pm

Æ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.
Last edited by Untitled on Tue Jun 23, 2015 11:41 pm, edited 1 time in total.
"I'm in despair! The fact someone would give me the title 'Forum Regular' has left me in despair!"
Spoiler: Me in a nutshell (Open)
<Untitled> this is a terrible idea
<Untitled> lets do it anyway

<Untitled> Depends
<Untitled> What kind of wad error is "Address not Mapped to Object (Signal 11)"?

<Untitled> So today I found out that stupidity is nested fractally
<Untitled> There is no lower bound
Projects:
SamsaraHold http://zandronum.com/forum/showthread.php?tid=3053

Catastrophe
Retired Staff / Community Team Member
Posts: 2571
Joined: Sat Jun 02, 2012 2:44 am

RE: New "DECORATEor" needs help with weapon flags

#4

Post by Catastrophe » Tue Jun 23, 2015 11:40 pm

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.
Last edited by Catastrophe on Tue Jun 23, 2015 11:42 pm, edited 1 time in total.

Untitled
Forum Regular
Posts: 519
Joined: Sat Dec 29, 2012 4:41 pm
Location: it is a mystery

RE: New "DECORATEor" needs help with weapon flags

#5

Post by Untitled » Tue Jun 23, 2015 11:42 pm

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.
Last edited by Untitled on Tue Jun 23, 2015 11:44 pm, edited 1 time in total.
"I'm in despair! The fact someone would give me the title 'Forum Regular' has left me in despair!"
Spoiler: Me in a nutshell (Open)
<Untitled> this is a terrible idea
<Untitled> lets do it anyway

<Untitled> Depends
<Untitled> What kind of wad error is "Address not Mapped to Object (Signal 11)"?

<Untitled> So today I found out that stupidity is nested fractally
<Untitled> There is no lower bound
Projects:
SamsaraHold http://zandronum.com/forum/showthread.php?tid=3053

Catastrophe
Retired Staff / Community Team Member
Posts: 2571
Joined: Sat Jun 02, 2012 2:44 am

RE: New "DECORATEor" needs help with weapon flags

#6

Post by Catastrophe » Tue Jun 23, 2015 11:46 pm

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:

User avatar
Ænima
Addicted to Zandronum
Posts: 3583
Joined: Tue Jun 05, 2012 6:12 pm

RE: New "DECORATEor" needs help with weapon flags

#7

Post by Ænima » Wed Jun 24, 2015 12:15 am

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.
Reinforcements: midgame Survival joining/respawning
Doom64: Unabsolved: Doom64 + Diablo II
ZandroSkins: a pack made by our community
AeniPuffs: 3D blood and bullet puff effects, free to use for your own mods
Squad Radio: a WASD-based radio chat menu, add your own custom sounds!
Mercenaries (on hold)
Image

Catastrophe
Retired Staff / Community Team Member
Posts: 2571
Joined: Sat Jun 02, 2012 2:44 am

RE: New "DECORATEor" needs help with weapon flags

#8

Post by Catastrophe » Wed Jun 24, 2015 1:00 am

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.

Hardbash
 
Posts: 79
Joined: Tue Jul 03, 2012 5:01 pm
Location: USA! USA!

RE: New "DECORATEor" needs help with weapon flags

#9

Post by Hardbash » Wed Jun 24, 2015 11:05 pm

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 :(
Last edited by Hardbash on Wed Jun 24, 2015 11:19 pm, edited 1 time in total.
Shut up, nurse!

Post Reply