sm64/include/seqlang.h

1013 lines
28 KiB
C

/********************************************************************************
seqlang.h: Ultra 64 MARIO Brothers include file
Copyright (c) 1996 Nintendo co., ltd. All rights reserved
April 15, 1996
********************************************************************************/
#ifndef SEQLANG_H
#define SEQLANG_H
#define ShapePlayer1 1
#define ShapePlayer2 2
#define SEQ_WIPE_FADEIN 0
#define SEQ_WIPE_FADEOUT 1
#define WIPE_FADE_IN 0
#define WIPE_FADE_OUT 1
#define WIPE_TRI_SCR_OPEN 2
#define WIPE_TRI_SCR_CLOSE 3
#define WIPE_RECT_SCR_OPEN 4
#define WIPE_RECT_SCR_CLOSE 5
#define WIPE_R_DITHER_IN 6
#define WIPE_R_DITHER_OUT 7
#define WIPE_STAR_WIN_OPEN 8
#define WIPE_STAR_WIN_CLOSE 9
#define WIPE_CIRCLE_WIN_OPEN 10
#define WIPE_CIRCLE_WIN_CLOSE 11
#define WIPE_POLY_STAR_OPEN 12
#define WIPE_POLY_STAR_CLOSE 13
#define SEQ_MESG_ENTRANT 0
#define SEQ_WATER_IN 0
#define SEQ_WATER_OUT 1
#define SEQ_KOOPA_NON 0
#define SEQ_KOOPA_LIVE 1
#define SEQ_KOOPA_DIED 2
#define SEQ_STAR_LEVEL 3
#define ENV_SNOW 2
#define ENV_PLAIN 0x00
#define ENV_ROCKMT 0x01
#define ENV_SNOWMT 0x02
#define ENV_DESERT 0x03
#define ENV_HOUSE 0x04
#define ENV_WATER 0x05
#define ENV_SLIDER 0x06
#define ENV_CODEMASK 0x07
#define SEQ_AND 0
#define SEQ_NAND 1
#define SEQ_EQ 2
#define SEQ_NE 3
#define SEQ_GT 4
#define SEQ_GE 5
#define SEQ_LT 6
#define SEQ_LE 7
#define PAD 0
#define STAR_00001 0x01
#define STAR_00010 0x02
#define STAR_00011 0x03
#define STAR_00100 0x04
#define STAR_00101 0x05
#define STAR_00110 0x06
#define STAR_00111 0x07
#define STAR_01000 0x08
#define STAR_01001 0x09
#define STAR_01010 0x0A
#define STAR_01011 0x0B
#define STAR_01100 0x0C
#define STAR_01101 0x0D
#define STAR_01110 0x0E
#define STAR_01111 0x0F
#define STAR_10000 0x10
#define STAR_10001 0x11
#define STAR_10010 0x12
#define STAR_10011 0x13
#define STAR_10100 0x14
#define STAR_10101 0x15
#define STAR_10110 0x16
#define STAR_10111 0x17
#define STAR_11000 0x18
#define STAR_11001 0x19
#define STAR_11010 0x1A
#define STAR_11011 0x1B
#define STAR_11100 0x1C
#define STAR_11101 0x1D
#define STAR_11110 0x1E
#define STAR_11111 0x1F
/********************************************************************************/
/* Geometry render mode. */
/********************************************************************************/
#define GMODE_PLAYER 0
#define GMODE_COURSE 1
#define GMODE_LEVEL 2
#define GMODE_STAGE 3
#define GMODE_SCENE 4
/********************************************************************************/
/* C Language only. */
/********************************************************************************/
#ifndef ASSEMBLER
typedef uchar Sequence, *SequencePtr;
extern SequencePtr
ExecuteSequence(SequencePtr sequence);
#endif
/********************************************************************************/
/* Sequence language command ID. */
/********************************************************************************/
#define _seqExecute_id 0
#define _seqChain_id 1
#define _seqExit_id 2
#define _seqWait_id 3
#define _seqFreeze_id 4
#define _seqJump_id 5
#define _seqCall_id 6
#define _seqReturn_id 7
#define _seqDo_id 8
#define _seqNext_id 9
#define _seqRepeat_id 10
#define _seqUntil_id 11
#define _seqTstJump_id 12
#define _seqTstCall_id 13
#define _seqIf_id 14
#define _seqElse_id 15
#define _seqEndif_id 16
#define _seqCProgram_id 17
#define _seqRunning_id 18
#define _seqSetResult_id 19
#define _seqLinkMemory_id 20
#define _seqUnlinkMemory_id 21
#define _seqLoadCode_id 22
#define _seqLoadData_id 23
#define _seqLoadPres_id 24
#define _seqLoadFace_id 25
#define _seqLoadText_id 26
#define _seqInitStage_id 27
#define _seqDestroyStage_id 28
#define _seqBeginConstruction_id 29
#define _seqEndConstruction_id 30
#define _seqBeginScene_id 31
#define _seqEndScene_id 32
#define _seqGfxShape_id 33
#define _seqHmsShape_id 34
#define _seqSclShape_id 35
#define _seqActor_id 36
#define _seqStarring_id 37
#define _seqPort_id 38
#define _seqBGPort_id 39
#define _seqConnect_id 40
#define _seqOpenScene_id 41
#define _seqCloseScene_id 42
#define _seqEnterPlayer_id 43
#define _seqExitPlayer_id 44
#define _seqExecStrategy_id 45
#define _seqMapInfo_id 46
#define _seqAreaInfo_id 47
#define _seqMessage_id 48
#define _seqEnvironment_id 49
#define _seqBlankColor_id 50
#define _seqWipe_id 51
#define _seqBlanking_id 52
#define _seqGamma_id 53
#define _seqSetMusic_id 54
#define _seqPlayMusic_id 55
#define _seqStopMusic_id 56
#define _seqTagInfo_id 57
#define _seqWindZone_id 58
#define _seqWaterJet_id 59
#define _seqGameMode_id 60
#ifdef ASSEMBLER
#define RGBA16(r,g,b,a) (((r)<<11) | ((g)<<6) | ((b)<<1) | (a))
#define AudFrame(n) ((n)*8-2)
/*===============================================================================
*
* Sequence control command
*/
/********************************************************************************/
/* seqExecute */
/********************************************************************************/
#define seqExecute(segment, romStart, romEnd, procedure) \
.byte _seqExecute_id; \
.byte 16; \
.half segment; \
.word romStart; \
.word romEnd; \
.word procedure
/********************************************************************************/
/* seqChain */
/********************************************************************************/
#define seqChain(segment, romStart, romEnd, procedure) \
.byte _seqChain_id; \
.byte 16; \
.half segment; \
.word romStart; \
.word romEnd; \
.word procedure
/********************************************************************************/
/* seqExit */
/********************************************************************************/
#define seqExit \
.byte _seqExit_id; \
.byte 4; \
.half PAD
/********************************************************************************/
/* seqEnd */
/********************************************************************************/
#define seqEnd \
.byte _seqWait_id; \
.byte 4; \
.half PAD
/********************************************************************************/
/* seqWait */
/********************************************************************************/
#define seqWait(nframes) \
.byte _seqWait_id; \
.byte 4; \
.half nframes
/********************************************************************************/
/* seqFreeze */
/********************************************************************************/
#define seqFreeze(nframes) \
.byte _seqFreeze_id; \
.byte 4; \
.half nframes
/********************************************************************************/
/* seqJump */
/********************************************************************************/
#define seqJump(procedure) \
.byte _seqJump_id; \
.byte 8; \
.half PAD; \
.word procedure
/********************************************************************************/
/* seqCall */
/********************************************************************************/
#define seqCall(procedure) \
.byte _seqCall_id; \
.byte 8; \
.half PAD; \
.word procedure
/********************************************************************************/
/* seqReturn */
/********************************************************************************/
#define seqReturn \
.byte _seqReturn_id; \
.byte 4; \
.half PAD
/********************************************************************************/
/* seqDo */
/********************************************************************************/
#define seqDo(nrounds) \
.byte _seqDo_id; \
.byte 4; \
.half nrounds
/********************************************************************************/
/* seqNext */
/********************************************************************************/
#define seqNext \
.byte _seqNext_id; \
.byte 4; \
.half PAD
/********************************************************************************/
/* seqRepeat */
/********************************************************************************/
#define seqRepeat \
.byte _seqRepeat_id; \
.byte 4; \
.half PAD
/********************************************************************************/
/* seqUntil */
/********************************************************************************/
#define seqUntil(condition, value) \
.byte _seqUntil_id; \
.byte 8; \
.byte condition; \
.byte PAD; \
.word value
/********************************************************************************/
/* seqTstJump */
/********************************************************************************/
#define seqTstJump(condition, value, procedure) \
.byte _seqTstJump_id; \
.byte 12; \
.byte condition; \
.byte PAD; \
.word value; \
.word procedure
/********************************************************************************/
/* seqTstCall */
/********************************************************************************/
#define seqTstCall(condition, value, procedure) \
.byte _seqTstCall_id; \
.byte 12; \
.byte condition; \
.byte PAD; \
.word value; \
.word procedure
/********************************************************************************/
/* seqIf */
/********************************************************************************/
#define seqIf(condition, index, value) \
.byte _seqIf_id; \
.byte 8; \
.byte condition; \
.byte PAD; \
.word value
/********************************************************************************/
/* seqElse */
/********************************************************************************/
#define seqElse \
.byte _seqElse_id; \
.byte 4; \
.half PAD
/********************************************************************************/
/* seqEndif */
/********************************************************************************/
#define seqEndif \
.byte _seqEndif_id; \
.byte 4; \
.half PAD
/********************************************************************************/
/* seqCProgram */
/********************************************************************************/
#define seqCProgram(program, code) \
.byte _seqCProgram_id; \
.byte 8; \
.half code; \
.word program
/********************************************************************************/
/* seqRunning */
/********************************************************************************/
#define seqRunning(program, code) \
.byte _seqRunning_id; \
.byte 8; \
.half code; \
.word program
/********************************************************************************/
/* seqSetResult */
/********************************************************************************/
#define seqSetResult(code) \
.byte _seqSetResult_id; \
.byte 4; \
.half code;
/*===============================================================================
*
* Memory allocation command
*/
/********************************************************************************/
/* seqLinkMemory */
/********************************************************************************/
#define seqLinkMemory() \
.byte _seqLinkMemory_id; \
.byte 4; \
.half PAD
/********************************************************************************/
/* seqUnlinkMemory */
/********************************************************************************/
#define seqUnlinkMemory() \
.byte _seqUnlinkMemory_id; \
.byte 4; \
.half PAD
/********************************************************************************/
/* seqLoadCode */
/********************************************************************************/
#define seqLoadCode(ramAddr, romStart, romEnd) \
.byte _seqLoadCode_id; \
.byte 16; \
.half PAD; \
.word ramAddr; \
.word romStart; \
.word romEnd
/********************************************************************************/
/* seqLoadData */
/********************************************************************************/
#define seqLoadData(segment, romStart, romEnd) \
.byte _seqLoadData_id; \
.byte 12; \
.half segment; \
.word romStart; \
.word romEnd
/********************************************************************************/
/* seqLoadPres */
/********************************************************************************/
#define seqLoadPres(segment, romStart, romEnd) \
.byte _seqLoadPres_id; \
.byte 12; \
.half segment; \
.word romStart; \
.word romEnd
/********************************************************************************/
/* seqLoadFace */
/********************************************************************************/
#define seqLoadFace(number) \
.byte _seqLoadFace_id; \
.byte 4; \
.half number
/********************************************************************************/
/* seqLoadText */
/********************************************************************************/
#define seqLoadText(segment, romStart, romEnd) \
.byte _seqLoadText_id; \
.byte 12; \
.half segment; \
.word romStart; \
.word romEnd
/*================================================================================
*
* Stage construction command
*/
/********************************************************************************/
/* seqInitStage */
/********************************************************************************/
#define seqInitStage() \
.byte _seqInitStage_id; \
.byte 4; \
.half PAD
/********************************************************************************/
/* seqDestroyStage */
/********************************************************************************/
#define seqDestroyStage() \
.byte _seqDestroyStage_id; \
.byte 4; \
.half PAD
/********************************************************************************/
/* seqStageConstruction */
/********************************************************************************/
#define seqBeginConstruction() \
.byte _seqBeginConstruction_id; \
.byte 4; \
.half PAD
/********************************************************************************/
/* seqEndConstruction */
/********************************************************************************/
#define seqEndConstruction() \
.byte _seqEndConstruction_id; \
.byte 4; \
.half PAD
/********************************************************************************/
/* seqBeginScene */
/********************************************************************************/
#define seqBeginScene(sceneNo, hierarchy) \
.byte _seqBeginScene_id; \
.byte 8; \
.byte sceneNo; \
.byte PAD; \
.word hierarchy
/********************************************************************************/
/* seqEndScene */
/********************************************************************************/
#define seqEndScene() \
.byte _seqEndScene_id; \
.byte 4; \
.half PAD
/********************************************************************************/
/* seqGfxShape */
/********************************************************************************/
#define seqGfxShape(shapeNo, gfxlist, mode) \
.byte _seqGfxShape_id; \
.byte 8; \
.half mode*4096+shapeNo; \
.word gfxlist
/********************************************************************************/
/* seqHmsShape */
/********************************************************************************/
#define seqHmsShape(shapeNo, hierarchy) \
.byte _seqHmsShape_id; \
.byte 8; \
.half shapeNo; \
.word hierarchy
/********************************************************************************/
/* seqSclShape */
/********************************************************************************/
#define seqSclShape(shapeNo, gfxlist, mode, scale) \
.byte _seqSclShape_id; \
.byte 12; \
.half mode*4096+shapeNo; \
.word gfxlist; \
.float scale
/********************************************************************************/
/* seqHmsMario */
/********************************************************************************/
#define seqHmsMario(shapeNo, code, strategy) \
.byte _seqStarring_id; \
.byte 12; \
.byte 0; \
.byte shapeNo; \
.word code; \
.word strategy
/********************************************************************************/
/* seqHmsLuigi */
/********************************************************************************/
#define seqHmsLuigi(shapeNo, code, strategy) \
.byte _seqStarring_id; \
.byte 12; \
.byte 1; \
.byte shapeNo; \
.word code; \
.word strategy
/********************************************************************************/
/* seqActor */
/********************************************************************************/
#define seqActor(shapeNo, posx, posy, posz, angx, angy, angz, code1, code2, flags, strategy) \
.byte _seqActor_id; \
.byte 24; \
.byte 0x1f; \
.byte shapeNo; \
.half posx; \
.half posy; \
.half posz; \
.half angx; \
.half angy; \
.half angz; \
.byte code1; \
.byte code2; \
.half flags; \
.word strategy
#define seqLevelActor(level, shapeNo, posx, posy, posz, angx, angy, angz, code1, code2, flags, strategy) \
.byte _seqActor_id; \
.byte 24; \
.byte level; \
.byte shapeNo; \
.half posx; \
.half posy; \
.half posz; \
.half angx; \
.half angy; \
.half angz; \
.byte code1; \
.byte code2; \
.half flags; \
.word strategy
/********************************************************************************/
/* seqPort */
/********************************************************************************/
#define seqGameClear(stage, scene, port) seqPort(0xf0,stage,scene,port)
#define seqGameOver(stage, scene, port) seqPort(0xf1,stage,scene,port)
#define seqViewRoof(stage, scene, port) seqPort(0xf2,stage,scene,port)
#define seqCourseOut(stage, scene, port) seqPort(0xf3,stage,scene,port)
#define seqPort(number, stage, scene, port) \
.byte _seqPort_id; \
.byte 8; \
.byte number; \
.byte stage; \
.byte scene; \
.byte port; \
.byte 0x00; \
.byte PAD
#define seqMidPort(number, stage, scene, port) \
.byte _seqPort_id; \
.byte 8; \
.byte number; \
.byte stage; \
.byte scene; \
.byte port; \
.byte 0x80; \
.byte PAD
/********************************************************************************/
/* seqBGPort */
/********************************************************************************/
#define seqBGPort(bgattr, stage, scene, port) \
.byte _seqBGPort_id; \
.byte 8; \
.byte bgattr; \
.byte stage; \
.byte scene; \
.byte port; \
.byte 0x00; \
.byte PAD
#define seqMidBGPort(bgattr, stage, scene, port) \
.byte _seqBGPort_id; \
.byte 8; \
.byte bgattr; \
.byte stage; \
.byte scene; \
.byte port; \
.byte 0x80; \
.byte PAD
/********************************************************************************/
/* seqConnect */
/********************************************************************************/
#define seqConnect(number, scene, offsetx, offsety, offsetz) \
.byte _seqConnect_id; \
.byte 12; \
.byte number; \
.byte scene; \
.half offsetx; \
.half offsety; \
.half offsetz; \
.half PAD
/********************************************************************************/
/* seqGround */
/********************************************************************************/
#define seqGround(address) \
.byte _seqGround_id; \
.byte 8; \
.half PAD; \
.word address
/********************************************************************************/
/* seqMapInfo */
/********************************************************************************/
#define seqMapInfo(address) \
.byte _seqMapInfo_id; \
.byte 8; \
.half PAD; \
.word address
/********************************************************************************/
/* seqAreaInfo */
/********************************************************************************/
#define seqAreaInfo(address) \
.byte _seqAreaInfo_id; \
.byte 8; \
.half PAD; \
.word address
/********************************************************************************/
/* seqTagInfo */
/********************************************************************************/
#define seqTagInfo(address) \
.byte _seqTagInfo_id; \
.byte 8; \
.half PAD; \
.word address
/*===============================================================================
*
* Scene control command
*/
/********************************************************************************/
/* seqOpenScene */
/********************************************************************************/
#define seqOpenScene(scene) \
.byte _seqOpenScene_id; \
.byte 4; \
.byte scene; \
.byte PAD
/********************************************************************************/
/* seqCloseScene */
/********************************************************************************/
#define seqCloseScene(scene) \
.byte _seqCloseScene_id; \
.byte 4; \
.byte scene; \
.byte PAD
/********************************************************************************/
/* seqEnterMario */
/********************************************************************************/
#define seqEnterMario(scene, angle, posx, posy, posz) \
.byte _seqEnterPlayer_id; \
.byte 12; \
.byte scene; \
.byte 0; \
.half angle; \
.half posx; \
.half posy; \
.half posz
/********************************************************************************/
/* seqEnterLuigi */
/********************************************************************************/
#define seqEnterLuigi(scene, angle, posx, posy, posz) \
.byte _seqEnterPlayer_id; \
.byte 12; \
.byte scene; \
.byte 1; \
.half angle; \
.half posx; \
.half posy; \
.half posz
/********************************************************************************/
/* seqExitMario */
/********************************************************************************/
#define seqExitMario() \
.byte _seqExitPlayer_id; \
.byte 4; \
.byte PAD; \
.byte 0
/********************************************************************************/
/* seqExitLuigi */
/********************************************************************************/
#define seqExitLuigi() \
.byte _seqExitPlayer_id; \
.byte 4; \
.byte PAD; \
.byte 1
/********************************************************************************/
/* seqExecStrategy */
/********************************************************************************/
#define seqExecStrategy() \
.byte _seqExecStrategy_id; \
.byte 4; \
.half PAD
/********************************************************************************/
/* seqWipe */
/********************************************************************************/
#define seqWipe(mode, nframes, r, g, b) \
.byte _seqWipe_id; \
.byte 8; \
.byte mode; \
.byte nframes; \
.byte r; \
.byte g; \
.byte b; \
.byte PAD
/********************************************************************************/
/* seqBlanking */
/********************************************************************************/
#define seqBlanking(blankSw) \
.byte _seqBlanking_id; \
.byte 4; \
.byte blankSw; \
.byte PAD
/********************************************************************************/
/* seqGamma */
/********************************************************************************/
#define seqGammaCorrection(gammaSw) \
.byte _seqGamma_id; \
.byte 4; \
.byte gammaSw; \
.byte PAD
/********************************************************************************/
/* seqEnvironment */
/********************************************************************************/
#define seqEnvironment(flags) \
.byte _seqEnvironment_id; \
.byte 4; \
.half flags
/********************************************************************************/
/* seqBlankColor */
/********************************************************************************/
#define seqBlankColor(color) \
.byte _seqBlankColor_id; \
.byte 4; \
.half color
/********************************************************************************/
/* seqMessage */
/********************************************************************************/
#define seqMessage(type, message) \
.byte _seqMessage_id; \
.byte 4; \
.byte type; \
.byte message
/********************************************************************************/
/* seqSetMusic */
/********************************************************************************/
#define seqSetMusic(type, music) \
.byte _seqSetMusic_id; \
.byte 8; \
.half type; \
.half music; \
.half PAD
/********************************************************************************/
/* seqPlayMusic */
/********************************************************************************/
#define seqPlayMusic(music, fade) \
.byte _seqPlayMusic_id; \
.byte 4; \
.half music
/********************************************************************************/
/* seqStopMusic */
/********************************************************************************/
#define seqStopMusic(fade) \
.byte _seqStopMusic_id; \
.byte 4; \
.half fade
/********************************************************************************/
/* seqWindZone */
/********************************************************************************/
#define seqWindZone(px1, pz1, px2, pz2, angle) \
.byte _seqWindZone_id; \
.byte 12; \
.half px1; \
.half pz1; \
.half px2; \
.half pz2; \
.half angle
/********************************************************************************/
/* seqWaterJet */
/********************************************************************************/
#define seqWaterJet(number, posx, posy, posz, force, koopa2) \
.byte _seqWaterJet_id; \
.byte 12; \
.byte number; \
.byte koopa2; \
.half posx; \
.half posy; \
.half posz; \
.half force
/********************************************************************************/
/* seqSetGameMode */
/********************************************************************************/
#define seqSetGameMode(type) \
.byte _seqGameMode_id; \
.byte 4; \
.byte 0; \
.byte type
/********************************************************************************/
/* seqGetGameMode */
/********************************************************************************/
#define seqGetGameMode(type) \
.byte _seqGameMode_id; \
.byte 4; \
.byte 1; \
.byte type
#endif
#endif