Face animation additions.

This commit is contained in:
Marisa the Magician 2024-04-17 18:43:12 +02:00
parent 841d90e809
commit 18fd9e6dae
6 changed files with 61 additions and 10 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 701 B

After

Width:  |  Height:  |  Size: 879 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 612 B

After

Width:  |  Height:  |  Size: 775 B

View File

@ -1,3 +1,3 @@
[default]
ONI_MODVER="\crRED ONI\c- \cw0.1a r165 \cu(Wed Apr 17 18:42:51 CEST 2024)\c-";
ONI_SHORTVER="\cw0.1a r165 \cu(2024-04-17 18:42:51)\c-";
ONI_MODVER="\crRED ONI\c- \cw0.1a r166 \cu(Wed Apr 17 18:43:12 CEST 2024)\c-";
ONI_SHORTVER="\cw0.1a r166 \cu(2024-04-17 18:43:12)\c-";

View File

@ -54,13 +54,24 @@ extend Class OniStatusBar
let paindir = demo.paindir;
let facetimer = demo.facetimer;
let blinktime = demo.blinktime;
if ( CPlayer.Health <= 0 ) return 15;
if ( (isInvulnerable() || demo.FindInventory("OniMilkPower")) && (facestate >= FS_LOPAIN) ) return 4;
if ( facestate == FS_OUCH ) return (paindir==-1)?13:(paindir==1)?14:12;
if ( facestate == FS_HIPAIN ) return (paindir==-1)?10:(paindir==1)?11:9;
if ( facestate == FS_LOPAIN ) return (paindir==-1)?7:(paindir==1)?8:6;
if ( CPlayer.Health <= 0 ) return 23;
if ( facestate == FS_RAMPAGE ) return 13;
if ( facestate == FS_EVILGRIN ) return 12;
if ( facestate == FS_GRIN ) return 4;
if ( facestate == FS_SAD ) return 5;
if ( facestate == FS_SAD ) return 10;
if ( isInvulnerable() || demo.FindInventory("OniMilkPower") )
{
if ( blinktime < 0 ) return 7;
return demo.lookdir+4;
}
if ( facestate == FS_OUCH ) return (paindir==-1)?21:(paindir==1)?22:20;
if ( facestate == FS_HIPAIN ) return (paindir==-1)?18:(paindir==1)?19:17;
if ( facestate == FS_LOPAIN ) return (paindir==-1)?15:(paindir==1)?16:14;
if ( CPlayer.Health <= 25 ) // low HP face
{
if ( blinktime < 0 ) return 11;
return demo.lookdir+8;
}
if ( blinktime < 0 ) return 3;
return demo.lookdir;
}

View File

@ -5,10 +5,11 @@ Enum EOniFaceState
FS_DEFAULT,
FS_GRIN,
FS_SAD,
FS_EVILGRIN,
FS_LOPAIN,
FS_HIPAIN,
FS_OUCH,
FS_DEAD // UNUSED
FS_RAMPAGE
};
Class IbukiPlayer : SWWMPlayer
@ -54,7 +55,7 @@ Class IbukiPlayer : SWWMPlayer
override void UpdateFace()
{
// damage handling
if ( facedamage )
if ( facedamage && (facestate < FS_RAMPAGE) )
{
if ( lastdamage > 60 )
{
@ -80,6 +81,15 @@ Class IbukiPlayer : SWWMPlayer
}
}
facedamage = false;
// "evil" grin variant, for BFG-tier weapons
// (takes priority over sad face, unlike standard grin)
if ( faceevilgrin && (facestate <= FS_SAD) )
{
facestate = FS_EVILGRIN;
facetimer = 50;
facegrin = false; // cancels normal grin
}
faceevilgrin = false;
if ( facegrin && (facestate < FS_SAD) )
{
facestate = FS_GRIN;
@ -92,6 +102,8 @@ Class IbukiPlayer : SWWMPlayer
facetimer = 50;
}
facesad = false;
// TODO: rampage face when holding attack
// (takes priority over everything else)
if ( facetimer > 0 )
{
facetimer--;
@ -128,6 +140,28 @@ Class IbukiPlayer : SWWMPlayer
// TODO: update the actual texture on the model
}
override void PlayRevive()
{
Super.PlayRevive();
// force ouch face
facestate = FS_OUCH;
facetimer = 40;
paindir = 0;
// TODO: add debuff
}
override void AddInventory( Inventory item )
{
Super.AddInventory(item);
if ( (item is 'Weapon') && level.maptime )
{
A_StartSound("*weaponlaugh",CHAN_VOICE);
if ( (item is 'SWWMWeapon') && SWWMWeapon(item).bISBFGTIER )
faceevilgrin = true;
else facegrin = true;
}
}
override void CheatGive_Artifacts( int amount )
{
foreach ( cls:AllActorClasses )

View File

@ -56,6 +56,12 @@ Class OniBatterGiver : Inventory
{
Actor rt = toucher;
if ( toucher.player ) rt = toucher.player.mo;
if ( rt is 'SWWMPlayer' )
{
let oni = SWWMPlayer(rt);
oni.A_StartSound("*weaponlaugh",CHAN_VOICE);
oni.facegrin = true;
}
let bat = OniBatter(rt.FindInventory('OniBatter'));
if ( !bat )
{