The Dink Network

Reply to Re: A "high-score" based Dmod

If you don't have an account, just leave the password field blank.
Username:
Password:
Subject:
Antispam: Enter Dink Smallwood's last name (surname) below.
Formatting: :) :( ;( :P ;) :D >( : :s :O evil cat blood
Bold font Italic font hyperlink Code tags
Message:
 
 
June 18th 2020, 08:12 AM
slayer.gif
Exzcimus
Peasant He/Him Philippines
Change is constant, but Constants do not change. 
@Robj

One of the noted success in my system is being able to knock back enemies to the direction of hit.

Try this code, attach it to a pillbug

en-pill.c

//pillbug brain

void main( void )
{
int &pb_life = 30;
int &save_x = sp_x(&current_sprite, -1);
int &save_y = sp_y(&current_sprite, -1);

sp_brain(&current_sprite, 9);
sp_speed(&current_sprite, 3);
sp_hitpoints(1, &pb_life);
sp_exp(&current_sprite, 30);
sp_base_walk(&current_sprite, 130);
sp_base_death(&current_sprite, 140);
sp_touch_damage(&current_sprite, 5);
sp_timing(&current_sprite, 15);
sp_distance(&current_sprite, 1);

preload_seq(131);
preload_seq(133);
preload_seq(141);
preload_seq(143);

}

void hit( void )
{
sp_target(&current_sprite, &enemy_sprite);
playsound(30, 21050, 4000, &current_sprite, 0);
say("`5&pb_life hp", &current_sprite)

int &k_dir = sp_dir(&enemy_sprite, -1);

if (&k_dir == 2)
{

external("e-damage", "knock2");

}

if (&k_dir == 4)
{

external("e-damage", "knock4");

}

if (&k_dir == 6)
{

external("e-damage", "knock6");

}

if (&k_dir == 8)
{

external("e-damage", "knock8");

}

}

void touch ( void )
{

if (random(2,1) == 1)
{
external("d-damage", "stun");
}

if (random(2,1) == 2)
{
int &rand = random(4, 2);
&pb_life += &rand;
say_xy("`4+ &rand hp", &save_x, &save_y);
playsound(65, 22050, 3000, &current_sprite, 0);

}

}

//End of script

e-damage.c

//called externally by enemy scripts when they are hit.
//enemies have a selective behavior when it comes to
//being stunned, knocked back, downed, or slowed down.

void stun ( void )
{

int &stop = random( 500, 1 );

freeze(&current_sprite);
wait(&stop);
unfreeze(&current_sprite);

}

//knock em' away! vertical direction

void knock2 ( void )
{
sp_my(&current_sprite, +16);
wait(50);
freeze(&current_sprite);
wait(300);
unfreeze(&current_sprite);
}

void knock8 ( void )
{
sp_my(&current_sprite, -16);
wait(50);
freeze(&current_sprite);
wait(300);
unfreeze(&current_sprite);
}

void knock4 ( void )
{

sp_mx(&current_sprite, -16);
wait(50);
freeze(&current_sprite);
wait(300);
unfreeze(&current_sprite);
}

void knock6 ( void )
{

sp_mx(&current_sprite, +16);
wait(50);
freeze(&current_sprite);
wait(300);
unfreeze(&current_sprite);
}

}

//diagonals don't really matter now