//Mobility recoded
//Yes, I know Sakugarne isn't a MMK weapon. But it fit here best. Okay? -Ivory
actor SakugarneWep_NormalBar : NormalBar { args 138, 130 }

actor SakugarneWep : BaseMM8BDMWep 10075
{
//$Category MM8BDM-Weapons/Close
//$Title Sakugarne
//$Sprite WEA2Z0
Weapon.AmmoUse 2
Weapon.AmmoGive 28
Weapon.SlotNumber 4
Inventory.Pickupmessage "$PU_SAKUGARNE"
Obituary "$OB_SAKUGARNE"
Tag "$TAG_SAKUGARNE"
weapon.ammotype "SakugarneAmmo"
inventory.icon "SAKUSI"
States
{
SpawnLoop:
WEA2 Z -1
loop

Ready:
TNT1 A 0 ACS_NamedExecuteWithResult("core_weaponcolor",CLR_SAKUGARNE)
TNT1 A 0 A_JumpIfInventory("IsMegaMan",1,"ReadyMega")
TNT1 A 0 A_JumpIfInventory("IsProtoMan",1,"ReadyProto")
TNT1 A 0 A_JumpIfInventory("IsBass",1,"ReadyBass")
TNT1 A 0 A_JumpIfInventory("IsDuo",1,"ReadyDuo")
TNT1 A 1
Goto Ready+1

ReadyMega:
X2ME A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttackCheck")
X2ME A 1 A_WeaponReady
Goto ReadyMega
ReadyProto:
X2PR A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttackCheck")
X2PR A 1 A_WeaponReady
Goto ReadyProto
ReadyBass:
X2BA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttackCheck")
X2BA A 1 A_WeaponReady
Goto ReadyBass
ReadyDuo:
X2DU A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttackCheck")
X2DU A 1 A_WeaponReady
Goto ReadyDuo

Deselect:
"####" A 0 A_TakeInventory("SakugarneActive",1)
goto DeselectSwap
Select:
"####" A 0 A_TakeInventory("SakugarneActive",1)
goto DeselectSwap

Fire:
"####" A 0 A_JumpIfNoAmmo("NoAmmo")
"####" A 0 A_JumpIfInventory("PlayerPropertyNoGravity",1,"NoAmmo")
"####" A 0 A_JumpIfInventory("SakugarneActive",1,"AirReady")
"####" A 0 A_CheckFloor("FireStart")
goto Ready+1

FireStart:
"####" A 0 A_GiveInventory("SakugarneActive",1)
"####" A 0 A_Stop
"####" A 0 A_PlaySoundEx("weapons/mmk/sakugarneactivate","Weapon")
"####" A 0 A_SpawnItemEx("SakugarneWarperStart")
"####" A 0 A_SpawnItemEx("SakugarneWarper")
"####" AAAABBBB 1 ACS_NamedExecute("VC_SetState",0,47)
"####" A 0 A_Stop
"####" A 0 A_ChangeVelocity(CallACS("VC_XYMob",17),0,16, CVF_RELATIVE)
"####" CCCCC 1 ACS_NamedExecute("VC_SetState",0,47)
Goto Air

Air:
"####" A 0 A_JumpIfInventory("PlayerPropertyNoGravity",1,"NoAmmo")
"####" A 0 ACS_NamedExecute("VC_SetState",0,47)
"####" A 0 A_SpawnItemEx("SakugarneCrush",0,0,-10,0,0,-32)
"####" A 0 ThrustThingZ(0,1,1,1)
"####" C 1 A_WeaponReady
"####" A 0 A_CheckFloor("Jump")
loop

AirReady:
"####" A 0 A_JumpIfInventory("PlayerPropertyNoGravity",1,"NoAmmo")
"####" A 0 A_SpawnItemEx("SakugarneCrush",0,0,-10,0,0,-32)
"####" A 0 ACS_NamedExecute("VC_SetState",0,47)
"####" A 0 ThrustThingZ(0,1,1,1)
"####" C 1
"####" A 0 A_CheckFloor("Jump2")
loop

Jump:
"####" A 0 A_SpawnItemEx("SakugarneDriller",0,0,16)
"####" A 0 A_JumpIfNoAmmo("NoAmmo")
"####" A 0 A_JumpIfInventory("PlayerPropertyNoGravity",1,"NoAmmo")
"####" A 0 A_PlaySoundEx("weapons/mmk/sakugarnebounce","Weapon")
"####" A 0 A_JumpIfInventory("PowerGearPowerup",1,"GearCheck1")
Jump1Cont:
"####" A 0 A_Stop
"####" AAAA 1 ACS_NamedExecute("VC_SetState",0,47)
"####" A 0 A_Stop
"####" BBBB 1 ACS_NamedExecute("VC_SetState",0,47)
"####" A 0 A_Stop
"####" A 0 A_ChangeVelocity(CallACS("VC_XYMob",17),0,16, CVF_RELATIVE)
"####" CCCCC 1 ACS_NamedExecute("VC_SetState",0,47)
Goto Air

Jump2:
"####" A 0 A_SpawnItemEx("SakugarneDriller",0,0,16)
"####" A 0 A_JumpIfNoAmmo("NoAmmo")
"####" A 0 A_JumpIfInventory("PlayerPropertyNoGravity",1,"NoAmmo")
"####" A 0 A_PlaySoundEx("weapons/mmk/sakugarnebounce","Weapon")
"####" A 0 A_JumpIfInventory("PowerGearPowerup",1,"GearCheck2")
Jump2Cont:
"####" A 0 A_Stop
"####" AAA 1 ACS_NamedExecute("VC_SetState",0,47)
"####" A 0 A_Stop
"####" BBB 1 ACS_NamedExecute("VC_SetState",0,47)
"####" A 0 A_Stop
"####" A 0 A_ChangeVelocity(CallACS("VC_XYMob",20),0,21, CVF_RELATIVE)
"####" CCCCC 1 ACS_NamedExecute("VC_SetState",0,47)
Goto Air

GearCheck1:
"####" A 0 A_JumpIfInventory("SakugarneAmmo",12,"Fire.Gear1")
Goto Jump1Cont

Fire.Gear1:
"####" A 0 A_TakeInventory("SakugarneAmmo", 12)
"####" A 0 A_PlaySoundEx("misc/quake","Weapon")
"####" A 0 A_SpawnItemEx("SakugarneExplosionThingCopyWep")
"####" AAAAAAAAAAAAAAA 0 A_SpawnItemEx("QuintCrusherRockClassCopyWep",0,0,0,30,0,0,random(0,360))
"####" A 0 A_Quake(3,20,0,300)
Goto Jump2Cont

GearCheck2:
"####" A 0 A_JumpIfInventory("SakugarneAmmo",12,"Fire.Gear2")
Goto Jump2Cont

Fire.Gear2:
"####" A 0 A_TakeInventory("SakugarneAmmo", 12)
"####" A 0 A_PlaySoundEx("misc/quake","Weapon")
"####" A 0 A_SpawnItemEx("SakugarneExplosionThingCopyWep")
"####" AAAAAAAAAAAAAAA 0 A_SpawnItemEx("QuintCrusherRockClassCopyWep",0,0,0,30,0,0,random(0,360))
"####" A 0 A_Quake(3,20,0,300)
Goto Jump2Cont

NoAmmo:
"####" A 0 ACS_NamedExecute("VC_SetState",0,31)
"####" A 0 A_TakeInventory("SakugarneActive",1)
"####" A 1 ACS_NamedExecuteAlways("core_noammo",0)
goto Ready+1
}
}


