NOTICE: The first enemy is the big bat boss from the first part of the game. This isn't just because it was the first boss, but also because its scripts (there are 4) are referenced by other bosses as well.
Vampire Bat
timeline_index = st_cvbat
switch timeline_position
{
case 0:
status |= STILL;
status &= ~MOVING;
if !(system.status & $F0) //if boss fight
exit;
alarm[2] = $78;
timeline_position += 1;
break;
case 1:
alarm[2] -= 1;
if !alarm[2]
{
sc_cvbat0();
sprite_index = spr_VampireBat;
}
break;
case 2:
if abs(Belmont.y - y) < 4
{
switch irandom(3)
{
case 0: alarm[2] = $7B; break;
case 1: alarm[2] = $20; break;
case 2: alarm[2] = $3D; break;
case 3: alarm[2] = $C7; break;
}
status &= ~MOVING;
timeline_position += 1;
}
break;
case 3:
alarm[2] -= 1;
if alarm[2]
{
if !irandom(15)
{
if abs(Belmont.y-y) < $14
{
var temp; temp = abs(Belmont.x-x);
if temp < $58
if sign(temp) == image_xscale
{
vspd = -5/2;
hspd = 0;
alarm[2] = 8;
timeline_position = 4;
}
}
}
}
else
{
var temp; temp = global.instance[0].y - y;
if temp < 0
{
with spawn_fireball(0,0) //C to D
sc_cvbat2();
alarm[2] = $18;
timeline_position = 6;
}
else
{
var temp; temp = sc_cvbat1(0,$18);
sc_cvbat3(temp);
timeline_position = 5;
}
}
break;
case 4:
alarm[2] -= 1;
if !alarm[2]
{
if global.instance[0].y < y
{
with spawn_fireball(0,0)
sc_cvbat2();
alarm[2] = $18;
timeline_position = 6;
}
else
{
var temp; temp = sc_cvbat1(0,$18);
sc_cvbat3(temp);
timeline_position = 5;
}
}
break;
case 5:
vspd += 3/128;
if vspd < 0 && y-view_yview < $70
sc_cvbat0();
else
{
if x < $10
{
x = $10;
hspd *= -1;
image_xscale *= -1;
}
else
if x > $EF
{
x = $F0;
hspd *= -1;
image_xscale *= -1;
}
}
case 6:
alarm[2] -= 1;
if !alarm[2]
sc_cvbat0();
}
Bat Subscript 0
script_id = sc_cvbat0
var temp; temp[1] = irandom(1);
temp[0] = $30;
if temp[1]
temp[0] = -temp[0];
temp[1] = temp[0] + Belmont.x - view_xview;
if temp[1] < $10 || temp[1] > $EF
temp[0] = -temp[0];
temp[1] = sc_cvbat1(temp[0],$28);
temp[0] = temp[1] & 1;
temp[1] = temp[1] >> 1;
temp[1] -= temp[1]>>2;
temp[1] /= $100;
if temp[0]
{
hspd = temp[1] * image_xscale;
vspd = 3/4;
}
else
{
vspd = temp[1];
hspd = 3/4 *image_xscale;
}
if alarm[5]
vspd *= -1;
timeline_position = 2;
Bat Subscript 1
script_id = sc_cvbat1
The value returned by this code may be ±1 the intended value due to rounding in GM. However, considering what this code is used for, it shouldn't be a noticeable difference.
en_xscale_set();
var temp;
temp[3] = Belmont.y + argument1 - y;
temp[1] = max(abs(temp[3]),1);
alarm[5] = !temp[1];
temp[3] = Belmont.x + argument0 - x;
temp[2] = max(abs(temp[3]),1);
if temp[2] < temp[1]
{
temp[0] = temp[2];
temp[1] = temp[1];
temp[3] = 1;
}
else
{
temp[0] = temp[1];
temp[1] = temp[2];
temp[3] = 0;
}
return floor(temp[0]/temp[1] * $100) << 1 | temp[3];
Bat Subscript 2
script_id = sc_cvbat2
var temp; temp[1] = sc_cvbat1(0,0);
temp[0] = temp[1] & 1;
temp[1] = temp[1] >> 1;
temp[1] += temp>>1;
temp[1] /= $100;
if temp[0]
{
hspd = temp[1] * image_xscale;
vspd = 3/2;
}
else
{
vspd = temp[1];
hspd = 3/2 * image_xscale;
}
if alarm[5]
vspd *= -1;
Bat Subscript 3
script_id = sc_cvbat3
var temp; temp[1] = argument0;
temp[0] = temp[1] & 1;
temp[1] &= ~1;
temp[1] /= $100
if temp[0]
{
hspd = temp[1] * image_xscale;
vspd = 2;
}
else
{
vspd = temp[1];
hspd = 2 * image_xscale;
}
if alarm[5]
vspd *= -1;
Medusa Bust
timeline_index = st_cvmedusa
Medusa has a flashing palette swap, like the Bone Pillars.
switch timeline_position
case 0:
status |= STILL;
status &= ~MOVING;
if !(system.status & $F0) //if boss fight
exit;
alarm[2] = $B4;
ystart = y + 4;
timeline_position += 1;
break;
case 1:
alarm[2] -= 1;
if alarm[2] exit;
//Replace tiles under bust
status &= ~STILL;
status |= MOVING;
alarm[3] = irandom(3);
sprite_index = spr_MedusaBust;
image_speed = 1/8;
vspd = 1/2;
timeline_position = 2;
break;
case 2:
if y-view_yview < $A8
{
en_xscale_set();
hspd = 15/8 * image_xscale;
alarm[3] = alarm[3] + 1 & 3;
switch other.alarm[3]
{
case 0: alarm[2] = $10; break;
case 1: alarm[2] = $80; break;
case 2: alarm[2] = $40; break;
case 3: alarm[2] = $A0; break;
}
spawn_medsnake(0,0);
timeline_position = 3;
}
break;
case 3:
alarm[2] -= 1;
if alarm[2]
{
move_sinewave(0);
if x-view_xview < $10
{
hspd *= -1;
image_xscale *= -1;
}
else
if x-view_xview > $EF
{
hspd *= -1;
image_xscale *= -1;
}
}
else
{
timeline_position = 4;
vspd = 0;
alarm[2] = $3C;
}
break;
case 4:
alarm[2] -= 1;
if !alarm[2]
{
vspd = 1/2;
timeline_position = 2;
}
break;
}
//Flash the palette
if !(image_index mod 1)
{
sprite_index = spr_MedusaFlash;
}
Medusa's Snake
timeline_index = st_cvsnake
switch timeline_position
{
case 0:
sprite_index = spr_MedusaSnake;
image_speed = 1/8;
en_xscale_set();
vspd = 0;
timeline_position = 1;
break;
case 1:
//Oddly, this used friction instead of gravity in code.
vspd += 1/8;
//Check for collision below
if tile_map_read($2E,0) //bbox_bottom 8 pixels above base
{
vspd = 0;
y &= ~7;
hspd = 3/2 * image_xscale;
alarm[2] = $18;
timeline_position = 2;
}
break;
case 2:
alarm[2] -= 1;
if alarm[2]
timeline_position = 3;
else
if !tile_map_read($2E,0) //see prev note
{
en_xscale_set();
vspd = 0;
hspd = 0;
timeline_position = 1;
}
break;
case 3:
en_xscale_set();
hspd = 3/2 * image_xscale;
alarm[2] = $18;
timeline_position = 2;
break;
}
Twin Mummies
timeline_index = st_cvmummy
Another flashing palette swap enemy. It also requires a step counter, so you can't use irandom() in place of system.alarm[0] in this code.
switch timeline_position
{
case 0:
sprite_index = spr_TwinMummy;
palette = 0;
image_speed = 1/16;
status = STILL | PASSTHRU;
if !(system.status & $F0) //if boss fight
exit;
alarm[3] = myIndex + irandom(3);
//584 = $20
//530 = $00
alarm[2] = $78;
timeline_position += 1;
break;
case 1:
alarm[2] -= 1;
if !alarm[2]
{
en_xscale_set();
hspd = 3/4 * image_xscale;
status &= ~(STILL | PASSTHRU);
status |= MOVING;
alarm[3] = alarm[3] + 1 & 3;
switch alarm[3]
{
case 0: alarm[2] = $7B; break;
case 1: alarm[2] = $41; break;
case 2: alarm[2] = $B4; break;
case 3: alarm[2] = $20; break;
}
timeline_position = 2;
}
break;
case 2:
alarm[2] -= 1;
if alarm[2]
{
if !irandom($1F)
{
en_xscale_set();
hspd = 3/4 * image_xscale;
if image_xscale != global.image_xscale
if abs(x - Belmont.x) < $38
{
hspd *= -1;
image_xscale *= -1;
}
}
if x - view_xview < 8
x = view_xview + 8;
else
if x - view_xview > $F8
x = view_xview + $F8;
}
else
{
status &= ~MOVING;
en_xscale_set();
timeline_position = 3;
alarm[2] = $28;
}
break;
case 3:
alarm[2] -= 1;
if alarm[2]
{
var temp; temp = (system.alarm[0] & 2) + 1;
if temp != palette
{
palette = temp;
if palette == 0
sprite_index = spr_TwinMummy;
else
sprite_index = spr_MummyFlash;
}
}
else
{
if palette != 0
{
palette = 0;
sprite_index = spr_TwinMummy;
}
alarm[2] = 8;
timeline_position = 4;
with spawn_twinwrap(0,8-16*irandom(1))
{
hspd = 3/2 * image_xscale;
vspd = 3/2;
play_sound(snd_twinwrap);
}
}
break;
case 4:
alarm[2] -= 1;
if !alarm[2]
{
en_xscale_set();
status |= MOVING;
alarm[3] = alarm[3] + 1 & 3;
switch alarm[3]
{
case 0: alarm[2] = $7B; break;
case 1: alarm[2] = $41; break;
case 2: alarm[2] = $B4; break;
case 3: alarm[2] = $20; break;
}
timeline_position = 2;
}
break;
}
Mummy Wrap
timeline_index = st_twinwrap
switch timeline_position
{
case 0:
status = MOVING;
sprite_index = spr_MummyWrap;
image_speed = 1/8;
move_sinewave(0);
timeline_position += 1;
break;
case 1:
move_sinewave(0);
break;
}
Frankenstein's Monster
timeline_index = st_themonster
en_xscale_set();
switch timeline_position
{
case 0:
if !(status & PASSTHRU)
{
status |= PASSTHRU;
image_speed = 1/$18;
sprite_index = spr_Frankenstein;
}
if !(system.status & $F0) //if boss fight
exit;
alarm[2] = $78;
status &= ~PASSTHRU;
timeline_position += 1;
break;
case 1:
alarm[2] -= 1;
if !alarm[2]
{
timeline_position = 2;
status |= MOVING | STILL;
hspd = 3/4 * image_xscale;
alarm[2] = $3C;
//55 = system.alarm[0] & 3;
}
break;
case 2:
alarm[2] -= 1;
if alarm[2]
Igor.x = x;
else
{
with Igor
{
timeline_position = 1;
status &= ~PASSTHRU;
status |= MOVING;
}
if abs(Belmont.x - x) < $50
dir = -image_xscale;
else
dir = image_xscale;
timeline_position = 3;
switch irandom(3)
{
case 0: alarm[2] = $3C; break;
case 1: alarm[2] = $24; break;
case 2: alarm[2] = $54; break;
case 3: alarm[2] = $18; break;
}
dir = -image_xscale;
hspd = 3/4 * dir;
}
break;
case 3:
alarm[2] -= 1;
if alarm[2]
{
if x - view_xview < $10 || x - view_xview > $EF
{
dir = - dir;
hspd = 3/4 * dir;
}
}
else
{
if abs(Belmont.x - x) < $50
dir *= -1;
hspd = 3/4 * dir;
timeline_position = 3;
switch irandom(3)
{
case 0: alarm[2] = $3C; break;
case 1: alarm[2] = $24; break;
case 2: alarm[2] = $54; break;
case 3: alarm[2] = $18; break;
}
}
}
Igor
timeline_index = st_igor
switch timeline_position
{
case 0:
if !(status & PASSTHRU)
{
status |= PASSTHRU;
sprite_index = spr_Fleaman
image_speed = 1/8;
}
en_xscale_set();
hspd = 3/2 * image_xscale;
vspd = 0;
break;
case 1:
case 2:
vspd += 1/8;
if tile_map_read(0,0) //(0,8) //check collision below
{
y &= ~7;
vspd = 0;
hspd = 0;
image_index = 1;
alarm[2] = 8;
status &= ~MOVING;
timeline_position += 1;
}
if x - view_xview < 9
x = view_xview + 9;
else
if x - view_xview > $F7
y = view_xview + $F7;
hspd *= -1;
image_xscale *= -1;
if y - view_yview < $30
{
y = view_yview + $30;
vspd = 0;
}
if timeline_position == 1
if vspd >= 0
{
image_index = 2;
timeline_position = 2;
with spawn_fireball(0,0)
{
sc_cvbat2();
}
}
break;
case 3:
alarm[2] -= 1;
if alarm[2]
{
if y - view_yview < $30
{
y = view_yview+$30;
vspd = 0;
}
}
else
{
timeline_position = 1;
switch irandom(3)
{
case 0: vspd = -3; break;
case 1: vspd = -5; break;
case 2: vspd = -4; break;
case 3: vspd = -6; break;
}
image_index = 1;
}
break;
}
Death
timeline_index = st_cvdeath
en_xscale_set();
switch timeline_position
{
case 0:
status |= STILL;
status &= ~MOVING;
if !(system.status & $F0) //if boss fight
exit;
alarm[2] = $78;
timeline_position += 1;
break;
case 1:
alarm[2] -= 1;
if alarm[2] exit;
sprite_index = spr_Reaper;
vspd = 5/2;
status |= MOVING;
status &= STILL;
timeline_position = 2;
break;
case 2:
vspd += 5/256;
sc_reaper();
break;
case 3:
if !(irandom($1F))
if abs(x-Belmont.x) < $48
{
dir = image_xscale;
vspd = 2;
hspd = 5/4 * dir;
status |= MOVING;
timeline_position = 4;
exit;
}
alarm[2] -= 1;
if alarm[2] exit;
vspd = 1+irandom(1);
dir = irandom(1) - 1 | 1;
hspd = 3/4 * dir;
status |= MOVING;
timeline_position = 4;
break;
case 4:
if x - view_xview < $10
{
x = view_xview + $10;
dir *= -1;
}
else
if x - view_xview > $F0
{
x = view_xview + $F0;
dir *= -1;
}
vspd -= 3/128;
if y - view_yview < $21
{
y = view_yview + $21;
vspd = 0;
}
else
sc_reaper();
break;
}
Death Subscript
script_id = sc_reaper
if tile_map_read(0,0) //(0,$18) //check collision below (i think)
{
var temp;
y &= ~7;
for(temp[2]=3+global.hard_mode; temp[2] > 0; temp[2]-=1)
with spawn_reapscythe(0,0) //A to D
{
temp[0] = Belmont.x - view_xview;
temp[1] = Belmont.y - view_yview;
switch temp[2]
{
case 1:
x = temp[0] + $04;
y = temp[1] + $20;
break;
case 2:
x = temp[0] + $30;
y = temp[1] + $D0;
break;
case 3:
x = temp[0] + $A0;
y = temp[1] + $18;
break;
case 4:
x = temp[0] + $20;
y = temp[1] + $B0;
break;
}
x = (x & $FF) + view_xview;
y = (y & $FF) + view_yview;
alarm[2] = $28;
status &= (MOVING | STILL);
}
switch irandom(3)
{
case 0: alarm[2] = $90; break;
case 1: alarm[2] = $5F; break;
case 2: alarm[2] = $B9; break;
case 3: alarm[2] = $54; break;
}
status &= ~MOVING;
timeline_position = 3;
}
Death's Scythe
timeline_index = st_reapscythe
Requires a step counter.
switch timeline_position
{
case 0:
sprite_index = spr_ReapScythe;
image_speed = 1/2;
alarm[2] -= 1;
if alarm[2]
{
status &= ~HIDDEN;
if system.alarm[0] & 1
status |= HIDDEN;
}
else
{
status &= ~HIDDEN;
timeline_position = 1;
}
break;
case 3:
alarm[2] -= 1;
if alarm[2] break;
case 1:
var temp; temp[1] = sc_cvbat1(0,0);
temp[0] = temp[1] & 1;
temp[1] = temp[1] >> 1;
temp[1] /= $100;
if temp[0]
{
hspd = temp[1] * image_xscale;
vspd = 14/16;
}
else
{
vspd = temp[1];
hspd = 14/16 * image_xscale;
}
if alarm[5]
vspd *= -1;
status |= MOVING;
alarm[2] = $78;
timeline_position = 2;
break;
case 2:
alarm[2] -= 1;
if !alarm[2]
{
status &= ~MOVING;
alarm[2] = $20;
timeline_position = 3;
}
break;
}
Humanoid Dracula
timeline_index = st_bigdbody
The original code was a tad hard to follow, so I'm not sure if this is correct or not. I had to read the original code time after time and time again. Dracula's head is separate from his body, but the body controls the head.
Also, Dracula's code requires a step counter as well.
if timeline_position < 14
en_xscale_set();
switch timeline_position
{
case 0:
status |= STILL;
status &= ~MOVING;
if !(system.status & $F0) //if boss fight
exit;
alarm[2] = $78;
timeline_position += 1;
break;
case 1:
alarm[2] -= 1;
if alarm[2] exit;
with instance_create(0,0,BigDHead)
sprite_index = spr_BigDHead;
sprite_index = spr_BigDBody;
status |= HIDDEN;
alarm[2] = $3C;
timeline_position = 2;
break;
case 2:
alarm[2] -= 1;
if !alarm[2]
{
status |= MOVING;
vspd = -1/2;
timeline_position = 3;
}
sc_bigdhead();
break;
case 3:
//Change $A8 to the height of the floor
if y - view_yview < $A8
{
y = view_yview + $A8;
alarm[2] = $3C;
timeline_position = 4;
}
sc_bigdhead();
break;
case 4:
alarm[2] -= 1;
if !alarm[2]
{
alarm[2] = $45;
timeline_position = 5;
}
sc_bigdhead();
break;
case 5:
alarm[2] -= 1;
if alarm[2]
{
if system.alarm[0] & 1
status |= HIDDEN;
else
status &= ~HIDDEN;
}
else
{
image_index = 1;
switch irandom(3)
{
case 0: alarm[2] = $24; break;
case 1: alarm[2] = $10; break;
case 2: alarm[2] = $32; break;
case 3: alarm[2] = $18; break;
}
status &= ~PASSTHRU;
timeline_position = 6;
}
sc_bigdhead();
break;
case 6:
alarm[2] -= 1;
if !alarm[2]
{
image_index = 2;
timeline_position = 6;
alarm[2] = $10;
}
sc_bigdhead();
break;
case 7:
alarm[2] -= 1;
if !alarm[2]
{
var temp;
for(temp[1]=0; temp[1]<3; temp[1]+=1)
with spawn_fireball(0,0) //4 to D
{
temp[0] = sc_cvbat1(0,$10-$10*temp[1]);
sc_cvbat3(temp[0]);
}
alarm[2] = $20;
timeline_position = 8;
}
sc_bigdhead();
break;
case 8:
alarm[2] -= 1;
if !alarm[2]
{
timeline_position = 9;
status |= PASSTHRU;
alarm[2] = $20;
}
sc_bigdhead();
break;
case 9:
alarm[2] -= 1;
if alarm[2]
{
if system.alarm[0] & 1
BigDHead.status &= ~HIDDEN;
else
BigDHead.status |= HIDDEN;
}
else
{
timeline_position = 10;
alarm[2] = $4F;
status |= HIDDEN;
BigDHead.status |= HIDDEN;
}
sc_bigdhead();
break;
case 10:
alarm[2] -= 1;
if !alarm[2]
{
timeline_position = 11;
alarm[2] = $20;
var temp; temp[1] = system.alarm[0];
while 1
{
switch temp[1] & 7;
{
case 0: temp[0] = $10; break;
case 1: temp[0] = $F8; break;
case 2: temp[0] = $80; break;
case 3: temp[0] = $60; break;
case 4: temp[0] = $30; break;
case 5: temp[0] = $D8; break;
case 6: temp[0] = $60; break;
case 7: temp[0] = $A8; break;
}
x = (Belmont.x - view_xview + temp[0] & $FF) + view_xview;
if x - view_xview < $14 || x - view_xview > $EB
temp[1] += 1;
else
break;
}
}
break;
case 11:
alarm[2] -= 1;
if alarm[2]
{
if system.alarm[0] & 1
{
status &= ~HIDDEN;
BigDHead.status &= ~HIDDEN;
}
else
{
status |= HIDDEN;
BigDHead.status |= HIDDEN;
}
}
else
{
switch irandom(3)
{
case 0: alarm[2] = $24; break;
case 1: alarm[2] = $10; break;
case 2: alarm[2] = $32; break;
case 3: alarm[2] = $18; break;
}
status &= ~(PASSTHRU | HIDDEN);
timeline_position = 6;
}
sc_bigdhead();
break;
case 13:
status |= HIDDEN | PASSTHRU;
with BigDHead
{
status |= PASSTHRU;
image_xscale = -other.image_xscale;
hspd = 2 * image_xscale;
vspd = -5;
}
alarm[2] = $78;
timeline_position = 14;
break;
case 14:
alarm[2] -= 1;
if !alarm[2]
{
timeline_index = st_bigdemon;
timeline_posiiton = 0;
alarm[2] = $20;
}
break;
}
Dracula's Head Subscript
script_id = sc_bigdhead
BigDHead.y = y - $1A;
BigDHead.x = x - 6 * image_xscale;
BigDHead.image_xscale = image_xscale;
BigDHead.timeline_position = timeline_position;
Demonoid Dracula
timeline_index = st_bigdemon
en_xscale_set();
switch timeline_position
{
case 0:
alarm[2] -= 1;
if alarm[2]
{
if system.alarm[0] & 1
BigDHead.status &= ~HIDDEN;
else
BigDHead.status |= HIDDEN;
}
else
{
//change music
for({var temp; temp=0;} temp < 6; temp += 1;)
with spawn_bigdflesh(0,0); //spawns 6 chunks of flesh
{
switch temp
{
case 0:
image_xscale = -1;
hspd = 45/16;
vspd = hspd;
break;
case 1:
image_xscale = -1;
hspd = 4;
vspd = 0;
break;
case 2:
image_xscale = -1;
hspd = 45/16;
vspd = -hspd;
break;
case 3:
image_xscale = 1;
hspd = -45/16;
vspd = -hspd;
break;
case 4:
image_xscale = 1;
hspd = -4;
vspd = 0;
break;
case 5:
image_xscale = 1;
hspd = -45/16;
vspd = hspd;
break;
}
}
alarm[2] = $10;
timeline_position = 1;
status |= PASSTHRU | HIDDEN;
with BigDHead
{
BigDHead.status |= HIDDEN;
sprite_index = spr_DemonHead;
}
}
break;
case 1:
alarm[2] -= 1;
if !alarm[2]
{
hp = $40;
/*
Additional code run elsewhere raises or
lowers the HP bar as so:
if system.alarm[0] & 1
global.boss_health += sign(hp - global.boss_health);
*/
BigDHead.status &= ~PASSTHRU;
status &= ~HIDDEN;
sprite_index = spr_DemonBody;
image_index = 6;
//Replace $A8 with height of floor
y = view_yview + $A8;
alarm[2] = $21;
timeline_position = 2;
sc_bigdemonhead();
}
break;
case 2:
alarm[2] -= 1;
if !alarm[2]
{
if system.alarm[0] & 1
alarm[2] = $55;
else
alarm[2] = $7B;
timeline_position = 3;
status &= ~PASSTHRU;
}
sc_bigdemonhead();
break;
case 3:
alarm[2] -= 1;
if alarm[2]
{
if !(system.alarm[0] & $F)
{
if image_xscale != Belmont.image_xscale
if io_hold & $40 //if player is attacking
{
alarm[2] = $10;
timeline_position = 4;
}
}
}
else
{
image_index = 1;
alarm[2] = $10;
timeline_position = 4;
}
sc_bigdemonhead();
break;
case 4:
alarm[2] -= 1;
if !alarm[2]
{
if system.alarm[0] & 1
vspd = -6;
else
vspd = -9/2;
hspd = 3/4 * image_xscale;
image_index = 2;
timeline_position = 5;
}
sc_bigdemonhead();
break;
case 5:
vspd += 3/16;
var temp; temp = y - view_yview;
if temp < $20
vspd = 0;
if temp < $60
image_index = 2;
else
image_index = 3;
temp = x - view_xview;
if temp < $18 || temp > $E7
hspd *= -1;
if tile_map_read(0,0) //Check collision below
{
vspd = 0;
y &= ~7;
image_index = 4;
alarm[2] = $18;
timeline_position = 6;
play_sound(snd_thwomp/*heavy landing*/);
}
sc_bigdemonhead();
break;
case 6:
alarm[2] -= 1;
if !alarm[2]
{
alarm[2] = $10;
image_index = 6;
timeline_position = 7;
}
sc_bigdemonhead();
break;
case 7:
alarm[2] -= 1;
var temp; temp = abs(x - Belmont.x);
if temp < $30 || !(temp & 3)
{
if system.alarm[0] & 1
alarm[2] = $55;
else
alarm[2] = $7B;
timeline_position = 3;
}
else
if temp & 3
{
if system.alarm[0] & 1
alarm[2] = $10
else
alarm[2] = $28;
timeline_position = 8;
}
sc_bigdemonhead();
break;
case 8:
alarm[2] -= 1;
if !alarm[2]
{
image_index = 5;
alarm[2] = $10;
timeline_position = 9;
}
sc_bigdemonhead();
break;
case 9:
alarm[2] -= 1;
if !alarm[2]
{
play_sound(snd_fwoosh/*fwooshy flames*/);
var temp;
with BigDHead
for(temp[1]=0; temp[1]<3; temp[1]+=1)
with spawn_fireball(0,0)
{
temp[0] = sc_cvbat1(0,$10-$10*temp[1]);
sc_cvbat3(temp[0]);
}
alarm[2] = $10;
timeline_position = 10;
}
sc_bigdemonhead();
break;
case 10:
alarm[2] -= 1;
if !alarm[2]
{
image_index = 6;
//Change the $A8 to the floor height
y = view_yview + $A8;
alarm[2] = $21;
status |= PASSTHRU;
timeline_position = 2;
}
sc_bigdemonhead();
break;
}
Demonoid Head Subscript
script_id = sc_bigdemonhead
BigDHead.image_xscale = image_xscale;
BigDHead.y = y - $20;
BigDHead.x = x + 8 * image_xscale;