//Increase clone M1 damage but make it drain ammo
//allow ult M1 to bounce on walls once
actor GeminiMan : VCBaseClass
{
	Player.ScoreIcon "GEMIMUGS"
	player.startitem "BaseFlagPack", 1
	player.startitem "NormalArmor"
	player.soundclass "geminimanc"
	Player.ViewHeight 45
	player.displayname "GeminiMan"
	player.jumpz 10
	player.startitem "GeminiLaserBoss"
	player.startitem "Base28Ammo", 28
	player.startitem "UltimateAttackItem3", 1
	player.startitem "UltSoundWatcherSpawn3"
	Player.StartItem "GeminiEntrance"
	player.startitem "HasAnIntroPose"
	player.startitem "IsFromMM3"
	States
	{
		Spawn:
		GEMM A 0 A_JumpIf(z-floorz>0, "Jumping")
		GEMM B 1 A_JumpIf(z-floorz>0, "Jumping")
		GEMM A 1 A_JumpIf(z-floorz>0, "Jumping")
		Goto Spawn+2
		
		See:
		GEMM BBBBCCCCDDDDEEEE 1 A_JumpIf(z-floorz>0, "Jumping")
		Goto Spawn+1
		
		Jumping:
		GEMM I 1 A_JumpIf(z-floorz<=0, "Spawn")
		wait
		
		Missile:
		GEMM F 0 A_JumpIfInventory("GeminiShieldAnim",1,"Animation2")
		GEMM FFGGGGGGG 1 A_JumpIf(z-floorz>0, "JumpingMissile")
		Goto Spawn+1
		
		JumpingMissile:
		GEMM JJKKKKKKK 1 A_JumpIf(z-floorz<=0, "Missile")
		Goto Spawn+1
		
		Intro:
		GEMM STUVVV 4
		goto Spawn+1
		
		Animation2:
		GEMM Q 8
		goto Spawn+1
		
		Animation3:
		GEMM LMNNNML 2
		goto Spawn+1
		
		ClassTimeStop:
		PLAY A 0 SetPlayerProperty(0,1,4)
		PLAY A 0 ACS_Execute(528,0)
		GEMM AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_Stop
		PLAY A 0 SetPlayerProperty(0,0,4)
		Goto pain+1
		
		ClassPain:
		GEMM HHHHHHHHHH 2 A_SpawnItem("PainFX",0,3)
		Goto Spawn+1
		ClassDeath:
		GEMM ] 20 ACS_ExecuteAlways(999,0,0)
		GEMM ] 0 A_PlayerScream
		TNT1 A 0 A_TakeInventory("CloneActive",1)
		NOFX A 0 A_SpawnItemEx("FakeDeathFXMM3",0,0,32)
		NOFX A 1 A_CheckPlayerDone
		wait
		ClassIceDeath:
		GEMM A 35
		TNT1 A 0 A_TakeInventory("CloneActive",1)
		NOFX A 0 A_SpawnItemEx("FrozenDeathFX",0,0,16)
		NOFX A 1 A_CheckPlayerDone
		wait
		WeaponGetM:
		CUTM H 0 A_JumpIfInTargetInventory("GeminiLaserWepM",1,2)
		CUTM H 0 A_GiveToTarget("WeaponGetter")
		CUTM H 0 A_GiveToTarget("GeminiLaserWepM")
		goto ClassDeath
	}
}

