//General Base actors for inheriting or use


actor BasicImplosion
{//Easy way of managing every explosion such as topspin
//+USESPAWNEVENTSCRIPT
//var int user_UseProjSpawnFunc;
Obituary "%o told %k they forgot the obituary. (BasicImplosion)"
DamageType "Normal"
+MISSILE
+NOBLOCKMAP
+NOTELEPORT
-SOLID
+NOCLIP
+DONTBLAST
+NOGRAVITY
//+RIPPER
+SKYEXPLODE
+NOINTERACTION
+DONTSPLASH
+THRUGHOST
+THRUACTORS
+DONTREFLECT
Damage 0
radius 2
height 2
//Scale 2.5
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_Explode(5000,32,0)
stop
Death:
TNT1 A 1
stop
}
}

actor BasicClientSide
{//Works well for actors spawned from projectiles
+CLIENTSIDEONLY
+NOBLOCKMAP
+NOINTERACTION
+NOGRAVITY
-SOLID
radius 2
height 2
scale 2.5
}

actor BasicGraphicEffectM : BasicGraphicEffect
{
+DONTREFLECT
+DONTSPLASH
-NOINTERACTION
+NOBLOCKMAP
+PAINLESS
Damage (0)
}


actor BasicHelper
{//Used by things like PharaohFX
+MISSILE
-SOLID
+NOCLIP
+NOINTERACTION
+NOGRAVITY
+DONTBLAST
+DONTREFLECT
+THRUACTORS
+NOBLOCKMAP
renderstyle none
radius 2
height 2
States
{
Spawn:
TNT1 A 1
stop
Death:
TNT1 A 1
stop
}
}

actor ShieldWarper_CBM
{//Used for Warpers
+NOINTERACTION
+CLIENTSIDEONLY
-SOLID
+MISSILE
+THRUACTORS
+NOGRAVITY
+DONTBLAST
+DONTREFLECT
Height 2
Radius 2
Scale 2.5
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_GiveInventory("MM8BDMProjSpawnFuncClient",1)
TNT1 A 0 ACS_NamedExecuteAlways("cbm_clientwarper",0,1)
TNT1 A 0 A_Jump(256,"Shield")
Goto Shield
Shield:
STAR AABBCCDD 1 A_Warp(AAPTR_TARGET,0,0,16,0,8+16)//WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION
loop
}
}

actor BasicItemPickup : CustomInventory
{
+INVBAR
+COUNTITEM
Inventory.amount 1
Inventory.maxamount 1
Inventory.icon "NULLICON"
Inventory.PickupSound "item/1up"
Tag "No Tag Defined"
Scale 2.0
}


actor BasicClassItem : CustomInventory
{
Inventory.Amount 1
Inventory.Maxamount 1
Inventory.Icon "WHATICON"
Inventory.PickupMessage "YOU GOT PLACEHOLDER!"
Inventory.PickupSound "GNT/Treasure"
+INVBAR
//+COUNTITEM
Tag "You forgot the Tag"
Scale 2.0
States
{
Spawn:
CARY W 1
wait
Use:
TNT1 A 0 A_JumpIfInventory("BearerFlag",1,"No")
TNT1 A 0 A_JumpIfInventory("MM8BDMPlayer",1,"UseCBM")
fail
UseCBM:
TNT1 A 0
fail

No:
TNT1 A 0
fail
}
}


actor Basic_FloorQuakeSpawn : BasicExplosion
{
Obituary "%k gave %o a \chHARD\c- time. (Basic_FloorQuakeSpawn)"
damagetype "Normal"
+NOCLIP
+NOTIMEFREEZE
+SERVERSIDEONLY
Renderstyle None
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_SetArg(0,angle*256/360)
TNT1 A 0 A_SetArg(1,1+CallACS("core_checkrune",RUNE_SPREAD,2)*2)
TNT1 A 0 Thing_Move(0,1000+momz*8,1)
TNT1 A 1 A_JumpIf(1,"Quake")
Quake:
TNT1 A 4 A_SpawnItemEx("Basic_FloorQuakeBoom",0,0,28,0,0,0,0,1+SXF_TRANSFERSPECIAL)//32768
stop
}
}

actor Basic_FloorQuakeBoom : BasicExplosion
{
Obituary "%k gave %o a \chHARD\c- time. (Basic_FloorQuakeBoom)"
damagetype "Normal"
+NOTIMEFREEZE
Renderstyle None
MeleeRange 10
Accuracy 10
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_Explode((Accuracy+Args[0]*MeleeRange)*Args[1],15,0,0,15)
FX:
TNT1 A 0 A_FaceTarget
TNT1 A 0 A_SpawnItemEx("BasicHardQuakeFX",random(10,30),random(-20,20),-28,0,0,0,30,1)
TNT1 A 0 A_SpawnItemEx("BasicHardQuakeFX",random(10,30),random(-20,20),-28,0,0,0,0,1)
TNT1 A 0 A_SpawnItemEx("BasicHardQuakeFX",random(10,30),random(-20,20),-28,0,0,0,-30,1)
TNT1 A 4
stop
}
}

