
The rain works as a secondary attack for the Skull Staff. This attack fires an invisible, slow speed projectile that is set to drop an item every first frame of it's idle states. The item is specified as a "thing" type that uses range attacks to create the rain. For every first frame that is looped during the idle states, another cloud will appear behind the last. Take a look at the code and poke around, you may find a faster and easier way of cleaning up anything that doesnt appear useful:
ATTACK DEFINITIONS:
Code: Select all
[PLAYER_SKULLSTAFF_C] //invisible cloud projectile
ATTACKTYPE=PROJECTILE;
HEIGHT=8;
RADIUS=13;
Z_OFFSET=10;
FLOAT_SPEED=0;
ATTACK_HEIGHT=104;
TRANSLUCENCY=40%;
SPEED=3;
FUSE=12;
KEEP_FIRING_CHANCE=83.92%;
NO_TRACE_CHANCE=0%;
ATTACKRANGE=2048;
PROJECTILE_SPECIAL=SPAWNCEILING,NOBLOCKMAP,MISSILE,DROPOFF,NOGRAVITY,NOSHADOW;
STATES(IDLE)=SMK7:H:3:BRIGHT:SPAWN(SKULLRAIN),
SMK7:H:3:NORMAL:TRANS_FADE(10),
SMK7:H:3:BRIGHT:TRANS_FADE(20),
SMK7:H:3:NORMAL:TRANS_FADE(0),
SMK7:H:3:BRIGHT:TRANS_FADE(40),
SMK7:H:3:NORMAL:TRANS_FADE(0),
SMK7:H:3:BRIGHT:NOTHING;
[SKULLSTAFF_RAIN]//rain attacks
ATTACKTYPE=PROJECTILE;
MASS=31;
DAMAGE.VAL=5;
DAMAGE.MAX=20;
DAMAGE.OBITUARY="OB_Plasma";
X_OFFSET=0;
Y_OFFSET_3;
SPEED=0;
PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOSHADOW;
TRANSLUCENCY=60%;
DLIGHT.TYPE=QUADRATIC;
DLIGHT.RADIUS=100;
DLIGHT.COLOUR=#9F009B;
STATES(IDLE)=FX20:A:3:BRIGHT:NOTHING;
STATES(DEATH)=FX20:B:0:BRIGHT:DLIGHT_FADE(0),
FX20:C:0:BRIGHT:TRANS_FADE(0%),
FX20:D:3:BRIGHT:PLAYSOUND(CBWXPL),
FX20:E:3:BRIGHT:NOTHING,
FX20:F:3:BRIGHT:NOTHING,
FX20:G:3:BRIGHT:NOTHING,
FX20:H:3:BRIGHT:NOTHING,
FX20:I:3:BRIGHT:NOTHING,
#REMOVE;
[SKULLSTAFF_RAIN2]
ATTACKTYPE=PROJECTILE;
MASS=37;
DAMAGE.VAL=5;
DAMAGE.MAX=20;
DAMAGE.OBITUARY="OB_Plasma";
X_OFFSET=25;
Y_OFFSET=7;
SPEED=0;
PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOSHADOW;
TRANSLUCENCY=60%;
DLIGHT.TYPE=QUADRATIC;
DLIGHT.RADIUS=100;
DLIGHT.COLOUR=#9F009B;
STATES(IDLE)=FX20:A:3:BRIGHT:NOTHING;
STATES(DEATH)=FX20:B:0:BRIGHT:DLIGHT_FADE(0),
FX20:C:0:BRIGHT:TRANS_FADE(0%),
FX20:D:3:BRIGHT:PLAYSOUND(CBWXPL),
FX20:E:3:BRIGHT:NOTHING,
FX20:F:3:BRIGHT:NOTHING,
FX20:G:3:BRIGHT:NOTHING,
FX20:H:3:BRIGHT:NOTHING,
FX20:I:3:BRIGHT:NOTHING,
#REMOVE;
[SKULLSTAFF_RAIN3]
ATTACKTYPE=PROJECTILE;
MASS=30;
DAMAGE.VAL=5;
DAMAGE.MAX=20;
DAMAGE.OBITUARY="OB_Plasma";
X_OFFSET=-25;
Y_OFFSET=4;
SPEED=0;
PROJECTILE_SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOSHADOW;
TRANSLUCENCY=60%;
DLIGHT.TYPE=QUADRATIC;
DLIGHT.RADIUS=100;
DLIGHT.COLOUR=#9F009B;
STATES(IDLE)=FX20:A:3:BRIGHT:NOTHING;
STATES(DEATH)=FX20:B:0:BRIGHT:DLIGHT_FADE(0),
FX20:C:0:BRIGHT:TRANS_FADE(0%),
FX20:D:3:BRIGHT:PLAYSOUND(CBWXPL),
FX20:E:3:BRIGHT:NOTHING,
FX20:F:3:BRIGHT:NOTHING,
FX20:G:3:BRIGHT:NOTHING,
FX20:H:3:BRIGHT:NOTHING,
FX20:I:3:BRIGHT:NOTHING,
#REMOVE;
Code: Select all
[CLOUDTRAIL]
TRANSLUCENCY=40%;
SPECIAL=NOBLOCKMAP,DROPOFF,NOGRAVITY,NOSHADOW,NOZBUFFER;
PALETTE_REMAP=TEXT_PURPLE;
STATES(IDLE)=SMK7:H:3:NORMAL:TRANS_FADE(10),
SMK7:K:3:BRIGHT:TRANS_FADE(20),
SMK7:H:3:NORMAL:TRANS_FADE(0),
SMK7:K:3:BRIGHT:TRANS_FADE(40),
SMK7:H:3:NORMAL:TRANS_FADE(0),
SMK7:K:3:BRIGHT:NOTHING,
#REMOVE;
[SKULLRAIN]//SPAWNS CLOUD TO RAIN DOWN ENEMIES
HEIGHT=8;
RADIUS=13;
FUSE=2;
SHOT_HEIGHT=100%;
SPECIAL=NOBLOCKMAP,MISSILE,DROPOFF,NOCLIP,NOGRAVITY,NOSHADOW,ON_CEILING;
TRANSLUCENCY=60%;
RANGE_ATTACK=SKULLSTAFF_RAIN;
DLIGHT.TYPE=MODULATE;
DLIGHT.RADIUS=300;
DLIGHT.COLOUR=#9F009B;
SIDE=1;
STATES(IDLE)=NULL:A:3:BRIGHT:RANGE_ATTACK,
NULL:A:0:BRIGHT:SPAWN(CLOUDTRAIL),
SMK7:H:1:BRIGHT:TRANS_FADE(10),
NULL:A:0:BRIGHT:SPAWN(CLOUDTRAIL),
NULL:B:1:BRIGHT:RANGE_ATTACK(SKULLSTAFF_RAIN2),
NULL:A:0:BRIGHT:SPAWN(CLOUDTRAIL),
SMK7:H:1:BRIGHT:TRANS_FADE(20),
NULL:A:0:BRIGHT:SPAWN(CLOUDTRAIL),
NULL:C:1:BRIGHT:RANGE_ATTACK(SKULLSTAFF_RAIN3),
NULL:A:0:BRIGHT:SPAWN(CLOUDTRAIL),
SMK7:H:1:BRIGHT:TRANS_FADE(0),
NULL:A:0:BRIGHT:SPAWN(CLOUDTRAIL),
NULL:A:1:BRIGHT:RANGE_ATTACK,
NULL:A:0:BRIGHT:SPAWN(CLOUDTRAIL),
SMK7:H:1:BRIGHT:TRANS_FADE(40),
NULL:A:0:BRIGHT:SPAWN(CLOUDTRAIL),
NULL:C:1:BRIGHT:RANGE_ATTACK(SKULLSTAFF_RAIN3),
NULL:A:0:BRIGHT:SPAWN(CLOUDTRAIL),
SMK7:H:1:BRIGHT:TRANS_FADE(0),
NULL:A:0:BRIGHT:SPAWN(CLOUDTRAIL),
NULL:B:3:BRIGHT:RANGE_ATTACK(SKULLSTAFF_RAIN2);
STATES(DEATH)=SKPJ:E:0:BRIGHT:DLIGHT_FADE(0),
SKPJ:E:0:BRIGHT:TRANS_FADE(0%),
SKPJ:E:3:BRIGHT:PLAYSOUND(CBWXPL),
SKPJ:F:2:BRIGHT:NOTHING,
SKPJ:G:2:BRIGHT:NOTHING,
SKPJ:H:2:BRIGHT:NOTHING,
SKPJ:I:2:BRIGHT:NOTHING,
SKPJ:J:1:BRIGHT:NOTHING,
#REMOVE;
