mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			252 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			252 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | |
|     Originally from /Source/gg2/Scripts/Events/doEventPlayerDeath.gml in Gang Garrison 2
 | |
| 
 | |
|     Copyright (C) 2008-2013 Faucet Software
 | |
|     http://www.ganggarrison.com
 | |
| 
 | |
|     This program is free software; 
 | |
|     you can redistribute it and/or modify it under the terms of the GNU General Public License
 | |
|     as published by the Free Software Foundation; either version 3 of the License, or (at your option)
 | |
|     any later version.
 | |
|     This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
 | |
|     without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
 | |
|     See the GNU General Public License for more details.
 | |
|     You should have received a copy of the GNU General Public License along with this program; if not,
 | |
|     see <http://www.gnu.org/licenses>.
 | |
| 
 | |
|     Additional permission under GNU GPL version 3 section 7
 | |
|     If you modify this Program, or any covered work, by linking or combining it with the Game Maker runtime library, 
 | |
|     the 39dll library/extension, Hobbel's Download Manager DLL, or modified versions of these libraries,
 | |
|     the licensors of this Program grant you additional permission to convey the resulting work.
 | |
| */
 | |
| 
 | |
| /**
 | |
|  * Perform the "player death" event, i.e. change the appropriate scores,
 | |
|  * destroy the character object to much splattering and so on.
 | |
|  *
 | |
|  * argument0: The player whose character died
 | |
|  * argument1: The player who inflicted the fatal damage (or noone for unknown)
 | |
|  * argument2: The player who assisted the kill (or noone for no assist)
 | |
|  * argument3: The source of the fatal damage
 | |
|  */
 | |
| var victim, killer, assistant, damageSource;
 | |
| victim = argument0;
 | |
| killer = argument1;
 | |
| assistant = argument2;
 | |
| damageSource = argument3;
 | |
| 
 | |
| if(!instance_exists(killer))
 | |
|     killer = noone;
 | |
| 
 | |
| if(!instance_exists(assistant))
 | |
|     assistant = noone;
 | |
| 
 | |
| //*************************************
 | |
| //*      Scoring and Kill log
 | |
| //*************************************
 | |
|  
 | |
| 
 | |
| recordKillInLog(victim, killer, assistant, damageSource);
 | |
| 
 | |
| victim.stats[DEATHS] += 1;
 | |
| if(killer)
 | |