actor Basic_FloorQuakeFX_H : BasicExplosion
{
//var int user_TranslateWhiteColors;
//ActiveSound "misc_L/hugequake2"
+NOTIMEFREEZE
RenderStyle None
//[4] >> Rings of FX / 10 (EX: 33 is 3 rings)
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_SetArg(4,momz*100.0+0.5)
//TNT1 A 0 Radius_Quake(2,10,0,1+Args[4]/10,0)
TNT1 A 0 A_ActiveSound
TNT1 A 10 A_SpawnItemEx("Basic_FloorQuakeFX",0,0,-momz,0,0,0,0,1+SXF_TRANSFERSPECIAL)
stop
}
}
//Edit as class needs
actor Basic_FloorQuakeFX : BasicGraphicEffect
{
-MISSILE//From Unholy Classes Handyman
Renderstyle None
Accuracy 0//Base starting distance
Mass 100//Distance added per wave
MeleeRange 7//Applied to Args[2]
//[0] Max size (Main A_CountDownArg)
//[1] Reverse of [0] (Counts up)
//[2] Bits added per wave
//[3] Bits spawned per circle
//[4] Is [3] but +1 for spawn angle
Args 0
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_SetArg(0,Args[4]/10)
//TNT1 A 0 A_SetArg(1,0)
TNT1 A 0 A_SetArg(2,MeleeRange)
goto SpawnCycle+2
SpawnL:
TNT1 A 0 A_SpawnItemEx("BasicHardQuakeFX",Accuracy+Mass*Args[1],0,0,0,0,3,Args[3]*360.0f/Args[4],1)
TNT1 A 0 A_CountDownArg(3,"SpawnCycle")
TNT1 A 0 A_SpawnItemEx("BasicHardQuakeFX",Accuracy+Mass*Args[1],0,0,0,0,3,Args[3]*360.0f/Args[4],0)
TNT1 A 0 A_CountDownArg(3,"SpawnCycle")
loop
SpawnCycle:
TNT1 A 1 A_CountDownArg(0)
TNT1 A 0 A_SetAngle(angle+random(Args[2],Args[2]*2))

TNT1 A 0 A_SetArg(1,Args[1]+1)
TNT1 A 0 A_SetArg(4,Args[2]*Args[1])
TNT1 A 0 A_SetArg(3,Args[4]-1)
TNT1 A 0 A_Jump(256,"SpawnL")
goto SpawnL
Death:
TNT1 A 1
stop
}
}

actor BasicHardQuakeFX : BasicGraphicEffect
{
States
{
SpawnFrame:
SMFX XYZ 3
stop
}
}

actor BasicSlideDashFX_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_SpawnItemEx("BasicSlideDashFX",-1,-12,10,0,0,0,0,1)
TNT1 A 0 A_SpawnItemEx("BasicSlideDashFX",-1,12,10,0,0,0,0,1)
stop
}
}
actor BasicSlideDashFX : BasicClientSide
{
States
{
Spawn:
QMFX S 0
QMFX S 0 A_SetScale(ScaleX*(random(0,1)*2-1),ScaleY)
QMFX STU 5
stop
}
}


actor CBM_BasicBoomFX : BasicGraphicEffect
{
+FORCEXYBILLBOARD
+BRIGHT
}

actor BasicBoom1FX_4_215 : CBM_BasicBoomFX
{// HyperBomb 4/215
States
{
SpawnFrame:
Q_1D BCDEFGHIJKLMN 1
stop
}
}

actor BasicBoom5FX_192_198 : CBM_BasicBoomFX
{// Drillbomb/NapalmBomb
States
{
SpawnFrame:
T_XP ABCDEFGHIJKLMNOPQRST 1
stop
}
}
actor BasicBoom6FX_192_198 : CBM_BasicBoomFX
{// MM6 uses a quicker version of boom FX
States
{
SpawnFrame:
T_XP ACUVWXYRT 1
stop
}
}

actor BasicBoom5FX_4_192 : CBM_BasicBoomFX{States{SpawnFrame:U_XP ABCDEFGHIJKLMNOPQRST 1
stop}}
actor BasicBoom6FX_4_192 : CBM_BasicBoomFX{States{SpawnFrame:U_XP ACUVWXYRT 1
stop}}

actor BasicBoom5FX_4_198 : CBM_BasicBoomFX{States{SpawnFrame:V_XP ABCDEFGHIJKLMNOPQRST 1
stop}}
actor BasicBoom6FX_4_198 : CBM_BasicBoomFX{States{SpawnFrame:V_XP ACUVWXYRT 1
stop}}

actor BasicBoom5FX_4_4 : CBM_BasicBoomFX{States{SpawnFrame:X_XP ABCDEFGHIJKLMNOPQRST 1
stop}}
actor BasicBoom6FX_4_4 : CBM_BasicBoomFX{States{SpawnFrame:X_XP ACUVWXYRT 1
stop}}

actor BasicBoom5FX_4_215 : CBM_BasicBoomFX{States{SpawnFrame:N_XP ABCDEFGHIJKLMNOPQRST 1
stop}}
actor BasicBoom6FX_4_215 : CBM_BasicBoomFX{States{SpawnFrame:N_XP ACUVWXYRT 1
stop}}

actor BasicBoom5FX_4_210 : CBM_BasicBoomFX{States{SpawnFrame:O_XP ABCDEFGHIJKLMNOPQRST 1
stop}}
actor BasicBoom6FX_4_210 : CBM_BasicBoomFX{States{SpawnFrame:O_XP ACUVWXYRT 1
stop}}
