diff --git a/Utils/Libs/DaveLib/DaveLib.cpp b/Utils/Libs/DaveLib/DaveLib.cpp index 0b6443eda..69ef00fca 100644 --- a/Utils/Libs/DaveLib/DaveLib.cpp +++ b/Utils/Libs/DaveLib/DaveLib.cpp @@ -47,6 +47,7 @@ int round(float f) } //*************************************************************************** +/* void alignFile( FILE *f, int align ) { long fp = ftell(f); @@ -57,6 +58,17 @@ void alignFile( FILE *f, int align ) fwrite(buffer, s, 1, f); } } +*/ +//*************************************************************************** +void PadFile(FILE *File) +{ +int Pad=ftell(File) & 3; + + if (Pad) + { + fwrite(&Pad,Pad,1,File); + } +} //*************************************************************************** GString CheckFileString(const char * Str) @@ -148,3 +160,58 @@ FILE *File=fopen(Name,"rb"); } return((char*)Name); } +/**************************************************************************************/ +struct sTgaHdr +{ + char id; // 0 + char colmaptype; // 1 + char imagetype; // 2 + char fei[2]; // 3 + char cml[2]; // 5 + char cmes; // 7 + short xorig; // 8 + short yorig; // 10 + short width; // 12 + short height; // 14 + char depth; // 15 + char imagedesc; // 16 +}; + + + +void SaveTGA(char *Filename,int W,int H,u8 *Data,bool IsBGR) +{ +FILE *File; +sTgaHdr FileHdr; + + File=fopen(Filename,"wb"); + + memset(&FileHdr,0 ,sizeof(sTgaHdr)); + + FileHdr.imagetype= 2; //imagetype + FileHdr.width = W; + FileHdr.height= H; + FileHdr.depth=24; + + fwrite(&FileHdr,sizeof(sTgaHdr),1,File); + if (!IsBGR) + { + fwrite(Data,W*H*3,1,File); + } + else + { + int Size=W*H; + for (int i=0; i #include #include - +#include #include "MkActor.h" #include using namespace std; +//#define CheckDups 1 +//#define OutputTGA //*************************************************************************** vector ActorList; @@ -257,6 +259,7 @@ int Error=0; sFrame NewFrame; NewFrame.Filename=Find.name; ThisAnim.Frames.push_back(NewFrame); + Error=_findnext( FileHandle, &Find); } _findclose( FileHandle); @@ -283,7 +286,7 @@ int i,ListSize=AnimList.size(); //*************************************************************************** void CMkActor::LoadFrame(sFrame &ThisFrame,bool VRamFlag) { - ThisFrame.FrameIdx=LoadBmp(ThisFrame.Filename,VRamFlag); + ThisFrame.FrameIdx=LoadBmp(ThisFrame.Filename,VRamFlag); } //*************************************************************************** @@ -310,7 +313,7 @@ Rect OriginalRect; nfAreaBytes=nfLineWidthBytes*nfH; Bmp.PsxSize=nfAreaBytes; - Bmp.Psx=(u8*)malloc(nfAreaBytes); + Bmp.Psx=(u8*)malloc(nfAreaBytes+16); ASSERT(Bmp.Psx); for (int y=0;y&Bmp.Psx[nfAreaBytes]) printf("!"); + if (PixAddr>=&Bmp.Psx[nfAreaBytes]) ASSERT(!""); if ((x&1)) { *PixAddr&=0x0f; @@ -344,39 +347,28 @@ int CMkActor::LoadBmp(GString &Name,bool VRamFlag) { GString Filename=SpriteDir+Name; -int Idx,i,ListSize; -int W,H,Size; -sBmp NewBmp; -Frame &Bmp=NewBmp.Bmp; +int BmpListSize=BmpList.size(); +sBmp NewBmp; +SprFrame &NewFrame=NewBmp.Bmp; +FileInfo ThisInfo; - NewBmp.Filename=Filename; - NewBmp.RGB=0; - NewBmp.Pak=0; - NewBmp.Psx=0; - NewBmp.VRamFlag=VRamFlag; - Bmp.LoadBMP(Filename); - W=Bmp.GetWidth(); - H=Bmp.GetHeight(); - Size=W*H; - NewBmp.RGB=(u8*)malloc(Size*3); - ASSERT(NewBmp.RGB); - Bmp.MakeRGB(NewBmp.RGB); +// ThisInfo.SetInfo(name, CrossHair, ThisZeroColZero, MoveUVs, AllowRotate, ShrinkToFit, m_allocateAs16bit); + ThisInfo.SetInfo(Filename, false, true, false, false, true, false); -#if _DEBUG && 0 - { -u8 *TGA=(u8*)malloc(Size*3); - ASSERT(TGA); - Bmp.FlipY(); - Bmp.MakeRGB(TGA); - Bmp.FlipY(); + NewBmp.RGB=0; + NewBmp.Pak=0; + NewBmp.Psx=0; + NewBmp.VRamFlag=VRamFlag; - char OutName[256]; - sprintf(OutName,"\\x\\%s.tga",Name); - SaveTGA(OutName,W,H,TGA,true); - free(TGA); - } -#endif + NewFrame.LoadBMP(Filename); +#ifdef CheckDups +int Size=NewFrame.GetWidth()*NewFrame.GetHeight(); + NewBmp.RGB=(u8*)malloc(Size*3); + ASSERT(NewBmp.RGB); + NewFrame.MakeRGB(NewBmp.RGB); + +// Check for dups (Broken at the mo, ah well) // Gen Chksum u8 *RGB=NewBmp.RGB; NewBmp.ChkR=NewBmp.ChkG=NewBmp.ChkB=0; @@ -386,15 +378,13 @@ u8 *RGB=NewBmp.RGB; NewBmp.ChkG+=*RGB++; NewBmp.ChkB+=*RGB++; } - - ListSize=BmpList.size(); - Idx=-1; + +int Idx=-1; // Find existing - for (i=0; i Out; else { // Pak Out[i].PAKSpr=(u8*)ftell(File); + Out[i].XOfs=-ThisBmp.Bmp.GetX(); + Out[i].YOfs=-ThisBmp.Bmp.GetY(); + Out[i].W=ThisBmp.Bmp.GetWidth(); + Out[i].H=ThisBmp.Bmp.GetHeight(); + fwrite(ThisBmp.Pak,1,ThisBmp.PakSize,File); PadFile(File); } diff --git a/Utils/MkActor/MkActor.h b/Utils/MkActor/MkActor.h index 603d39665..b0f04cc56 100644 --- a/Utils/MkActor/MkActor.h +++ b/Utils/MkActor/MkActor.h @@ -23,15 +23,14 @@ struct sAnim //*************************************************************************** struct sBmp { - GString Filename; - Frame Bmp; - int ChkR,ChkG,ChkB; - u8 *RGB; - u8 *Psx; - u8 *Pak; - int PsxSize; - int PakSize; - bool VRamFlag; + SprFrame Bmp; + int ChkR,ChkG,ChkB; + u8 *RGB; + u8 *Psx; + u8 *Pak; + int PsxSize; + int PakSize; + bool VRamFlag; }; //*************************************************************************** @@ -39,7 +38,6 @@ class CMkActor { public: CMkActor(GString &ActorName,GString &ActorPath,GString &SpritePath); -// ~CMkActor(); static void SetTPData(const char *Name,int TPBase,int TPW,int TPH); diff --git a/source/enemy/nclam.cpp b/source/enemy/nclam.cpp index d7b6571cc..681bb9308 100644 --- a/source/enemy/nclam.cpp +++ b/source/enemy/nclam.cpp @@ -50,7 +50,7 @@ void CNpcEnemy::processCloseClamJumpAttack( int _frames ) if ( !m_animPlaying ) { m_animPlaying = true; - m_animNo = ANIM_CLAM_CLAMSNAPUP; + m_animNo = ANIM_CLAM_SIDESNAP; m_frame = 0; } } @@ -96,7 +96,7 @@ void CNpcEnemy::processCloseClamSnapAttack( int _frames ) if ( !m_animPlaying ) { m_animPlaying = true; - m_animNo = ANIM_CLAM_CLAMSIDESNAP; + m_animNo = ANIM_CLAM_SIDESNAP; m_frame = 0; } diff --git a/source/enemy/npc.cpp b/source/enemy/npc.cpp index c99eb9d46..d47a91f4a 100644 --- a/source/enemy/npc.cpp +++ b/source/enemy/npc.cpp @@ -45,7 +45,8 @@ #include "game\convo.h" #endif -#include "Gfx\Skel.h" + +#include "Gfx\actor.h" #ifndef __VID_HEADER_ #include "system\vid.h" @@ -63,11 +64,6 @@ void CNpcFriend::init() { CNpcThing::init(); -// sActorHdr *Hdr=m_skel.Load(ACTORS_SPONGEBOB_A3D); -// m_skel.Init(Hdr); - m_skel.Init(ACTORS_SPONGEBOB_A3D); - m_actorTPage = TPLoadTex(ACTORS_ACTOR_SPONGEBOB_TEX); - Pos.vx = 100; Pos.vy = 100; @@ -96,10 +92,6 @@ void CNpcFriend::shutdown() { //m_spriteBank->dump(); delete m_spriteBank; - // temporary - //TPFree( m_actorTPage ); - //CAnimDB::Dump( m_data[m_type].animData ); - CNpcThing::shutdown(); } @@ -135,11 +127,7 @@ void CNpcFriend::render() renderPos.vx = ( Pos.vx + m_drawOffset.vx - offset.vx - ( VidGetScrW() >> 1 ) ) * 20; renderPos.vy = ( Pos.vy + m_drawOffset.vy - offset.vy - ( VidGetScrH() >> 1 ) ) * 20; - m_skel.setPos( renderPos ); - m_skel.setFrame(m_frame); - m_skel.setAnimNo(m_animNo); - m_skel.Animate(this); - m_skel.Render(this); + m_actorGfx->Render(renderPos,m_frame,m_animNo,false); /*s32 x,y; s32 scrnWidth = VidGetScrW(); @@ -216,12 +204,7 @@ void CNpcEnemy::init() { CEnemyThing::init(); -// sActorHdr *Hdr = m_skel.Load( m_data[m_type].skelType ); -// m_skel.Init( Hdr ); - m_skel.Init(m_data[m_type].skelType); - m_actorTPage = TPLoadTex( ACTORS_ACTOR_ENEMY_TEX ); - - m_skel.setAng(1024); + m_actorGfx=CActorPool::GetActor(m_data[m_type].skelType); m_animPlaying = true; m_animNo = m_data[m_type].initAnim; @@ -545,7 +528,6 @@ void CNpcEnemy::shutdown() m_positionHistory = NULL; // temporary - TPFree( m_actorTPage ); CEnemyThing::shutdown(); } @@ -561,7 +543,7 @@ void CNpcEnemy::think(int _frames) if ( m_animPlaying ) { - int frameCount = m_skel.getFrameCount(); + int frameCount = m_actorGfx->getFrameCount(m_animNo); if ( frameCount - m_frame > _frames ) { @@ -576,12 +558,12 @@ void CNpcEnemy::think(int _frames) if ( m_heading > 1024 && m_heading < 3072 ) { - m_skel.setAng( 3072 ); +//!! m_actorGfx.setAng( 3072 ); m_reversed = true; } else { - m_skel.setAng( 1024 ); +//!! m_actorGfx.setAng( 1024 ); m_reversed = false; } @@ -1284,18 +1266,14 @@ void CNpcEnemy::render() if ( m_reversed ) { - m_skel.setZAng( ( m_heading + 2048 ) & 4095 ); +//!! m_actorGfx.setZAng( ( m_heading + 2048 ) & 4095 ); } else { - m_skel.setZAng( m_heading ); +//!! m_actorGfx.setZAng( m_heading ); } - m_skel.setPos( renderPos ); - m_skel.setFrame(m_frame); - m_skel.setAnimNo(m_animNo); - m_skel.Animate(this); - m_skel.Render(this); + m_actorGfx->Render(renderPos,m_frame,m_animNo,m_reversed); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/source/enemy/npc.h b/source/enemy/npc.h index 5b844a7e6..735157eab 100644 --- a/source/enemy/npc.h +++ b/source/enemy/npc.h @@ -20,7 +20,8 @@ #include "thing/thing.h" #endif -#include "Gfx/Skel.h" + +//#include "Gfx/Skel.h" #ifndef __ENEMY_NPCPATH_H__ #include "enemy\npcpath.h" @@ -101,8 +102,7 @@ protected: int m_frame; int m_animNo; - CSkel m_skel; - TPAGE_DESC m_actorTPage; + CActorGfx *m_actorGfx; DVECTOR m_drawOffset; }; @@ -500,8 +500,7 @@ protected: int m_frame; int m_animNo; - CSkel m_skel; - TPAGE_DESC m_actorTPage; + CActorGfx *m_actorGfx; DVECTOR m_drawOffset; virtual void collidedWith(CThing *_thisThing); diff --git a/source/enemy/npcdata.cpp b/source/enemy/npcdata.cpp index ee2c94c47..eb536c6b5 100644 --- a/source/enemy/npcdata.cpp +++ b/source/enemy/npcdata.cpp @@ -27,9 +27,9 @@ #include #endif -#ifndef __ANIM_SHARKSUB_HEADER__ -#include -#endif +//#ifndef __ANIM_SHARKSUB_HEADER__ +//#include +//#endif CNpcFriend::NPC_FRIEND_DATA CNpcFriend::m_data[NPC_FRIEND_UNIT_TYPE_MAX] = @@ -66,8 +66,8 @@ CNpcFriend::NPC_FRIEND_DATA CNpcFriend::m_data[NPC_FRIEND_UNIT_TYPE_MAX] = CNpcPlatform::NPC_PLATFORM_DATA CNpcPlatform::m_data[NPC_PLATFORM_TYPE_MAX] = { { // NPC_LINEAR_PLATFORM - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_PLATFORM_MOVEMENT_FIXED_PATH, 3, //512, @@ -79,8 +79,8 @@ CNpcPlatform::NPC_PLATFORM_DATA CNpcPlatform::m_data[NPC_PLATFORM_TYPE_MAX] = }, { // NPC_CIRCULAR_PLATFORM - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_PLATFORM_MOVEMENT_FIXED_CIRCULAR, 3, 128, @@ -91,8 +91,8 @@ CNpcPlatform::NPC_PLATFORM_DATA CNpcPlatform::m_data[NPC_PLATFORM_TYPE_MAX] = }, { // NPC_BUBBLE_PLATFORM - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_PLATFORM_MOVEMENT_BUBBLE, 3, 128, @@ -106,8 +106,8 @@ CNpcPlatform::NPC_PLATFORM_DATA CNpcPlatform::m_data[NPC_PLATFORM_TYPE_MAX] = CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = { { // NPC_FALLING_ITEM - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_FALLING_ITEM_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -123,8 +123,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_FISH_HOOK - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_FISH_HOOK, NPC_SENSOR_FISH_HOOK_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -140,8 +140,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_DUST_DEVIL - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_RETURNING_HAZARD, NPC_SENSOR_NONE, NPC_MOVEMENT_RETURNING_HAZARD, @@ -157,8 +157,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_PENDULUM - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_PENDULUM, NPC_SENSOR_NONE, NPC_MOVEMENT_PENDULUM, @@ -174,8 +174,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_FIREBALL - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_FIREBALL, NPC_SENSOR_NONE, NPC_MOVEMENT_FIREBALL, @@ -191,8 +191,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SAW_BLADE - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_RETURNING_HAZARD, NPC_SENSOR_NONE, NPC_MOVEMENT_RETURNING_HAZARD, @@ -208,8 +208,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SMALL_JELLYFISH_1 - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_JELLYFISH_USER_CLOSE, NPC_MOVEMENT_FIXED_PATH, @@ -225,8 +225,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SMALL_JELLYFISH_2 - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_JELLYFISH_USER_CLOSE, NPC_MOVEMENT_FIXED_PATH, @@ -242,8 +242,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_ANEMONE_1 - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_ANEMONE_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -259,8 +259,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_ANEMONE_2 - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_ANEMONE_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -276,8 +276,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_ANEMONE_3 - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_ANEMONE_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -293,8 +293,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SKELETAL_FISH - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_GENERIC_USER_VISIBLE, NPC_MOVEMENT_FIXED_PATH, @@ -310,8 +310,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_CLAM_JUMP - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSNAPUP, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_CLAM_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -327,8 +327,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_CLAM_STATIC - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSIDESNAP, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_CLAM_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -344,8 +344,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SQUID_DART - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH, @@ -361,8 +361,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_FISH_FOLK - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_FISH_FOLK, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH_WALK, @@ -378,8 +378,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_PRICKLY_BUG - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH_WALK, @@ -395,8 +395,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SEA_SNAKE - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH, @@ -412,8 +412,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_PUFFA_FISH - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH, @@ -429,8 +429,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_ANGLER_FISH - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH, @@ -446,8 +446,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_HERMIT_CRAB - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH_WALK, @@ -463,8 +463,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_MINE - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_STATIC, @@ -480,8 +480,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_BOOGER_MONSTER - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_BOOGER_MONSTER_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -497,8 +497,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SPIDER_CRAB - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_SPIDER_CRAB_USER_CLOSE, NPC_MOVEMENT_FIXED_PATH_WALK, @@ -514,8 +514,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_EYEBALL - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_EYEBALL_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -531,8 +531,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_BABY_OCTOPUS - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH, @@ -548,8 +548,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_ZOMBIE_FISH_FOLK - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_FISH_FOLK, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH_WALK, @@ -565,8 +565,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_NINJA_STARFISH - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_NINJA_STARFISH_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -582,8 +582,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_GHOST - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_NONE, NPC_MOVEMENT_FIXED_PATH, @@ -599,8 +599,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_GHOST_PIRATE - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_GHOST_PIRATE, NPC_SENSOR_GHOST_PIRATE_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -616,8 +616,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_FLAMING_SKULL - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_FLAMING_SKULL, NPC_SENSOR_FLAMING_SKULL_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -633,8 +633,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SHARK_MAN - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_GENERIC_USER_VISIBLE, NPC_MOVEMENT_FIXED_PATH_WALK, @@ -650,8 +650,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_OIL_BLOB - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_DEFAULT, NPC_SENSOR_OIL_BLOB_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -667,8 +667,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SKULL_STOMPER - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_SKULL_STOMPER, NPC_SENSOR_SKULL_STOMPER_USER_CLOSE, NPC_MOVEMENT_STATIC, @@ -684,8 +684,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_MOTHER_JELLYFISH - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_MOTHER_JELLYFISH, NPC_SENSOR_NONE, NPC_MOVEMENT_MOTHER_JELLYFISH, @@ -701,8 +701,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_SUB_SHARK - ACTORS_SHARKSUB_A3D, - ANIM_SHARKSUB_SHARKSUBSWIM, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_SUB_SHARK, NPC_SENSOR_NONE, NPC_MOVEMENT_SUB_SHARK, @@ -718,8 +718,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_PARASITIC_WORM - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_PARASITIC_WORM, NPC_SENSOR_NONE, NPC_MOVEMENT_PARASITIC_WORM, @@ -735,8 +735,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_FLYING_DUTCHMAN - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_FLYING_DUTCHMAN, NPC_SENSOR_NONE, NPC_MOVEMENT_FLYING_DUTCHMAN, @@ -752,8 +752,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_IRON_DOGFISH - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_IRON_DOGFISH, NPC_SENSOR_IRON_DOGFISH_USER_CLOSE, NPC_MOVEMENT_IRON_DOGFISH, @@ -769,8 +769,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] = }, { // NPC_PARASITIC_WORM_SEGMENT - ACTORS_CLAM_A3D, - ANIM_CLAM_CLAMSHUT, + ACTORS_CLAM_SBK, + ANIM_CLAM_SIDESNAP, NPC_INIT_PARASITIC_WORM_SEGMENT, NPC_SENSOR_NONE, NPC_MOVEMENT_STATIC, diff --git a/source/enemy/nsshark.cpp b/source/enemy/nsshark.cpp index 3a27ac6c1..f8c7a1240 100644 --- a/source/enemy/nsshark.cpp +++ b/source/enemy/nsshark.cpp @@ -28,7 +28,7 @@ #endif #ifndef __ANIM_SHARKSUB_HEADER__ -#include +#include #endif @@ -39,13 +39,13 @@ void CNpcEnemy::processSubSharkMovement( int _frames ) if ( playerXDistSqr + playerYDistSqr < 100 && !m_salvoCount ) { m_animPlaying = true; - m_animNo = ANIM_SHARKSUB_SHARKSUBSWIPE; + m_animNo = ANIM_CLAM_SIDESNAP; m_frame = 0; } else { m_animPlaying = true; - m_animNo = ANIM_SHARKSUB_SHARKSUBSWIM; + m_animNo = ANIM_CLAM_SIDESNAP; m_frame = 0; } } @@ -156,7 +156,7 @@ void CNpcEnemy::processCloseSubSharkAttack( int _frames ) if ( !m_animPlaying ) { m_animPlaying = true; - m_animNo = ANIM_SHARKSUB_SHARKSUBSPRINTOPEN; + m_animNo = ANIM_CLAM_SIDESNAP; m_frame = 0; } @@ -165,7 +165,7 @@ void CNpcEnemy::processCloseSubSharkAttack( int _frames ) if ( playerXDistSqr < 10000 ) { m_animPlaying = true; - m_animNo = ANIM_SHARKSUB_SHARKSUBCHOMP; + m_animNo = ANIM_CLAM_SIDESNAP; m_frame = 0; m_state = SUB_SHARK_SWALLOW; @@ -211,7 +211,7 @@ void CNpcEnemy::processCloseSubSharkAttack( int _frames ) if ( !m_animPlaying ) { m_animPlaying = true; - m_animNo = ANIM_SHARKSUB_SHARKSUBSWIM; + m_animNo = ANIM_CLAM_SIDESNAP; m_frame = 0; m_controlFunc = NPC_CONTROL_MOVEMENT; m_movementTimer = GameState::getOneSecondInFrames() * 8; diff --git a/source/game/game.cpp b/source/game/game.cpp index cc2f985b5..a1577e4fc 100644 --- a/source/game/game.cpp +++ b/source/game/game.cpp @@ -68,6 +68,7 @@ #include "sound\sound.h" #endif +#include "gfx\actor.h" //int GX=512/2; @@ -95,7 +96,6 @@ int CGameScene::s_levelFinished; CGameScene GameScene; -#include "gfx\actorpool.h" /*****************************************************************************/ void CGameScene::init() { diff --git a/source/gfx/actor.cpp b/source/gfx/actor.cpp index 5d2688f8c..bda249faf 100644 --- a/source/gfx/actor.cpp +++ b/source/gfx/actor.cpp @@ -5,9 +5,10 @@ #include "system\global.h" #include "mem\memory.h" #include "fileio\fileio.h" -#include "utils\quat.h" #include "gfx\actor.h" #include "utils\utils.h" +#include "utils\pak.h" +#include "gfx\prim.h" #include @@ -16,34 +17,101 @@ CActorGfx *CActorPool::ActorList[CActorPool::MAX_ACTORS]; /*****************************************************************************/ /*****************************************************************************/ +/*****************************************************************************/ +void CActorGfx::Init(FileEquate _Filename) +{ + CActorPool::GetActor(Filename); +} + /*****************************************************************************/ CActorGfx::CActorGfx(FileEquate _Filename) { +int i; Filename=_Filename; -/* ActorData=(sActorHdr*)CFileIO::loadFile(Filename); + SpriteBank=(sSpriteAnimBank*)CFileIO::loadFile(Filename); - for (int i=0; iAnimCount; i++) + SpriteBank->AnimList=(sSpriteAnim*) MakePtr(SpriteBank,(int)SpriteBank->AnimList); + SpriteBank->FrameList=(sSpriteFrame*) MakePtr(SpriteBank,(int)SpriteBank->FrameList); + SpriteBank->Palette=(u8*) MakePtr(SpriteBank,(int)SpriteBank->Palette); + +// FixUp AnimList + for (i=0; iAnimCount; i++) { - ActorData->AnimList[i].Move=(s32*) MakePtr(ActorData,(int)ActorData->AnimList[i].Move); - ActorData->AnimList[i].Anim=(AnimIdx*) MakePtr(ActorData,(int)ActorData->AnimList[i].Anim); + sSpriteAnim *ThisAnim=&SpriteBank->AnimList[i]; + ThisAnim->Anim=(u16*) MakePtr(SpriteBank,(int)ThisAnim->Anim); + } +// FixUp FrameList + for (i=0; iFrameCount; i++) + { + sSpriteFrame *ThisFrame=&SpriteBank->FrameList[i]; + ThisFrame->PAKSpr=(u8*) MakePtr(SpriteBank,(int)ThisFrame->PAKSpr); } - DAVE_DBGMSG("Nodes %i\n",ActorData->BoneCount); - DAVE_DBGMSG("Tris %i\n",ActorData->TriCount); - DAVE_DBGMSG("Vtx %i\n",ActorData->VtxCount); - DAVE_DBGMSG("Anims %i\n",ActorData->AnimCount); -*/ + DAVE_DBGMSG("Anims %i\n",SpriteBank->AnimCount); } /*****************************************************************************/ CActorGfx::~CActorGfx() { - MemFree(ActorData); + MemFree(SpriteBank); } /*****************************************************************************/ +int TPP=0; +int TPA=0; +int TPX=512; +int TPY=256; +int RR=128; +int GG=128; +int BB=128; +int XX=32; +int YY=32; +//int PW=16; void CActorGfx::Render(DVECTOR &Pos,int Anim,int Frame,bool FlipX) { +sSpriteAnim &ThisAnim=SpriteBank->AnimList[Anim]; +u16 FrameNo=ThisAnim.Anim[Frame]; +sSpriteFrame &ThisFrame=SpriteBank->FrameList[FrameNo]; +POLY_FT4 *Ft4; +u8 Buffer[256*256]; + + PAK_doUnpak(Buffer,ThisFrame.PAKSpr); +// clut +RECT Rect; + Rect.x=512; + Rect.y=511; + Rect.w=SpriteBank->ColorCount; + Rect.h=1; + LoadImage( &Rect, (u32*)SpriteBank->Palette); + +// Gfx + Rect.x=512; + Rect.y=256; + Rect.w=ThisFrame.W/4; + Rect.h=ThisFrame.H; + LoadImage( &Rect, (u32*)Buffer); + + Ft4=GetPrimFT4(); + setXYWH(Ft4,Pos.vx-ThisFrame.XOfs,Pos.vy-ThisFrame.YOfs,ThisFrame.W,ThisFrame.H); + setUVWH(Ft4,0,0,ThisFrame.W,ThisFrame.H); + setRGB0(Ft4,RR,GG,BB); + setTPage(Ft4,0,0,TPX,TPY); + setClut(Ft4, TPX, 511); + AddPrimToList(Ft4,0); + + Ft4=GetPrimFT4(); + setXYWH(Ft4,Pos.vx-ThisFrame.XOfs,Pos.vy-ThisFrame.YOfs,ThisFrame.W,ThisFrame.H); + Ft4->x0-=XX; + Ft4->x1-=XX; + Ft4->y0+=YY; + Ft4->y1+=YY; + + setUVWH(Ft4,0,0,ThisFrame.W,ThisFrame.H); + setRGB0(Ft4,0,0,0); + setSemiTrans(Ft4,1); + setTPage(Ft4,0,0,TPX,TPY); + setClut(Ft4, TPX, 511); + AddPrimToList(Ft4,0); } @@ -98,7 +166,7 @@ int Idx; Idx=FindFreeIdx(); ASSERT(Idx!=-1); - NewActor=new ("ActorPool") CActorPool(Filename); + NewActor=new ("ActorPool") CActorGfx(Filename); ActorList[Idx]=NewActor; return(NewActor); @@ -109,7 +177,7 @@ int Idx; /*****************************************************************************/ void CActorPool::DumpActor(FileEquate Filename) { -CActorPool *ThisActor; +CActorGfx *ThisActor; int Idx; // Is Loaded? diff --git a/source/gfx/actor.h b/source/gfx/actor.h index c62171432..09d320392 100644 --- a/source/gfx/actor.h +++ b/source/gfx/actor.h @@ -1,6 +1,6 @@ -/******************/ -/*** Actor Bank ***/ -/******************/ +/*******************/ +/*** Actor Stuff ***/ +/*******************/ #ifndef __ACTOR_HEADER__ #define __ACTOR_HEADER__ @@ -16,30 +16,30 @@ class CActorGfx { public: - CActorGfx(){}; - CActorGfx(FileEquate Filename); - ~CActorGfx(); +// CActorGfx(){}; + CActorGfx(FileEquate Filename); +virtual ~CActorGfx(); - void Render(DVECTOR &Pos,int Anim,int Frame,bool FlipX); - void Dump(); + void Init(FileEquate _Filename); + void Render(DVECTOR &Pos,int Anim,int Frame,bool FlipX); + void Dump(); - int getFrameCount() {return(0);} + int getFrameCount(int Anim) {return(SpriteBank->AnimList[Anim].FrameCount);} - FileEquate GetFilename() {return(Filename);} + FileEquate GetFilename() {return(Filename);} private: FileEquate Filename; - sSpriteAnimBank *ActorData; + sSpriteAnimBank *SpriteBank; }; /*****************************************************************************/ -class CActorBank +class CActorPool { public: enum { MAX_ACTORS=8, }; -// virtual ~ActorBank(){}; static void Init(); diff --git a/source/gfx/animtex.cpp b/source/gfx/animtex.cpp index 8e7738ec4..e4c2f2d48 100644 --- a/source/gfx/animtex.cpp +++ b/source/gfx/animtex.cpp @@ -151,11 +151,10 @@ int Time = GameState::getFramesSinceLast(); /*****************************************************************************/ /*****************************************************************************/ /*****************************************************************************/ +/* void CMoveTex::Add(sTexInfo &SrcFrame,sTexInfo &DstFrame) { int Idx; -// ASSERT(SrcFrame.w==DstFrame.w); -// ASSERT(SrcFrame.h==DstFrame.h); for (Idx=0; Idxx,ThisTex.Dst->y); ThisTex.Src=0; } +*/ } /*****************************************************************************/ diff --git a/source/gfx/animtex.h b/source/gfx/animtex.h index 5ffeae0d2..f6dc8d907 100644 --- a/source/gfx/animtex.h +++ b/source/gfx/animtex.h @@ -42,14 +42,14 @@ public: CMoveTex() { - Src=0; +// Src=0; } -static void Add(sTexInfo &SrcFrame,sTexInfo &DstFrame); +//static void Add(sTexInfo &SrcFrame,sTexInfo &DstFrame); static void MoveTex(); private: - sTexInfo *Src,*Dst; +// sTexInfo *Src,*Dst; static CMoveTex MoveTexList[]; }; diff --git a/source/player/player.cpp b/source/player/player.cpp index a1fe45e04..b643d29f4 100644 --- a/source/player/player.cpp +++ b/source/player/player.cpp @@ -234,8 +234,7 @@ void CPlayer::init() // m_onPlatform = false; // m_prevOnPlatform = false; - m_skel.Init(ACTORS_SPONGEBOB_A3D); - TPLoadTex(ACTORS_ACTOR_SPONGEBOB_TEX); + m_actorGfx=CActorPool::GetActor(ACTORS_SPONGEBOB_SBK); for(int i=0;im_mapEdge.vy-64)Pos.vy=m_mapEdge.vy-64; // Look around int pad=getPadInputHeld(); -if(PadGetDown(0)&PAD_CIRCLE) -{ - m_skel.blink(); -} - // Camera scroll.. if(m_cameraScrollDir==-1) @@ -454,33 +448,24 @@ m_fontBank->print(40,40,posBuf); // Render if(m_invincibleFrameCount==0||m_invincibleFrameCount&2) { -#ifdef __USER_paul__ -if(mouth!=-1) -{ - m_skel.setMouthTex(mouth); - mouth=-1; -} -if(eyes!=-1) -{ - m_skel.setEyeTex(eyes); - eyes=-1; -} -#endif //int xval=(255-(MAP2D_BLOCKSTEPSIZE*(-m_cameraScrollPos.vx>>8))); //DrawLine(xval-7,0,xval-7,255,0,128,255,0); //DrawLine(xval+7,0,xval+7,255,0,128,255,0); - SetGeomOffset(SCREEN_GEOM_CENTRE_X+m_playerScreenGeomPos.vx,SCREEN_GEOM_CENTRE_Y+m_playerScreenGeomPos.vy); - if(panim!=-1) - m_skel.setAnimNo(panim); - else - m_skel.setAnimNo(m_animNo); - m_skel.setFrame(m_animFrame); - m_skel.Animate(this); - m_skel.Render(this); +//!! SetGeomOffset(SCREEN_GEOM_CENTRE_X+m_playerScreenGeomPos.vx,SCREEN_GEOM_CENTRE_Y+m_playerScreenGeomPos.vy); +// if(panim!=-1) +// m_actorGfx.setAnimNo(panim); +// else +// m_actorGfx.setAnimNo(m_animNo); +//!! m_actorGfx.setFrame(m_animFrame); +//!! m_actorGfx.Animate(this); +//!! m_actorGfx.Render(this); +//!! m_currentPlayerModeClass->render(); +//!! SetGeomOffset(SCREEN_GEOM_CENTRE_X,SCREEN_GEOM_CENTRE_Y); + DVECTOR Pos={256,128}; + m_actorGfx->Render(Pos,m_animNo,m_animFrame,0); m_currentPlayerModeClass->render(); - SetGeomOffset(SCREEN_GEOM_CENTRE_X,SCREEN_GEOM_CENTRE_Y); } @@ -634,7 +619,7 @@ void CPlayer::setFacing(int _facing) if(m_facing!=_facing) { m_facing=_facing; - m_skel.setDir(_facing); +//!! m_actorGfx.setDir(_facing); } } @@ -687,7 +672,7 @@ void CPlayer::setAnimFrame(int _animFrame) } int CPlayer::getAnimFrameCount() { - return m_skel.getFrameCount(m_animNo); + return m_actorGfx->getFrameCount(m_animNo); } int CPlayer::getAnimNo() { diff --git a/source/player/player.h b/source/player/player.h index e798cb253..9f0f50d0d 100644 --- a/source/player/player.h +++ b/source/player/player.h @@ -22,9 +22,8 @@ #include "thing/thing.h" #endif -#ifndef __GFX_SKELSPNG_H__ -#include "gfx/skelspng.h" -#endif +#include "gfx/actor.h" + #ifndef __DATA_STRUCTS_HEADER__ #include @@ -189,7 +188,7 @@ private: static const AnimSfx s_animSfx[]; int m_animFrame; int m_animNo; - CSkelSpongeBob m_skel; + CActorGfx *m_actorGfx; DVECTOR m_playerScreenGeomPos; DVECTOR m_cameraPos; diff --git a/source/player/pmbubble.cpp b/source/player/pmbubble.cpp index 320ea0081..3c346f862 100644 --- a/source/player/pmbubble.cpp +++ b/source/player/pmbubble.cpp @@ -123,7 +123,8 @@ void CPlayerModeBubbleMixture::think() // Blowing? if(m_blowing) { - m_player->setAnimNo(ANIM_SPONGEBOB_KARATE); +//!! m_player->setAnimNo(ANIM_SPONGEBOB_KARATE); + m_player->setAnimNo(ANIM_SPONGEBOB_FIRE); m_player->setAnimFrame(m_blowFrame); m_blowFrame++; if(m_blowFrame>=m_player->getAnimFrameCount()) diff --git a/source/player/pmchop.cpp b/source/player/pmchop.cpp index 77632ecaf..11ff0af94 100644 --- a/source/player/pmchop.cpp +++ b/source/player/pmchop.cpp @@ -84,7 +84,8 @@ void CPlayerModeChop::think() // Chopping? if(m_chopping) { - m_player->setAnimNo(ANIM_SPONGEBOB_KARATE); +//!! m_player->setAnimNo(ANIM_SPONGEBOB_KARATE); + m_player->setAnimNo(ANIM_SPONGEBOB_FIRE); m_player->setAnimFrame(m_chopFrame); m_chopFrame++; if(m_chopFrame>=m_player->getAnimFrameCount()) diff --git a/source/player/pmnet.cpp b/source/player/pmnet.cpp index b67397a2a..3ffc71724 100644 --- a/source/player/pmnet.cpp +++ b/source/player/pmnet.cpp @@ -103,7 +103,8 @@ void CPlayerModeNet::think() // Netting? if(m_netting) { - m_player->setAnimNo(ANIM_SPONGEBOB_KARATE); +//!!! m_player->setAnimNo(ANIM_SPONGEBOB_KARATE); + m_player->setAnimNo(ANIM_SPONGEBOB_FIRE); m_player->setAnimFrame(m_netFrame); m_netFrame++; if(m_netFrame>=m_player->getAnimFrameCount()) diff --git a/source/player/psfall.cpp b/source/player/psfall.cpp index 61359ab50..3144374bf 100644 --- a/source/player/psfall.cpp +++ b/source/player/psfall.cpp @@ -62,7 +62,8 @@ ---------------------------------------------------------------------- */ void CPlayerStateFall::enter(CPlayerModeBase *_playerMode) { - _playerMode->setAnimNo(ANIM_SPONGEBOB_HOVER); +// _playerMode->setAnimNo(ANIM_SPONGEBOB_HOVER); + _playerMode->setAnimNo(ANIM_SPONGEBOB_FIRE); } diff --git a/source/player/psidle.cpp b/source/player/psidle.cpp index cb3f8744d..194a4afe7 100644 --- a/source/player/psidle.cpp +++ b/source/player/psidle.cpp @@ -257,12 +257,14 @@ void CPlayerStateIdle::setNextIdleAnim(CPlayerModeBase *_playerMode) static IdleAnims s_unarmedIdleAnims[]= { // start frame loop frame end frame loop count - { -1, ANIM_SPONGEBOB_IDLEBREATHE, -1, 4 }, // default - { -1, ANIM_SPONGEBOB_IDLEBREATHE, -1, 10 }, - { ANIM_SPONGEBOB_FACEFRONT, ANIM_SPONGEBOB_IDLEHOOLA, ANIM_SPONGEBOB_FACEBACK, 5 }, - { ANIM_SPONGEBOB_FACEFRONT, ANIM_SPONGEBOB_IDLEWIGGLEARM, ANIM_SPONGEBOB_FACEBACK, 5 }, - { -1, ANIM_SPONGEBOB_IDLELOOK, -1, 1 }, - { -1, ANIM_SPONGEBOB_IDLEWIND, -1, 1 }, +//!! { -1, ANIM_SPONGEBOB_IDLEBREATHE, -1, 4 }, // default +//!! { -1, ANIM_SPONGEBOB_IDLEBREATHE, -1, 10 }, +//!! { ANIM_SPONGEBOB_FACEFRONT, ANIM_SPONGEBOB_IDLEHOOLA, ANIM_SPONGEBOB_FACEBACK, 5 }, +//!! { ANIM_SPONGEBOB_FACEFRONT, ANIM_SPONGEBOB_IDLEWIGGLEARM, ANIM_SPONGEBOB_FACEBACK, 5 }, +//!! { -1, ANIM_SPONGEBOB_IDLELOOK, -1, 1 }, +//!! { -1, ANIM_SPONGEBOB_IDLEWIND, -1, 1 }, + { -1, ANIM_SPONGEBOB_IDLEHOOLA, -1, 4 }, // default + }; static int s_numUnarmedIdleAnims=sizeof(s_unarmedIdleAnims)/sizeof(IdleAnims); IdleAnims *CPlayerStateUnarmedIdle::getIdleAnimsDb(int _animNo) @@ -285,9 +287,10 @@ int CPlayerStateUnarmedIdle::getNumIdleAnims() static IdleAnims s_coralBlowerIdleAnims[]= { // start frame loop frame end frame loop count - { -1, ANIM_SPONGEBOB_IDLEBREATHE, -1, 4 }, // default - { -1, ANIM_SPONGEBOB_IDLEBREATHE, -1, 10 }, - { -1, ANIM_SPONGEBOB_IDLELOOK, -1, 1 }, +//!! { -1, ANIM_SPONGEBOB_IDLEBREATHE, -1, 4 }, // default +//!! { -1, ANIM_SPONGEBOB_IDLEBREATHE, -1, 10 }, +//!! { -1, ANIM_SPONGEBOB_IDLELOOK, -1, 1 }, + { -1, ANIM_SPONGEBOB_IDLEHOOLA, -1, 1 }, }; static int s_numCoralBlowerIdleAnims=sizeof(s_coralBlowerIdleAnims)/sizeof(IdleAnims); IdleAnims *CPlayerStateCoralBlowerIdle::getIdleAnimsDb(int _animNo) diff --git a/source/player/psjump.cpp b/source/player/psjump.cpp index f96740132..9a5002730 100644 --- a/source/player/psjump.cpp +++ b/source/player/psjump.cpp @@ -67,7 +67,8 @@ ---------------------------------------------------------------------- */ void CPlayerStateJump::enter(CPlayerModeBase *_playerMode) { - _playerMode->setAnimNo(ANIM_SPONGEBOB_HOVER); +//!! _playerMode->setAnimNo(ANIM_SPONGEBOB_HOVER); + _playerMode->setAnimNo(ANIM_SPONGEBOB_FIRE); m_jumpFrames=0; _playerMode->jump(); diff --git a/source/player/psrun.cpp b/source/player/psrun.cpp index 3b13da8c5..7e60f66a7 100644 --- a/source/player/psrun.cpp +++ b/source/player/psrun.cpp @@ -71,7 +71,8 @@ void CPlayerStateRun::enter(CPlayerModeBase *_playerMode) } else { - _playerMode->setAnimNo(ANIM_SPONGEBOB_RUNSTART); +//!! _playerMode->setAnimNo(ANIM_SPONGEBOB_RUNSTART); + _playerMode->setAnimNo(ANIM_SPONGEBOB_FIRE); } if(controlHeld&PI_LEFT) @@ -126,7 +127,8 @@ void CPlayerStateRun::think(CPlayerModeBase *_playerMode) _playerMode->setState(STATE_IDLE); if(m_numberOfTimeAnimHasLooped>=4) { - _playerMode->setAnimNo(ANIM_SPONGEBOB_RUNSTOP); +//!! _playerMode->setAnimNo(ANIM_SPONGEBOB_RUNSTOP); + _playerMode->setAnimNo(ANIM_SPONGEBOB_FIRE); } return; } diff --git a/source/projectl/projectl.h b/source/projectl/projectl.h index 88be24e8e..6284d2a89 100644 --- a/source/projectl/projectl.h +++ b/source/projectl/projectl.h @@ -18,8 +18,6 @@ #include "thing/thing.h" #endif -#include "Gfx/Skel.h" - /*****************************************************************************/ class CProjectile : public CEnemyProjectileThing diff --git a/source/system/main.cpp b/source/system/main.cpp index 179077db9..1b9106976 100644 --- a/source/system/main.cpp +++ b/source/system/main.cpp @@ -11,7 +11,7 @@ #include "gfx\prim.h" #include "gfx\tpage.h" #include "utils\utils.h" -#include "gfx\actorpool.h" +#include "gfx\actor.h" #include "system\gp.h" @@ -117,9 +117,7 @@ void InitSystem() // reordered to reduce black screen (hope all is well CBubicleFactory::init(); - CActorPool::AddActor(ACTORS_SPONGEBOB_A3D); -// CAnimDB::Init(); -// CAnimDB::Load(ACTORS_SPONGEBOB_ABK); + CActorPool::AddActor(ACTORS_SPONGEBOB_SBK); #if defined(__DEBUG_MEM__) DebugMemFontInit(); diff --git a/source/utils/pak.cpp b/source/utils/pak.cpp index 40da81b94..1cb833459 100644 --- a/source/utils/pak.cpp +++ b/source/utils/pak.cpp @@ -1,33 +1,7 @@ -/*========================================================================= - - PAK.CPP - - Author: Gary Liddon @ Climax (from work by Nick Pelling && Carl Muller) - Created: - Project: Diablo PSX - Purpose: PAK decompress \ compress code - - Copyright (c) 1997 Climax Development Ltd - -===========================================================================*/ - -/*---------------------------------------------------------------------- - Includes - -------- */ - -/* Std Lib - ------- */ - -/* Glib - ---- */ - -/* Local - ----- */ +#include "system\global.h" #include -#include "pak.h" +#include "utils\pak.h" -/* Graphics - -------- */ /*---------------------------------------------------------------------- Tyepdefs && Defines @@ -44,7 +18,7 @@ struct Block { int data[128]; - BOOL blockrep; + bool blockrep; int blocksize; int blockoffset; @@ -115,7 +89,7 @@ void Block::writeBlock(void) } // Get ready for next block - blockrep = FALSE; + blockrep = false; blockoffset = 0; blocksize = -1; } @@ -158,7 +132,7 @@ int lowLevelPak(u8 * Dest,u8 const * buffer,int insize,Block & theblock) theblock.Dest=Dest; theblock.outsize=0; - theblock.blockrep=FALSE; + theblock.blockrep=false; BACKDIST = -128; FORWARDDIST = 255; @@ -244,7 +218,7 @@ int lowLevelPak(u8 * Dest,u8 const * buffer,int insize,Block & theblock) { /* We have found a match */ theblock.writeBlock(); - theblock.blockrep = TRUE; + theblock.blockrep = true; theblock.blocksize = bestlength; theblock.blockoffset = bestoffset; inpos += bestlength; @@ -257,7 +231,7 @@ int lowLevelPak(u8 * Dest,u8 const * buffer,int insize,Block & theblock) /* Terminate file */ - theblock.blockrep = TRUE; + theblock.blockrep = true; theblock.blocksize = 0; theblock.blockoffset = 0; theblock.writeBlock(); diff --git a/source/utils/pak.h b/source/utils/pak.h index f3f5df83f..b1987b8a1 100644 --- a/source/utils/pak.h +++ b/source/utils/pak.h @@ -1,61 +1,12 @@ -/*========================================================================= - - PAK.H - - Author: Carl Muller (algorithm Nick Pelling && Carl Muller) - Created: - Project: - Purpose: - - Copyright (c) 1997 Climax Development Ltd - -===========================================================================*/ #ifndef __PAK_PAK_H__ #define __PAK_PAK_H__ -/*---------------------------------------------------------------------- - Includes - -------- */ - -/* Std Lib - ------- */ - -/* Glib - ---- */ -#include - -/* Local - ----- */ - -/*---------------------------------------------------------------------- - Tyepdefs && Defines - ------------------- */ - -/*---------------------------------------------------------------------- - Structure defintions - -------------------- */ - -/*---------------------------------------------------------------------- - Globals - ------- */ - -/* Vars - ---- */ - -/* Data - ---- */ - -/* Functions - --------- */ int PAK_doPak(u8 * Dest,u8 const * source,int insize); int PAK_doUnpak(u8 * Dest,u8 const * Source); int PAK_findPakSize(u8 const * souce,int insize); int PAK_getLastAmountOfDataRead(void); -/*---------------------------------------------------------------------- */ -#endif /* __PAK_PAK_H__ */ -/*=========================================================================== - end */ +#endif diff --git a/source/utils/utils.h b/source/utils/utils.h index 139e182fa..6163ba507 100644 --- a/source/utils/utils.h +++ b/source/utils/utils.h @@ -580,6 +580,7 @@ s32 Dpx, Dpy, Dpz; return (Dpx + Dpy + Dpz); } /*****************************************************************************/ +/* inline void QuatSlerp(sQuat *s, sQuat *d, int t, sQuat *o) { s32 xx, yy, zz, ww; @@ -627,8 +628,9 @@ sQuat to; gte_LoadAverageShort12(s, &to, c0, c1, o); o->vw = ((c0 * s->vw) + (c1 * to.vw)) >> 12; } - +*/ /*****************************************************************************/ +/* static const s32 DeltaErr = 1000; inline void NormalizeQuaternion(sQuat *o) { @@ -646,5 +648,5 @@ s32 t = (u32)((s32)o->vx*o->vx+(s32)o->vy*o->vy+(s32)o->vz*o->vz+(s32)o->vw*o->v } } } - +*/ #endif \ No newline at end of file diff --git a/tools/Data/bin/MkActor.exe b/tools/Data/bin/MkActor.exe new file mode 100644 index 000000000..ddab7141f Binary files /dev/null and b/tools/Data/bin/MkActor.exe differ diff --git a/tools/Data/bin/MkLevel.exe b/tools/Data/bin/MkLevel.exe index 724ef4901..855501bb2 100644 Binary files a/tools/Data/bin/MkLevel.exe and b/tools/Data/bin/MkLevel.exe differ diff --git a/tools/Data/bin/MkLevel.ini b/tools/Data/bin/MkLevel.ini new file mode 100644 index 000000000..5a72205c6 --- /dev/null +++ b/tools/Data/bin/MkLevel.ini @@ -0,0 +1,65 @@ +# Thing definitions +# Names must be exactly the same as the group names from the map editor scripts + +[TYPE] +# Player +SpongeBob=0 + +# NPC +BarnacleBoy=1 +Gary=2 +Krusty=3 +MermaidMan=4 +Patrick=5 +Sandy=6 +Squidward=7 +Plankton=8 + +# Enemies +SmallJellyfish-Level1=10 +SmallJellyfish-Level2=11 +Motherjellyfish=12 +Anenome-Level1=13 +Anenome-Level2=14 +Anenome-Level3=15 +BabyOctopus=16 +Ballblob=17 +Boogermonster=18 +Caterpillar=19 +Clam-Level1=20 +Clam-Level2=21 +Eyeball=22 +Flamingskull=23 +FlyingDutchman=24 +Ghost=25 +GiantWorm=26 +HermitCrab=27 +IronDogFish=28 +PuffaFish=29 +SeaSnake=30 +Sharkman=31 +SharkSub=32 +Skeletalfish=33 +SpiderCrab=34 +Squiddart=35 +Stomper=36 +DustDevil=37 + +# Items +Balloon=0 +BubbleMixture=1 +Glasses=2 +Health25=3 +Health50=4 +Health100=5 +Helmet=6 +JellyAmmo=7 +Pants=8 +Shoe=9 +Spatula=10 +Teeth=11 + +# Platforms +Boots=0 +Train=1 +Higher=2 \ No newline at end of file diff --git a/tools/Data/include/dstructs.h b/tools/Data/include/dstructs.h index afb5816eb..88c265406 100644 --- a/tools/Data/include/dstructs.h +++ b/tools/Data/include/dstructs.h @@ -33,50 +33,10 @@ enum PSX_DATA_ENUM LAYER_SHADE_RGB_MAX=4, }; -//*************************************************************************** -// biped bone IDs -/* -enum BONE_NAME -{ - BIP0, - BIP01_PELVI, - BIP01_SPIN, - BIP01_SPINE, - BIP01_NEC, - BIP01_HEA, - BIP01_L_CLAVICL, - BIP01_L_UPPERAR, - BIP01_L_FOREAR, - BIP01_L_HAN, - BIP01_R_CLAVICL, - BIP01_R_UPPERAR, - BIP01_R_FOREAR, - BIP01_R_HAN, - BIP01_L_THIG, - BIP01_L_CAL, - BIP01_L_FOO, - BIP01_L_TOE, - BIP01_R_THIG, - BIP01_R_CAL, - BIP01_R_FOO, - BIP01_R_TOE0, - MAX_BONE -}; -*/ //*************************************************************************** //*** Base Types ************************************************************ //*************************************************************************** -#ifndef sQuat -struct sQuat -{ - s16 vx,vy,vz,vw; -#ifdef WIN32 -bool operator==(sQuat const &v1) {return((vx==v1.vx) && (vy==v1.vy) && (vz==v1.vz) && (vw==v1.vw));} -#endif -}; -#endif - struct sShortXYZ { s16 vx,vy,vz; @@ -114,37 +74,6 @@ struct sMat // s32 DblFlag; }; -//*************************************************************************** -struct sTexInfo // Basically same as PSX RECT -{ - s16 x, y, w, h; -}; - -//*************************************************************************** -struct sWeight -{ - s16 vx,vy,vz,VtxNo; // 8 -}; - -//*************************************************************************** -struct sBone -{ - sVtx BoneSize; // 8 - s16 Parent; // 2 - s16 TriStart; // 2 - s16 TriCount; // 2 - s16 VtxCount; // 2 -}; // 16 -/* -struct sBone -{ - sVtx BoneSize; // 8 - s16 Parent,Idx; // 4 - s32 WeightCount; // 4 - sWeight *WeightList; // 4 -}; // 20 -*/ - //*************************************************************************** //*** Poly Types ************************************************************ //*************************************************************************** @@ -192,40 +121,16 @@ enum TILE3D_FLAGS }; */ typedef u16 sTileMapElem; // Tile or Tri Start -/* -struct sTileMapElem -{ - u16 Elem; // Tile or Tri Start -}; -*/ -/* -struct sTileMapElem3d : public sTileMapElem -{ - u16 Flags; -}; -*/ -/* -struct sTileTable -{ - u16 TriList; - u16 TriCount; -}; -*/ + struct sTile { -// 3d Tile -// u16 TriStart; // 2 -// u16 TileTable[TILE3D_FLAGS_MAX]; // 10 // 2d Tile u8 u0,v0; // 2 u16 Clut; // 2 u16 TPage; // 2 u16 Pad; // :o( need this? // 2 -#ifdef WIN32 -//bool operator==(sTile const &v1) {return(false);} -#endif -}; // 20 +}; // 8 //--------------------------------------------------------------------------- // Layers @@ -274,9 +179,9 @@ struct sLvlHdr u32 ActionLayer; u32 ForeLayer; u32 CollisionLayer; - u32 Pad1; - u32 Pad2; - u32 Pad3; + u32 ActorList; + u32 ItemList; + u32 PlatformList; u32 Pad4; u32 Pad5; u32 Pad6; @@ -284,63 +189,79 @@ struct sLvlHdr }; -//--------------------------------------------------------------------------- -// TileBank -/* -struct sTileBankHdr -{ - u32 TriList; - u32 QuadList; - u32 VtxList; - u32 TileList; -}; -*/ - //*************************************************************************** //*************************************************************************** //*************************************************************************** // Actors - -typedef u16 AnimIdx; - -struct sAnimHdr +struct sSpriteFrame { - u16 FrameCount; - u16 Pad; - AnimIdx *Anim; - s32 *Move; + u8 *PAKSpr; // 4 + s8 XOfs,YOfs; // 2 + u8 W,H; // 2 }; -struct sActorHdr +struct sSpriteAnim { - u16 BoneCount; - u16 TriCount; - u16 QuadCount; - u16 WeightCount; - u16 VtxCount; - u16 AnimCount; - - sBone *BoneList; - sTri *TriList; - sQuad *QuadList; - sWeight *WeightList; - sVtx *VtxList; - sTexInfo *TexInfo; - sAnimHdr *AnimList; - sQuat *QuatTable; + u16 FrameCount; // 2 + u16 *Anim; // 2 }; +struct sSpriteAnimBank +{ + u16 ColorCount; // 2 + u16 AnimCount; // 2 + u16 FrameCount; // 2 + u16 Pad; // 2 + + u8 *Palette; // 4 + sSpriteAnim *AnimList; // 4 + sSpriteFrame *FrameList; // 4 +}; + + //*************************************************************************** -// Anim -/* -struct sAnimFileHdr +//*************************************************************************** +//*************************************************************************** +// Things - Must be 4 byte aligned for pos data +struct sThingHdr { - u16 BoneCount; - u16 AnimCount; - sQuat *QuatTable; -// Anim Hdrs.... + u16 Count; + u16 Pad; }; -*/ +struct sThingPoint +{ + u16 X,Y; +}; +struct sThingActor +{ + u16 Type; + u16 Health; + u16 AttackStrength; + u16 Speed; + u16 TurnRate; + u8 Flags; + u8 PointCount; + // Point List... +}; // 12 + +struct sThingItem +{ + u16 Type; + u16 Pad; // Poo! + sThingPoint Pos; +}; + +struct sThingPlatform +{ + u16 Type; + u16 Speed; + u16 TurnRate; + u8 Flags; + u8 PointCount; + // Point List... +}; // 10 + +//*************************************************************************** #endif \ No newline at end of file