/******************************************************************************** maplang.h: Ultra 64 MARIO Brothers include file Copyright (c) 1995 Nintendo co., ltd. All rights reserved October 24, 1995 ********************************************************************************/ #ifndef MAPLANG_H #define MAPLANG_H #define MAP_SYSTEM_STORAGES 2 #define MAP_STORAGE_CAMERA 0 #define MAP_STORAGE_LIGHT 1 #ifndef RGBA16 #define RGBA16(r,g,b,a) (((r)<<11) | ((g)<<6) | ((b)<<1) | (a)) #endif /********************************************************************************/ /* Map language command ID. */ /********************************************************************************/ #define _hmsExec_id 0 #define _hmsExit_id 1 #define _hmsJump_id 2 #define _hmsReturn_id 3 #define _hmsBegin_id 4 #define _hmsEnd_id 5 #define _hmsStorage_id 6 #define _hmsPutFlag_id 7 #define _hmsScene_id 8 #define _hmsOrtho_id 9 #define _hmsPersp_id 10 #define _hmsGroup_id 11 #define _hmsLayer_id 12 #define _hmsLod_id 13 #define _hmsSelect_id 14 #define _hmsCamera_id 15 #define _hmsCoord_id 16 #define _hmsTrans_id 17 #define _hmsRotate_id 18 #define _hmsJoint_id 19 #define _hmsBboard_id 20 #define _hmsGfx_id 21 #define _hmsShadow_id 22 #define _hmsObject_id 23 #define _hmsCProg_id 24 #define _hmsClear_id 25 #define _hmsPrint_id 26 #define _hmsBranch_id 27 #define _hmsSucker_id 28 #define _hmsScale_id 29 #define _hmsMatrix_id 30 #define _hmsArea_id 31 #define _hmsHeader_id 32 /********************************************************************************/ /* Map language basic macro. */ /********************************************************************************/ #define _msCmd(cmd,var,dat) ((ulong)(cmd)<<24 | (ulong)(var)<<16 | ((ulong)(dat)&0xffff)) #define _msPac(da1,da2) (((ulong)(da1)&0xffff)<<16 | ((ulong)(da2)&0xffff)) #define _msAdr(adr) ((ulong)(adr)) #define _msU32(dat) ((ulong)(dat*65536.0f)) /********************************************************************************/ /* Map hierarcky command macro. */ /********************************************************************************/ #define hmsExec(addr) _msCmd(_hmsExec_id ,0,0),_msAdr(addr), #define hmsExit() _msCmd(_hmsExit_id ,0,0), #define hmsJump(addr) _msCmd(_hmsJump_id ,0,0),_msAdr(addr), #define hmsCall(addr) _msCmd(_hmsJump_id ,1,0),_msAdr(addr), #define hmsReturn() _msCmd(_hmsReturn_id ,0,0), #define hmsBegin() _msCmd(_hmsBegin_id ,0,0), #define hmsEnd() _msCmd(_hmsEnd_id ,0,0), #define hmsStorage(n) _msCmd(_hmsStorage_id,0,n), /* Scene node */ #define hmsScene(centh, centv, ofsh, ofsv, nstrages) \ _msCmd(_hmsScene_id, 0, nstrages), \ _msPac(centh, centv), \ _msPac(ofsh , ofsv ), #define hmsOrtho(scale) \ _msCmd(_hmsOrtho_id, 0, scale), \ #define hmsPersp(angle, near, far) \ _msCmd(_hmsPersp_id, 0, angle), \ _msPac(near, far), #define hmsPerspective(angle, near, far, proc) \ _msCmd(_hmsPersp_id, 1, angle), \ _msPac(near, far), \ _msAdr(proc), /* Group node */ #define hmsGroup() \ _msCmd(_hmsGroup_id, 0, 0), /* Group node */ #define hmsArea(x1, y1, z1, x2, y2, z2) \ _msCmd(_hmsArea_id, 0, 0), \ _msPac(x1, y1), \ _msPac(z1, x2), \ _msPac(y2, z2), /* Layer node */ #define hmsLayer(zbuf) \ _msCmd(_hmsLayer_id, zbuf, 0), /* LOD node */ #define hmsLOD(near, far) \ _msCmd(_hmsLod_id, 0, 0), \ _msPac(near, far), /* Select node */ #define hmsSelect(code, proc) \ _msCmd(_hmsSelect_id, 0, code), \ _msAdr(proc), /* Camera node */ #define hmsCamera(mode, posx, posy, posz, lookx, looky, lookz, proc) \ _msCmd(_hmsCamera_id, 0, mode), \ _msPac(posx , posy ), \ _msPac(posz , lookx), \ _msPac(looky, lookz), \ _msAdr(proc), /* Coord node */ #define hmsCoord(px,py,pz,ax,ay,az) \ _msCmd(_hmsCoord_id, 0x00, 0), \ _msPac(px,py), \ _msPac(pz,ax), \ _msPac(ay,az), #define hmsCoordT(px,py,pz) \ _msCmd(_hmsCoord_id, 0x10,px), \ _msPac(py,pz), #define hmsCoordR(ax,ay,az) \ _msCmd(_hmsCoord_id, 0x20,ax), \ _msPac(ay,az), #define hmsCoordY(ay) \ _msCmd(_hmsCoord_id, 0x30,ay), #define hmsGfxCoord(mode,gfx,px,py,pz,ax,ay,az) \ _msCmd(_hmsCoord_id, 0x80+mode, 0), \ _msPac(px,py), \ _msPac(pz,ax), \ _msPac(ay,az), \ _msAdr(gfx), #define hmsGfxCoordT(mode,gfx,px,py,pz) \ _msCmd(_hmsCoord_id, 0x90+mode,px), \ _msPac(py,pz), \ _msAdr(gfx), #define hmsGfxCoordR(mode,gfx,ax,ay,az) \ _msCmd(_hmsCoord_id, 0xA0+mode,ax), \ _msPac(ay,az), \ _msAdr(gfx), #define hmsGfxCoordY(mode,gfx,ay) \ _msCmd(_hmsCoord_id, 0xB0+mode,ay), \ _msAdr(gfx), /* Trans node */ #define hmsTrans(px,py,pz) \ _msCmd(_hmsTrans_id, 0x00, px), \ _msPac(py,pz), #define hmsGfxTrans(mode,gfx,px,py,pz) \ _msCmd(_hmsTrans_id, 0x80+mode, px), \ _msPac(py,pz), \ _msAdr(gfx), /* Rotate node */ #define hmsRotate(ax,ay,az) \ _msCmd(_hmsRotate_id, 0x00, ax), \ _msPac(ay,az), #define hmsGfxRotate(mode,gfx,ax,ay,az) \ _msCmd(_hmsRotate_id, 0x80+mode, ax), \ _msPac(ay,az), \ _msAdr(gfx), /* Scale node */ #define hmsScale(scaling) \ _msCmd(_hmsScale_id, 0x00, 0), \ _msU32(scaling), #define hmsGfxScale(mode,gfx,scaling) \ _msCmd(_hmsScale_id, 0x80+mode, 0), \ _msU32(scaling), \ _msAdr(gfx), /* Matrix node */ #define hmsMatrix(matrix) \ _msCmd(_hmsMatrix_id, 0x00, 0), \ _msAdr(matrix), #define hmsGfxMatrix(mode,gfx,matrix) \ _msCmd(_hmsMatrix_id, 0x80+mode, 0), \ _msAdr(matrix), \ _msAdr(gfx), /* Joint node */ #define hmsJoint(mode,gfx,px,py,pz) \ _msCmd(_hmsJoint_id, mode, px), \ _msPac(py,pz), \ _msAdr(gfx), /* Bboard node */ #define hmsBboard(px,py,pz) \ _msCmd(_hmsBboard_id, 0x00, px), \ _msPac(py,pz), #define hmsGfxBboard(mode,gfx,px,py,pz) \ _msCmd(_hmsBboard_id, 0x80+mode, px), \ _msPac(py,pz), \ _msAdr(gfx), /* Gfx node */ #define hmsGfx(mode,gfx) \ _msCmd(_hmsGfx_id, mode, 0), \ _msAdr(gfx), /* Shape header node */ #define hmsHeader(radius) \ _msCmd(_hmsHeader_id, 0, radius), /* Shadow node */ #define hmsShadowOn(size) \ _msCmd(_hmsShadow_id, 0, 1), \ _msPac(128, size), #define hmsShadow(size, level, flag) \ _msCmd(_hmsShadow_id, 0, flag), \ _msPac(level, size), /* Object node */ #define hmsObject() \ _msCmd(_hmsObject_id, 0, 0), /* CProg node */ #define hmsCProg(code, proc) \ _msCmd(_hmsCProg_id, 0, code), \ _msAdr(proc), /* Clear node */ #define hmsClear(color, proc) \ _msCmd(_hmsClear_id, 0, color), \ _msAdr(proc), /* Print node */ #define hmsPrint(string, width, height, length) \ _msCmd(_hmsPrint_id, length, (width)*256+(height)), \ _msAdr(string), /* sucker node */ #define hmsSucker(posx, posy, posz, code, proc) \ _msCmd(_hmsSucker_id, code, posx), \ _msPac(posy,posz), \ _msAdr(proc), #define hmsPutFlags(flag) _msCmd(_hmsPutFlag_id, 0, flag), #define hmsSetFlags(flag) _msCmd(_hmsPutFlag_id, 1, flag), #define hmsClrFlags(flag) _msCmd(_hmsPutFlag_id, 2, flag), #define hmsBranch(storage) \ _msCmd(_hmsBranch_id, 0, storage), /********************************************************************************/ /* Map Language command macro. */ /********************************************************************************/ typedef unsigned long Hierarchy, *HierarchyPtr; extern MapNode *ConstructHierarchyMap(ArenaPtr arena, HierarchyPtr hierarcky); #endif