actor GeminiLaserBoss : VCBaseWeapon
{
	Weapon.AmmoUse 0
	Weapon.AmmoType "Base28Ammo"
	Obituary "$OB_GEMINIMAN1"
	States
	{
		Ready:
		TNT1 A 0
		GEMB A 1 A_WeaponReady TNT1 A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") GEMB A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
		GEMB A 1 A_WeaponReady TNT1 A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") GEMB A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
		GEMB A 0 A_GiveInventory("Base28Ammo",1)
		Goto Ready
		Deselect:
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
		GEMB A 1 A_Lower
		Loop
		Select:
		TNT1 A 0 ACS_ExecuteAlways(991,0,762)
		TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
		GEMB A 1 A_Raise
		Loop
		
		User1:
		TNT1 A 0 A_JumpIfInventory("GeminiUltActive",1,"NoAmmo")
		TNT1 A 0 A_JumpIfInventory("CloneActive",1,"CloneGoDie")
		GEMB A 0 A_PlaySoundEx("weapon/copyvision", "weapon")
		TNT1 A 0 A_GunFlash("CloneActive")
		TNT1 A 0 A_GiveInventory("CloneActive",1)
		GEMB DEFGHI 1
		TNT1 A 6
		GEMB A 2 Offset(0,80)
		GEMB A 2 Offset(0,68)
		GEMB A 2 Offset(0,56)
		GEMB A 2 Offset(0,44)
		Goto Ready
		CloneGoDie:
		GEMB A 0 A_PlaySoundEx("weapon/copyvision", "weapon")
		TNT1 A 0 A_TakeInventory("CloneActive",1)
		GEMB A 1 Offset(0,44)
		GEMB A 1 Offset(0,56)
		GEMB A 1 Offset(0,68)
		GEMB A 9 Offset(0,80)
		GEMB A 1 Offset(0,68)
		GEMB A 1 Offset(0,56)
		GEMB A 1 Offset(0,44)
		Goto Ready
		
		CloneActive:
		TNT1 A 0 A_GiveInventory("GeminiClone1_P",1)
		TNT1 A 1
		TNT1 A 0 A_JumpIfInventory("IsDead",1,2)
		TNT1 A 0 A_JumpIfInventory("CloneActive",1,"CloneActive")
		TNT1 A 0
		stop
		
		UltCloneActive:
		TNT1 A 0 A_GiveInventory("GeminiClone1_P",1)
		TNT1 A 0 A_GiveInventory("GeminiClone2_P",1)
		TNT1 A 0 A_GiveInventory("GeminiClone3_P",1)
		TNT1 A 1
		TNT1 A 0 A_JumpIfInventory("IsDead",1,2)
		TNT1 A 0 A_JumpIfInventory("GeminiUltActive",1,"UltCloneActive")
		TNT1 A 0
		goto CloneActive
		
		Fire:
		TNT1 A 0 A_JumpIfInventory("GeminiUltActive",1,"Laser2")
		TNT1 A 0 A_JumpIfInventory("CloneActive",1,"Buster")
		goto GeminiLaser
		Buster:
		TNT1 A 0 A_JumpIfInventory("GeminiUltActive",1,"Laser2")
		GEMB A 0 A_PlaySoundEx("Weapon/Mbuster","Weapon")
		GEMB A 0 A_FireCustomMissile("GeminiBuster",0,0,8,0)
		GEMB A 0 A_JumpIfInventory("CloneActive",1,2)
		GEMB A 0 A_Jump(256,2)
		GEMB A 0 A_FireCustomMissile("GeminiCloneShot",0,0,8)
		GEMB BC 3
		GEMB A 10
		GEMB A 0 A_ReFire
		Goto Ready
		Laser:
		GEMB A 0 A_PlaySoundEx("weapon/gemini","weapon")
		GEMB A 0 A_FireCustomMissile("GeminiCloneShotU1",0,0,8)
		GEMB A 0 A_FireCustomMissile("GeminiCloneShotU2",0,0,8)
		GEMB A 0 A_FireCustomMissile("GeminiCloneShotU3",0,0,8)
		GEMB A 0 A_FireCustomMissile("GeminimanLaser",0,0,8,0)
		GEMB BC 3
		GEMB A 10
		GEMB A 0 A_Refire
		Goto Ready
		Laser2:
		GEMB A 0 A_PlaySoundEx("weapon/gemini","weapon")
		GEMB A 0 A_PlaySoundEx("weapon/mbuster","Body")
		GEMB A 0 A_FireCustomMissile("GeminiCloneShotU1",0,0,8)
		GEMB A 0 A_FireCustomMissile("GeminiCloneShotU2",0,0,8)
		GEMB A 0 A_FireCustomMissile("GeminiCloneShotU3",0,0,8)
		GEMB A 0 A_FireCustomMissile("GeminimanLaser2",0,0,8,0)
		GEMB BC 3
		GEMB A 10
		Goto Ready 
		GeminiLaser:
		GEMB A 0 A_PlaySoundEx("weapon/gemini","weapon")
		GEMB A 0 A_FireCustomMissile("GeminimanLaser",0,0,8,0)
		GEMB BC 3
		GEMB A 20
		GEMB A 0 A_Refire
		Goto Ready 
		
		Altfire:
		RATU A 0 A_JumpIfInventory("NoAltfire",1,"NoAmmo")
		GEMB A 0 A_JumpIfInventory("Base28Ammo",14,1)
		goto NoAmmo
		
		Altfire.Real:
		GEMB J 0 A_PlaySoundEx("weapon/geminishield","Weapon")
		TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",2)
		GEMB JKLMN 1 A_GiveInventory("GeminiShieldAnim")
		
		Altfire.Shielding:
		GEMB A 0 A_JumpIfInventory("Base28Ammo",1,1)
		goto Altfire.Cooldown
		GEMB O 0 A_JumpIfInventory("GeminiShieldRelease",1,"Altfire.Cooldown")
		GEMB O 0 A_SpawnItemEx("GeminiManShieldBox",33,0,-Sin(Pitch)*(24) + 20,momx, momy,momz,0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION)
		GEMB O 1 A_SpawnItemEx("GeminiManShield",33,0,-Sin(Pitch)*(24) + 20,momx, momy,momz,0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION)
		GEMB O 0 A_SpawnItemEx("GeminiManShieldBox",33,0,-Sin(Pitch)*(24) + 20,momx, momy,momz,0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION)
		GEMB O 1 A_SpawnItemEx("GeminiManShield",33,0,-Sin(Pitch)*(24) + 20,momx, momy,momz,0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION)
		GEMB O 0 A_GiveInventory("GeminiShieldAnim")
		GEMB O 0 A_TakeInventory("Base28Ammo",1)
		GEMB A 0 A_Refire("Altfire.Shielding")
		goto Altfire.Cooldown
		
		Altfire.Cooldown:
		GEMB NMLKJ 2
		GEMB A 2 Offset(0,80)
		GEMB A 2 Offset(0,68)
		GEMB A 2 Offset(0,56)
		GEMB A 2 Offset(0,44)
		goto Ready
		
		UltimateAttack:
		TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",3)
		TNT1 A 0 ACS_NamedExecuteAlways("VC_UltimateText",0,26)
		TNT1 A 0 A_GiveInventory("GeminiUltActive",1)
		TNT1 C 0 A_PlaySoundEx("classes/ultimateactivation","Auto")
		TNT1 A 0 A_GiveInventory("CloneActive",1)
		TNT1 A 0 A_TAKEInventory("CloneDead",1)
		TNT1 A 0 A_GunFlash("UltCloneActive")
		TNT1 A 0 A_SpawnItemEx("GeminiUltWatcher")
		GEMB DEFGHI 1 A_TAKEINVENTORY("UltAttackFlag",1)
		TNT1 A 6
		GEMB A 2 Offset(0,80)
		GEMB A 2 Offset(0,68)
		GEMB A 2 Offset(0,56)
		GEMB A 2 Offset(0,44)
		Goto Ready
		NoAmmo:
		GEMB A 2 A_GiveInventory("Base28Ammo",1)
		Goto Ready
	}
}

