/******************************************************************************** player.h: Ultra 64 MARIO Brothers include file Copyright (c) 1996 Nintendo co., ltd. All rights reserved May 11, 1996 ********************************************************************************/ #ifndef PLAYER_H #define PLAYER_H #include "playerstat.h" #define DLOG_DONE 0 #define DLOG_LOOKFRONT 1 #define DLOG_LOOKUP 2 #define DLOG_LOOKDOWN 3 #define DLOG_RESULT_BUSY 0 #define DLOG_RESULT_START 1 #define DLOG_RESULT_READY 2 #define CONDOR_STEAL_HAT 1 #define MONKEY_STEAL_HAT 2 #define VOICE_JMP 0x00000000 #define VOICE_NON 0xffffffff #define PL_FLAG_REDCAP 0x00000001 #define PL_FLAG_GHOSTCAP 0x00000002 #define PL_FLAG_METALCAP 0x00000004 #define PL_FLAG_WINGCAP 0x00000008 #define PL_FLAG_HAVECAP 0x0000000F #define PL_FLAG_HEADCAP 0x00000010 #define PL_FLAG_HANDCAP 0x00000020 #define PL_FLAG_FLASHING 0x00000040 #define PL_FLAG_FADING 0x00000080 #define PL_FLAG_JMPCANCEL 0x00000100 #define PL_FLAG_GETSTAR 0x00000200 #define PL_FLAG_SOUNDTRIG 0x00010000 #define PL_FLAG_VOICETRIG 0x00020000 #define PL_FLAG_VOICEDOWN 0x00040000 #define PL_FLAG_PUNCH 0x00100000 #define PL_FLAG_PWKICK 0x00200000 #define PL_FLAG_SQKICK 0x00400000 #define PL_FLAG_TRAMPOLINE 0x01000000 #define PL_FLAG_SETPOSINFO 0x02000000 #define PL_FLAG_JUMPBOUND 0x40000000 #define PL_FLAG_PUSHWALL 0x80000000 #define PL_WATER_WALK 100 #define PL_WATER_SWIM 80 #define PL_INFO_ENTRANT 0x00010000 /********************************************************************************/ /* */ /* Player status (16bits value) */ /* */ /********************************************************************************/ /* mask pattern */ #define PA_MOVEREQ 0x0003 #define PA_MOTIONS 0x000F #define PA_EVENTS 0xA41F /* action bits */ #define PA_WALKREQ 0x0001 #define PA_JUMPREQ 0x0002 #define PA_SWIMREQ 0x0002 #define PA_LANDREQ 0x0004 #define PA_SLIPREQ 0x0008 #define PA_VIEWREQ 0x0010 #define PA_WAITREQ 0x0020 #define PA_PRESREQ 0x0040 #define PA_JUMPBTN 0x0080 #define PA_SWIMBTN 0x0080 #define PA_GASSY 0x0100 #define PA_PUDDLE 0x0200 #define PA_QUAKING 0x0400 #define PA_TAKEREQ 0x0800 #define PA_ATKREACT 0x1000 #define PA_ACTTRIG 0x2000 #define PA_BAKSTAT 0x4000 #define PA_BAKTRIG 0x8000 /********************************************************************************/ /* */ /* Player hit status (32bits value) */ /* */ /********************************************************************************/ #define PH_HIPDROP 0x000001 #define PH_PUNCH 0x000002 #define PH_POWERKICK 0x000004 #define PH_SQUATKICK 0x000008 #define PH_SLIDEKICK 0x000010 #define PH_SLIDING 0x000020 #define PH_TRAMPLE 0x000040 #define PH_HEADATK 0x000080 #define PH_PUNCHKICK 0x000006 #define PH_KICK 0x00000C #define PH_ATTACK 0x00007F #define PH_ATTACKALL 0x0000FF /********************************************************************************/ /* */ /* Player status (32bits value) */ /* */ /********************************************************************************/ /* player process type flag */ #define PS_CODE_MASK 0x000001FF #define PS_PROC_MASK 0x000001C0 #define PS_PROC_WAIT 0x00000000 #define PS_PROC_MOVE 0x00000040 #define PS_PROC_JUMP 0x00000080 #define PS_PROC_SWIM 0x000000C0 #define PS_PROC_DEMO 0x00000100 #define PS_PROC_SPEC 0x00000140 #define PS_PROC_ACTN 0x00000180 /* player status type flag */ #define PS_TYPE_WAIT 0x00000200 /* wait */ #define PS_TYPE_MOVE 0x00000400 /* move */ #define PS_TYPE_JUMP 0x00000800 /* jump */ #define PS_TYPE_DEMO 0x00001000 /* demonstration */ #define PS_TYPE_SWIM 0x00002000 /* swimming */ #define PS_TYPE_SINK 0x00004000 /* sinking */ #define PS_TYPE_SQRT 0x00008000 /* squating */ #define PS_TYPE_SKTE 0x00010000 /* skating */ #define PS_TYPE_DOWN 0x00020000 /* downing */ #define PS_TYPE_SLIP 0x00040000 /* slipping - */ #define PS_TYPE_DIVE 0x00080000 /* diving */ #define PS_TYPE_POLE 0x00100000 /* hanging pole */ #define PS_TYPE_ROOF 0x00200000 /* hanging roof */ #define PS_TYPE_READ 0x00400000 /* read billboard */ #define PS_TYPE_ATCK 0x00800000 /* attacking */ #define PS_TYPE_WIND 0x01000000 /* wind jump ok */ #define PS_TYPE_JPCN 0x02000000 /* jump cancel */ #define PS_TYPE_VIEW 0x04000000 /* view mode ok */ #define PS_TYPE_QUIT 0x08000000 /* pause quit ok */ #define PS_TYPE_HAND 0x10000000 /* hand animation */ #define PS_TYPE_HEAD 0x20000000 /* head animation */ #define PS_TYPE_BODY 0x40000000 /* body animation */ #define PS_TYPE_THRW 0x80000000 /* throwing flag */ #define PS_TYPE_WALL 0x00000000 /* hanging wall - */ #define PS_TYPE_BAR PS_TYPE_POLE /* player waiting status code */ #define PS_INACTIVE ( 0x00 ) #define PS_WAITING ( 0x01 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT + PS_TYPE_READ ) #define PS_SLEEPILY ( 0x02 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT + PS_TYPE_READ ) #define PS_SLEEPING ( 0x03 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT ) #define PS_WAKEUP ( 0x04 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT ) #define PS_WAITTIRED ( 0x05 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT + PS_TYPE_READ ) #define PS_HOLDTIRED ( 0x06 + PS_TYPE_WAIT + PS_TYPE_QUIT ) #define PS_HOLDING ( 0x07 + PS_TYPE_WAIT + PS_TYPE_QUIT ) #define PS_SHOULDER ( 0x08 + PS_TYPE_WAIT + PS_TYPE_QUIT ) #define PS_WALLWAIT ( 0x09 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT + PS_TYPE_READ ) #define PS_GASWAIT ( 0x0A + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT + PS_TYPE_READ ) #define PS_COLDWAIT ( 0x0B + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT + PS_TYPE_READ ) #define PS_OSHINWAIT ( 0x0C + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT ) #define PS_SANDWAIT ( 0x0D + PS_TYPE_WAIT + PS_TYPE_DOWN ) #define PS_ELECWAIT ( 0x0E + PS_TYPE_WAIT + PS_TYPE_DOWN ) #define PS_SQUATING ( 0x20 + PS_TYPE_WAIT + PS_TYPE_SQRT + PS_TYPE_VIEW + PS_TYPE_QUIT ) #define PS_SQSTART ( 0x21 + PS_TYPE_WAIT + PS_TYPE_SQRT + PS_TYPE_VIEW + PS_TYPE_QUIT ) #define PS_SQSTAND ( 0x22 + PS_TYPE_WAIT + PS_TYPE_SQRT + PS_TYPE_VIEW + PS_TYPE_QUIT ) #define PS_SQWALKST ( 0x23 + PS_TYPE_WAIT + PS_TYPE_SQRT + PS_TYPE_VIEW + PS_TYPE_QUIT ) #define PS_SQWALKED ( 0x24 + PS_TYPE_WAIT + PS_TYPE_SQRT + PS_TYPE_VIEW + PS_TYPE_QUIT ) #define PS_SLIDEKEND ( 0x25 + PS_TYPE_WAIT + PS_TYPE_QUIT ) #define PS_QUAKING ( 0x26 + PS_TYPE_WAIT + PS_TYPE_DOWN ) #define PS_VIEWING ( 0x27 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT ) #define PS_BACKJEND ( 0x2F + PS_TYPE_WAIT + PS_TYPE_QUIT ) #define PS_JUMPEND ( 0x30 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT ) #define PS_SECJPEND ( 0x31 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT ) #define PS_LANDEND ( 0x32 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT ) #define PS_TURNJUMPE ( 0x33 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT ) #define PS_HOLDJUMPE ( 0x34 + PS_TYPE_WAIT + PS_TYPE_QUIT ) #define PS_HOLDLANDE ( 0x35 + PS_TYPE_WAIT + PS_TYPE_QUIT ) #define PS_JMPETHROW ( 0x36 + PS_TYPE_WAIT + PS_TYPE_JUMP + PS_TYPE_THRW ) #define PS_SPINJEND ( 0x38 + PS_TYPE_WAIT + PS_TYPE_ATCK + PS_TYPE_HAND + PS_TYPE_QUIT ) #define PS_FIREJUMPE ( 0x39 + PS_TYPE_WAIT + PS_TYPE_QUIT ) #define PS_ULTRAJEND ( 0x3A + PS_TYPE_WAIT + PS_TYPE_QUIT ) #define PS_BROADJEND ( 0x3B + PS_TYPE_WAIT + PS_TYPE_QUIT ) #define PS_HIPATKEND ( 0x3C + PS_TYPE_WAIT + PS_TYPE_ATCK ) #define PS_BRAKEND ( 0x3D + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT ) #define PS_SLIPEND ( 0x3E + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT ) #define PS_HOLDSLIPE ( 0x3F + PS_TYPE_MOVE + PS_TYPE_QUIT ) /* player running status code */ #define PS_RUNNING ( 0x40 + PS_TYPE_MOVE + PS_TYPE_VIEW ) #define PS_CARRYING ( 0x42 + PS_TYPE_MOVE ) #define PS_TURNING ( 0x43 + PS_TYPE_MOVE ) #define PS_TURNEND ( 0x44 + PS_TYPE_MOVE ) #define PS_BRAKING ( 0x45 + PS_TYPE_MOVE + PS_TYPE_VIEW ) #define PS_SKATING ( 0x46 + PS_TYPE_MOVE + PS_TYPE_ATCK + PS_TYPE_SKTE + PS_TYPE_HEAD ) #define PS_TRANSFER ( 0x47 + PS_TYPE_MOVE ) #define PS_SQWALKING ( 0x48 + PS_TYPE_MOVE + PS_TYPE_SQRT + PS_TYPE_VIEW ) #define PS_FIREDASH ( 0x49 + PS_TYPE_MOVE + PS_TYPE_DOWN ) #define PS_WALKEND ( 0x4A + PS_TYPE_MOVE + PS_TYPE_VIEW ) #define PS_CARRYEND ( 0x4B + PS_TYPE_MOVE ) #define PS_SLIPPING ( 0x50 ) #define PS_HOLDSLIPN ( 0x51 ) #define PS_SLIPFORE ( 0x52 + PS_TYPE_MOVE + PS_TYPE_SLIP + PS_TYPE_ATCK ) #define PS_SLIPBACK ( 0x53 + PS_TYPE_MOVE + PS_TYPE_SLIP + PS_TYPE_ATCK + PS_TYPE_DIVE ) #define PS_HOLDSLIPF ( 0x54 + PS_TYPE_MOVE + PS_TYPE_SLIP + PS_TYPE_ATCK ) #define PS_HOLDSLIPB ( 0x55 + PS_TYPE_MOVE + PS_TYPE_SLIP + PS_TYPE_ATCK + PS_TYPE_DIVE ) #define PS_CATCHING ( 0x56 + PS_TYPE_MOVE + PS_TYPE_ATCK + PS_TYPE_DIVE ) #define PS_RUNATTACK ( 0x57 + PS_TYPE_MOVE + PS_TYPE_ATCK ) #define PS_SQUATSLIP ( 0x59 + PS_TYPE_MOVE + PS_TYPE_SQRT + PS_TYPE_ATCK + PS_TYPE_VIEW ) #define PS_SLIDEKICK ( 0x5A + PS_TYPE_MOVE + PS_TYPE_ATCK ) #define PS_BACKDOWN ( 0x60 + PS_TYPE_MOVE + PS_TYPE_DOWN ) #define PS_FOREDOWN ( 0x61 + PS_TYPE_MOVE + PS_TYPE_DOWN ) #define PS_SBACKDOWN ( 0x62 + PS_TYPE_MOVE + PS_TYPE_DOWN ) #define PS_SFOREDOWN ( 0x63 + PS_TYPE_MOVE + PS_TYPE_DOWN ) #define PS_SAFEBDOWN ( 0x64 + PS_TYPE_MOVE + PS_TYPE_DOWN ) #define PS_SAFEFDOWN ( 0x65 + PS_TYPE_MOVE + PS_TYPE_DOWN ) #define PS_CATCHDOWN ( 0x66 + PS_TYPE_MOVE + PS_TYPE_DOWN ) #define PS_LOSERDOWN ( 0x67 + PS_TYPE_MOVE + PS_TYPE_DOWN ) #define PS_JUMPSLIP ( 0x70 + PS_TYPE_MOVE + PS_TYPE_VIEW ) #define PS_LANDSLIP ( 0x71 + PS_TYPE_MOVE + PS_TYPE_VIEW ) #define PS_SECJPSLIP ( 0x72 + PS_TYPE_MOVE + PS_TYPE_VIEW ) #define PS_TURNJUMPS ( 0x73 + PS_TYPE_MOVE + PS_TYPE_VIEW ) #define PS_HOLDJUMPS ( 0x74 + PS_TYPE_MOVE ) #define PS_HOLDLANDS ( 0x75 + PS_TYPE_MOVE ) #define PS_SANDJUMP ( 0x76 + PS_TYPE_MOVE ) #define PS_SANDHJUMP ( 0x77 + PS_TYPE_MOVE ) #define PS_ULTRAJMPS ( 0x78 + PS_TYPE_MOVE + PS_TYPE_VIEW ) #define PS_BROADSLIP ( 0x79 + PS_TYPE_MOVE ) #define PS_BACKJMPS ( 0x7A + PS_TYPE_MOVE + PS_TYPE_VIEW ) /* player jumping status code */ /* pole and bird */ #define PS_JUMPING ( 0x80 + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND ) #define PS_SECJUMP ( 0x81 + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND ) #define PS_ULTRAJUMP ( 0x82 + PS_TYPE_JUMP + PS_TYPE_WIND ) #define PS_BACKJUMP ( 0x83 + PS_TYPE_JUMP + PS_TYPE_WIND ) #define PS_WINGJUMP ( 0x94 + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND ) #define PS_MISSJUMP ( 0x85 + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND ) #define PS_JUMPWALL ( 0x86 + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND ) #define PS_TURNJUMPN ( 0x87 + PS_TYPE_JUMP + PS_TYPE_WIND ) #define PS_BROADJUMP ( 0x88 + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND ) #define PS_WATERNJMP ( 0x89 + PS_TYPE_JUMP + PS_TYPE_WIND ) #define PS_JMPCATCH ( 0x8A + PS_TYPE_JUMP + PS_TYPE_DIVE + PS_TYPE_WIND + PS_TYPE_ATCK ) #define PS_TRAMPOLIN ( 0x8B + PS_TYPE_JUMP + PS_TYPE_JPCN ) #define PS_LANDING ( 0x8C + PS_TYPE_JUMP + PS_TYPE_WIND ) #define PS_BARLAND ( 0x8D + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND ) #define PS_SLIPFALL ( 0x8E + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND ) /* pole */ #define PS_CANNJUMP ( 0x98 + PS_TYPE_JUMP + PS_TYPE_ATCK + PS_TYPE_DIVE ) #define PS_FLIGHT ( 0x99 + PS_TYPE_JUMP + PS_TYPE_ATCK + PS_TYPE_DIVE + PS_TYPE_HAND ) #define PS_BOARDJUMP ( 0x9A + PS_TYPE_JUMP + PS_TYPE_ATCK + PS_TYPE_SKTE + PS_TYPE_JPCN ) #define PS_BOARDLAND ( 0x9B + PS_TYPE_JUMP + PS_TYPE_ATCK + PS_TYPE_SKTE ) #define PS_WINDFLY ( 0x9C + PS_TYPE_JUMP + PS_TYPE_DIVE + PS_TYPE_HAND ) #define PS_HOLDJUMPN ( 0xA0 + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND ) #define PS_HOLDLANDN ( 0xA1 + PS_TYPE_JUMP + PS_TYPE_WIND ) #define PS_HSLPFALL ( 0xA2 + PS_TYPE_JUMP + PS_TYPE_WIND ) #define PS_WATERCJMP ( 0xA3 + PS_TYPE_JUMP + PS_TYPE_WIND ) #define PS_SPINJUMP ( 0xA4 + PS_TYPE_JUMP + PS_TYPE_ATCK + PS_TYPE_HAND ) #define PS_CATCHSTOP ( 0xA6 + PS_TYPE_JUMP + PS_TYPE_WIND ) #define PS_STAYWALL ( 0xA7 + PS_TYPE_JUMP ) #define PS_FLYBIRD ( 0xA8 + PS_TYPE_MOVE ) #define PS_HIPATTACK ( 0xA9 + PS_TYPE_JUMP + PS_TYPE_ATCK ) #define PS_JUMPKICK ( 0xAA + PS_TYPE_JUMP + PS_TYPE_ATCK + PS_TYPE_WIND ) #define PS_JMPNTHROW ( 0xAB + PS_TYPE_JUMP + PS_TYPE_THRW + PS_TYPE_WIND + PS_TYPE_JPCN ) #define PS_JPPOWKICK ( 0xAC + PS_TYPE_JUMP + PS_TYPE_ATCK + PS_TYPE_WIND ) #define PS_BSLIPSTOP ( 0xAD + PS_TYPE_JUMP + PS_TYPE_WIND ) #define PS_HOPPERJMP ( 0xAE + PS_TYPE_JUMP ) #define PS_SPECIALJP ( 0xAF + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND ) #define PS_JMPSBDOWN ( 0xB0 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND ) #define PS_JMPSFDOWN ( 0xB1 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND ) #define PS_JFOREDOWN ( 0xB2 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND ) #define PS_JBACKDOWN ( 0xB3 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND ) #define PS_FIREJUMP ( 0xB4 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND ) #define PS_FIRELAND ( 0xB5 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND ) #define PS_LANDDOWN ( 0xB6 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND ) #define PS_FIREDOWN ( 0xB7 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND ) #define PS_WINDDOWN ( 0xB8 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND ) #define PS_THROWNFOR ( 0xBD + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND ) #define PS_THROWNBAK ( 0xBE + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND ) /* player swimming status code */ #define PS_SWIMNWAIT ( 0xC0 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_QUIT + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMCWAIT ( 0xC1 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_QUIT + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMNSTOP ( 0xC2 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMCSTOP ( 0xC3 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMDOWN ( 0xC4 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_DEMO + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMBDOWN ( 0xC5 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_DOWN + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMFDOWN ( 0xC6 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_DOWN + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMDOWNE ( 0xC7 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_DEMO + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMELEC ( 0xC8 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_DOWN + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMMING1 ( 0xD0 + PS_TYPE_MOVE + PS_TYPE_SWIM + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMMING2 ( 0xD1 + PS_TYPE_MOVE + PS_TYPE_SWIM + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMMING3 ( 0xD2 + PS_TYPE_MOVE + PS_TYPE_SWIM + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMCARY1 ( 0xD3 + PS_TYPE_MOVE + PS_TYPE_SWIM + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMCARY2 ( 0xD4 + PS_TYPE_MOVE + PS_TYPE_SWIM + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMCARY3 ( 0xD5 + PS_TYPE_MOVE + PS_TYPE_SWIM + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_KAMESWIM ( 0xD6 + PS_TYPE_MOVE + PS_TYPE_SWIM + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMTHROW ( 0xE0 + PS_TYPE_MOVE + PS_TYPE_SWIM + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_SWIMTAKE ( 0xE1 + PS_TYPE_MOVE + PS_TYPE_SWIM + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_DIVING ( 0xE2 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_DRAINPIPE ( 0xE3 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_DOWN + PS_TYPE_HEAD + PS_TYPE_HAND ) #define PS_WATRNWAIT ( 0xF0 + PS_TYPE_WAIT + PS_TYPE_SINK + PS_TYPE_QUIT ) #define PS_WATRCWAIT ( 0xF1 + PS_TYPE_WAIT + PS_TYPE_SINK + PS_TYPE_QUIT ) #define PS_WATRNWALK ( 0xF2 + PS_TYPE_MOVE + PS_TYPE_SINK ) #define PS_WATRCWALK ( 0xF3 + PS_TYPE_MOVE + PS_TYPE_SINK ) #define PS_WATRNLAND ( 0xF4 + PS_TYPE_WAIT + PS_TYPE_SINK ) #define PS_WATRCLAND ( 0xF5 + PS_TYPE_WAIT + PS_TYPE_SINK ) #define PS_WATRNLNDE ( 0xF6 + PS_TYPE_WAIT + PS_TYPE_SINK ) #define PS_WATRCLNDE ( 0xF7 + PS_TYPE_WAIT + PS_TYPE_SINK ) #define PS_WATRNJUMP ( 0xF8 + PS_TYPE_MOVE + PS_TYPE_SINK ) #define PS_WATRCJUMP ( 0xF9 + PS_TYPE_MOVE + PS_TYPE_SINK ) #define PS_WATRNJMPE ( 0xFA + PS_TYPE_MOVE + PS_TYPE_SINK ) #define PS_WATRCJMPE ( 0xFB + PS_TYPE_MOVE + PS_TYPE_SINK ) /* player auto demonstration status code */ #define PS_FREEZE ( 0x100 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_CAMDEMO ( 0x101 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_VIEW ) #define PS_WINDEMO ( 0x102 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_WINSWIM ( 0x103 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_WINLAND ( 0x104 + PS_TYPE_JUMP + PS_TYPE_DEMO ) #define PS_DODIALOG ( 0x105 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_HEAD ) #define PS_DLOGMODE ( 0x106 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_HEAD ) #define PS_WINDEMO2 ( 0x107 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_READBOARD ( 0x108 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_WINFLIGHT ( 0x109 + PS_TYPE_JUMP + PS_TYPE_DEMO ) #define PS_WAITDLOG ( 0x10A + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_FREEMOVE ( 0x10F + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_WINDEMOA PS_WINDEMO #define PS_GIDDYDOWN ( 0x111 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_DOWN ) #define PS_SANDDOWN ( 0x112 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_DOWN ) #define PS_ELECDOWN ( 0x113 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_DOWN ) #define PS_GASDOWN ( 0x114 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_DOWN ) #define PS_FOREDOWNE ( 0x115 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_DOWN ) #define PS_BACKDOWNE ( 0x116 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_DOWN ) #define PS_EATEN ( 0x117 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_DOWN ) #define PS_ENTENDING ( 0x118 + PS_TYPE_JUMP + PS_TYPE_DEMO ) #define PS_STAFFROLL ( 0x119 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_FINGAME ( 0x11A + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_OPENDOOR1 ( 0x120 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_OPENDOOR2 ( 0x121 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_TRIPDOOR ( 0x122 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_CHIMNEY ( 0x123 + PS_TYPE_JUMP + PS_TYPE_DEMO ) #define PS_ROLLJUMP ( 0x124 + PS_TYPE_JUMP + PS_TYPE_DEMO ) #define PS_ROLLEND ( 0x125 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_ENTWINNER ( 0x126 + PS_TYPE_JUMP + PS_TYPE_DEMO ) #define PS_ENTWINEND ( 0x127 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_ENTLOSER ( 0x128 + PS_TYPE_JUMP + PS_TYPE_DEMO ) #define PS_LANDLOSER ( 0x129 + PS_TYPE_JUMP + PS_TYPE_DEMO ) #define PS_DOWNLOSER ( 0x12A + PS_TYPE_JUMP + PS_TYPE_DEMO ) #define PS_PUSHOUT ( 0x12B + PS_TYPE_JUMP + PS_TYPE_DEMO ) #define PS_PUSHDOWN ( 0x12C + PS_TYPE_JUMP + PS_TYPE_DEMO ) #define PS_LNDWINNER ( 0x12D + PS_TYPE_JUMP + PS_TYPE_DEMO ) #define PS_OPENKDOOR ( 0x12E + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_STARDOOR ( 0x12F + PS_TYPE_WAIT + PS_TYPE_DEMO ) // #define PS_WALKDOOR ( 0x130 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_AUTODOOR ( 0x131 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_LANDENTER ( 0x132 + PS_TYPE_JUMP + PS_TYPE_DEMO ) #define PS_LANDENEND ( 0x133 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_JPBASKET ( 0x134 + PS_TYPE_JUMP + PS_TYPE_DEMO ) #define PS_INBASKET ( 0x135 + PS_TYPE_MOVE + PS_TYPE_DEMO ) #define PS_WARPIN ( 0x136 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_WARPOUT ( 0x137 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_ELECDMGE ( 0x138 + PS_TYPE_WAIT + PS_TYPE_DOWN ) #define PS_VCOMPRESS ( 0x139 + PS_TYPE_WAIT + PS_TYPE_DOWN ) #define PS_HEADDOWN ( 0x13A + PS_TYPE_WAIT + PS_TYPE_DOWN ) #define PS_HIPDOWN ( 0x13B + PS_TYPE_WAIT + PS_TYPE_DOWN ) #define PS_FOOTDOWN ( 0x13C + PS_TYPE_WAIT + PS_TYPE_DOWN ) #define PS_PUTONHAT ( 0x13D + PS_TYPE_WAIT + PS_TYPE_DEMO ) /* player special status code */ #define PS_BARWAIT ( 0x140 + PS_TYPE_WAIT + PS_TYPE_POLE + PS_TYPE_QUIT ) #define PS_BARHANG ( 0x141 + PS_TYPE_WAIT + PS_TYPE_POLE ) #define PS_BARJUMP ( 0x142 + PS_TYPE_WAIT + PS_TYPE_POLE ) #define PS_BARCLIMB ( 0x143 + PS_TYPE_WAIT + PS_TYPE_POLE ) #define PS_BARSTAND ( 0x144 + PS_TYPE_WAIT + PS_TYPE_POLE ) #define PS_BARSWAIT ( 0x145 + PS_TYPE_WAIT + PS_TYPE_POLE ) #define PS_HANGROOF ( 0x148 + PS_TYPE_WAIT + PS_TYPE_ROOF + PS_TYPE_QUIT ) #define PS_WAITROOF ( 0x149 + PS_TYPE_WAIT + PS_TYPE_ROOF ) #define PS_MOVEROOF ( 0x14A + PS_TYPE_MOVE + PS_TYPE_ROOF ) #define PS_HANGING ( 0x14B + PS_TYPE_WAIT + PS_TYPE_WALL + PS_TYPE_QUIT ) #define PS_ASCEND1 ( 0x14C + PS_TYPE_MOVE + PS_TYPE_WALL ) #define PS_ASCEND2 ( 0x14D + PS_TYPE_MOVE + PS_TYPE_WALL ) #define PS_DESCEND ( 0x14E + PS_TYPE_MOVE + PS_TYPE_WALL ) #define PS_HANGJUMP ( 0x14F + PS_TYPE_MOVE + PS_TYPE_WALL ) #define PS_TAKEN ( 0x170 + PS_TYPE_WAIT + PS_TYPE_DOWN ) #define PS_INCANNON ( 0x171 + PS_TYPE_WAIT + PS_TYPE_DEMO ) #define PS_TORNEDO ( 0x172 + PS_TYPE_WAIT + PS_TYPE_DOWN + PS_TYPE_HAND ) /* player action status code */ #define PS_ATTACK ( 0x180 + PS_TYPE_WAIT + PS_TYPE_ATCK ) #define PS_TAKING ( 0x183 + PS_TYPE_WAIT ) #define PS_CATCHEND ( 0x185 + PS_TYPE_WAIT ) #define PS_CATCHLOST ( 0x186 + PS_TYPE_WAIT ) #define PS_PUTTING ( 0x187 + PS_TYPE_WAIT ) #define PS_PITCHING ( 0x188 + PS_TYPE_MOVE + PS_TYPE_THRW ) #define PS_THROWING ( 0x189 + PS_TYPE_MOVE + PS_TYPE_THRW ) #define PS_BRANDSTAT ( 0x190 + PS_TYPE_WAIT ) #define PS_BRANDISH ( 0x191 + PS_TYPE_WAIT ) #define PS_BRANDEND ( 0x192 + PS_TYPE_WAIT ) /********************************************************************************/ /* */ /* Player control record */ /* */ /********************************************************************************/ typedef struct { ushort number; /* player ID number */ ushort action; /* player action */ ulong flags; /* player flags */ ulong result; /* player result */ ulong status; /* player status */ ulong oldstatus; /* player status at the previous frame */ ulong surface; /* ground surface condition for sound */ ushort process; /* allpurpose process number */ ushort counter; /* allpurpose counter */ ulong auxinfo; /* auxiliary status information */ float powLevel; /* motion power level (temp) */ short powAngle; /* motion power angle (temp) */ short invincible; /* invincible counter */ uchar jmpTrgcnt; /* jump button trigger counter */ uchar actTrgcnt; /* action button triger counter */ uchar walljump; /* wall jump */ uchar tripjump; /* triple jump */ SVector angle; /* player angle */ SVector angvelo; /* angle velocity for swimming */ short slideAng; /* player slide angle */ short spinAngle; /* spin jumping angle */ FVector position; /* player position */ FVector speed; /* player speed (vector) */ float velocity; /* player velocity */ float slidex; /* player slide speed x */ float slidez; /* player slide speed z */ BGCheckData *wlPlane; /* pointer to the wall plane record */ BGCheckData *rfPlane; /* pointer to the roof plane record */ BGCheckData *grPlane; /* pointer to the ground plane record */ float rfLevel; /* roof level */ float grLevel; /* ground level */ short grAngle; /* ground angle y */ short water; /* water level */ StrategyPtr collide; /* pointer to the collided object */ StrategyPtr taking; /* pointer to the taken object */ StrategyPtr couple; /* pointer to the coupling object */ StrategyPtr skateboard; /* pointer to the skate board */ StrategyPtr strategy; /* pointer to the strategy record */ ActorPtr actorinf; /* pointer to the actor information */ ScenePtr sceneinf; /* pointer to the scene information */ CamPLInfoPtr playerinf; /* pointer to the player information */ PLShapeCtrl *shapeCtrl; /* pointer to the player shape control */ Controller *control; /* pointer to the controller */ PartialPtr partial; ulong hitnames; /* hit enemy names */ short ncoins; /* number of the coins */ short nstars; /* number of the stars */ char nkeys; /* number of the keys */ char nlifes; /* number of the lifes */ short npowers; /* number of the powers */ short animbase; /* skeleton animation base height */ uchar damage; /* player power down */ uchar recover; /* player power recover */ uchar compress; /* player shape vertical compress value */ uchar alpha; /* player shape alpha value */ ushort special; /* special mario counter */ short starmsg; /* number of stars for star message */ ushort reserved2; float fallpos; /* player falled from this height */ float sinking; /* player sink depth */ float gravity; /* player jumping gravity */ } PlayerRecord, *PlayerPtr; /********************************************************************************/ /* */ /* Meter control record */ /* */ /********************************************************************************/ #define METER_LIFE 0x0001 #define METER_COIN 0x0002 #define METER_STAR 0x0004 #define METER_POWER 0x0008 #define METER_KEY 0x0010 #define METER_MAP 0x0020 #define METER_TIMER 0x0040 #define METER_ALL 0x007F #define METER_DAMAGE 0x8000 typedef struct { short life; /* number of Mario's life */ short coin; /* number of the coins */ short star; /* number of the stars */ short power; /* number of the powers */ short key; /* number of the keys */ short flags; /* meter switch */ ushort timer; /* timer */ } MeterRecord, *MeterPtr; /********************************************************************************/ /* */ /* External variables */ /* */ /********************************************************************************/ extern PlayerRecord playerWorks[1]; /* player control works */ extern PlayerRecord *marioWorks; /* pointer to the mario works */ extern MeterRecord playerMeter; /* player meter record */ extern char mesgCastle; /********************************************************************************/ /* */ /* Audio macros */ /* */ /********************************************************************************/ #define PL_StartSound(player,code) PL_StartSoundEffect(player,code,PL_FLAG_SOUNDTRIG) #define PL_StartVoice(player,code) PL_StartSoundEffect(player,code,PL_FLAG_VOICETRIG) #define PL_StartMarioPant(player) Na_MarioPant(&(player)->strategy->map.viewCoord[0]) /********************************************************************************/ /* */ /* Macros */ /* */ /********************************************************************************/ #define PL_IsGhostMario(player) ((player)->flags & PL_FLAG_GHOSTCAP) #define PL_IsMetalMario(player) ((player)->flags & PL_FLAG_METALCAP) #define PL_IsWingMario(player) ((player)->flags & PL_FLAG_WINGCAP) #define PL_AnimeFrame(player) ((player)->strategy->map.skelanim.frame) #define PL_IsAnimeFrame(player,n) ((player)->strategy->map.skelanim.frame==(n)) #define PL_GetAnimeID(player) ((player)->strategy->map.skelanim.animeID) #define PL_ResetAnimation(player) ((player)->strategy->map.skelanim.animeID = -1) #define PL_GetEnvironment(player) ((player)->sceneinf->environment&ENV_CODEMASK) #define PL_CheckEnvironment(player,env) (((player)->sceneinf->environment&ENV_CODEMASK)==(env)) #define PL_ClearViewCamera() (gameCameraControl &= ~CAM_FLAG_VIEWMODE) #define PL_GameOverRequest(n) (gameOverRequest = (n)) #define PL_SetPlayerCap(player,n) ((player)->shapeCtrl->ctrlCap =(n)) #define PL_SetPlayerEye(player,n) ((player)->shapeCtrl->ctrlEye =(n)) #define PL_SetPlayerHand(player,n) ((player)->shapeCtrl->ctrlHand=(n)) #define PL_SetPlayerSkin(player,n) ((player)->shapeCtrl->ctrlSkin=(n)) #define PL_SetOriginalCameraMode(player) \ ChangeGameCamera((player)->sceneinf->camera, (player)->sceneinf->camera->orgmode, 1) #define RecoverMarioPower(n) (playerWorks[0].recover+=(n)*4) /********************************************************************************/ /* */ /* Ending routines. */ /* */ /********************************************************************************/ extern void DrawStaffRoll(void); extern void DoPeachProcess(void); extern void DoKinopioProcess(void); extern ulong CtrlPeachFace(int code, MapNode *node, void *data); /********************************************************************************/ /* */ /* Player animation suport routines. */ /* */ /********************************************************************************/ extern int PL_IsLast1AnimeFrame(PlayerPtr player); extern int PL_IsLast2AnimeFrame(PlayerPtr player); extern int PL_SetAnimation(PlayerPtr player, int anime_id); extern int PL_SetVariableAnime(PlayerPtr player, int anime_id, long speed); extern void PL_SetAnimeFrame(PlayerPtr player, short frame); extern int PL_CheckAnimeFrame(PlayerPtr player, short frame); extern int PL_PresetWaistAnime(PlayerPtr player); extern short PL_GetWaistAnimeY(PlayerPtr player); extern short PL_GetWaistTranslation(StrategyPtr stratp, short angle, SVector position); /********************************************************************************/ /* */ /* Change player status routines. */ /* */ /********************************************************************************/ extern int PL_ChangePlayerTriJump(PlayerPtr player); extern int PL_ChangePlayerJumping(PlayerPtr player, ulong status, ulong param); extern int PL_ChangePlayerTaking(PlayerPtr player, ulong status, ulong param); extern int PL_ChangePlayerDropping(PlayerPtr player, ulong status, ulong param); extern int PL_ChangePlayerDamage(PlayerPtr player, ulong status, ulong param, short damage); extern int PL_CheckAllMotions(PlayerPtr player); extern int PL_CheckAllHoldMotions(PlayerPtr player); extern int PL_ChangeFieldMode(PlayerPtr player); extern int PL_ChangeWaterMode(PlayerPtr player); extern int PL_ChangePlayerStatus(PlayerPtr player, ulong status, ulong auxinfo); /********************************************************************************/ /* */ /* Player control utility routines. */ /* */ /********************************************************************************/ extern void PL_StartSoundEffect(PlayerPtr player, ulong code, ulong type); extern void PL_StartJumpVoice(PlayerPtr player); extern void PL_SetSpeedVolum(PlayerPtr player); extern void PL_SpecialEffect(PlayerPtr player, ulong sound, int jumpsink); extern void PL_TrigSpecialEffect(PlayerPtr player, ulong sound, int jumpsink); extern void PL_StartLandingEffect(PlayerPtr player, ulong sound); extern void PL_TrigStartLandingEffect(PlayerPtr player, ulong sound); extern void PL_StartDowningEffect(PlayerPtr player, ulong sound); extern void PL_TrigStartDowningEffect(PlayerPtr player, ulong sound); extern void PL_StartJumpingEffect(PlayerPtr player, ulong sound, ulong voice); extern void PL_SetPlayerVelocity(PlayerPtr player, float speed); extern int PL_GetSlipCode(PlayerPtr player); extern ulong PL_CheckGroundSurface(PlayerPtr player); extern BGCheckData * PL_CheckWallPlane(FVector position, float offset, float radius); extern float PL_CheckRoofPlane(FVector position, float ground, BGCheckData **plane); extern int PL_IsFrontSlip(PlayerPtr player, int backflag); extern int PL_IsSlipStart(PlayerPtr player); extern int PL_IsSlipLimit(PlayerPtr player); extern int PL_IsJumpMiss(PlayerPtr player); extern float PL_CheckPlayerAround(PlayerPtr player, short angle, float dist); extern short PL_GroundGradient(PlayerPtr player, short offset); extern void PL_ResetSpecialCameraMode(PlayerPtr player); extern int PL_AttackProcess(PlayerPtr player); extern int CheckPlayerDialog(void); extern int CtrlPlayerDialog(int type); extern short PL_PlayerRunningSound(PlayerPtr player, short frame1, short frame2); /********************************************************************************/ /* */ /* Player main routines. */ /* */ /********************************************************************************/ extern int PL_PlayerWaitMain(PlayerPtr player); extern int PL_PlayerMoveMain(PlayerPtr player); extern int PL_PlayerJumpMain(PlayerPtr player); extern int PL_PlayerSwimMain(PlayerPtr player); extern int PL_PlayerDemoMain(PlayerPtr player); extern int PL_PlayerSpecMain(PlayerPtr player); extern int PL_PlayerActnMain(PlayerPtr player); extern ulong PlayerControl(StrategyPtr strategy); extern void InitPlayer(void); extern void InitPlayerWorks(void); /********************************************************************************/ /* */ /* Include files. */ /* */ /********************************************************************************/ #include "physics.h" #include "collision.h" #include "game.h" #endif