ZScript Railgun (I replace the DECORATE one with MAPINFO, replaces Railgun doesn't work)
Spoiler:
Class ZSRailgun: ZMonstrousWeapon { Default { Weapon.AmmoType "Cell"; Weapon.AmmoUse 10; Weapon.AmmoGive 40; Weapon.BobStyle "Inverse"; Weapon.SlotNumber 6; Obituary "%o chewed on %k's Railgun."; Inventory.PickupMessage "You got the Railgun!"; Tag "Railgun"; AttackSound "railshot"; Weapon.UpSound "railpwron"; } States { Ready: TNT1 A 0 A_WeaponOffset(0,32); RLGR E 0 A_JumpIfInventory("RailgunMode", 1, "Ready2"); TNT1 A 0 A_JumpIfInventory("BotAttack", 1, "Fire"); RLGB ABC 6 A_WeaponReady; Loop; Ready2: TNT1 A 0 A_JumpIfInventory("BotAttack", 1, "Fire2"); RLGR ABC 6 A_WeaponReady; Loop; Deselect: RLWT E 1 A_Lower; TNT1 A 0 A_Lower; Loop; Select: TNT1 A 0 A_Raise; RLWT E 1 A_Raise; Loop; Fire: TNT1 A 0 A_JumpIfInventory("RailgunMode", 1, "Fire2"); RLGB D 1 A_JumpIfInventory("Cell", 10, 1); Goto Ready; RLGB D 2 Bright A_RailAttack(150, 0, 1, "0000FF", "FFFFFF", 0, 0, "RailGPuff", 0, 0, 0, 35, 1.5, 1.0, "RailTrailBlue"); RLGB D 1 Offset(0,40); RLGB D 1 Offset(0,48); RLGB A 1 Offset(0,44); RLGB A 1 Offset(0,40); RLGB A 1 Offset(0,37); RLGB A 1 Offset(0,35); RLGB E 15 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSWITCH|WRF_NOBOB); RLGB D 10 A_StartSound ("railpwron", CHAN_WEAPON); TNT1 A 0 A_JumpIfInventory("BotAttack", 1, "Fire"); Goto Ready; Fire2: RLGR D 1 A_JumpIfInventory("Cell", 20, 1); Goto Ready; RLGR D 3 Bright; RLGR D 2 Bright A_RailAttack(300, 0, 1, "0000FF", "FFFFFF", 0, 0, "RailGPuff", 0, 0, 0, 35, 1.5, 1.0, "RailTrailRed"); RLGR D 1 Offset(0,40); RLGR D 1 Offset(0,48); RLGR A 1 Offset(0,44); RLGR A 1 Offset(0,40); RLGR A 1 Offset(0,37); RLGR A 1 Offset(0,35); RLGR E 25 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSWITCH|WRF_NOBOB); RLGR D 10 A_StartSound ("railpwron", CHAN_WEAPON); TNT1 A 0 A_JumpIfInventory("BotAttack", 1, "Fire2"); Goto Ready2; AltFire: RLWT E 0 A_Print("RAIL AND GIB! \n300 DMG rails, longer charge time."); RLWT E 7 A_StartSound("railpwron2", CHAN_WEAPON); RLWT E 1 Offset(0,35); RLWT E 1 Offset(0,38); RLWT E 1 Offset(0,44); RLWT E 1 Offset(0,52); RLWT E 1 Offset(0,62); RLWT E 1 Offset(0,72); RLWT E 1 Offset(0,82); RLWT E 1 Offset(0,82); RLWT E 1 Offset(0,72); RLWT E 1 Offset(0,62); RLWT E 1 Offset(0,52); RLWT E 1 Offset(0,44); RLWT E 1 Offset(0,38); RLWT E 1 Offset(0,35); RLWT E 1 Offset(0,32); RLWT E 0 A_JumpIfInventory("RailgunMode", 1, 2); RLWT E 18 A_GiveInventory("RailgunMode", 1); Goto Ready2; RLWT E 0 A_Print("Run And Gun. \n150 DMG rails, faster charge time."); RLWT E 18 A_TakeInventory("RailgunMode", 1); Goto Ready; Flash: RLGB F 4 Bright A_Light1; Goto LightDone; RLGB G 4 Bright A_Light1; Goto LightDone; Spawn: RLGS A -1; Stop; } }
DECORATE version (in main mod)
Spoiler:
ACTOR Railgun: MonstrousWeapon 5012 { Weapon.AmmoType "Cell" Weapon.AmmoUse 10 Weapon.AmmoGive 40 Weapon.BobStyle Inverse Weapon.SlotNumber 6 Obituary "%o chewed on %k's Railgun." Inventory.PickupMessage "You got the Railgun!" Tag "Railgun" AttackSound "railshot" Weapon.UpSound "railpwron" States { Ready: RLGR E 0 A_JumpIfInventory("RailgunMode", 1, "Ready2") TNT1 A 0 A_JumpIfInventory("BotAttack", 1, "Fire") RLGB ABC 6 A_WeaponReady Loop Ready2: TNT1 A 0 A_JumpIfInventory("BotAttack", 1, "Fire2") RLGR ABC 6 A_WeaponReady Loop Deselect: RLWT E 1 A_Lower TNT1 A 0 A_Lower Loop Select: TNT1 A 0 A_Raise RLWT E 1 A_Raise Loop Fire: TNT1 A 0 A_JumpIfInventory("RailgunMode", 1, "Fire2") RLGB D 1 A_JumpIfInventory("Cell", 10, 1) Goto Ready RLGB D 2 Bright A_RailAttack(150, 0, 1, "0000FF", "FFFFFF", 0, 0, "RailGPuff", 0, 0, 0, 35, 1.5, 1.0, "RailTrailBlue") RLGB D 1 Offset(0,40) RLGB D 1 Offset(0,48) RLGB A 1 Offset(0,44) RLGB A 1 Offset(0,40) RLGB A 1 Offset(0,37) RLGB A 1 Offset(0,35) RLGB E 15 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSWITCH|WRF_NOBOB) RLGB D 10 A_PlaySound (railpwron, CHAN_WEAPON) TNT1 A 0 A_JumpIfInventory("BotAttack", 1, "Fire") Goto Ready Fire2: RLGR D 1 A_JumpIfInventory("Cell", 20, 1) Goto Ready RLGR D 3 Bright RLGR D 2 Bright A_RailAttack(300, 0, 1, "0000FF", "FFFFFF", 0, 0, "RailGPuff", 0, 0, 0, 35, 1.5, 1.0, "RailTrailRed") RLGR D 1 Offset(0,40) RLGR D 1 Offset(0,48) RLGR A 1 Offset(0,44) RLGR A 1 Offset(0,40) RLGR A 1 Offset(0,37) RLGR A 1 Offset(0,35) RLGR E 25 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSWITCH|WRF_NOBOB) RLGR D 10 A_PlaySound (railpwron, CHAN_WEAPON) TNT1 A 0 A_JumpIfInventory("BotAttack", 1, "Fire2") Goto Ready2 AltFire: RLWT E 0 A_Print("RAIL AND GIB! \n300 DMG rails, longer charge time.") RLWT E 7 A_PlaySound(railpwron2, CHAN_WEAPON) RLWT E 1 Offset(0,35) RLWT E 1 Offset(0,38) RLWT E 1 Offset(0,44) RLWT E 1 Offset(0,52) RLWT E 1 Offset(0,62) RLWT E 1 Offset(0,72) RLWT E 1 Offset(0,82) RLWT E 1 Offset(0,82) RLWT E 1 Offset(0,72) RLWT E 1 Offset(0,62) RLWT E 1 Offset(0,52) RLWT E 1 Offset(0,44) RLWT E 1 Offset(0,38) RLWT E 1 Offset(0,35) RLWT E 1 Offset(0,32) RLWT E 0 A_JumpIfInventory("RailgunMode", 1, 2) RLWT E 20 A_GiveInventory("RailgunMode", 1) Goto Ready2 RLWT E 0 A_Print("Run And Gun. \n150 DMG rails, faster charge time.") RLWT E 20 A_TakeInventory("RailgunMode", 1) Goto Ready Flash: RLGB F 4 Bright A_Light1 Goto LightDone RLGB G 4 Bright A_Light1 Goto LightDone Spawn: RLGS A -1 Stop } }
First of all, I want to get rid of the A_JumpIfInventory HACKS, so I can have more railgun modes at ease. I know variables exist in ZScript, but how would I use them? I know I have to check for them using If but how would I go around doing that?
Second of all, I'd love to use A_WeaponOffset instead of Offset, which is simple enough, but if I use additive coordinates and calculate the difference* then it looks super bad.
Addendum:
Spoiler:
*For example:
RLWT E 1 Offset(0,40) RLWT E 1 Offset(0,48)
becomes
RLWT E 1 A_WeaponOffset(0,8,WOF_ADD)
You'd think this achieves the same effect, but it looks uglier. It's more noticeable if you do that for the whole thing.