actor GeminiShieldAnim : Powerup
{
Powerup.Duration 3
}

actor GeminiEntrance : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_SpawnItemEx("GeminiSpawnLight")
stop
}
}

actor GeminimanLaser : GeminiLaser
{
	Obituary "$OB_GEMINIMAN1"
	damagetype "Geminiman"
	Radius 8
	Height 8
	speed 45
	Damage (24)//(18)
	reactiontime 200
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
		GEMI A 0 A_SpawnItemEx("GeminiManTrail",0,0,0,0,0,0,0)
		GEMI A 1 A_CountDown
		Goto Spawn+2
	}
}

actor GeminimanLaser2 : GeminimanLaser
{
	+THRUSPECIES
	Species "GeminiClone"
	DamageType "GeminimanUlt"
	-HEXENBOUNCE
	-RIPPER
	speed 100
	damage (18)
	-ALLOWBOUNCEONACTORS
	-CANBOUNCEWATER
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode")
		loopit:
		GEUL A 0 A_GiveToTarget("GeminiUltBuildCooldownGiver")
		GEUL A 0 bright A_SpawnItemEx("GeminiUltTrail1",-momx*2/3,-momy*2/3,-momz*2/3,0,0,0,0,SXF_ABSOLUTEPOSITION)
		GEUL A 0 bright A_SpawnItemEx("GeminiUltTrail1",-momx/3,-momy/3,-momz/3,0,0,0,0,SXF_ABSOLUTEPOSITION)
		GEUL A 0 bright A_SpawnItemEx("GeminiUltTrail1",0,0,0,momx/4,momy/4,momz/4,0,SXF_ABSOLUTEMOMENTUM)
		GEUL A 1 bright A_SpawnItemEx("GeminiUltTrail1",0,0,0,0,0,0,0,SXF_ABSOLUTEPOSITION)
		GEUL B 0 bright A_SpawnItemEx("GeminiUltTrail2",-momx*2/3,-momy*2/3,-momz*2/3,0,0,0,0,SXF_ABSOLUTEPOSITION)
		GEUL B 0 bright A_SpawnItemEx("GeminiUltTrail2",-momx/3,-momy/3,-momz/3,0,0,0,0,SXF_ABSOLUTEPOSITION)
		GEUL B 0 bright A_SpawnItemEx("GeminiUltTrail2",0,0,0,momx/4,momy/4,momz/4,0,SXF_ABSOLUTEMOMENTUM)
		GEUL B 1 bright A_SpawnItemEx("GeminiUltTrail2",0,0,0,0,0,0,0,SXF_ABSOLUTEPOSITION)
		loop
	}
}

actor GeminiManTrail : GeminiTrail
{
	Obituary "$OB_GEMINIMAN1"
	damagetype "Geminiman"
	+MISSILE
	-CLIENTSIDEONLY
	+RIPPER
	-NOINTERACTION
	scale 2.5
	damage (0)
	height 12
	radius 12
	States
	{
		Spawn:
		GEMI AA 0 A_GiveInventory("ProjectileCode",1)
		GEMI A 2
		GEMI A 0 A_ChangeFlag("NOINTERACTION",1)
		GEMI A 3
		stop
	}
}

actor GeminiManTrail2 : GeminiManTrail
{
renderstyle add
}

actor GeminiBuster : FastProjectile
{
	PROJECTILE
	-DONTBLAST
	damagetype "Geminiman"
	species "GeminiClone"
	//+THRUSPECIES
	Obituary "$OB_GEMINIMAN2"
	Speed 64
	Damage (10)
	radius 8
	height 8
	scale 2.5
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
		G3BU ABCD 3
		Goto Spawn+2
		
		Death:
		TNT1 A 0
		stop
	}
}

