i need a cog that can generate things..... IE bacta ... or guns
This is the static archive of the Massassi Forums. The forums are
closed indefinitely. Thanks for all the memories!
You can also download
Super Old Archived Message Boards
from when Massassi first started.
"View" counts are as of the day the forums were archived, and will no longer increase.
#enemygenmp.cog
#
#The thing is the number of the ghost object where the enemy is spawned
#
#The template is the enemy you want to use
#
#The gen_num is how many total enemies you want before the cog stops respawning them
#
#The max_alive is how many enemies are alive at once
#
# ====================================
symbols
message startup
message user0
message timer
message pulse
message killed mask=0xfff
thing generator_pos desc=generator_ghost
template enemy_tpl desc=enemy_to_generate
int initial_delay=1.0 local desc=initial_delay
int generate_delay=5.0 local desc=generate_delay
int min_dist=0.0 local desc=min_distance
int max_dist=1000.0 local desc=max_distance
float distance=1.0 local
cog squadmaker local
int enemy local
int cur_num=0 local
int cur_alive=0 local
int generate_num
int max_alive desc=max_alive
end
# ========================================================================================
code
startup:
// if initial_delay == -1 then the generator will be started by SendMessage
// user0 from another COG. Much like the WAKEUP message in DF...
if(initial_delay != -1) SetTimer(initial_delay);
Return;
# ........................................................................................
user0:
// FIXME!! remove next line when parsing bug is corrected
enemy = enemy;
// fall through on purpose
# ........................................................................................
timer:
SetPulse(generate_delay);
// fall through on purpose
# ........................................................................................
pulse:
if((cur_alive < max_alive))
{
distance = VectorDist(GetThingPos(generator_pos), GetThingPos(GetLocalPlayerThing()));
if((distance >= min_dist) && (distance <= max_dist))
{
if(IsThingVisible(generator_pos)==0)
{
enemy = CreateThing(enemy_tpl, generator_pos);
CaptureThing(enemy);
cur_num = cur_num + 1;
cur_alive = cur_alive + 1;
// If we have generated enough enemies, end the pulse
if(cur_num >= generate_num) SetPulse(0);
}
}
}
return;
# ........................................................................................
killed:
cur_alive = cur_alive - 1;
SendMessage(squadmaker, user0);
return;
end