Class UTChainsaw : UTWeapon replaces Chainsaw { double sawcnt; action void A_SawHit() { A_QuakeEx(3,3,3,2,0,1,"",QF_RELATIVE,rollIntensity:0.15); invoker.sawcnt += 1./TICRATE; if ( invoker.sawcnt < 0.15 ) return; invoker.sawcnt = 0; invoker.FireEffect(); } action void A_SawSwipe() { A_QuakeEx(3,3,3,3,0,1,"",QF_RELATIVE,rollIntensity:0.15); invoker.FireEffect(); } Default { Tag "Chainsaw"; Inventory.PickupMessage "It's been twenty five years since I've seen one of these."; // was five years in UT99 Weapon.UpSound "chainsaw/select"; Weapon.SlotNumber 1; Weapon.SelectionOrder 9; +WEAPON.MELEEWEAPON; } States { Spawn: CSWP A -1; Stop; CSWP B -1; Stop; Select: CSWS A 1 A_Raise(int.max); Wait; Ready: CSWS ABCDEFGHIJLMNO 1 A_QuakeEx(1,1,1,2,0,1,"",QF_RELATIVE,rollIntensity:0.1); Idle: CSWI A 0 A_PlaySound("chainsaw/idle",CHAN_6,looping:true); CSWI ABCDEFGHIJ 1 { A_WeaponReady(); A_QuakeEx(1,1,1,2,0,1,"",QF_RELATIVE,rollIntensity:0.1); } Goto Idle+1; Fire: CSWJ A 1 A_PlaySound("chainsaw/fire",CHAN_6,looping:true); CSWJ BCDEF 1 A_QuakeEx(1,1,1,2,0,1,"",QF_RELATIVE,rollIntensity:0.1); Hold: CSWJ G 1 A_SawHit(); CSWJ H 0 A_Refire(1); Goto Release; CSWJ H 1 A_SawHit(); CSWJ I 0 A_Refire(1); Goto Release; CSWJ I 1 A_SawHit(); CSWJ J 0 A_Refire(1); Goto Release; CSWJ J 1 A_SawHit(); CSWJ K 0 A_Refire(1); Goto Release; CSWJ K 1 A_SawHit(); CSWJ L 0 A_Refire(1); Goto Release; CSWJ L 1 A_SawHit(); CSWJ M 0 A_Refire(1); Goto Release; CSWJ M 1 A_SawHit(); CSWJ N 0 A_Refire(1); Goto Release; CSWJ N 1 A_SawHit(); CSWJ O 0 A_Refire(1); Goto Release; CSWJ O 1 A_SawHit(); CSWJ P 0 A_Refire(1); Goto Release; CSWJ P 1 A_SawHit(); CSWJ Q 0 A_Refire(1); Goto Release; CSWJ Q 1 A_SawHit(); CSWJ R 0 A_Refire(1); Goto Release; CSWJ R 1 A_SawHit(); CSWJ S 0 A_Refire(1); Goto Release; CSWJ S 1 A_SawHit(); CSWJ G 0 A_Refire("Hold"); Release: CSWJ FEDCBA 1 A_QuakeEx(1,1,1,2,0,1,"",QF_RELATIVE,rollIntensity:0.1); Goto Idle; AltFire: CSWA A 0 A_PlaySound("chainsaw/fire",CHAN_6); CSWA ABCDEFG 2 A_QuakeEx(3,3,3,3,0,1,"",QF_RELATIVE,rollIntensity:0.15); CSWA H 2 A_SawSwipe(); CSWA IJK 2 A_QuakeEx(3,3,3,3,0,1,"",QF_RELATIVE,rollIntensity:0.15); CSWA K 0 A_PlaySound("chainsaw/idle",CHAN_6,looping:true); Goto Ready; Deselect: CSWD A 0 A_PlaySound("chainsaw/lower",CHAN_6); CSWD ABCDEF 2; CSWD F 1 A_Lower(int.max); Wait; } }