actor CloneFireFlag : VCOnce {inventory.maxamount 900}
actor CloneFireDelay : VCOnce {inventory.maxamount 900}
actor CloneWalkFrames : VCOnce {inventory.maxamount 900}
actor CloneShotFrames : VCOnce {inventory.maxamount 900}

actor GeminiCloneShot
{
	PROJECTILE
	+COUNTKILL
	-DONTBLAST
	damagetype "Geminiman"
	species "GeminiClone"
	//+THRUSPECIES
	Obituary "$OB_GEMINIMAN3"
	Speed 64
	Damage (10)
	radius 8
	height 8
	scale 2.5
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
		TNT1 A 0 A_ScaleVelocity(0.01)
		TNT1 A 18
		TNT1 A 0 A_ScaleVelocity(100)
		TNT1 A 0 A_PlaySoundEx("Weapon/Mbuster","Weapon")
		G3BU ABCD 3
		goto Spawn+6
		Death:
		TNT1 A 0
		stop
	}
}

actor GeminiCloneShot2 : GeminiCloneShot
{
    Obituary "$OB_GEMINIMAN5"
	damagetype "GeminimanUlt"
    MeleeRange 2
    Var Int user_timer;
    States
    {
        Spawn:
        TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
        TNT1 A 0 A_ScaleVelocity(0.01)
        SpawnWait:
        TNT1 A 18 A_SetUserVar("user_timer",user_timer+1)
        TNT1 A 0 A_JumpIf(user_timer >= MeleeRange,1)
        Loop
        TNT1 A 0 A_ScaleVelocity(100)
        TNT1 A 0 A_PlaySoundEx("Weapon/Mbuster","Weapon")
        BUST A 1 A_GiveToTarget("GeminiUltBuildCooldownGiver")
        wait
    }
}

actor GeminiCloneShotU1 : GeminiCloneShot2
{
MeleeRange 1
    States{
        Spawn:
        TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
        TNT1 A 0 A_ScaleVelocity(0.01)
        SpawnWait:
        TNT1 A 18 A_SetUserVar("user_timer",user_timer+1)
        TNT1 A 0 A_JumpIf(user_timer >= MeleeRange,1)
        Loop
        TNT1 A 0 A_PlaySoundEx("Weapon/Mbuster","Weapon")
        TNT1 A 0 A_PlaySoundEx("Weapon/gemini","Body")
        TNT1 A 0 A_ScaleVelocity(100)
        loopit:
        GEUL A 0 A_GiveToTarget("GeminiUltBuildCooldownGiver")
        GEUL A 0 bright A_SpawnItemEx("GeminiUltTrail1",-momx*2/3,-momy*2/3,-momz*2/3,0,0,0,0,SXF_ABSOLUTEPOSITION)
        GEUL A 0 bright A_SpawnItemEx("GeminiUltTrail1",-momx/3,-momy/3,-momz/3,0,0,0,0,SXF_ABSOLUTEPOSITION)
        GEUL A 0 bright A_SpawnItemEx("GeminiUltTrail1",0,0,0,momx/4,momy/4,momz/4,0,SXF_ABSOLUTEMOMENTUM)
        GEUL A 1 bright A_SpawnItemEx("GeminiUltTrail1",0,0,0,0,0,0,0,SXF_ABSOLUTEPOSITION)
        GEUL B 0 bright A_SpawnItemEx("GeminiUltTrail2",-momx*2/3,-momy*2/3,-momz*2/3,0,0,0,0,SXF_ABSOLUTEPOSITION)
        GEUL B 0 bright A_SpawnItemEx("GeminiUltTrail2",-momx/3,-momy/3,-momz/3,0,0,0,0,SXF_ABSOLUTEPOSITION)
        GEUL B 0 bright A_SpawnItemEx("GeminiUltTrail2",0,0,0,momx/4,momy/4,momz/4,0,SXF_ABSOLUTEMOMENTUM)
        GEUL B 1 bright A_SpawnItemEx("GeminiUltTrail2",0,0,0,0,0,0,0,SXF_ABSOLUTEPOSITION)
        loop
        Death:
        TNT1 A 0
        stop
    }
}
actor GeminiCloneShotU2 : GeminiCloneShotU1 {MeleeRange 2}
actor GeminiCloneShotU3 : GeminiCloneShotU1 {MeleeRange 3}

actor GeminiUltTrail1 : BaseDecorativeActor
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
GEUL C 4
stop
}
}

actor GeminiUltTrail2 : BaseDecorativeActor
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
GEUL D 4
stop
}
}


