Finally add player models (sorta rudimentary but they work).
Updated blood and gore code, it's less WIP now. Updated readme with some additional notes. Removed Heretic compat player classes as they are no longer needed.
This commit is contained in:
parent
0eee6d525f
commit
96411592b3
57 changed files with 2341 additions and 227 deletions
|
|
@ -807,6 +807,8 @@ Class BioRifle : UTWeapon
|
|||
invoker.charge = min(5.1,invoker.charge+0.1);
|
||||
A_Overlay(-9999,null);
|
||||
A_WeaponOffset(0,32); // fix sudden psprite lowering
|
||||
if ( self is 'UTPlayer' )
|
||||
UTPlayer(self).PlayAttacking3();
|
||||
}
|
||||
BIOF A 2 A_BioFire(true);
|
||||
BIOF BCDEFGHI 2;
|
||||
|
|
|
|||
|
|
@ -251,159 +251,3 @@ Class ActMedBox : UTActivatableHealth
|
|||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
// Alternative player classes for compatibility with Heretic sprites
|
||||
Class UTPlayerHereticCompat : UTPlayer
|
||||
{
|
||||
Default
|
||||
{
|
||||
Player.ColorRange 225, 240;
|
||||
Player.Colorset 0, "Green", 225, 240, 238;
|
||||
Player.Colorset 1, "Yellow", 114, 129, 127;
|
||||
Player.Colorset 2, "Red", 145, 160, 158;
|
||||
Player.Colorset 3, "Blue", 190, 205, 203;
|
||||
Player.Colorset 4, "Brown", 67, 82, 80;
|
||||
Player.Colorset 5, "Light Gray", 9, 24, 22;
|
||||
Player.Colorset 6, "Light Brown", 74, 89, 87;
|
||||
Player.Colorset 7, "Light Red", 150, 165, 163;
|
||||
Player.Colorset 8, "Light Blue", 192, 207, 205;
|
||||
Player.Colorset 9, "Beige", 95, 110, 108;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
PLAY A -1;
|
||||
Stop;
|
||||
See:
|
||||
PLAY ABCD 4;
|
||||
Loop;
|
||||
Melee:
|
||||
Missile:
|
||||
PLAY F 6 BRIGHT;
|
||||
PLAY E 12;
|
||||
Goto Spawn;
|
||||
Pain:
|
||||
PLAY G 4;
|
||||
PLAY G 4 A_Pain;
|
||||
Goto Spawn;
|
||||
Death:
|
||||
PLAY H 6 A_PlayerSkinCheck("AltSkinDeath");
|
||||
PLAY I 6 A_PlayerScream;
|
||||
PLAY JK 6;
|
||||
PLAY L 6 A_NoBlocking;
|
||||
PLAY MNO 6;
|
||||
PLAY P -1;
|
||||
Stop;
|
||||
XDeath:
|
||||
PLAY Q 0 A_PlayerSkinCheck("AltSkinXDeath");
|
||||
PLAY Q 5 A_PlayerScream;
|
||||
PLAY R 0 A_NoBlocking;
|
||||
PLAY R 5 A_SkullPop;
|
||||
PLAY STUVWX 5;
|
||||
PLAY Y -1;
|
||||
Stop;
|
||||
Burn:
|
||||
FDTH A 5 BRIGHT A_PlaySound("*burndeath");
|
||||
FDTH B 4 BRIGHT;
|
||||
FDTH C 5 BRIGHT;
|
||||
FDTH D 4 BRIGHT A_PlayerScream;
|
||||
FDTH E 5 BRIGHT;
|
||||
FDTH F 4 BRIGHT;
|
||||
FDTH G 5 BRIGHT A_PlaySound("*burndeath");
|
||||
FDTH H 4 BRIGHT;
|
||||
FDTH I 5 BRIGHT;
|
||||
FDTH J 4 BRIGHT;
|
||||
FDTH K 5 BRIGHT;
|
||||
FDTH L 4 BRIGHT;
|
||||
FDTH M 5 BRIGHT;
|
||||
FDTH N 4 BRIGHT;
|
||||
FDTH O 5 BRIGHT A_NoBlocking;
|
||||
FDTH P 4 BRIGHT;
|
||||
FDTH Q 5 BRIGHT;
|
||||
FDTH R 4 BRIGHT;
|
||||
ACLO E 35 A_CheckPlayerDone;
|
||||
Wait;
|
||||
AltSkinDeath:
|
||||
PLAY H 10;
|
||||
PLAY I 10 A_PlayerScream;
|
||||
PLAY J 10 A_NoBlocking;
|
||||
PLAY KLM 10;
|
||||
PLAY N -1;
|
||||
Stop;
|
||||
AltSkinXDeath:
|
||||
PLAY O 5;
|
||||
PLAY P 5 A_XScream;
|
||||
PLAY Q 5 A_NoBlocking;
|
||||
PLAY RSTUV 5;
|
||||
PLAY W -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class UTPlayerHereticCompatTMale1 : UTPlayerHereticCompat
|
||||
{
|
||||
Default
|
||||
{
|
||||
Player.SoundClass "tmale1";
|
||||
Player.DisplayName "$N_TMALE1";
|
||||
Player.Portrait "Blake";
|
||||
UTPlayer.VoiceType VOICE_MaleOne;
|
||||
-NOMENU;
|
||||
}
|
||||
}
|
||||
Class UTPlayerHereticCompatTMale2 : UTPlayerHereticCompat
|
||||
{
|
||||
Default
|
||||
{
|
||||
Player.SoundClass "tmale2";
|
||||
Player.DisplayName "$N_TMALE2";
|
||||
Player.Portrait "Brock";
|
||||
UTPlayer.VoiceType VOICE_MaleTwo;
|
||||
-NOMENU;
|
||||
}
|
||||
}
|
||||
Class UTPlayerHereticCompatTFemale1 : UTPlayerHereticCompat
|
||||
{
|
||||
Default
|
||||
{
|
||||
Player.SoundClass "tfemale";
|
||||
Player.DisplayName "$N_TFEMALE1";
|
||||
Player.Portrait "Ivana";
|
||||
UTPlayer.DollType DOLL_Female;
|
||||
UTPlayer.VoiceType VOICE_FemaleOne;
|
||||
-NOMENU;
|
||||
}
|
||||
}
|
||||
Class UTPlayerHereticCompatTFemale2 : UTPlayerHereticCompat
|
||||
{
|
||||
Default
|
||||
{
|
||||
Player.SoundClass "tfemale";
|
||||
Player.DisplayName "$N_TFEMALE2";
|
||||
Player.Portrait "Lauren";
|
||||
UTPlayer.DollType DOLL_Female;
|
||||
UTPlayer.VoiceType VOICE_FemaleTwo;
|
||||
-NOMENU;
|
||||
}
|
||||
}
|
||||
Class UTPlayerHereticCompatTBoss : UTPlayerHereticCompat
|
||||
{
|
||||
transient CVar bossfootsteps;
|
||||
Default
|
||||
{
|
||||
Player.SoundClass "tboss";
|
||||
Player.DisplayName "$N_TBOSS";
|
||||
Player.Portrait "Xan";
|
||||
UTPlayer.DollType DOLL_Boss;
|
||||
UTPlayer.VoiceType VOICE_Boss;
|
||||
// should have NOBLOOD, but Xan did bleed in vanilla UT so...
|
||||
// (this is what gave birth to the theory that Xan was actually Jerl Liandri himself)
|
||||
-NOMENU;
|
||||
}
|
||||
override void PlayFootstep( double vol )
|
||||
{
|
||||
if ( !bossfootsteps ) bossfootsteps = CVar.GetCVar('flak_bossfootsteps',players[consoleplayer]);
|
||||
if ( bossfootsteps.GetBool() ) A_PlaySound("ut/bossfootstep",CHAN_5,vol);
|
||||
else Super.PlayFootstep(vol);
|
||||
}
|
||||
}
|
||||
|
|
@ -360,6 +360,8 @@ Class UTRocketLauncher : UTWeapon
|
|||
else A_PlaySound("utrl/fire",CHAN_WEAPON);
|
||||
invoker.FireEffect();
|
||||
UTMainHandler.DoFlash(self,Color(64,255,0,0),1);
|
||||
if ( self is 'UTPlayer' )
|
||||
UTPlayer(self).PlayAttacking3();
|
||||
A_AlertMonsters();
|
||||
A_QuakeEx(2+num,2+num,2+num,6+num,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1+num*0.05);
|
||||
for ( int i=0; i<num; i++ )
|
||||
|
|
|
|||
|
|
@ -536,7 +536,12 @@ Class Enforcer : UTWeapon
|
|||
}
|
||||
ENFR ABCDEFGHIJKLMNOPQRSTUVWXYZ 1;
|
||||
ENR2 AB 1;
|
||||
ENR2 B 30 A_PlaySound("enforcer/reload",CHAN_WEAPON);
|
||||
ENR2 B 30
|
||||
{
|
||||
A_PlaySound("enforcer/reload",CHAN_WEAPON);
|
||||
if ( self is 'UTPlayer' )
|
||||
UTPlayer(self).PlayReloading();
|
||||
}
|
||||
ENFS A 0 A_PlaySound("enforcer/select",CHAN_WEAPON);
|
||||
Goto Ready;
|
||||
LeftReload:
|
||||
|
|
@ -549,7 +554,12 @@ Class Enforcer : UTWeapon
|
|||
}
|
||||
2NFR ABCDEFGHIJKLMNOPQRSTUVWXYZ 1;
|
||||
2NR2 AB 1;
|
||||
2NR2 B 30 A_PlaySound("enforcer/reload",CHAN_6);
|
||||
2NR2 B 30
|
||||
{
|
||||
A_PlaySound("enforcer/reload",CHAN_6);
|
||||
if ( self is 'UTPlayer' )
|
||||
UTPlayer(self).PlayReloading();
|
||||
}
|
||||
2NFS A 0 A_PlaySound("enforcer/select",CHAN_6);
|
||||
Goto LeftReady;
|
||||
Deselect:
|
||||
|
|
|
|||
|
|
@ -291,7 +291,12 @@ Class ImpactHammer : UTWeapon
|
|||
IMPR A 0 A_ImpactRefire("Hold");
|
||||
Goto Release;
|
||||
Release:
|
||||
IMPF A 0 A_FireBlast();
|
||||
IMPF A 0
|
||||
{
|
||||
if ( self is 'UTPlayer' )
|
||||
UTPlayer(self).PlayAttacking3();
|
||||
A_FireBlast();
|
||||
}
|
||||
IMPF AABCCDEEFGGHIIJKKLMMNOOP 1;
|
||||
Goto Idle;
|
||||
AltFire:
|
||||
|
|
|
|||
|
|
@ -802,7 +802,12 @@ Class PulseGun : UTWeapon
|
|||
Reload:
|
||||
PGNI A 1;
|
||||
PGNI A 0 A_JumpIf(invoker.clipcount >= Min(50,invoker.Ammo1.Amount),"Idle");
|
||||
PGNR A 1 A_Reloading();
|
||||
PGNR A 1
|
||||
{
|
||||
A_Reloading();
|
||||
if ( self is 'UTPlayer' )
|
||||
UTPlayer(self).PlayReloading();
|
||||
}
|
||||
PGNR BCDEFGHIJKLMNOPQRSTUVWXYZ 1;
|
||||
PGR2 ABCDEFGHIJKLMNOPQRSTUVWX 1;
|
||||
Goto Idle;
|
||||
|
|
|
|||
|
|
@ -267,8 +267,6 @@ Class TranslocatorAfterimage : Actor
|
|||
angle = target.angle;
|
||||
pitch = target.pitch;
|
||||
roll = target.roll;
|
||||
sprite = target.sprite;
|
||||
frame = target.frame;
|
||||
vel = (FRandom[Transloc](-.5,.5),FRandom[Transloc](-.5,.5),FRandom[Transloc](-.5,.5));
|
||||
}
|
||||
action void A_Spread()
|
||||
|
|
@ -279,8 +277,8 @@ Class TranslocatorAfterimage : Actor
|
|||
States
|
||||
{
|
||||
Spawn:
|
||||
#### # 10 A_SetTics(Random[Transloc](20,50));
|
||||
#### # 1 A_Spread();
|
||||
PLAY A 10 A_SetTics(Random[Transloc](20,50));
|
||||
PLAY A 1 A_Spread();
|
||||
Wait;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ Class UTPlayer : DoomPlayer
|
|||
|
||||
int tempslide;
|
||||
double ssup;
|
||||
int corpsetime;
|
||||
|
||||
int dolltype, voicetype;
|
||||
|
||||
|
|
@ -177,7 +178,7 @@ Class UTPlayer : DoomPlayer
|
|||
let type = (class<Inventory>)(AllActorClasses[i]);
|
||||
if ( !type ) continue;
|
||||
let def = GetDefaultByType(type);
|
||||
if ( !(self is "UTPlayerHereticCompat")
|
||||
if ( !(gameinfo.gametype&GAME_Raven)
|
||||
&& ((type is "UTActivatable") || (type is "UTActivatableHealth")) )
|
||||
continue; // don't give these outside of Heretic/Hexen
|
||||
if ( def.Icon.isValid() && (def.MaxAmount > 1) &&
|
||||
|
|
@ -242,6 +243,7 @@ Class UTPlayer : DoomPlayer
|
|||
else A_PlaySound("*uland",CHAN_AUTO,vol);
|
||||
}
|
||||
else forcefootstep = true;
|
||||
if ( Health > 0 ) PlayLanding();
|
||||
}
|
||||
if ( tempslide )
|
||||
{
|
||||
|
|
@ -506,6 +508,7 @@ Class UTPlayer : DoomPlayer
|
|||
if ( vel.length() > terminalvelocity/TICRATE ) vel = vel.unit()*(terminalvelocity/TICRATE);
|
||||
player.vel *= 0;
|
||||
player.jumptics = -2;
|
||||
if ( !(player.cheats & CF_PREDICTING) ) PlayIdle();
|
||||
}
|
||||
else if ( (bFly && bFlyCheat) || (player.cheats&CF_NOCLIP2) )
|
||||
{
|
||||
|
|
@ -708,6 +711,380 @@ Class UTPlayer : DoomPlayer
|
|||
{
|
||||
A_PlaySound("ut/playerfootstep",CHAN_5,vol);
|
||||
}
|
||||
|
||||
override void PlayIdle()
|
||||
{
|
||||
if ( (player && (player.mo == self)) && (player.crouchdir == -1) )
|
||||
{
|
||||
// Crouching
|
||||
if ( !InStateSequence(CurState,FindState("SpawnCrouch")) )
|
||||
SetStateLabel("SpawnCrouch");
|
||||
}
|
||||
else if ( !bNoGravity && player.onground && (waterlevel < 2) )
|
||||
{
|
||||
// Ground
|
||||
if ( (player && (player.mo == self)) && player.cmd.yaw )
|
||||
{
|
||||
if ( InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeAir"))
|
||||
|| InStateSequence(CurState,FindState("SeeSwim"))
|
||||
|| InStateSequence(CurState,FindState("SeeCrouch"))
|
||||
|| InStateSequence(CurState,FindState("SpawnAir"))
|
||||
|| InStateSequence(CurState,FindState("SpawnSwim"))
|
||||
|| InStateSequence(CurState,FindState("SpawnCrouch"))
|
||||
|| InStateSequence(CurState,FindState("Spawn")+1) )
|
||||
SetStateLabel("Turn");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeAir"))
|
||||
|| InStateSequence(CurState,FindState("SeeSwim"))
|
||||
|| InStateSequence(CurState,FindState("SeeCrouch"))
|
||||
|| InStateSequence(CurState,FindState("SpawnAir"))
|
||||
|| InStateSequence(CurState,FindState("SpawnSwim"))
|
||||
|| InStateSequence(CurState,FindState("SpawnCrouch")) )
|
||||
SetStateLabel("Spawn");
|
||||
}
|
||||
}
|
||||
else if ( !bNoGravity && (waterlevel < 2) )
|
||||
{
|
||||
// Falling
|
||||
if ( InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeAir"))
|
||||
|| InStateSequence(CurState,FindState("SeeSwim"))
|
||||
|| InStateSequence(CurState,FindState("SeeCrouch"))
|
||||
|| InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("SpawnSwim"))
|
||||
|| InStateSequence(CurState,FindState("SpawnCrouch"))
|
||||
|| InStateSequence(CurState,FindState("Turn")) )
|
||||
SetStateLabel("SpawnAir");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Swimming
|
||||
if ( InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeAir"))
|
||||
|| InStateSequence(CurState,FindState("SeeSwim"))
|
||||
|| InStateSequence(CurState,FindState("SeeCrouch"))
|
||||
|| InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("SpawnAir"))
|
||||
|| InStateSequence(CurState,FindState("SpawnCrouch"))
|
||||
|| InStateSequence(CurState,FindState("Turn")) )
|
||||
SetStateLabel("SpawnSwim");
|
||||
}
|
||||
}
|
||||
|
||||
override void PlayRunning()
|
||||
{
|
||||
if ( (player && (player.mo == self)) && (player.crouchdir == -1) )
|
||||
{
|
||||
// Crouching
|
||||
if ( !InStateSequence(CurState,FindState("SeeCrouch")) )
|
||||
SetStateLabel("SeeCrouch");
|
||||
}
|
||||
else if ( !bNoGravity && player.onground && (waterlevel < 2) )
|
||||
{
|
||||
// Ground
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("SpawnAir"))
|
||||
|| InStateSequence(CurState,FindState("SpawnSwim"))
|
||||
|| InStateSequence(CurState,FindState("SpawnCrouch"))
|
||||
|| InStateSequence(CurState,FindState("SeeAir"))
|
||||
|| InStateSequence(CurState,FindState("SeeSwim"))
|
||||
|| InStateSequence(CurState,FindState("SeeCrouch"))
|
||||
|| InStateSequence(CurState,FindState("Turn")) )
|
||||
SetStateLabel("See");
|
||||
}
|
||||
else if ( !bNoGravity && (waterlevel < 2) )
|
||||
{
|
||||
// Falling
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("SpawnAir"))
|
||||
|| InStateSequence(CurState,FindState("SpawnSwim"))
|
||||
|| InStateSequence(CurState,FindState("SpawnCrouch"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeSwim"))
|
||||
|| InStateSequence(CurState,FindState("SeeCrouch"))
|
||||
|| InStateSequence(CurState,FindState("Turn")) )
|
||||
SetStateLabel("SeeAir");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Swimming
|
||||
if ( InStateSequence(CurState,FindState("Spawn"))
|
||||
|| InStateSequence(CurState,FindState("SpawnAir"))
|
||||
|| InStateSequence(CurState,FindState("SpawnSwim"))
|
||||
|| InStateSequence(CurState,FindState("SpawnCrouch"))
|
||||
|| InStateSequence(CurState,FindState("See"))
|
||||
|| InStateSequence(CurState,FindState("SeeAir"))
|
||||
|| InStateSequence(CurState,FindState("SeeCrouch"))
|
||||
|| InStateSequence(CurState,FindState("Turn")) )
|
||||
SetStateLabel("SeeSwim");
|
||||
}
|
||||
}
|
||||
|
||||
override void PlayAttacking()
|
||||
{
|
||||
// no animation if crouched
|
||||
if ( (player && (player.mo == self)) && (player.crouchdir == -1) ) return;
|
||||
// check weapon type
|
||||
if ( (player.ReadyWeapon is 'SniperRifle') && (player.buttons&BT_ALTATTACK) )
|
||||
return;
|
||||
if ( ((player.ReadyWeapon is 'BioRifle') && (player.buttons&BT_ALTATTACK))
|
||||
|| (player.ReadyWeapon is 'UTRocketLauncher') )
|
||||
{
|
||||
if ( !InStateSequence(CurState,FindState("MissileRepStill")) )
|
||||
SetStateLabel("MissileRepStill");
|
||||
}
|
||||
else if ( ((player.ReadyWeapon is 'ImpactHammer') && (player.buttons&BT_ATTACK))
|
||||
|| ((player.ReadyWeapon is 'UTChainsaw') && (player.buttons&BT_ATTACK))
|
||||
|| (player.ReadyWeapon is 'PulseGun')
|
||||
|| (player.ReadyWeapon is 'Minigun') )
|
||||
{
|
||||
if ( !InStateSequence(CurState,FindState("MissileRep")) )
|
||||
SetStateLabel("MissileRep");
|
||||
}
|
||||
else SetStateLabel("Missile");
|
||||
}
|
||||
|
||||
override void PlayAttacking2()
|
||||
{
|
||||
PlayAttacking();
|
||||
}
|
||||
|
||||
virtual void PlayAttacking3()
|
||||
{
|
||||
if ( (player && (player.mo == self)) && (player.crouchdir == -1) ) return;
|
||||
SetStateLabel("Missile");
|
||||
}
|
||||
|
||||
virtual void PlayReloading()
|
||||
{
|
||||
if ( (player && (player.mo == self)) && (player.crouchdir == -1) ) return;
|
||||
SetStateLabel("Reload");
|
||||
}
|
||||
|
||||
virtual void PlayLanding()
|
||||
{
|
||||
if ( (player && (player.mo == self)) && (player.crouchdir == -1) ) return;
|
||||
SetStateLabel("Landing");
|
||||
}
|
||||
|
||||
void A_HeadPop()
|
||||
{
|
||||
Class<UTHead> hclass = "UTHeadMale";
|
||||
if ( DollType == DOLL_Boss ) hclass = "UTHeadBoss";
|
||||
else if ( DollType == DOLL_Female ) hclass = "UTHeadFemale";
|
||||
let h = UTHead(Spawn(hclass,Vec3Offset(0,0,viewheight)));
|
||||
if ( player )
|
||||
{
|
||||
h.headowner = player;
|
||||
player.camera = h;
|
||||
}
|
||||
double ang = FRandom[Blod](0,360);
|
||||
double pt = FRandom[Blod](-90,-30);
|
||||
Vector3 dir = (cos(pt)*cos(ang),cos(pt)*sin(ang),sin(-pt));
|
||||
h.vel = vel*0.6+dir*FRandom[Blod](8.0,12.0);
|
||||
}
|
||||
|
||||
void A_GibMe()
|
||||
{
|
||||
let a = Actor.Spawn("UTPlayerGibber",pos);
|
||||
a.vel = vel;
|
||||
a.Scale = Scale;
|
||||
a.A_SetSize(radius,height);
|
||||
UTGibber(a).Gibbed = self;
|
||||
}
|
||||
|
||||
void A_DMFade()
|
||||
{
|
||||
if ( !deathmatch || player ) return;
|
||||
corpsetime++;
|
||||
if ( corpsetime > 350 ) A_FadeOut(0.03);
|
||||
}
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
#### # 5;
|
||||
PLAY ABCDEFG 8;
|
||||
Goto Spawn+1;
|
||||
Turn:
|
||||
#### # 6;
|
||||
PLYT A 0 A_JumpIf(!player||!player.cmd.yaw,"Spawn");
|
||||
PLYT A 6;
|
||||
PLYT A 0 A_JumpIf(!player||!player.cmd.yaw,"Spawn");
|
||||
PLYT A 6;
|
||||
PLYT B 0 A_JumpIf(!player||!player.cmd.yaw,"Spawn");
|
||||
PLYT B 6;
|
||||
PLYT B 0 A_JumpIf(!player||!player.cmd.yaw,"Spawn");
|
||||
PLYT B 6;
|
||||
Goto Turn+1;
|
||||
SpawnAir:
|
||||
#### # 5;
|
||||
PLYA A 50;
|
||||
PLYL A 50;
|
||||
Goto SpawnAir+1;
|
||||
SpawnSwim:
|
||||
#### # 5;
|
||||
PLYS ABCDEFG 6;
|
||||
Goto SpawnSwim+1;
|
||||
SpawnCrouch:
|
||||
#### # 5;
|
||||
PLYC A -1;
|
||||
Wait;
|
||||
See:
|
||||
#### # 5;
|
||||
PLAY HIJKL 4;
|
||||
Goto See+1;
|
||||
SeeAir:
|
||||
#### # 5;
|
||||
PLYA A 50;
|
||||
PLYL A 50;
|
||||
Goto SeeAir+1;
|
||||
SeeSwim:
|
||||
#### # 5;
|
||||
PLYS HIJKL 4;
|
||||
Goto SeeSwim+1;
|
||||
SeeCrouch:
|
||||
#### # 5;
|
||||
PLYC ABCDE 4;
|
||||
Goto SeeCrouch+1;
|
||||
Missile:
|
||||
#### # 2;
|
||||
PLAY MNOPQA 3;
|
||||
Goto Spawn;
|
||||
MissileRep:
|
||||
#### # 2;
|
||||
PLAY R 2;
|
||||
PLAY S 0 A_JumpIf(!player||!(player.buttons&(BT_ATTACK|BT_ALTATTACK)),"Spawn");
|
||||
PLAY S 2;
|
||||
PLAY T 0 A_JumpIf(!player||!(player.buttons&(BT_ATTACK|BT_ALTATTACK)),"Spawn");
|
||||
PLAY T 2;
|
||||
PLAY U 0 A_JumpIf(!player||!(player.buttons&(BT_ATTACK|BT_ALTATTACK)),"Spawn");
|
||||
PLAY U 2;
|
||||
PLAY V 0 A_JumpIf(!player||!(player.buttons&(BT_ATTACK|BT_ALTATTACK)),"Spawn");
|
||||
PLAY V 2;
|
||||
PLAY R 0 A_JumpIf(!player||!(player.buttons&(BT_ATTACK|BT_ALTATTACK)),"Spawn");
|
||||
Goto MissileRep+1;
|
||||
MissileRepStill:
|
||||
#### # 2;
|
||||
PLAY R 2;
|
||||
PLAY R 0 A_JumpIf(!player||!(player.buttons&(BT_ATTACK|BT_ALTATTACK)),"Spawn");
|
||||
Goto MissileRepStill+1;
|
||||
Reload:
|
||||
#### # 3;
|
||||
PLYR ABCDEFGH 4;
|
||||
Goto Spawn;
|
||||
Landing:
|
||||
#### # 4;
|
||||
PLYL A 3;
|
||||
Goto Spawn;
|
||||
Pain:
|
||||
#### # 0 A_Jump(256,1,3,5,7);
|
||||
#### # 2;
|
||||
PLAY W 3 A_Pain();
|
||||
Goto Spawn;
|
||||
#### # 2;
|
||||
PLAY Y 3 A_Pain();
|
||||
Goto Spawn;
|
||||
#### # 2;
|
||||
PLAY Z 3 A_Pain();
|
||||
Goto Spawn;
|
||||
Pain.Decapitated:
|
||||
#### # 2;
|
||||
PLAY X 3 A_Pain();
|
||||
Goto Spawn;
|
||||
Death.Decapitated:
|
||||
#### # 0 A_HeadPop();
|
||||
PLD4 A 3 A_PlayerScream();
|
||||
PLD4 B 3 A_NoBlocking();
|
||||
PLD4 CDEFGHIJKLMNO 3;
|
||||
PLD4 P 1 A_DMFade();
|
||||
Wait;
|
||||
Death:
|
||||
#### # 0 A_JumpIf(vel.length()>20,"Death11");
|
||||
#### # 0 A_JumpIf(vel.length()>10,"Death1");
|
||||
#### # 0 A_Jump(256,"Death2","Death3","Death7","Death8");
|
||||
Death11:
|
||||
#### # 3;
|
||||
PD11 A 3 A_PlayerScream();
|
||||
PD11 B 3 A_NoBlocking();
|
||||
PD11 CDEFGHIJKLMNOPQ 3;
|
||||
PD11 R 1 A_DMFade();
|
||||
Wait;
|
||||
Death.Zapped:
|
||||
#### # 3;
|
||||
PLD9 A 3 A_PlayerScream();
|
||||
PLD9 B 3 A_NoBlocking();
|
||||
PLD9 CDEFGHIJKLMNOPQRST 2;
|
||||
PD9B ABCDEFGHI 2;
|
||||
PD9B J 1 A_DMFade();
|
||||
Wait;
|
||||
Death8:
|
||||
#### # 3;
|
||||
PLD8 A 3 A_PlayerScream();
|
||||
PLD8 B 3 A_NoBlocking();
|
||||
PLD8 CDEFGHIJKLMNOPQ 3;
|
||||
PLD8 R 1 A_DMFade();
|
||||
Wait;
|
||||
Death7:
|
||||
#### # 3;
|
||||
PLD7 A 3 A_PlayerScream();
|
||||
PLD7 B 3 A_NoBlocking();
|
||||
PLD7 CDEFGHIJKLMNOPQRST 3;
|
||||
PLD7 U 1 A_DMFade();
|
||||
Wait;
|
||||
Death3:
|
||||
#### # 3;
|
||||
PLD3 A 3 A_PlayerScream();
|
||||
PLD3 B 3 A_NoBlocking();
|
||||
PLD3 CDEFGHIJKL 3;
|
||||
PLD3 M 1 A_DMFade();
|
||||
Wait;
|
||||
Death2:
|
||||
#### # 3;
|
||||
PLD2 A 3 A_PlayerScream();
|
||||
PLD2 B 3 A_NoBlocking();
|
||||
PLD2 CDEFGHIJKLMNO 3;
|
||||
PLD2 P 1 A_DMFade();
|
||||
Wait;
|
||||
Death1:
|
||||
#### # 3;
|
||||
PLD1 A 3 A_PlayerScream();
|
||||
PLD1 B 3 A_NoBlocking();
|
||||
PLD1 CDEFGHIJKL 3;
|
||||
PLD1 M 1 A_DMFade();
|
||||
Wait;
|
||||
XDeath:
|
||||
TNT1 A 1
|
||||
{
|
||||
A_XScream();
|
||||
A_NoBlocking();
|
||||
A_GibMe();
|
||||
}
|
||||
TNT1 A 1 A_CheckPlayerDone();
|
||||
Wait;
|
||||
Taunt1:
|
||||
#### # 5;
|
||||
PLT1 ABCDEFGHIJKLMNOPQRST 3;
|
||||
Goto Spawn;
|
||||
Taunt2:
|
||||
#### # 5;
|
||||
PLT2 ABCDEFGHIJKLMNOPQR 4;
|
||||
PLT2 R 8;
|
||||
PLAY A 3;
|
||||
Goto Spawn;
|
||||
Taunt3:
|
||||
#### # 5;
|
||||
PLT3 ABCDEFGHIJKLMNO 3;
|
||||
Goto Spawn;
|
||||
Taunt4:
|
||||
#### # 5;
|
||||
PLT4 ABCDEFGHIJKLMNO 3;
|
||||
Goto Spawn;
|
||||
}
|
||||
}
|
||||
|
||||
// these only exist for sound
|
||||
|
|
@ -734,26 +1111,118 @@ Class UTPlayerTMale2 : UTPlayer
|
|||
-NOMENU;
|
||||
}
|
||||
}
|
||||
Class UTPlayerTFemale1 : UTPlayer
|
||||
Class UTPlayerTFemale : UTPlayer
|
||||
{
|
||||
Default
|
||||
{
|
||||
UTPlayer.DollType DOLL_Female;
|
||||
}
|
||||
|
||||
void A_LegPop()
|
||||
{
|
||||
let a = Actor.Spawn("UTFemaleLegGibber",pos);
|
||||
a.vel = vel;
|
||||
a.Scale = Scale;
|
||||
a.A_SetSize(radius,height);
|
||||
UTGibber(a).Gibbed = self;
|
||||
}
|
||||
|
||||
States
|
||||
{
|
||||
Reload:
|
||||
#### # 3;
|
||||
PLYR ABCDEF 4;
|
||||
Goto Spawn;
|
||||
Taunt1:
|
||||
#### # 5;
|
||||
PLT1 ABCDEFGHIJKLMNO 3;
|
||||
Goto Spawn;
|
||||
Taunt2:
|
||||
#### # 5;
|
||||
PLT2 ABCDEFGHIJ 6;
|
||||
PLAY A 3;
|
||||
Goto Spawn;
|
||||
Death.Decapitated:
|
||||
#### # 0 A_HeadPop();
|
||||
PLD6 A 3 A_PlayerScream();
|
||||
PLD6 B 3 A_NoBlocking();
|
||||
PLD6 CDEFGHIJ 3;
|
||||
PLD6 K 1 A_DMFade();
|
||||
Wait;
|
||||
Death.Zapped:
|
||||
#### # 3;
|
||||
PLD9 A 3 A_PlayerScream();
|
||||
PLD9 B 3 A_NoBlocking();
|
||||
PLD9 CDEFGHIJKLMNOPQRST 2;
|
||||
PD9B ABCDEFGHIJ 2;
|
||||
PD9B K 1 A_DMFade();
|
||||
Wait;
|
||||
Death:
|
||||
#### # 0 A_JumpIf(vel.length()>20,"Death5");
|
||||
#### # 0 A_JumpIf(vel.length()>10,"Death2");
|
||||
#### # 0 A_Jump(256,"Death1","Death3","Death4","Death7");
|
||||
Death7:
|
||||
#### # 3;
|
||||
PLD7 A 3 A_PlayerScream();
|
||||
PLD7 B 3 A_NoBlocking();
|
||||
PLD7 CDEFGHIJ 3;
|
||||
PLD7 K 1 A_DMFade();
|
||||
Wait;
|
||||
Death5:
|
||||
#### # 0 A_LegPop();
|
||||
PLD5 A 3 A_PlayerScream();
|
||||
PLD5 B 3 A_NoBlocking();
|
||||
PLD5 CDEFGHIJKL 3;
|
||||
PLD5 M 1 A_DMFade();
|
||||
Wait;
|
||||
Death4:
|
||||
#### # 3;
|
||||
PLD4 A 3 A_PlayerScream();
|
||||
PLD4 B 3 A_NoBlocking();
|
||||
PLD4 CDEFGHIJKL 3;
|
||||
PLD4 M 1 A_DMFade();
|
||||
Wait;
|
||||
Death3:
|
||||
#### # 3;
|
||||
PLD3 A 3 A_PlayerScream();
|
||||
PLD3 B 3 A_NoBlocking();
|
||||
PLD3 CDEFGHIJKLMNO 3;
|
||||
PLD3 P 1 A_DMFade();
|
||||
Wait;
|
||||
Death2:
|
||||
#### # 3;
|
||||
PLD2 A 3 A_PlayerScream();
|
||||
PLD2 B 3 A_NoBlocking();
|
||||
PLD2 CDEFGHIJKLMNOPQ 3;
|
||||
PLD2 R 1 A_DMFade();
|
||||
Wait;
|
||||
Death1:
|
||||
#### # 3;
|
||||
PLD1 A 3 A_PlayerScream();
|
||||
PLD1 B 3 A_NoBlocking();
|
||||
PLD1 CDEFGHIJKLMNOPQRSTUV 3;
|
||||
PLD1 W 1 A_DMFade();
|
||||
Wait;
|
||||
}
|
||||
}
|
||||
Class UTPlayerTFemale1 : UTPlayerTFemale
|
||||
{
|
||||
Default
|
||||
{
|
||||
Player.SoundClass "tfemale";
|
||||
Player.DisplayName "$N_TFEMALE1";
|
||||
Player.Portrait "Ivana";
|
||||
UTPlayer.DollType DOLL_Female;
|
||||
UTPlayer.VoiceType VOICE_FemaleOne;
|
||||
-NOMENU;
|
||||
}
|
||||
}
|
||||
Class UTPlayerTFemale2 : UTPlayer
|
||||
Class UTPlayerTFemale2 : UTPlayerTFemale
|
||||
{
|
||||
Default
|
||||
{
|
||||
Player.SoundClass "tfemale";
|
||||
Player.DisplayName "$N_TFEMALE2";
|
||||
Player.Portrait "Lauren";
|
||||
UTPlayer.DollType DOLL_Female;
|
||||
UTPlayer.VoiceType VOICE_FemaleTwo;
|
||||
-NOMENU;
|
||||
}
|
||||
|
|
@ -1580,8 +2049,8 @@ Class GenericFlash : HUDMessageBase
|
|||
}
|
||||
override bool Tick()
|
||||
{
|
||||
alpha -= 1./duration;
|
||||
return (alpha<=0);
|
||||
if ( duration > 0 ) alpha -= 1./duration;
|
||||
return (alpha<=0)||(!cam);
|
||||
}
|
||||
override void Draw( int bottom, int visibility )
|
||||
{
|
||||
|
|
@ -2059,6 +2528,27 @@ Class UTMainHandler : EventHandler
|
|||
for ( int i=0; i<MAXPLAYERS; i++ ) if ( playeringame[i] ) players[i].mo.TakeInventory("Translocator",1);
|
||||
}
|
||||
}
|
||||
else if ( e.Name ~== "uttaunt" )
|
||||
{
|
||||
if ( (e.player == -1) || !playeringame[e.player] || !players[e.player].mo ) return;
|
||||
let mo = players[e.player].mo;
|
||||
if ( (mo.Health <= 0) || !(mo is 'UTPlayer') ) return;
|
||||
switch ( e.Args[0] )
|
||||
{
|
||||
case 2:
|
||||
mo.SetStateLabel("Taunt2");
|
||||
break;
|
||||
case 3:
|
||||
mo.SetStateLabel("Taunt3");
|
||||
break;
|
||||
case 4:
|
||||
mo.SetStateLabel("Taunt4");
|
||||
break;
|
||||
default:
|
||||
mo.SetStateLabel("Taunt1");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override void WorldTick()
|
||||
|
|
@ -2106,12 +2596,8 @@ Class UTMainHandler : EventHandler
|
|||
// gibbers
|
||||
if ( flak_gibs && !e.Thing.bNOBLOOD && (e.Thing.FindState("XDeath") || e.Thing.FindState("Death.Extreme")) && ((e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.Thing.Health < e.Thing.GetGibHealth())) && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH) )
|
||||
{
|
||||
// players have special gibbing
|
||||
if ( e.Thing.player )
|
||||
{
|
||||
// TODO
|
||||
return;
|
||||
}
|
||||
// players use their own gibber
|
||||
if ( e.Thing is 'UTPlayer' ) return;
|
||||
// generic gibbing
|
||||
let a = Actor.Spawn("UTGibber",e.Thing.pos);
|
||||
a.vel = e.Thing.vel;
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ Class UTBloodDrop : Actor
|
|||
}
|
||||
void A_BloodDie()
|
||||
{
|
||||
// TODO
|
||||
// TODO leave decals
|
||||
}
|
||||
States
|
||||
{
|
||||
|
|
@ -112,9 +112,12 @@ Class UTBloodSpurt : Actor
|
|||
str = FRandom[Blood](2.0,3.2)*args[0];
|
||||
int sz = 7*args[0];
|
||||
double ang, pt;
|
||||
if ( !flak_blood ) sz /= 3;
|
||||
for ( int i=0; i<sz; i++ )
|
||||
{
|
||||
let d = Spawn("UTBloodDrop",pos);
|
||||
Actor d;
|
||||
if ( flak_blood ) d = Spawn("UTBloodDrop",pos);
|
||||
else d = Spawn("Blood",pos,ALLOW_REPLACE);
|
||||
d.translation = translation;
|
||||
d.SetShade(fillcolor);
|
||||
ang = angle+FRandom[Blood](-3,3)*str;
|
||||
|
|
@ -160,9 +163,12 @@ Class UTBloodTrail : Actor
|
|||
if ( !target ) return;
|
||||
SetOrigin(target.pos,true);
|
||||
double ang, pt;
|
||||
for ( int i=0; i<3; i++ )
|
||||
int max = flak_blood?3:Random[Blood](-2,1);
|
||||
for ( int i=0; i<max; i++ )
|
||||
{
|
||||
let d = Spawn("UTBloodDrop",pos);
|
||||
Actor d;
|
||||
if ( flak_blood ) d = Spawn("UTBloodDrop",pos);
|
||||
else d = Spawn("Blood",pos,ALLOW_REPLACE);
|
||||
d.translation = translation;
|
||||
d.SetShade(fillcolor);
|
||||
ang = FRandom[Blood](0,360);
|
||||
|
|
@ -232,7 +238,7 @@ Class UTGibber : Actor
|
|||
bool dummy;
|
||||
for ( int i=0; i<gibsize; i++ )
|
||||
{
|
||||
let a = Spawn(gibcls[Random[Blod](0,3)],pos+(FRandom[Blod](-0.5,0.5)*radius,FRandom[Blod](-0.5,0.5)*radius,FRandom[Blod](0.2,0.8)*height));
|
||||
let a = Spawn(gibcls[Random[Blod](0,3)],Vec3Offset(FRandom[Blod](-0.5,0.5)*radius,FRandom[Blod](-0.5,0.5)*radius,FRandom[Blod](0.2,0.8)*height));
|
||||
a.translation = translation;
|
||||
a.SetShade(fillcolor);
|
||||
a.scale *= FRandom[Blod](1.7,2.3)*scale.x;
|
||||
|
|
@ -243,7 +249,7 @@ Class UTGibber : Actor
|
|||
}
|
||||
for ( int i=0; i<gibsize; i++ )
|
||||
{
|
||||
let a = Spawn("UTBloodPuff",pos+(FRandom[Blod](-0.8,0.8)*radius,FRandom[Blod](-0.8,0.8)*radius,FRandom[Blod](0.1,0.9)*height));
|
||||
let a = Spawn("UTBloodPuff",Vec3Offset(FRandom[Blod](-12,12),FRandom[Blod](-12,12),FRandom[Blod](0.1,0.9)*height));
|
||||
a.translation = translation;
|
||||
a.SetShade(fillcolor);
|
||||
a.scale *= FRandom[Blod](1.8,2.3)*scale.x;
|
||||
|
|
@ -282,6 +288,152 @@ Class UTGibber : Actor
|
|||
}
|
||||
}
|
||||
|
||||
Class UTFemaleLegGibber : UTGibber
|
||||
{
|
||||
bool firstgib;
|
||||
|
||||
override void BurstGibs()
|
||||
{
|
||||
static const class<Actor> parts[] = {"UTFemaleFoot","UTThigh"};
|
||||
static const double partofsy[] = {9,8};
|
||||
static const double partofsz[] = {9,20};
|
||||
Actor a;
|
||||
double ang, pt;
|
||||
Vector3 dir;
|
||||
if ( !firstgib )
|
||||
{
|
||||
firstgib = true;
|
||||
for ( int i=0; i<2; i++ )
|
||||
{
|
||||
Actor a = Spawn(parts[i],Vec3Offset(-partofsy[i]*sin(angle),partofsy[i]*cos(angle),partofsz[i]));
|
||||
ang = FRandom[Blod](0,360);
|
||||
pt = FRandom[Blod](-90,90);
|
||||
dir = (cos(pt)*cos(ang),cos(pt)*sin(ang),sin(-pt));
|
||||
a.vel = rvel*0.6+dir*FRandom[Blod](8.0,12.0);
|
||||
}
|
||||
}
|
||||
for ( int i=0; i<gibsize; i++ )
|
||||
{
|
||||
Vector3 box = (FRandom[Blod](-8,8),FRandom[Blod](7,12),FRandom[Blod](5,18));
|
||||
let a = Spawn("UTBloodPuff",Vec3Offset(box.x*cos(angle)-box.y*sin(angle),box.x*sin(angle)+box.y*cos(angle),box.z));
|
||||
ang = FRandom[Blod](0,360);
|
||||
pt = FRandom[Blod](-90,90);
|
||||
dir = (cos(pt)*cos(ang),cos(pt)*sin(ang),sin(-pt));
|
||||
a.vel = rvel*0.2+dir*FRandom[Blod](1.5,3.0);
|
||||
}
|
||||
A_CountDown();
|
||||
}
|
||||
override void PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
gibsize = 3;
|
||||
reactiontime = 5;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TNT1 A 0 NoDelay; // no sound, done by player
|
||||
TNT1 A 1 BurstGibs();
|
||||
Wait;
|
||||
}
|
||||
}
|
||||
|
||||
Class UTPlayerGibber : UTGibber
|
||||
{
|
||||
bool firstgib;
|
||||
|
||||
override void BurstGibs()
|
||||
{
|
||||
static const class<Actor> bossparts[] = {"UTBossArm","UTBossArm","UTBossFoot","UTBossFoot","UTMaleTorso","UTHeadBoss"};
|
||||
static const class<Actor> maleparts[] = {"UTMaleArm","UTMaleArm","UTMaleFoot","UTMaleFoot","UTMaleTorso","UTHeadMale"};
|
||||
static const class<Actor> femaleparts[] = {"UTFemaleArm","UTFemaleArm","UTFemaleFoot","UTFemaleFoot","UTFemaleTorso","UTHeadFemale"};
|
||||
static const class<Actor> extraparts[] = {"UTThigh","UTThigh","UTHeart","UTLiver","UTStomach"};
|
||||
static const double partofsy[] =
|
||||
{
|
||||
14,
|
||||
-14,
|
||||
9,
|
||||
-9,
|
||||
0,
|
||||
0,
|
||||
8,
|
||||
-8,
|
||||
-2,
|
||||
5,
|
||||
-3
|
||||
};
|
||||
static const double partofsz[] =
|
||||
{
|
||||
36,
|
||||
36,
|
||||
9,
|
||||
9,
|
||||
32,
|
||||
48,
|
||||
20,
|
||||
20,
|
||||
40,
|
||||
32,
|
||||
35
|
||||
};
|
||||
Actor a;
|
||||
double ang, pt;
|
||||
Vector3 dir;
|
||||
if ( !firstgib )
|
||||
{
|
||||
firstgib = true;
|
||||
for ( int i=0; i<11; i++ )
|
||||
{
|
||||
Actor a;
|
||||
if ( i < 6 )
|
||||
{
|
||||
if ( UTPlayer(Gibbed).DollType == UTPlayer.DOLL_Boss )
|
||||
a = Spawn(bossparts[i],Vec3Offset(-partofsy[i]*sin(angle),partofsy[i]*cos(angle),partofsz[i]));
|
||||
else if ( UTPlayer(Gibbed).DollType == UTPlayer.DOLL_Female )
|
||||
a = Spawn(femaleparts[i],Vec3Offset(-partofsy[i]*sin(angle),partofsy[i]*cos(angle),partofsz[i]));
|
||||
else a = Spawn(maleparts[i],Vec3Offset(-partofsy[i]*sin(angle),partofsy[i]*cos(angle),partofsz[i]));
|
||||
}
|
||||
else a = Spawn(extraparts[i-6],Vec3Offset(-partofsy[i]*sin(angle),partofsy[i]*cos(angle),partofsz[i]));
|
||||
ang = FRandom[Blod](0,360);
|
||||
pt = FRandom[Blod](-90,90);
|
||||
if ( a is 'UTHead' )
|
||||
{
|
||||
pt = FRandom[Blod](-90,-15);
|
||||
if ( UTPlayer(Gibbed).player )
|
||||
{
|
||||
UTPlayer(Gibbed).player.Camera = a;
|
||||
UTHead(a).headowner = UTPlayer(Gibbed).player;
|
||||
}
|
||||
}
|
||||
dir = (cos(pt)*cos(ang),cos(pt)*sin(ang),sin(-pt));
|
||||
a.vel = rvel*0.6+dir*FRandom[Blod](8.0,12.0);
|
||||
}
|
||||
}
|
||||
for ( int i=0; i<gibsize; i++ )
|
||||
{
|
||||
let a = Spawn("UTBloodPuff",Vec3Offset(FRandom[Blod](-0.8,0.8)*radius,FRandom[Blod](-0.8,0.8)*radius,FRandom[Blod](0.1,0.9)*height));
|
||||
ang = FRandom[Blod](0,360);
|
||||
pt = FRandom[Blod](-90,90);
|
||||
dir = (cos(pt)*cos(ang),cos(pt)*sin(ang),sin(-pt));
|
||||
a.vel = rvel*0.2+dir*FRandom[Blod](1.5,3.0);
|
||||
}
|
||||
A_CountDown();
|
||||
}
|
||||
override void PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
gibsize = 3;
|
||||
reactiontime = 5;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TNT1 A 0 NoDelay; // no sound, done by player
|
||||
TNT1 A 1 BurstGibs();
|
||||
Wait;
|
||||
}
|
||||
}
|
||||
|
||||
// Chunks
|
||||
Class UTGib : Actor
|
||||
{
|
||||
|
|
@ -312,9 +464,9 @@ Class UTGib : Actor
|
|||
if ( bloodcolor ) tracer.SetShade(bloodcolor);
|
||||
else tracer.SetShade(gameinfo.defaultbloodcolor);
|
||||
tracer.translation = bloodtranslation;
|
||||
rollvel = FRandom[Blod](5,15)*RandomPick[Blod](-1,1);
|
||||
anglevel = FRandom[Blod](5,15)*RandomPick[Blod](-1,1);
|
||||
pitchvel = FRandom[Blod](5,15)*RandomPick[Blod](-1,1);
|
||||
rollvel = FRandom[Blod](3,6)*RandomPick[Blod](-1,1);
|
||||
anglevel = FRandom[Blod](3,6)*RandomPick[Blod](-1,1);
|
||||
pitchvel = FRandom[Blod](3,6)*RandomPick[Blod](-1,1);
|
||||
}
|
||||
void A_HandleBounce()
|
||||
{
|
||||
|
|
@ -333,9 +485,12 @@ Class UTGib : Actor
|
|||
else if ( spd > 20 ) vel *= 0.8;
|
||||
A_PlaySound("misc/gibp");
|
||||
double ang, pt;
|
||||
for ( int i=0; i<6; i++ )
|
||||
int max = flak_blood?6:2;
|
||||
for ( int i=0; i<max; i++ )
|
||||
{
|
||||
let d = Spawn("UTBloodDrop",pos);
|
||||
Actor d;
|
||||
if ( flak_blood ) d = Spawn("UTBloodDrop",pos);
|
||||
else d = Spawn("Blood",pos,ALLOW_REPLACE);
|
||||
d.translation = bloodtranslation;
|
||||
if ( bloodcolor ) d.SetShade(bloodcolor);
|
||||
else d.SetShade(gameinfo.defaultbloodcolor);
|
||||
|
|
@ -346,9 +501,9 @@ Class UTGib : Actor
|
|||
d.vel = dir*FRandom[Blood](0.8,1.2);
|
||||
d.scale *= 0.75*FRandom[Blood](0.6,1.4);
|
||||
}
|
||||
rollvel = FRandom[Blod](5,15)*RandomPick[Blod](-1,1);
|
||||
anglevel = FRandom[Blod](5,15)*RandomPick[Blod](-1,1);
|
||||
pitchvel = FRandom[Blod](5,15)*RandomPick[Blod](-1,1);
|
||||
rollvel = FRandom[Blod](3,6)*RandomPick[Blod](-1,1);
|
||||
anglevel = FRandom[Blod](3,6)*RandomPick[Blod](-1,1);
|
||||
pitchvel = FRandom[Blod](3,6)*RandomPick[Blod](-1,1);
|
||||
}
|
||||
States
|
||||
{
|
||||
|
|
@ -380,25 +535,71 @@ Class UTFemaleTorso : UTGib {}
|
|||
Class UTMaleArm : UTGib {}
|
||||
Class UTMaleFoot : UTGib {}
|
||||
Class UTMaleTorso : UTGib {}
|
||||
Class UTBossArm : UTGib {}
|
||||
Class UTBossFoot : UTGib {}
|
||||
Class UTBossTorso : UTGib {}
|
||||
Class UTHeart : UTGib
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
UGIB ABCDEF 2;
|
||||
UGIB ABCDEF 1
|
||||
{
|
||||
roll += rollvel;
|
||||
angle += anglevel;
|
||||
pitch += pitchvel;
|
||||
}
|
||||
Loop;
|
||||
Bounce:
|
||||
UGIB A 0;
|
||||
Goto Spawn;
|
||||
Death:
|
||||
UGIB ABCDEFABCDEFABCDEF 2;
|
||||
UGIB ABCDEFABCDEF 4;
|
||||
UGIB ABCDEF 8;
|
||||
UGIB A -1;
|
||||
Stop;
|
||||
UGIB A 1 A_SetTics(Random[Blod](12,18)*15);
|
||||
UGIB A 1 A_FadeOut(0.05);
|
||||
Wait;
|
||||
}
|
||||
}
|
||||
Class UTLiver : UTGib {}
|
||||
Class UTStomach : UTGib {}
|
||||
Class UTHeadFemale : UTGib {}
|
||||
Class UTHeadMale : UTGib {}
|
||||
Class UTHead : UTGib
|
||||
{
|
||||
PlayerInfo headowner;
|
||||
|
||||
override void PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
UTMainHandler.DoFlash(self,Color(128,255,0,0),150);
|
||||
UTMainHandler.DoFlash(self,Color(96,255,0,0),0);
|
||||
}
|
||||
|
||||
override void Tick()
|
||||
{
|
||||
Super.Tick();
|
||||
if ( headowner && headowner.mo && (headowner.mo.Health > 0) && (headowner.Camera == self) )
|
||||
{
|
||||
headowner.Camera = headowner.mo;
|
||||
headowner = null;
|
||||
}
|
||||
}
|
||||
|
||||
override void OnDestroy()
|
||||
{
|
||||
if ( headowner && (headowner.Camera == self) && headowner.mo )
|
||||
{
|
||||
headowner.Camera = headowner.mo;
|
||||
headowner = null;
|
||||
}
|
||||
Super.OnDestroy();
|
||||
}
|
||||
States
|
||||
{
|
||||
Death:
|
||||
UGIB A 1 A_SetTics(Random[Blod](12,18)*15);
|
||||
UGIB A 0 A_JumpIf(headowner,"Death");
|
||||
UGIB A 1 A_FadeOut(0.05);
|
||||
Wait;
|
||||
}
|
||||
}
|
||||
Class UTHeadFemale : UTHead {}
|
||||
Class UTHeadMale : UTHead {}
|
||||
Class UTHeadBoss : UTHead {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue