diff --git a/src/Game.cpp b/src/Game.cpp index acdf9811..cd41029e 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -441,7 +441,7 @@ int ModeAction() ClearArmsData(); ClearItemData(); ClearPermitStage(); - //StartMapping(); + StartMapping(); InitFlags(); InitBossLife(); diff --git a/src/GenericLoad.cpp b/src/GenericLoad.cpp index 65df95f7..0cde4c67 100644 --- a/src/GenericLoad.cpp +++ b/src/GenericLoad.cpp @@ -1,5 +1,7 @@ #include "CommonDefines.h" #include "Draw.h" +#include "Sound.h" +#include "PixTone.h" bool LoadGenericData() { @@ -51,6 +53,34 @@ bool LoadGenericData() MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_SPRITESET_1); MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_SPRITESET_2); MakeSurface_Generic(WINDOW_WIDTH, 240, SURFACE_ID_CREDIT_CAST); + + char path[0x100]; + uint8_t *buf = nullptr; + size_t len; + + for (unsigned int n = 0; n < SOUND_NO; n++) + { + sprintf(path, "%2.2X.pxt", n); + + if (LoadPxt(path, &buf, &len)) + { + lpSECONDARYBUFFER[n] = new SOUNDBUFFER(len); + + uint8_t *sBuf; + size_t sLen; + lpSECONDARYBUFFER[n]->Lock(&sBuf, &sLen); + memcpy(sBuf, buf, sLen); + lpSECONDARYBUFFER[n]->Unlock(); + lpSECONDARYBUFFER[n]->SetFrequency(22050); + } + + //Free buffer, we're done with it + if (buf) + { + free(buf); + buf = nullptr; + } + } return true; } } diff --git a/src/MiniMap.cpp b/src/MiniMap.cpp index 1547c06d..ea2e9ea3 100644 --- a/src/MiniMap.cpp +++ b/src/MiniMap.cpp @@ -1,3 +1,5 @@ +#include + #include "WindowsWrapper.h" #include "CommonDefines.h" @@ -7,9 +9,12 @@ #include "Game.h" #include "KeyControl.h" #include "Map.h" +#include "Stage.h" #include "MyChar.h" #include "Main.h" +int8_t gMapping[0x80]; + void WriteMiniMapLine(int line) { RECT rcLevel[4]; @@ -170,4 +175,19 @@ int MiniMapLoop() } return 1; -} \ No newline at end of file +} + +bool IsMapping() +{ + return gMapping[gStageNo] != 0; +} + +void StartMapping() +{ + memset(gMapping, 0, 0x80u); +} + +void SetMapping(int a) +{ + gMapping[a] = 1; +} diff --git a/src/MiniMap.h b/src/MiniMap.h index 589beae2..b998c8ca 100644 --- a/src/MiniMap.h +++ b/src/MiniMap.h @@ -1,2 +1,9 @@ #pragma once +#include + +extern int8_t gMapping[0x80]; + int MiniMapLoop(); +bool IsMapping(); +void StartMapping(); +void SetMapping(int a); diff --git a/src/PixTone.cpp b/src/PixTone.cpp index 7cd05e14..46377ffc 100644 --- a/src/PixTone.cpp +++ b/src/PixTone.cpp @@ -10,6 +10,7 @@ #include "PixTone.h" int8_t gWaveModelTable[6][0x100]; +bool wave_tables_made; void MakeWaveTables() { @@ -72,6 +73,13 @@ double fgetv(FILE *fp) // Load a numeric value from text file; one per line. bool MakePixelWaveData(const std::vector& pxtData, uint8_t *data) { + //Make wave tables if not created already + if (!wave_tables_made) + { + MakeWaveTables(); + wave_tables_made = true; + } + //Get some envelope stuff char envelopeTable[0x100]; memset(envelopeTable, 0, sizeof(envelopeTable)); diff --git a/src/Profile.cpp b/src/Profile.cpp index 0537dceb..23b345c6 100644 --- a/src/Profile.cpp +++ b/src/Profile.cpp @@ -9,6 +9,7 @@ #include "Fade.h" #include "ArmsItem.h" #include "Flags.h" +#include "MiniMap.h" #include "MyChar.h" #include "Frame.h" #include "ValueView.h" @@ -101,7 +102,7 @@ bool LoadProfile(char *name) memcpy(gArmsData, profile.arms, sizeof(gArmsData)); memcpy(gItemData, profile.items, sizeof(gItemData)); //memcpy(gPermitStage, profile.permitstage, 0x40u); - //memcpy(gMapping, profile.permit_mapping, 0x80u); + memcpy(gMapping, profile.permit_mapping, 0x80); memcpy(gFlagNPC, profile.flags, 1000); //Load stage @@ -149,7 +150,7 @@ bool InitializeGame() ClearArmsData(); ClearItemData(); ClearPermitStage(); - //StartMapping(); + StartMapping(); InitFlags(); if (!TransferStage(13, 200, 10, 8)) return false; diff --git a/src/Sound.cpp b/src/Sound.cpp index 39c0734e..36be1577 100644 --- a/src/Sound.cpp +++ b/src/Sound.cpp @@ -268,38 +268,6 @@ bool InitDirectSound() //Start organya StartOrganya(); - - //Load sound effects - MakeWaveTables(); - - char path[0x100]; - uint8_t *buf = nullptr; - size_t len; - - for (unsigned int n = 0; n < SOUND_NO; n++) - { - sprintf(path, "%2.2X.pxt", n); - - if (LoadPxt(path, &buf, &len)) - { - lpSECONDARYBUFFER[n] = new SOUNDBUFFER(len); - - uint8_t *sBuf; - size_t sLen; - lpSECONDARYBUFFER[n]->Lock(&sBuf, &sLen); - memcpy(sBuf, buf, sLen); - lpSECONDARYBUFFER[n]->Unlock(); - lpSECONDARYBUFFER[n]->SetFrequency(22050); - } - - //Free buffer, we're done with it - if (buf) - { - free(buf); - buf = nullptr; - } - } - return true; } diff --git a/src/Stage.h b/src/Stage.h index ded03930..2c16b134 100644 --- a/src/Stage.h +++ b/src/Stage.h @@ -12,6 +12,8 @@ struct STAGE_TABLE char name[0x20]; }; +extern int gStageNo; + bool TransferStage(int no, int w, int x, int y); void ChangeMusic(int no); void ReCallMusic(); diff --git a/src/TextScr.cpp b/src/TextScr.cpp index 9d98a223..54c2e1d8 100644 --- a/src/TextScr.cpp +++ b/src/TextScr.cpp @@ -16,6 +16,7 @@ #include "Flags.h" #include "Profile.h" #include "Map.h" +#include "MiniMap.h" #include "MapName.h" #include "KeyControl.h" #include "NpChar.h" @@ -677,6 +678,17 @@ int TextScriptProc() y = GetTextScriptNo(gTS.p_read + 9); AddPermitStage(x, y); gTS.p_read += 13; + else if (IS_COMMAND('M','P','+')) + { + x = GetTextScriptNo(gTS.p_read + 4); + SetMapping(x); + gTS.p_read += 8; + } + else if (IS_COMMAND('U','N','I')) + { + z = GetTextScriptNo(gTS.p_read + 4); + ChangeMyUnit(z); + gTS.p_read += 8; } else if (IS_COMMAND('T','R','A')) { @@ -867,6 +879,41 @@ int TextScriptProc() else gTS.p_read += 13; } + else if (IS_COMMAND('U','N','J')) + { + x = GetTextScriptNo(gTS.p_read + 4); + z = GetTextScriptNo(gTS.p_read + 9); + if (GetUnitMyChar() == x) + JumpTextScript(z); + else + gTS.p_read += 13; + } + else if (IS_COMMAND('E','C','J')) + { + x = GetTextScriptNo(gTS.p_read + 4); + z = GetTextScriptNo(gTS.p_read + 9); + if (GetNpCharAlive(x)) + JumpTextScript(z); + else + gTS.p_read += 13; + } + else if (IS_COMMAND('E','C','J')) + { + x = GetTextScriptNo(gTS.p_read + 4); + z = GetTextScriptNo(gTS.p_read + 9); + if (IsNpCharCode(x)) + JumpTextScript(z); + else + gTS.p_read += 13; + } + else if (IS_COMMAND('M','P','J')) + { + x = GetTextScriptNo(gTS.p_read + 4); + if (IsMapping()) + JumpTextScript(x); + else + gTS.p_read += 8; + } else if (IS_COMMAND('S','S','S')) { x = GetTextScriptNo(gTS.p_read + 4); @@ -950,6 +997,17 @@ int TextScriptProc() ReCallMusic(); gTS.p_read += 4; } + else if (IS_COMMAND('M','L','P')) + { + gTS.p_read += 4; + bExit = true; + + int tscRet = MiniMapLoop(); + if (tscRet == 0) + return 0; + if (tscRet == 2) + return 2; + } else if (IS_COMMAND('S','L','P')) { bExit = true;