Actor GeminiClone1_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 ACS_NamedExecuteWithResult("VC_GemFollower",0,1)
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",1) == 5,"CloneFire")
TNT1 A 0 A_JumpIf(z-floorz>0, "CloneJumping")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",1) == 1,"CloneSee1")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",1) == 2,"CloneSee2")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",1) == 3,"CloneSee3")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",1) == 4,"CloneSee4")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",1) == 0,"CloneDoneWalking")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",1) == -1,"CloneNormal2")
Goto CloneNormal
CloneNormal2: TNT1 A 0 A_SpawnItemEx("GeminiCloneN",0,0,0,0,0,0,0,1) stop
CloneNormal: TNT1 A 0 A_SpawnItemEx("GeminiClone",0,0,0,0,0,0,0,1) stop
CloneSee1: TNT1 A 0 A_SpawnItemEx("GeminiCloneB",0,0,0,0,0,0,0,1) stop
CloneSee2: TNT1 A 0 A_SpawnItemEx("GeminiCloneC",0,0,0,0,0,0,0,1) stop
CloneSee3: TNT1 A 0 A_SpawnItemEx("GeminiCloneD",0,0,0,0,0,0,0,1) stop
CloneSee4: TNT1 A 0 A_SpawnItemEx("GeminiCloneE",0,0,0,0,0,0,0,1) stop
CloneDoneWalking: TNT1 A 0 A_TakeInventory("CloneWalkFrames",999) TNT1 A 0 A_SpawnItemEx("GeminiCloneE2",0,0,0,0,0,0,0,1) stop
CloneFire: TNT1 A 0 A_JumpIf(z-floorz>0, "CloneJumpFiring") TNT1 A 0 A_SpawnItemEx("GeminiCloneF",0,0,0,0,0,0,0,1) stop
CloneJumping: TNT1 A 0 A_SpawnItemEx("GeminiCloneI",0,0,0,0,0,0,0,1) stop
CloneJumpFiring: TNT1 A 0 A_SpawnItemEx("GeminiCloneJ",0,0,0,0,0,0,0,1) stop
}
}

Actor GeminiClone2_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",2) == 5,"CloneFire")
TNT1 A 0 A_JumpIf(z-floorz>0, "CloneJumping")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",2) == 1,"CloneSee1")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",2) == 2,"CloneSee2")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",2) == 3,"CloneSee3")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",2) == 4,"CloneSee4")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",2) == 0,"CloneDoneWalking")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",2) == -1,"CloneNormal2")
Goto CloneNormal
CloneNormal2: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt2N",0,0,0,0,0,0,0,1) stop
CloneNormal: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt2",0,0,0,0,0,0,0,1) stop
CloneSee1: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt2B",0,0,0,0,0,0,0,1) stop
CloneSee2: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt2C",0,0,0,0,0,0,0,1) stop
CloneSee3: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt2D",0,0,0,0,0,0,0,1) stop
CloneSee4: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt2E",0,0,0,0,0,0,0,1) stop
CloneDoneWalking: TNT1 A 0 A_TakeInventory("CloneWalkFrames2",999) TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt2E2",0,0,0,0,0,0,0,1) stop
CloneFire: TNT1 A 0 A_JumpIf(z-floorz>0, "CloneJumpFiring") TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt2F",0,0,0,0,0,0,0,1) stop
CloneJumping: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt2I",0,0,0,0,0,0,0,1) stop
CloneJumpFiring: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt2J",0,0,0,0,0,0,0,1) stop
}
}

Actor GeminiClone3_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",3) == 5,"CloneFire")
TNT1 A 0 A_JumpIf(z-floorz>0, "CloneJumping")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",3) == 1,"CloneSee1")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",3) == 2,"CloneSee2")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",3) == 3,"CloneSee3")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",3) == 4,"CloneSee4")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",3) == 0,"CloneDoneWalking")
TNT1 A 0 A_JumpIf(CallACS("VC_GeminiCloneTargetCheck",3) == -1,"CloneNormal2")
Goto CloneNormal
CloneNormal2: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt3N",0,0,0,0,0,0,0,1) stop
CloneNormal: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt3",0,0,0,0,0,0,0,1) stop
CloneSee1: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt3B",0,0,0,0,0,0,0,1) stop
CloneSee2: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt3C",0,0,0,0,0,0,0,1) stop
CloneSee3: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt3D",0,0,0,0,0,0,0,1) stop
CloneSee4: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt3E",0,0,0,0,0,0,0,1) stop
CloneDoneWalking: TNT1 A 0 A_TakeInventory("CloneWalkFrames3",999) TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt3E2",0,0,0,0,0,0,0,1) stop
CloneFire: TNT1 A 0 A_JumpIf(z-floorz>0, "CloneJumpFiring") TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt3F",0,0,0,0,0,0,0,1) stop
CloneJumping: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt3I",0,0,0,0,0,0,0,1) stop
CloneJumpFiring: TNT1 A 0 A_SpawnItemEx("GeminiCloneUlt3J",0,0,0,0,0,0,0,1) stop
}
}

