Note: I got better at coding in time
IIRC instead of taking a screenshot when you die, this zooms on the killer without stopping th gameplay.
I remember not being sure how to follow a specific player, so this probably still zooms where you just died
Heh, the player track enable notice is still there
//Currently unused, modify to follow killer
/*
object_event_add(Spectator, ev_other, ev_user9, '
for(i=1; i<=ds_list_size(global.players); i+=1)
{
var newTrackId, newPlayer;
newTrackId = (track_id + i) mod ds_list_size(global.players);
newPlayer = ds_list_find_value(global.players, newTrackId);
if(newPlayer.object and newPlayer != global.myself)
{
if(newPlayer.team == myTeam || myTeam == TEAM_SPECTATOR)
{
if(!tracking)
{
tracking = true;
if(!instance_exists(NoticeO))
instance_create(0,0,NoticeO);
with(NoticeO)
notice = NOTICE_PLAYERTRACKENABLE;
}
track_id = newTrackId;
player = newPlayer;
break;
}
}
}
');
*/
object_event_add(DeathCam, ev_create, 0, '
origWView = view_wview[0];
origHView = view_hview[0];
onlyonce = false;
with (Spectator) event_user(7);
');
object_event_add(DeathCam, ev_destroy, 0, '
//Reset views and visible objects
view_wview[0] = origWView;
view_hview[0] = origHView;
KillLog.visible = true;
CTFHUD.visible = true;
');
object_event_clear(DeathCam, ev_draw, 0);
object_event_add(DeathCam, ev_draw, 0, '
xoffset = view_xview[0];
yoffset = view_yview[0];
xsize = view_wview[0];
ysize = view_hview[0];
if (zooming) {
//draw_sprite_ext(DeathCamS,0,view_xview+400,view_yview+300,zoom,zoom,0,c_white,1);
draw_set_color(c_black);
//Lower = smaller rectangles
draw_rectangle(view_xview,view_yview,view_xview+xsize,view_yview+55,false);
draw_rectangle(view_xview,view_yview+ysize-55,view_xview+xsize,view_yview+ysize,false);
draw_set_halign(fa_center);
draw_set_valign(fa_center);
if team == TEAM_RED draw_set_color(c_blue);
else draw_set_color(c_red);
/*
draw_text_transformed(view_xview+xsize/2,view_yview+20, killmessage,2,2,0);
draw_text_transformed(view_xview+xsize/2,view_yview+50, sanitiseNewlines(name),2,2,0);
*/
draw_text_transformed(view_xview+xsize/2,view_yview+10, killmessage,1.7,1.7,0);
draw_text_transformed(view_xview+xsize/2,view_yview+40, sanitiseNewlines(name),1.9,1.9,0);
if maxHp != 0 {
if killedby.object!=-1 {
/*original
draw_healthbar(xoffset+xsize/2-18, yoffset+ysize-50-18, xoffset+xsize/2+18, yoffset+ysize-50+18, hp*100/maxHp,c_black,c_red,c_green,3,true,false);
draw_sprite_ext(DeathCamHealthBarS,0,xoffset+xsize/2, yoffset+ysize-50,2,2,0,c_white,1);
*/
//todo healthbar partially hidden
draw_healthbar(xoffset+xsize/2-18, yoffset+ysize-30-18, xoffset+xsize/2+18, yoffset+ysize-30+18, hp*100/maxHp,c_black,c_red,c_green,3,true,false);
draw_sprite_ext(DeathCamHealthBarS,0,xoffset+xsize/2, yoffset+ysize-30,2,2,0,c_white,1);
}
}
if (!onlyonce) {
view_wview[0] *= 0.5;
view_hview[0] *= 0.5;
//todo apply for other gamemodes? The HUD object is useless
//todo instance_destroy might not be the way to go here, use instance_deactivate_object()?
KillLog.visible = false;
CTFHUD.visible = false;
onlyonce = true;
}
}
');
IIRC instead of drawing those huge black bars when kiled, only the killer's healthbar (and a missing background) is drawn
DeathCamHealthBarBkgrS.png is lost to time, it was a black square with rounded corners drawn behind the killer's healthbar
Idk what's up with the weird indentation
global.DeathCamBkgr = sprite_add("Plugins/Resources/PrOF/Sprites/DeathCamHealthBarBkgrS.png", 1, 0, 0, 15, 15);
object_event_clear(DeathCam, ev_draw, 0);
object_event_add(DeathCam, ev_draw, 0, '
xoffset = view_xview[0];
yoffset = view_yview[0];
xsize = view_wview[0];
ysize = view_hview[0];
if DeathCamS==-1 exit;
draw_set_halign(fa_center);
draw_set_valign(fa_center);
if team == TEAM_RED draw_set_color(c_blue);
else draw_set_color(c_red);
draw_text_transformed(view_xview+xsize/2-1,view_yview+29, killmessage,2,2,0);
draw_text_transformed(view_xview+xsize/2,view_yview+30, killmessage,2,2,0);
draw_text_transformed(view_xview+xsize/2-1,view_yview+59, sanitiseNewlines(name),2,2,0);
draw_text_transformed(view_xview+xsize/2,view_yview+60, sanitiseNewlines(name),2,2,0);
if (maxHp != 0) {
if (killedby.object!=-1) {
draw_sprite_ext(global.DeathCamBkgr, 0, xoffset+xsize/2, yoffset+ysize-50,2,2,0,c_white,1);
draw_healthbar(xoffset+xsize/2-18, yoffset+ysize-50-18, xoffset+xsize/2+18, yoffset+ysize-50+18, hp*100/maxHp,c_black,c_red,c_green,3,true,false);
draw_sprite_ext(DeathCamHealthBarS,0,xoffset+xsize/2, yoffset+ysize-50,2,2,0,c_white,1);
}
}
');
object_event_clear(DeathCam, alarm[0], 0);
object_event_add(DeathCam, alarm[0], 0, '
if instance_exists(WinBanner)
{
instance_destroy();
exit;
}
if(lastDamageSource == DAMAGE_SOURCE_SENTRYTURRET and killedby.sentry)
{
view_xview=killedby.sentry.x-400;
view_yview=killedby.sentry.y-300;
hp=killedby.sentry.hp;
maxHp=killedby.sentry.maxHp;
killmessage = "You were killed by the autogun of";
}
else if(killedby.object != -1)
{
view_xview=killedby.object.x-400;
view_yview=killedby.object.y-300;
hp=killedby.object.hp;
maxHp=killedby.object.maxHp;
killmessage = "You were killed by";
}
else
{
view_xview=killedby.lastKnownx-400;
view_yview=killedby.lastKnowny-300;
hp=0;
maxHp=0;
killmessage = "You were killed by the late";
}
');