actor SakugarneAmmo : Ammo
{
inventory.amount 1
inventory.maxamount 28
+INVENTORY.IGNORESKILL
}

actor SakugarneActive : Once {}

actor SakugarneWarperStart
{
+NOINTERACTION
+NOCLIP
-SOLID
+MISSILE
radius 2
height 2
+NOGRAVITY
+DONTBLAST
+DONTREFLECT
renderstyle none
States
{
Spawn:
PLAY A 0
PLAY A 0 A_TakeFromTarget("SakugarneAmmo",2,TIF_NOTAKEINFINITE)
PLAY A 2 //A_SpawnItemEx("SakugarneWarper",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
stop
}
}

actor SakugarneWarper : BasicShieldWarper
{
	radius 2
	height 2
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_GiveInventory("MM8BDMProjSpawnFuncClient",1)
		TNT1 A 0 ACS_NamedExecuteAlways("core_shieldwarper", 0, 1)
		TNT1 AAAAA 0 A_SpawnItemEx("SakugarneDebris",0,0,0,random(1,5),random(-10,10),random(8,12),random(-5,5), SXF_WEPFXCOLOR)
		TNT1 AAAAAAAAAAAAAAA 1 A_Warp(AAPTR_TARGET, 22, 0, -36, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
		
		Goto Shield
	ShieldCheck:
		TNT1 A 0 A_JumpIfInTargetInventory("SakugarneActive",1,"Shield")
		Goto Disabled
	Shield:
		TNT1 A 1 A_Warp(AAPTR_TARGET, 22, 0, -36, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
		TNT1 A 0 A_CheckFloor("Shield2")
		goto ShieldCheck
	ShieldCheck2:
		TNT1 A 0 A_JumpIfInTargetInventory("SakugarneActive",1,"Shield2")
		Goto Disabled
	Shield2:
		TNT1 A 1 A_Warp(AAPTR_TARGET, 22, 0, -36, 0, WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
		TNT1 A 0 A_CheckFloor("ShieldCheck2")
		Goto Shield
	Disabled:
		TNT1 A 1 A_JumpIfInTargetInventory("SakugarneActive",1,"Shield")
		stop//loop
	}
}

actor SakugarneDebris : BasicGraphicEffect
{
-NOGRAVITY
-NOINTERACTION
+DONTSPLASH
+THRUACTORS
Damage (0)
Speed 5
scale 1.0
States
{
	Spawn:
	TNT1 A 0
	TNT1 A 1
	TNT1 A 0 A_Jump(256,"Debris1","Debris2","Debris3","Debris4")
	Debris1:
	TNT1 A 1
	SAKU E -1
	Debris2:
	TNT1 A 1
	SAKU F -1
	Debris3:
	TNT1 A 1
	SAKU G -1
	Debris4:
	SAKU H -1
	stop
}
}

actor SakugarneGiver : CustomInventory
{
//$Category MM8BDM-Weapons
//$Title Sakugarne
Inventory.Pickupmessage "$PU_SAKUGARNE"
inventory.pickupsound "weapon/weaponup"
Inventory.RespawnTics 800
scale 2.0
states
{
Spawn:
WEA2 Z 1
loop
Pickup:
WEA2 Z 0 A_JumpIfInventory("SakugarneWep",1,"Failure")
WEA2 Z 0 A_GiveInventory("SakugarneWep")
stop
Failure:
WEA2 Z 0
fail
}
}

actor Sakugarne1 : BasicGraphicEffect
{
+FORCEYBILLBOARD
+NOTIMEFREEZE
States
{
SpawnFrame:
TNT1 A 2
stop
}
}

actor Sakugarne2 : Sakugarne1
{
States
{
SpawnFrame:
TNT1 A 2
stop
}
}

actor SakugarneCrush : BasicProjectile
{
damagetype "Sakugarne"
Obituary "$OB_SAKUGARNE"
+DONTBLAST
+DONTREFLECT
damage (3)
Radius 30
Height 2
States
{
Spawn:
TNT1 A 2
stop
}
}

actor SakugarneDriller : BasicExplosion
{
damagetype "Sakugarne"
Obituary "$OB_SAKUGARNE"
States
{
Spawn:
TNT1 A 0
TNT1 AAAAA 0 A_SpawnItemEx("SakugarneDebris",0,0,-14,random(1,5),random(-10,10),random(8,12),random(-5,5), SXF_WEPFXCOLOR)
TNT1 A 0 A_TakeFromTarget("SakugarneAmmo",2,TIF_NOTAKEINFINITE)
TNT1 A 4 A_Explode(40,144,0)
stop
}
}

actor SakugarneExplosionThingCopyWep
{
species "DustManType"
+THRUSPECIES
PROJECTILE
radius 16
height 16
damage (9)
+DONTSPLASH
-NOGRAVITY
damagetype "SakugarneGear"
Obituary "$OB_SAKUGARNE"
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_Explode(40,200,0,0,64)
TNT1 A 0 A_SpawnItemEx("ShortSakugarneRadiusThingyFX")
stop
}
}

actor QuintCrusherRockClassCopyWep
{
PROJECTILE
Height 16
Radius 16
scale 2.5
+THRUSPECIES
Speed 40
radius 32
height 32
speed 90
damagetype "Sakugarne"
Obituary "$OB_SAKUGARNE"
translation "192:192=89:89", "198:198=186:186"
damage(18)
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 1 ThrustThingZ(0, random(30,60), 0, 1)
TNT1 A 0 A_Jump(256,"Debris3","Debris4")
Debris3:
QBOP D 1 ThrustThingZ(0, -4, 0, 1)
loop
Debris4:
QBOP F 1 ThrustThingZ(0, -4, 0, 1)
loop
Death:
MMFX F 0 A_ChangeFlag("NOGRAVITY",1)
MMFX FGHI 5 A_Stop
stop
}
}

Actor SakugarneProtect : PowerProtection
{
Powerup.Duration 2
DamageFactor "Sakugarne", 0.0
}