actor GeminiClone
{
    //tid+3000
    PROJECTILE
    +NOINTERACTION
    -SHOOTABLE
    Health 100
    speed 0
    scale 2.5
    Radius 16
    Height 56
    MeleeRange 1
    PainChance 256
    RenderStyle Translucent
    Alpha 0.0
    States
    {
        Spawn:
        TNT1 A 0
        TNT1 A 1 A_JumpIf(True, "SpawnF")
        Wait
        SpawnF:
        GEMM A 0
        Goto Spawn2
        Spawn2:
        TNT1 "#" 1000 A_SetTics(MeleeRange * 18)
        TNT1 "#" 0 A_SetTranslucent(1.0)
        TNT1 "#" 0 A_ChangeFlag(SHOOTABLE,1)
        GEMM "#" 2 A_TakeFromTarget("CloneWalkFrames",99)
        stop
        Spawn3:
        TNT1 "#" 1000 A_SetTics(MeleeRange * 18)
        TNT1 "#" 0 A_SetTranslucent(1.0)
        TNT1 "#" 0 A_ChangeFlag(SHOOTABLE,1)
        GEMM "#" 2 A_Stop
        stop
        Spawn4:
        TNT1 "#" 1000 A_SetTics(MeleeRange * 18)
        TNT1 "#" 0 A_SetTranslucent(1.0)
        TNT1 "#" 0 A_ChangeFlag(SHOOTABLE,1)
        GEMM "#" 2 A_GiveToTarget("CloneFireFlag")
        TNT1 A 6
        TNT1 A 0 A_TakeFromTarget("CloneShotFrames",99)
        stop
    }
}

actor GeminiCloneN : GeminiClone{States{SpawnF:TNT1 A 0 A_Stop Goto Spawn3}}
actor GeminiCloneB : GeminiClone{States{SpawnF:TNT1 B 0 A_Stop Goto Spawn3}}
actor GeminiCloneC : GeminiClone{States{SpawnF:TNT1 C 0 A_Stop Goto Spawn3}}
actor GeminiCloneD : GeminiClone{States{SpawnF:TNT1 D 0 A_Stop Goto Spawn3}}
actor GeminiCloneE : GeminiClone{States{SpawnF:TNT1 E 0 A_Stop Goto Spawn3}}
actor GeminiCloneE2 : GeminiClone{States{SpawnF:TNT1 E 0 A_Stop Goto Spawn2}}
actor GeminiCloneF : GeminiClone{States{SpawnF:TNT1 F 0 A_Stop Goto Spawn4}}
actor GeminiCloneI : GeminiClone{States{SpawnF:TNT1 I 0 A_Stop Goto Spawn3}}
actor GeminiCloneJ : GeminiClone{States{SpawnF:TNT1 J 0 A_Stop Goto Spawn4}}

actor CloneActive : VCOnce {}
actor CloneDead : VCOnce {}
actor GeminiUltActive : VCOnce {}

actor CloneFireFlag2 : VCOnce {inventory.maxamount 900}
actor CloneFireDelay2 : VCOnce {inventory.maxamount 900}
actor CloneWalkFrames2 : VCOnce {inventory.maxamount 900}
actor CloneShotFrames2 : VCOnce {inventory.maxamount 900}

actor CloneFireFlag3 : VCOnce {inventory.maxamount 900}
actor CloneFireDelay3 : VCOnce {inventory.maxamount 900}
actor CloneWalkFrames3 : VCOnce {inventory.maxamount 900}
actor CloneShotFrames3 : VCOnce {inventory.maxamount 900}

actor GeminiCloneUlt2 : GeminiClone {MeleeRange 2}
actor GeminiCloneUlt2N : GeminiCloneUlt2{States{SpawnF:TNT1 A 0 A_Stop Goto Spawn3}}
actor GeminiCloneUlt2B : GeminiCloneUlt2{States{SpawnF:TNT1 B 0 A_Stop Goto Spawn3}}
actor GeminiCloneUlt2C : GeminiCloneUlt2{States{SpawnF:TNT1 C 0 A_Stop Goto Spawn3}}
actor GeminiCloneUlt2D : GeminiCloneUlt2{States{SpawnF:TNT1 D 0 A_Stop Goto Spawn3}}
actor GeminiCloneUlt2E : GeminiCloneUlt2{States{SpawnF:TNT1 E 0 A_Stop Goto Spawn3}}
actor GeminiCloneUlt2E2 : GeminiCloneUlt2{States{SpawnF:TNT1 E 0 A_Stop Goto Spawn2}}
actor GeminiCloneUlt2F : GeminiCloneUlt2{States{SpawnF:TNT1 F 0 A_Stop Goto Spawn4}}
actor GeminiCloneUlt2I : GeminiClone{States{SpawnF:TNT1 I 0 A_Stop Goto Spawn3}}
actor GeminiCloneUlt2J : GeminiClone{States{SpawnF:TNT1 J 0 A_Stop Goto Spawn4}}

actor GeminiCloneUlt3 : GeminiClone {MeleeRange 3}
actor GeminiCloneUlt3N : GeminiCloneUlt3{States{SpawnF:TNT1 A 0 A_Stop Goto Spawn3}}
actor GeminiCloneUlt3B : GeminiCloneUlt3{States{SpawnF:TNT1 B 0 A_Stop Goto Spawn3}}
actor GeminiCloneUlt3C : GeminiCloneUlt3{States{SpawnF:TNT1 C 0 A_Stop Goto Spawn3}}
actor GeminiCloneUlt3D : GeminiCloneUlt3{States{SpawnF:TNT1 D 0 A_Stop Goto Spawn3}}
actor GeminiCloneUlt3E : GeminiCloneUlt3{States{SpawnF:TNT1 E 0 A_Stop Goto Spawn3}}
actor GeminiCloneUlt3E2 : GeminiCloneUlt3{States{SpawnF:TNT1 E 0 A_Stop Goto Spawn2}}
actor GeminiCloneUlt3F : GeminiCloneUlt3{States{SpawnF:TNT1 F 0 A_Stop Goto Spawn4}}
actor GeminiCloneUlt3I : GeminiClone{States{SpawnF:TNT1 I 0 A_Stop Goto Spawn3}}
actor GeminiCloneUlt3J : GeminiClone{States{SpawnF:TNT1 J 0 A_Stop Goto Spawn4}}

