From c284afdaddde42695af3df1507f024758cf29ebf Mon Sep 17 00:00:00 2001 From: cuckydev Date: Thu, 31 Jan 2019 12:31:25 -0500 Subject: [PATCH 1/2] Mapping --- src/Game.cpp | 2 +- src/MiniMap.cpp | 22 +++++++++++++++++- src/MiniMap.h | 7 ++++++ src/Profile.cpp | 5 +++-- src/Stage.h | 2 ++ src/TextScr.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 93 insertions(+), 4 deletions(-) diff --git a/src/Game.cpp b/src/Game.cpp index 1b117843..e2f6a5e1 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -440,7 +440,7 @@ int ModeAction() ClearArmsData(); ClearItemData(); //ClearPermitStage(); - //StartMapping(); + StartMapping(); InitFlags(); InitBossLife(); 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/Profile.cpp b/src/Profile.cpp index e2a7d63e..a3222191 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" @@ -100,7 +101,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 @@ -148,7 +149,7 @@ bool InitializeGame() ClearArmsData(); ClearItemData(); //ClearPermitStage(); - //StartMapping(); + StartMapping(); InitFlags(); if (!TransferStage(13, 200, 10, 8)) return false; 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 afa9d909..cb137721 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" @@ -670,6 +671,18 @@ int TextScriptProc() SubArmsData(z); gTS.p_read += 8; } + 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')) { z = GetTextScriptNo(gTS.p_read + 4); @@ -859,6 +872,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); @@ -942,6 +990,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('D','N','P')) { z = GetTextScriptNo(gTS.p_read + 4); From 113c3fc124268633663c454f465459ad1c8172a3 Mon Sep 17 00:00:00 2001 From: cuckydev Date: Thu, 31 Jan 2019 13:01:09 -0500 Subject: [PATCH 2/2] Made SFX loading more similar to the original --- src/GenericLoad.cpp | 30 ++++++++++++++++++++++++++++++ src/PixTone.cpp | 8 ++++++++ src/Sound.cpp | 32 -------------------------------- 3 files changed, 38 insertions(+), 32 deletions(-) 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/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/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; }