The face animation stuff here too.

This commit is contained in:
Marisa the Magician 2024-04-17 19:09:28 +02:00
parent 5e793cf395
commit 3da2e05b50
9 changed files with 61 additions and 15 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 741 B

After

Width:  |  Height:  |  Size: 921 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 B

After

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 B

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 392 B

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 604 B

After

Width:  |  Height:  |  Size: 772 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 B

After

Width:  |  Height:  |  Size: 105 B

View File

@ -1,3 +1,3 @@
[default]
ASH_MODVER="\cjCHILD OF ASH\c- \cw0.1a r108 \cu(Fri 22 Mar 16:01:14 CET 2024)\c-";
ASH_SHORTVER="\cw0.1a r108 \cu(2024-03-22 16:01:14)\c-";
ASH_MODVER="\cjCHILD OF ASH\c- \cw0.1a r109 \cu(Wed Apr 17 19:09:28 CEST 2024)\c-";
ASH_SHORTVER="\cw0.1a r109 \cu(2024-04-17 19:09:28)\c-";

View File

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

View File

@ -1,15 +1,16 @@
// Here comes a not-so-ordinary witch
Enum ESayaFaceState
Enum EMarisaFaceState
{
FS_DEFAULT,
FS_GRIN,
FS_BLUSH,
FS_EVILGRIN,
FS_SAD,
FS_BLUSH,
FS_LOPAIN,
FS_HIPAIN,
FS_OUCH,
FS_DEAD // UNUSED
FS_RAMPAGE
};
Class MarisaPlayer : SWWMPlayer
@ -54,7 +55,7 @@ Class MarisaPlayer : SWWMPlayer
override void UpdateFace()
{
// damage handling
if ( facedamage )
if ( facedamage && (facestate < FS_RAMPAGE) )
{
if ( lastdamage > 50 )
{
@ -80,6 +81,15 @@ Class MarisaPlayer : 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;
@ -107,6 +117,8 @@ Class MarisaPlayer : SWWMPlayer
blinktime = 30;
}
}
// TODO: rampage face when holding attack
// (takes priority over everything else)
if ( !(gametic&1) )
{
if ( blinktime <= 0 )
@ -134,6 +146,27 @@ Class MarisaPlayer : SWWMPlayer
// TODO: update the actual texture on the model
}
override void PlayRevive()
{
Super.PlayRevive();
// force ouch face
facestate = FS_OUCH;
facetimer = 40;
paindir = 0;
}
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 Weapon PickWeapon( int slot, bool checkammo )
{
if ( (slot >= 8) && (slot <= 9) ) EventHandler.SendNetworkEvent("marisaspellslot",slot-8);