This commit is contained in:
Paul 2001-04-18 23:37:52 +00:00
parent 63598d2f73
commit c0db0ca877
3 changed files with 137 additions and 130 deletions

View File

@ -6,6 +6,7 @@
Created: Created:
Project: Spongebob Project: Spongebob
Purpose: Handles automatically generated sound effects based upon anim frames Purpose: Handles automatically generated sound effects based upon anim frames
NB: DON'T FORGET TO CHANGE s_numAnimSfx!!!!!!!
Copyright (c) 2001 Climax Development Ltd Copyright (c) 2001 Climax Development Ltd
@ -24,6 +25,11 @@
/* Data /* Data
---- */ ---- */
#ifndef __ANIM_SPONGEBOB_HEADER__
#include <ACTOR_SPONGEBOB_ANIM.h>
#endif
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
Tyepdefs && Defines Tyepdefs && Defines
------------------- */ ------------------- */
@ -41,139 +47,99 @@
---- */ ---- */
// ANIM_SPONGEBOB_BLOWBUBBLE
static const CPlayer::AnimFrameSfx s_blowBubbleSfx[]=
{
{ 4, CSoundMediator::SFX_BUBBLE_WAND, },
};
static const int s_blowBubbleCount=sizeof(s_blowBubbleSfx)/sizeof(CPlayer::AnimFrameSfx);
// ANIM_PLAYER_ANIM_BUTTBOUNCEEND // ANIM_PLAYER_ANIM_BUTTBOUNCEEND
static const CPlayer::AnimFrameSfx s_buttBounceEndSfx[]= static const CPlayer::AnimFrameSfx s_buttBounceEndSfx[]=
{ {
{ 1, CSoundMediator::SFX_SPONGEBOB_BUTTBOUNCE, }, { 0, CSoundMediator::SFX_SPONGEBOB_BUTTBOUNCE, },
}; };
static const int s_buttBounceEndCount=sizeof(s_buttBounceEndSfx)/sizeof(CPlayer::AnimFrameSfx); static const int s_buttBounceEndCount=sizeof(s_buttBounceEndSfx)/sizeof(CPlayer::AnimFrameSfx);
// ANIM_PLAYER_ANIM_BUTTBOUNCESTART // ANIM_SPONGEBOB_HITGROUND
// ANIM_PLAYER_ANIM_DEATHBACKWARDS static const CPlayer::AnimFrameSfx s_hitGroundSfx[]=
// ANIM_PLAYER_ANIM_DEATHDRY
// ANIM_PLAYER_ANIM_DEATHFORWARDS
// ANIM_PLAYER_ANIM_DEATHSPIN
// ANIM_PLAYER_ANIM_DEATHTAR
// ANIM_PLAYER_ANIM_ELECTRICSHOCK
// ANIM_PLAYER_ANIM_ELECTRICSHOCKEND
// ANIM_PLAYER_ANIM_ELECTRICSHOCKSTART
// ANIM_PLAYER_ANIM_FACEBACK
static const CPlayer::AnimFrameSfx s_faceBackSfx[]=
{ {
{ 6, CSoundMediator::SFX_SPONGEBOB_WALK_2 }, { 8, CSoundMediator::SFX_SPONGEBOB_LAND_AFTER_FALL, },
{ 7, CSoundMediator::SFX_SPONGEBOB_WALK_1 }, { 28, CSoundMediator::SFX_SPONGEBOB_LAND_AFTER_FALL, },
}; };
static const int s_faceBackCount=sizeof(s_faceBackSfx)/sizeof(CPlayer::AnimFrameSfx); static const int s_hitGroundCount=sizeof(s_hitGroundSfx)/sizeof(CPlayer::AnimFrameSfx);
// ANIM_PLAYER_ANIM_FACEFRONT
static const CPlayer::AnimFrameSfx s_faceFrontSfx[]=
{
{ 6, CSoundMediator::SFX_SPONGEBOB_WALK_1 },
{ 7, CSoundMediator::SFX_SPONGEBOB_WALK_2 },
};
static const int s_faceFrontCount=sizeof(s_faceFrontSfx)/sizeof(CPlayer::AnimFrameSfx);
// ANIM_PLAYER_ANIM_FALL
// ANIM_PLAYER_ANIM_GETUP
// ANIM_PLAYER_ANIM_GETUPRUN
// ANIM_PLAYER_ANIM_HITGROUND
// ANIM_PLAYER_ANIM_HOVER
// ANIM_PLAYER_ANIM_HOVEREND
// ANIM_PLAYER_ANIM_HOVERSTART
// ANIM_PLAYER_ANIM_IDLEBREATHE
// ANIM_PLAYER_ANIM_IDLEHOOLA
// ANIM_PLAYER_ANIM_IDLELOOK
// ANIM_PLAYER_ANIM_IDLEWIGGLEARM
// ANIM_PLAYER_ANIM_JUMPEND
static const CPlayer::AnimFrameSfx s_jumpEndSfx[]=
{
{ 4, CSoundMediator::SFX_SPONGEBOB_WALK_2 },
{ 5, CSoundMediator::SFX_SPONGEBOB_WALK_1 },
};
static const int s_jumpEndCount=sizeof(s_jumpEndSfx)/sizeof(CPlayer::AnimFrameSfx);
// ANIM_PLAYER_ANIM_KARATE Might have to go into the CPlayerStateChop::enter code (PKG)
static const CPlayer::AnimFrameSfx s_chopSfx[]=
{
{ 1, CSoundMediator::SFX_SPONGEBOB_KARATE_1, },
};
static const int s_chopCount=sizeof(s_chopSfx)/sizeof(CPlayer::AnimFrameSfx);
// ANIM_PLAYER_ANIM_RUN
static const CPlayer::AnimFrameSfx s_runSfx[]=
{
{ 6, CSoundMediator::SFX_SPONGEBOB_WALK_1 },
{ 18, CSoundMediator::SFX_SPONGEBOB_WALK_2 },
};
static const int s_runCount=sizeof(s_runSfx)/sizeof(CPlayer::AnimFrameSfx);
// ANIM_PLAYER_ANIM_RUNSTART
// ANIM_PLAYER_ANIM_RUNSTOP
static const CPlayer::AnimFrameSfx s_runStopSfx[]=
{
{ 6, CSoundMediator::SFX_SPONGEBOB_WALK_1 },
{ 18, CSoundMediator::SFX_SPONGEBOB_WALK_2 },
};
static const int s_runStopCount=sizeof(s_runStopSfx)/sizeof(CPlayer::AnimFrameSfx);
// ANIM_PLAYER_ANIM_SOAKUP
// ANIM_PLAYER_ANIM_TALK01
// ANIM_PLAYER_ANIM_TEETERBACK
// ANIM_PLAYER_ANIM_TEETERFRONT
// ANIM_PLAYER_ANIM_IDLEWIND // ANIM_PLAYER_ANIM_IDLEWIND
static const CPlayer::AnimFrameSfx s_idleWindSfx[]= static const CPlayer::AnimFrameSfx s_idleWindSfx[]=
{ {
{ 7, CSoundMediator::SFX_HAZARD__SWAMP_GAS, }, { 12, CSoundMediator::SFX_HAZARD__SWAMP_GAS, },
{ 24, CSoundMediator::SFX_SPONGEBOB_WALK_2, }, { 28, CSoundMediator::SFX_SPONGEBOB_WALK_2, },
}; };
static const int s_idleWindCount=sizeof(s_idleWindSfx)/sizeof(CPlayer::AnimFrameSfx); static const int s_idleWindCount=sizeof(s_idleWindSfx)/sizeof(CPlayer::AnimFrameSfx);
// ANIM_PLAYER_ANIM_JUMPEND
static const CPlayer::AnimFrameSfx s_jumpEndSfx[]=
{
{ 2, CSoundMediator::SFX_SPONGEBOB_WALK_2 },
{ 3, CSoundMediator::SFX_SPONGEBOB_WALK_1 },
};
static const int s_jumpEndCount=sizeof(s_jumpEndSfx)/sizeof(CPlayer::AnimFrameSfx);
// ANIM_PLAYER_ANIM_RUN
static const CPlayer::AnimFrameSfx s_runSfx[]=
{
{ 3, CSoundMediator::SFX_SPONGEBOB_WALK_1 },
{ 11, CSoundMediator::SFX_SPONGEBOB_WALK_2 },
};
static const int s_runCount=sizeof(s_runSfx)/sizeof(CPlayer::AnimFrameSfx);
// ANIM_PLAYER_ANIM_RUNSTOP
static const CPlayer::AnimFrameSfx s_runStopSfx[]=
{
{ 5, CSoundMediator::SFX_SPONGEBOB_WALK_1 },
{ 6, CSoundMediator::SFX_SPONGEBOB_WALK_2 },
};
static const int s_runStopCount=sizeof(s_runStopSfx)/sizeof(CPlayer::AnimFrameSfx);
// ANIM_SPONGEBOB_WALK
static const CPlayer::AnimFrameSfx s_walkSfx[]=
{
{ 8, CSoundMediator::SFX_SPONGEBOB_WALK_1 },
{ 15, CSoundMediator::SFX_SPONGEBOB_WALK_2 },
};
static const int s_walkCount=sizeof(s_walkSfx)/sizeof(CPlayer::AnimFrameSfx);
// ANIM_PLAYER_ANIM_KARATE
static const CPlayer::AnimFrameSfx s_chopSfx[]=
{
{ 12, CSoundMediator::SFX_SPONGEBOB_KARATE_1, },
};
static const int s_chopCount=sizeof(s_chopSfx)/sizeof(CPlayer::AnimFrameSfx);
// ANIM_SPONGEBOB_SWIPE
static const CPlayer::AnimFrameSfx s_swipeSfx[]=
{
{ 8, CSoundMediator::SFX_SPONGEBOB_NET, },
};
static const int s_swipeCount=sizeof(s_swipeSfx)/sizeof(CPlayer::AnimFrameSfx);
// This is the table that ties up anims to sfx // This is the table that ties up anims to sfx
// CPlayer::setAnimFrame() uses this table to generate sfx based upon anim frames
// NB: Don't use frame 0 in the AnimFrameSfx lists ot it'll play more than once
const CPlayer::AnimSfx CPlayer::s_animSfx[]= const CPlayer::AnimSfx CPlayer::s_animSfx[]=
{ {
{ s_buttBounceEndCount, s_buttBounceEndSfx }, // ANIM_PLAYER_ANIM_BUTTBOUNCEEND { ANIM_SPONGEBOB_BLOWBUBBLE, s_blowBubbleCount, s_blowBubbleSfx },
{ 0, NULL }, // ANIM_PLAYER_ANIM_BUTTBOUNCESTART { ANIM_SPONGEBOB_BUTTBOUNCEEND, s_buttBounceEndCount, s_buttBounceEndSfx },
{ 0, NULL }, // ANIM_PLAYER_ANIM_DEATHBACKWARDS { ANIM_SPONGEBOB_HITGROUND, s_hitGroundCount, s_hitGroundSfx },
{ 0, NULL }, // ANIM_PLAYER_ANIM_DEATHDRY { ANIM_SPONGEBOB_IDLEWIND, s_idleWindCount, s_idleWindSfx },
{ 0, NULL }, // ANIM_PLAYER_ANIM_DEATHFORWARDS { ANIM_SPONGEBOB_JUMPEND, s_jumpEndCount, s_jumpEndSfx },
{ 0, NULL }, // ANIM_PLAYER_ANIM_DEATHSPIN { ANIM_SPONGEBOB_RUN, s_runCount, s_runSfx },
{ 0, NULL }, // ANIM_PLAYER_ANIM_DEATHTAR { ANIM_SPONGEBOB_RUNSTOP, s_runStopCount, s_runStopSfx },
{ 0, NULL }, // ANIM_PLAYER_ANIM_ELECTRICSHOCK { ANIM_SPONGEBOB_WALK, s_walkCount, s_walkSfx },
{ 0, NULL }, // ANIM_PLAYER_ANIM_ELECTRICSHOCKEND { ANIM_SPONGEBOB_KARATE, s_chopCount, s_chopSfx },
{ 0, NULL }, // ANIM_PLAYER_ANIM_ELECTRICSHOCKSTART { ANIM_SPONGEBOB_SWIPE, s_swipeCount, s_swipeSfx },
{ s_faceBackCount, s_faceBackSfx }, // ANIM_PLAYER_ANIM_FACEBACK
{ s_faceFrontCount, s_faceFrontSfx }, // ANIM_PLAYER_ANIM_FACEFRONT
{ 0, NULL }, // ANIM_PLAYER_ANIM_FALL
{ 0, NULL }, // ANIM_PLAYER_ANIM_GETUP
{ 0, NULL }, // ANIM_PLAYER_ANIM_GETUPRUN
{ 0, NULL }, // ANIM_PLAYER_ANIM_HITGROUND
{ 0, NULL }, // ANIM_PLAYER_ANIM_HOVER
{ 0, NULL }, // ANIM_PLAYER_ANIM_HOVEREND
{ 0, NULL }, // ANIM_PLAYER_ANIM_HOVERSTART
{ 0, NULL }, // ANIM_PLAYER_ANIM_IDLEBREATHE
{ 0, NULL }, // ANIM_PLAYER_ANIM_IDLEHOOLA
{ 0, NULL }, // ANIM_PLAYER_ANIM_IDLELOOK
{ 0, NULL }, // ANIM_PLAYER_ANIM_IDLEWIGGLEARM
{ s_jumpEndCount, s_jumpEndSfx }, // ANIM_PLAYER_ANIM_JUMPEND
{ s_chopCount, s_chopSfx }, // ANIM_PLAYER_ANIM_KARATE
{ s_runCount, s_runSfx }, // ANIM_PLAYER_ANIM_RUN
{ 0, NULL }, // ANIM_PLAYER_ANIM_RUNSTART
{ s_runStopCount, s_runStopSfx }, // ANIM_PLAYER_ANIM_RUNSTOP
{ 0, NULL }, // ANIM_PLAYER_ANIM_SOAKUP
{ 0, NULL }, // ANIM_PLAYER_ANIM_TALK01
{ 0, NULL }, // ANIM_PLAYER_ANIM_TEETERBACK
{ 0, NULL }, // ANIM_PLAYER_ANIM_TEETERFRONT
{ s_idleWindCount, s_idleWindSfx }, // ANIM_PLAYER_ANIM_IDLEWIND
}; };
const int CPlayer::s_numAnimSfx=10; // Grrrrrrrr! (pkg)
/*=========================================================================== /*===========================================================================

View File

@ -422,6 +422,9 @@ else if(Pos.vy>m_mapEdge.vy-64)Pos.vy=m_mapEdge.vy-64;
m_cameraLookOffset=0; m_cameraLookOffset=0;
} }
} }
// Automatic anim sfx
playAnimFrameSfx(m_animNo,m_animFrame);
} }
// Ledge look-ahead stuff // Ledge look-ahead stuff
@ -766,17 +769,62 @@ int CPlayer::getAnimFrame()
} }
void CPlayer::setAnimFrame(int _animFrame) void CPlayer::setAnimFrame(int _animFrame)
{ {
const AnimSfx *sfx;
m_animFrame=_animFrame; m_animFrame=_animFrame;
}
int CPlayer::getAnimFrameCount()
{
return m_actorGfx->getFrameCount(m_animNo)<<sbanimspeed;
}
int CPlayer::getAnimNo()
{
return m_animNo;
}
void CPlayer::setAnimNo(int _animNo)
{
m_animNo=_animNo;
setAnimFrame(0);
}
// Are there any sfx for this frame? /*----------------------------------------------------------------------
sfx=&s_animSfx[m_animNo]; Function:
if(sfx->m_numAnimFrameSfx) Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CPlayer::playAnimFrameSfx(int _animNo,int _animFrame)
{
static int lastAnimNo=-1;
static const AnimSfx *sfx;
if(_animNo!=lastAnimNo)
{
// Lookup the new anim number and cache it for next time :)
int i;
sfx=s_animSfx;
for(i=0;i<s_numAnimSfx;i++)
{
if(sfx->m_animNumber==_animNo)
{
break;
}
sfx++;
}
if(i==s_numAnimSfx)
{
// No sfx for this anim
sfx=NULL;
}
lastAnimNo=_animNo;
}
// Are there any sounds for this anim at this frame?
if(sfx)
{ {
const AnimFrameSfx *frameSfx; const AnimFrameSfx *frameSfx;
int i; int i;
ASSERT(sfx->m_numAnimFrameSfx);
frameSfx=sfx->m_animFrameSfx; frameSfx=sfx->m_animFrameSfx;
for(i=0;i<sfx->m_numAnimFrameSfx;i++) for(i=0;i<sfx->m_numAnimFrameSfx;i++)
{ {
@ -800,19 +848,6 @@ void CPlayer::setAnimFrame(int _animFrame)
} }
} }
} }
int CPlayer::getAnimFrameCount()
{
return m_actorGfx->getFrameCount(m_animNo)<<sbanimspeed;
}
int CPlayer::getAnimNo()
{
return m_animNo;
}
void CPlayer::setAnimNo(int _animNo)
{
m_animNo=_animNo;
setAnimFrame(0);
}
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------

View File

@ -177,6 +177,10 @@ public:
int getAnimFrameCount(); int getAnimFrameCount();
int getAnimNo(); int getAnimNo();
void setAnimNo(int _animNo); void setAnimNo(int _animNo);
private:
void playAnimFrameSfx(int _animNo,int _animFrame);
public:
DVECTOR getPlayerPos() {return Pos;} DVECTOR getPlayerPos() {return Pos;}
void setPlayerPos(DVECTOR *_pos) {Pos=*_pos;} void setPlayerPos(DVECTOR *_pos) {Pos=*_pos;}
PLAYERINPUT getPadInputHeld() {return m_padInput;} PLAYERINPUT getPadInputHeld() {return m_padInput;}
@ -202,10 +206,12 @@ public:
private: private:
typedef struct typedef struct
{ {
int m_animNumber;
int m_numAnimFrameSfx; int m_numAnimFrameSfx;
const struct AnimFrameSfx *m_animFrameSfx; const struct AnimFrameSfx *m_animFrameSfx;
} AnimSfx; } AnimSfx;
static const AnimSfx s_animSfx[]; static const AnimSfx s_animSfx[];
static const int s_numAnimSfx;
int m_animFrame; int m_animFrame;
int m_animNo; int m_animNo;
CActorGfx *m_actorGfx; CActorGfx *m_actorGfx;