| {
 | |
|     if(damageSource == WEAPON_KNIFE || damageSource == WEAPON_BACKSTAB)
 | |
|     {
 | |
|         killer.stats[STABS] += 1;
 | |
|         killer.roundStats[STABS] += 1;
 | |
|         killer.stats[POINTS] += 1;
 | |
|         killer.roundStats[POINTS] +=1;
 | |
|     }
 | |
|     
 | |
|     if (victim.object.currentWeapon.object_index == Medigun)
 | |
|     {
 | |
|         if (victim.object.currentWeapon.uberReady)
 | |
|         {
 | |
|             killer.stats[BONUS] += 1;
 | |
|             killer.roundStats[BONUS] += 1;
 | |
|             killer.stats[POINTS] += 1;
 | |
|             killer.roundStats[POINTS] += 1;
 | |
|         }
 | |
|     }
 | |
|         
 | |
|     if (killer != victim)
 | |
|     {
 | |
|         killer.stats[KILLS] += 1;
 | |
|         killer.roundStats[KILLS] += 1;
 | |
|         killer.stats[POINTS] += 1;
 | |
|         killer.roundStats[POINTS] += 1;
 | |
|         if(victim.object.intel)
 | |
|         {
 | |
|             killer.stats[DEFENSES] += 1;
 | |
|             killer.roundStats[DEFENSES] += 1;
 | |
|             killer.stats[POINTS] += 1;
 | |
|             killer.roundStats[POINTS] += 1;
 | |
|             recordEventInLog(4, killer.team, killer.name, global.myself == killer);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (assistant)
 | |
| {
 | |
|     assistant.stats[ASSISTS] += 1;
 | |
|     assistant.roundStats[ASSISTS] += 1;
 | |
|     assistant.stats[POINTS] += .5;
 | |
|     assistant.roundStats[POINTS] += .5;
 | |
| }
 | |
| 
 | |
| //SPEC
 | |
| if (victim == global.myself)
 | |
|     instance_create(victim.object.x, victim.object.y, Spectator);
 | |
| 
 | |
| //*************************************
 | |
| //*         Gibbing
 | |
| //*************************************
 | |
| var xoffset, yoffset, xsize, ysize;
 | |
| 
 | |
| xoffset = view_xview[0];
 | |
| yoffset = view_yview[0];
 | |
| xsize = view_wview[0];
 | |
| ysize = view_hview[0];
 | |
| 
 | |
| randomize();
 | |
| with(victim.object) {
 | |
|     if((damageSource == WEAPON_ROCKETLAUNCHER 
 | |
|     or damageSource == WEAPON_MINEGUN or damageSource == FRAG_BOX 
 | |
|     or damageSource == WEAPON_REFLECTED_STICKY or damageSource == WEAPON_REFLECTED_ROCKET 
 | |
|     or damageSource == FINISHED_OFF_GIB or damageSource == GENERATOR_EXPLOSION) 
 | |
|     and (player.class != CLASS_QUOTE) and (global.gibLevel>1) 
 | |
|     and distance_to_point(xoffset+xsize/2,yoffset+ysize/2) < 900) {
 | |
|         if (hasReward(victim, 'PumpkinGibs'))
 | |
|         {
 | |
|             repeat(global.gibLevel * 2) {
 | |
|                 createGib(x,y,PumpkinGib,hspeed,vspeed,random(145)-72, choose(0,1,1,2,2,3), false, true)
 | |
|             }
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             repeat(global.gibLevel) {
 | |
|                 createGib(x,y,Gib,hspeed,vspeed,random(145)-72, 0, false)
 | |
|             }
 | |
|             switch(player.team)
 | |
|             {
 | |
|             case TEAM_BLUE :
 | |
|                 repeat(global.gibLevel - 1) {
 | |
|                     createGib(x,y,BlueClump,hspeed,vspeed,random(145)-72, 0, false)
 | |
|                 }
 | |
|                 break;
 | |
|             case TEAM_RED :
 | |
|                 repeat(global.gibLevel - 1) {
 | |
|                     createGib(x,y,RedClump,hspeed,vspeed,random(145)-72, 0, false)
 | |
|                 }
 | |
|                 break;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         repeat(global.gibLevel * 14) {
 | |
|             var blood;
 | |
|             blood = instance_create(x+random(23)-11,y+random(23)-11,BloodDrop);
 | |
|             blood.hspeed=(random(21)-10);
 | |
|             blood.vspeed=(random(21)-13);
 | |
|             if (hasReward(victim, 'PumpkinGibs'))
 | |
|             {
 | |
|                 blood.sprite_index = PumpkinJuiceS;
 | |
|             }
 | |
|         }
 | |
|         if (!hasReward(victim, 'PumpkinGibs'))
 | |
|         {
 | |
|             //All Classes gib head, hands, and feet
 | |
|             if(global.gibLevel > 2 || choose(0,1) == 1)
 | |
|                 createGib(x,y,Headgib,0,0,random(105)-52, player.class, false);
 | |
|             repeat(global.gibLevel -1){
 | |
|                 //Medic has specially colored hands
 | |
|                 if (player.class == CLASS_MEDIC){
 | |
|                     if (player.team == TEAM_RED)
 | |
|                         createGib(x,y,Hand, hspeed, vspeed, random(105)-52 , 9, false);
 | |
|                     else
 | |
|                         createGib(x,y,Hand, hspeed, vspeed, random(105)-52 , 10, false);
 | |
|                 }else{
 | |
|                     createGib(x,y,Hand, hspeed, vspeed, random(105)-52 , player.class, false);
 | |
|                 }
 | |
|                 createGib(x,y,Feet,random(5)-2,random(3),random(13)-6 , player.class, true);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         //Class specific gibs
 | |
|         switch(player.class) {
 | |
|         case CLASS_PYRO :
 | |
|             if(global.gibLevel > 2 || choose(0,1) == 1)
 | |
|                 createGib(x,y,Accesory,hspeed,vspeed,random(105)-52, 4, false)
 | |
|             break;
 | |
|         case CLASS_SOLDIER :
 | |
|             if(global.gibLevel > 2 || choose(0,1) == 1){
 | |
|                 switch(player.team) {
 | |
|                     case TEAM_BLUE :
 | |
|                         createGib(x,y,Accesory,hspeed,vspeed,random(105)-52, 2, false);
 | |
|                         break;
 | |
|                     case TEAM_RED :
 | |
|                         createGib(x,y,Accesory,hspeed,vspeed,random(105)-52, 1, false);
 | |
|                         break;
 | |
|                     }
 | |
|             }
 | |
|             break;
 | |
|         case CLASS_ENGINEER :
 | |
|             if(global.gibLevel > 2 || choose(0,1) == 1)
 | |
|                 createGib(x,y,Accesory,hspeed,vspeed,random(105)-52, 3, false)
 | |
|             break;
 | |
|         case CLASS_SNIPER :
 | |
|             if(global.gibLevel > 2 || choose(0,1) == 1)
 | |
|                 createGib(x,y,Accesory,hspeed,vspeed,random(105)-52, 0, false)
 | |
|             break;
 | |
|         }
 | |
|         playsound(x,y,Gibbing);
 | |
|     } else {
 | |
|         var deadbody;
 | |
|         if player.class != CLASS_QUOTE playsound(x,y,choose(DeathSnd1, DeathSnd2));
 | |
|         deadbody = instance_create(x,y-30,DeadGuy);
 | |
|         // 'GS' reward - *G*olden *S*tatue
 | |
|         if(hasReward(player, 'GS'))
 | |
|         {
 | |
|             deadbody.sprite_index = haxxyStatue;
 | |
|             deadbody.image_index = 0;
 | |
|         }
 | |
|         else
 | |
|         { 
 | |
|             deadbody.sprite_index = sprite_index;
 | |
|             deadbody.image_index = CHARACTER_ANIMATION_DEAD;
 | |
|         }
 | |
|         deadbody.hspeed=hspeed;
 | |
|         deadbody.vspeed=vspeed;
 | |
|         if(hspeed>0) {
 | |
|             deadbody.image_xscale = -1;  
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| if (global.gg_birthday){
 | |
|     myHat = instance_create(victim.object.x,victim.object.y,PartyHat);
 | |
|     myHat.image_index = victim.team;
 | |
| }
 | |
| if (global.xmas){
 | |
|     myHat = instance_create(victim.object.x,victim.object.y,XmasHat);
 | |
|     myHat.image_index = victim.team;
 | |
| }
 | |
| 
 | |
| 
 | |
| with(victim.object) {       
 | |
|     instance_destroy();
 | |
| }
 | |
| 
 | |
| //*************************************
 | |
| //*         Deathcam
 | |
| //*************************************
 | |
| if( global.killCam and victim == global.myself and killer and killer != victim and !(damageSource == KILL_BOX || damageSource == FRAG_BOX || damageSource == FINISHED_OFF || damageSource == FINISHED_OFF_GIB || damageSource == GENERATOR_EXPLOSION)) {
 | |
|     instance_create(0,0,DeathCam);
 | |
|     DeathCam.killedby=killer;
 | |
|     DeathCam.name=killer.name;
 | |
|     DeathCam.oldxview=view_xview[0];
 | |
|     DeathCam.oldyview=view_yview[0];
 | |
|     DeathCam.lastDamageSource=damageSource;
 | |
|     DeathCam.team = global.myself.team;
 | |
| }
 |