Path: blob/main/RSDKv4/Scene.hpp
817 views
#ifndef SCENE_H1#define SCENE_H23#define LAYER_COUNT (9)4#define DEFORM_STORE (256)5#define DEFORM_SIZE (320)6#define DEFORM_COUNT (DEFORM_STORE + DEFORM_SIZE)7#define PARALLAX_COUNT (0x100)89#define TILE_COUNT (0x400)10#define TILE_SIZE (0x10)11#define CHUNK_SIZE (0x80)12#define TILE_DATASIZE (TILE_SIZE * TILE_SIZE)13#define TILESET_SIZE (TILE_COUNT * TILE_DATASIZE)1415#define TILELAYER_CHUNK_W (0x100)16#define TILELAYER_CHUNK_H (0x100)17#define TILELAYER_CHUNK_COUNT (TILELAYER_CHUNK_W * TILELAYER_CHUNK_H)18#define TILELAYER_LINESCROLL_COUNT (TILELAYER_CHUNK_H * CHUNK_SIZE)1920#define CHUNKTILE_COUNT (0x200 * (8 * 8))2122#define CPATH_COUNT (2)2324enum StageListNames {25STAGELIST_PRESENTATION,26STAGELIST_REGULAR,27STAGELIST_BONUS,28STAGELIST_SPECIAL,29STAGELIST_MAX, // StageList size30};3132enum TileLayerTypes {33LAYER_NOSCROLL,34LAYER_HSCROLL,35LAYER_VSCROLL,36LAYER_3DFLOOR,37LAYER_3DSKY,38};3940enum StageModes {41STAGEMODE_LOAD,42STAGEMODE_NORMAL,43STAGEMODE_PAUSED,44STAGEMODE_FROZEN,4546#if !RETRO_REV0047STAGEMODE_2P,48#endif4950STAGEMODE_NORMAL_STEP,51STAGEMODE_PAUSED_STEP,52STAGEMODE_FROZEN_STEP,5354#if !RETRO_REV0055STAGEMODE_2P_STEP,56#endif57};5859enum TileInfo {60TILEINFO_INDEX,61TILEINFO_DIRECTION,62TILEINFO_VISUALPLANE,63TILEINFO_SOLIDITYA,64TILEINFO_SOLIDITYB,65TILEINFO_FLAGSA,66TILEINFO_ANGLEA,67TILEINFO_FLAGSB,68TILEINFO_ANGLEB,69};7071enum DeformationModes {72DEFORM_FG,73DEFORM_FG_WATER,74DEFORM_BG,75DEFORM_BG_WATER,76};7778enum CameraStyles {79CAMERASTYLE_FOLLOW,80CAMERASTYLE_EXTENDED,81CAMERASTYLE_EXTENDED_OFFSET_L,82CAMERASTYLE_EXTENDED_OFFSET_R,83CAMERASTYLE_HLOCKED,84};8586struct SceneInfo {87char name[0x40];88char folder[0x40];89char id[0x40];90bool highlighted;91};9293struct CollisionMasks {94sbyte floorMasks[TILE_COUNT * TILE_SIZE];95sbyte lWallMasks[TILE_COUNT * TILE_SIZE];96sbyte rWallMasks[TILE_COUNT * TILE_SIZE];97sbyte roofMasks[TILE_COUNT * TILE_SIZE];98uint angles[TILE_COUNT];99byte flags[TILE_COUNT];100};101102struct TileLayer {103ushort tiles[TILELAYER_CHUNK_COUNT];104byte lineScroll[TILELAYER_LINESCROLL_COUNT];105int parallaxFactor;106int scrollSpeed;107int scrollPos;108int angle;109int xpos;110int ypos;111int zpos;112int deformationOffset;113int deformationOffsetW;114byte type;115byte xsize;116byte ysize;117};118119struct LineScroll {120int parallaxFactor[PARALLAX_COUNT];121int scrollSpeed[PARALLAX_COUNT];122int scrollPos[PARALLAX_COUNT];123int linePos[PARALLAX_COUNT];124int deform[PARALLAX_COUNT];125byte entryCount;126};127128struct Tiles128x128 {129int gfxDataPos[CHUNKTILE_COUNT];130ushort tileIndex[CHUNKTILE_COUNT];131byte direction[CHUNKTILE_COUNT];132byte visualPlane[CHUNKTILE_COUNT];133byte collisionFlags[CPATH_COUNT][CHUNKTILE_COUNT];134};135136extern int stageListCount[STAGELIST_MAX];137extern char stageListNames[STAGELIST_MAX][0x20];138extern SceneInfo stageList[STAGELIST_MAX][0x100];139140extern int stageMode;141142extern int cameraTarget;143extern int cameraStyle;144extern int cameraEnabled;145extern int cameraAdjustY;146extern int xScrollOffset;147extern int yScrollOffset;148extern int cameraXPos;149extern int cameraYPos;150extern int cameraShift;151extern int cameraLockedY;152extern int cameraShakeX;153extern int cameraShakeY;154extern int cameraLag;155extern int cameraLagStyle;156157extern int curXBoundary1;158extern int newXBoundary1;159extern int curYBoundary1;160extern int newYBoundary1;161extern int curXBoundary2;162extern int curYBoundary2;163extern int waterLevel;164extern int waterDrawPos;165extern int newXBoundary2;166extern int newYBoundary2;167168extern int SCREEN_SCROLL_LEFT;169extern int SCREEN_SCROLL_RIGHT;170#define SCREEN_SCROLL_UP ((SCREEN_YSIZE / 2) - 16)171#define SCREEN_SCROLL_DOWN ((SCREEN_YSIZE / 2) + 16)172173extern int lastXSize;174extern int lastYSize;175176extern bool pauseEnabled;177extern bool timeEnabled;178extern bool debugMode;179extern int frameCounter;180extern int stageMilliseconds;181extern int stageSeconds;182extern int stageMinutes;183184// Category and Scene IDs185extern int activeStageList;186extern int stageListPosition;187extern char currentStageFolder[0x100];188extern int actID;189190extern char titleCardText[0x100];191extern byte titleCardWord2;192193extern byte activeTileLayers[4];194extern byte tLayerMidPoint;195extern TileLayer stageLayouts[LAYER_COUNT];196197extern int bgDeformationData0[DEFORM_COUNT];198extern int bgDeformationData1[DEFORM_COUNT];199extern int bgDeformationData2[DEFORM_COUNT];200extern int bgDeformationData3[DEFORM_COUNT];201202extern LineScroll hParallax;203extern LineScroll vParallax;204205extern Tiles128x128 tiles128x128;206extern CollisionMasks collisionMasks[2];207208extern byte tilesetGFXData[TILESET_SIZE];209210extern ushort tile3DFloorBuffer[0x100 * 0x100];211extern bool drawStageGFXHQ;212213void InitFirstStage();214void InitStartingStage(int list, int stage, int player);215void ProcessStage();216217void ProcessParallaxAutoScroll();218219void ResetBackgroundSettings();220inline void ResetCurrentStageFolder() { strcpy(currentStageFolder, ""); }221inline bool CheckCurrentStageFolder(int stage)222{223if (strcmp(currentStageFolder, stageList[activeStageList][stage].folder) == 0) {224return true;225}226else {227strcpy(currentStageFolder, stageList[activeStageList][stage].folder);228return false;229}230}231232void LoadStageFiles();233int LoadActFile(const char *ext, int stageID, FileInfo *info);234int LoadStageFile(const char *filePath, int stageID, FileInfo *info);235236void LoadActLayout();237void LoadStageBackground();238void LoadStageChunks();239void LoadStageCollisions();240void LoadStageGIFFile(int stageID);241242inline void Init3DFloorBuffer(int layerID)243{244for (int y = 0; y < TILELAYER_CHUNK_H; ++y) {245for (int x = 0; x < TILELAYER_CHUNK_W; ++x) {246int c = stageLayouts[layerID].tiles[(x >> 3) + (y >> 3 << 8)] << 6;247int tx = x & 7;248tile3DFloorBuffer[x + (y << 8)] = c + tx + ((y & 7) << 3);249}250}251}252253inline void Copy16x16Tile(ushort dest, ushort src)254{255byte *destPtr = &tilesetGFXData[TILELAYER_CHUNK_W * dest];256byte *srcPtr = &tilesetGFXData[TILELAYER_CHUNK_W * src];257int cnt = TILE_DATASIZE;258while (cnt--) *destPtr++ = *srcPtr++;259}260261void SetLayerDeformation(int selectedDef, int waveLength, int waveWidth, int waveType, int YPos, int waveSize);262263void SetPlayerScreenPosition(Entity *target);264void SetPlayerScreenPositionCDStyle(Entity *target);265void SetPlayerHLockedScreenPosition(Entity *target);266void SetPlayerLockedScreenPosition(Entity *target);267void SetPlayerScreenPositionFixed(Entity *target);268269#endif // !SCENE_H270271272