actor GeminiUltBuildCooldownGiver : UltBuildCooldownGiver
{
	Powerup.Duration 35
}

actor GeminiUltWatcher
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_GiveToTarget("GeminiUltBuildCooldownGiver")
TNT1 A 2 A_TakeFromTarget("MediumUltimateAmmo",1)
TNT1 A 0 A_JumpIfInTargetInventory("MediumUltimateAmmo",1,"Spawn")
goto Death

Death:
TNT1 A 0 A_TakeFromTarget("GeminiUltActive")
stop
}
}

actor GeminiManShield : BasicClientSide
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
G3SH AA 1 //A_Warp(AAPTR_TARGET,33,0,24,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
stop
}
}

actor GeminiManShieldBox
{
+MISSILE
Speed 0
+DONTSPLASH
+NOEXPLODEFLOOR
+FLOORCLIP
+NOGRAVITY
Damage 0
Height 40
Radius 32
health 99999
scale 2.5
+SHOOTABLE
+NOBLOOD
-SOLID
painchance 256
bloodtype ""
species "GeminiClone"
+THRUSPECIES
damagefactor "Geminiman", 0.0
+CANTSEEK
+DONTRIP
+GHOST
+NORADIUSDMG
+NOTARGETSWITCH
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 AA 1 //A_Warp(AAPTR_TARGET,33,0,40,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
stop
Death:
TNT1 A 0 //A_PlaySound("item/protoreflect")
TNT1 A 1
stop
//Heroes
Pain.MegaUlt:
Pain.BigBangStrike:
//MM1
Pain.CutmanUlt:
Pain.ElecmanLightning:
//Pain.Iceman:
Pain.FiremanUlt:
//Pain.Timeman:
Pain.OilmanUlt:
//Pain.GutsGBlock:
//Pain.GutsGDrill:
Pain.GutsmanGUpperCut:
//Pain.GigaBomb:
//MM2
//Pain.Quickman:
Pain.NoUlt: //Woodman
Pain.MetalUlt:
//Pain.Crashman:
Pain.AirmanUlt:
Pain.HeatmanAfterBurnPillar:
Pain.BubbleCrit:
//Pain.Flashman:
Pain.AlienDozer:
//MM3
Pain.SparkmanUlt:
Pain.GeminimanUlt:
Pain.TopmanUltimate:
Pain.NeedleUlt:
Pain.MagnetmanUlt:
Pain.ShadowmanTongue:
Pain.ShadowmanFlame:
Pain.HardmanUlt:
Pain.SnakemanUlt:
//Pain.DocRobot:
//MM4
Pain.BrightManUltSmall:
Pain.BrightManUltLarge:
Pain.DivemanMoby:
Pain.DrillmanUlt:
Pain.PharaohUlt:
Pain.DustmanUlt:
Pain.RingRing:
Pain.SkullmanUlt:
Pain.ToadmanUlt:
//MM5
Pain.NapalmUlt:
Pain.WavemanBike:
Pain.StarManRock:
Pain.CrystalmanUlt:
Pain.ChargemanUltCoal:
Pain.GyromanAttackUlt:
Pain.GravityUltDrop:
//Pain.Darkman1:
//Pain.Darkman2:
//Pain.Darkman3:
//Pain.Darkman4:
//MM6
Pain.FlameUlt:
Pain.KnightFullJump:
//Pain.Tomahawkman:
Pain.CentaurUlt:
Pain.CentaurDash:
Pain.WindmanUlt:
//Pain.Yamatoman:
//MM6
Pain.FreezemanUltFreeze:
Pain.FreezemanUltFreeze2:
Pain.BurstmanUlt:
//Pain.Cloudman:
Pain.TurbomanUlt:
//MM8
Pain.TenguManUlt:
Pain.AstroCrushUlt:
Pain.GrenademanUlt:
Pain.SearchBush:
//MMB
//Pain.Coldman:
Pain.BurnerTrap:
Pain.KingUlt:
//MM9
//Pain.Plugman:
Pain.GalaxymanUlt:
//Pain.Concreteman:
Pain.MagmamanUlt:
//MM10
Pain.CommandomanStorm:
Pain.ChillmanFreeze:
Pain.StrikeManUlt:
Pain.SheepmanUlt:
Pain.PumpmanUlt:
Pain.BadTraffic:
Pain.SolarInferno:
Pain.BlademanUlt:
//MM11
//Pain.Blastman:
Pain.AcidmanUlt:
Pain.FusemanHighVoltage:
//MMV
//Pain.Mercury:
Pain.VenusWaterCrash:
Pain.TerraUlt:
Pain.MarsUlt:
//Pain.Jupiter:
Pain.SaturnStopper:
Pain.UranusDeepDestroyer:
Pain.NeptuneInstantRust:
//Pain.Pluto:
//MMK
Pain.EnkerUlt:
Pain.QuintUlt:
Pain.PunkUlt:
Pain.BalladeUlt:
Pain.RaThorUlt:
//WT
//Pain.BusterRodG:
Pain.HyperStormHUlt:
TNT1 A 0
stop
Pain:
TNT1 A 0 A_JumpIfInTargetInventory("GeminiShieldRelease",1,"Death")
//TNT1 A 0 A_GiveToTarget("GeminiShieldRelease")
TNT1 A 0 A_GiveToTarget("GeminiShieldCounter",1)
TNT1 AAAAAAAAAAAA 0 A_SpawnItemEx("GeminiSparkle",4,random(-16,16),random(-16,16),random(3,9),0,random(-8,8),random(-30,30))
stop
}
}

actor GeminiSparkle : BasicClientSide
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
G3SP ABC 4
stop
}
}

Actor GeminiShieldRelease : Powerup
{
Powerup.Duration 12
}

actor GeminiShieldCounter : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_PlaySoundEx("item/protoreflect","Auto")

TNT1 A 0 A_JumpIfInventory("GeminiShieldCooldown",1,"Nope")
TNT1 A 0 A_PlaySoundEx("weapon/geminireflect","Auto")
TNT1 A 0 A_PlaySoundEx("weapon/geminireflect2","Auto")
TNT1 A 0 A_FireCustomMissile("GeminiShieldShot1",0,0,0,0)
TNT1 A 0 A_FireCustomMissile("GeminiShieldShot2",0,0,0,0)
TNT1 A 0 A_GiveInventory("GeminiShieldCooldown")
stop

Nope:
TNT1 A 0
stop
}
}

actor GeminiSpawnLight : BasicClientSide
{
alpha 0.7
renderstyle translucent
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileFXCode",1)
TNT1 A 0 A_PlaySoundEx("weapon/geminienter","Body")
G3LI ABCDEEEEEEEEEEEEDCBA 1
stop
}
}

actor GeminiShieldShot1
{
translation "216:216=197:197"
PROJECTILE
radius 16
height 16
speed 30
scale 2.5
Obituary "$OB_GEMINIMAN4"
damagetype "GeminiShieldAttack"
Damage (35)//(5)
species "GeminiClone"
var int user_theAngle;
bouncefactor 0.1//0.5
bouncecount 20
+THRUSPECIES
+RIPPER
+USEBOUNCESTATE
+BOUNCEONWALLS
//+NOEXPLODEFLOOR
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 0 A_SetUserVar("user_theAngle",angle)
MZBU A 1 A_Weave(2,0,6,0)
MZBU X 0 A_SpawnItemEx("GeminiSparkle2",random(-16,16),random(-16,16),random(-12,12),0,0,frandom(-2,0))
MZBU X 1 A_Weave(2,0,6,0)
MZBU B 1 A_Weave(2,0,6,0)
MZBU X 0 A_SpawnItemEx("GeminiSparkle2",random(-16,16),random(-16,16),random(-12,12),0,0,frandom(-2,0))
MZBU X 1 A_Weave(2,0,6,0)
MZBU X 0 A_SetAngle(user_theAngle)
MZBU X 0 A_ChangeVelocity(30,0,momz,CVF_RELATIVE|CVF_REPLACE)
goto Spawn+3
Bounce:
MZBU X 0 A_SetAngle(user_theAngle)
MZBU X 0 A_ChangeVelocity(30,0,momz,CVF_RELATIVE|CVF_REPLACE)
goto Spawn+3
Death:
TNT1 A 0
stop
}
}

actor GeminiShieldShot2 : GeminiShieldShot1
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 0 A_SetUserVar("user_theAngle",angle)
MZBU X 1 A_Weave(-2,0,6,0)
MZBU B 0 A_SpawnItemEx("GeminiSparkle2",random(-16,16),random(-16,16),random(-12,12),0,0,frandom(-2,0))
MZBU B 1 A_Weave(-2,0,6,0)
MZBU X 1 A_Weave(-2,0,6,0)
MZBU A 0 A_SpawnItemEx("GeminiSparkle2",random(-16,16),random(-16,16),random(-12,12),0,0,frandom(-2,0))
MZBU A 1 A_Weave(-2,0,6,0)
MZBU X 0 A_SetAngle(user_theAngle)
MZBU X 0 A_ChangeVelocity(30,0,momz,CVF_RELATIVE|CVF_REPLACE)
goto Spawn+3
Bounce:
MZBU X 0 A_SetAngle(user_theAngle)
MZBU X 0 A_ChangeVelocity(30,0,momz,CVF_RELATIVE|CVF_REPLACE)
goto Spawn+3
}
}

actor GeminiShieldAttackProtect : PowerProtection
{
	powerup.duration 15
	DamageFactor "GeminiShieldAttack", 0.0
}

actor GeminiShieldCooldown : Powerup
{
	powerup.duration 15
}

actor GeminiSparkle2 : GeminiSparkle
{
renderstyle translucent
alpha 0.7
}