CSE2-tweaks/src/GenericLoad.cpp

363 lines
12 KiB
C++

// THIS IS DECOMPILED PROPRIETARY CODE - USE AT YOUR OWN RISK.
//
// The original code belongs to Daisuke "Pixel" Amaya.
//
// Modifications and custom code are under the MIT licence.
// See LICENCE.txt for details.
#include "GenericLoad.h"
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include "WindowsWrapper.h"
#include "CommonDefines.h"
#include "Draw.h"
#include "Backends/Misc.h"
#include "Ending.h"
#ifdef EXTRA_SOUND_FORMATS
#include "ExtraSoundFormats.h"
#endif
#include "Main.h"
#include "PixTone.h"
#include "Sound.h"
enum
{
SOUND_TYPE_PIXTONE,
SOUND_TYPE_OTHER
};
static const struct
{
int slot;
const char *path;
int type;
} ptp_table[] = {
// TODO - Name the files
{1, "PixTone/001.pxt", SOUND_TYPE_PIXTONE},
{2, "PixTone/002.pxt", SOUND_TYPE_PIXTONE},
{3, "PixTone/003.pxt", SOUND_TYPE_PIXTONE},
{4, "PixTone/004.pxt", SOUND_TYPE_PIXTONE},
{5, "PixTone/005.pxt", SOUND_TYPE_PIXTONE},
{6, "PixTone/006.pxt", SOUND_TYPE_PIXTONE},
{7, "PixTone/007.pxt", SOUND_TYPE_PIXTONE},
{11, "PixTone/011.pxt", SOUND_TYPE_PIXTONE},
{12, "PixTone/012.pxt", SOUND_TYPE_PIXTONE},
{14, "PixTone/014.pxt", SOUND_TYPE_PIXTONE},
{15, "PixTone/015.pxt", SOUND_TYPE_PIXTONE},
{16, "PixTone/016.pxt", SOUND_TYPE_PIXTONE},
{17, "PixTone/017.pxt", SOUND_TYPE_PIXTONE},
{18, "PixTone/018.pxt", SOUND_TYPE_PIXTONE},
{20, "PixTone/020.pxt", SOUND_TYPE_PIXTONE},
{21, "PixTone/021.pxt", SOUND_TYPE_PIXTONE},
{22, "PixTone/022.pxt", SOUND_TYPE_PIXTONE},
{23, "PixTone/023.pxt", SOUND_TYPE_PIXTONE},
{24, "PixTone/024.pxt", SOUND_TYPE_PIXTONE},
{25, "PixTone/025.pxt", SOUND_TYPE_PIXTONE},
{26, "PixTone/026.pxt", SOUND_TYPE_PIXTONE},
{27, "PixTone/027.pxt", SOUND_TYPE_PIXTONE},
{28, "PixTone/028.pxt", SOUND_TYPE_PIXTONE},
{29, "PixTone/029.pxt", SOUND_TYPE_PIXTONE},
{30, "PixTone/030.pxt", SOUND_TYPE_PIXTONE},
{31, "PixTone/031.pxt", SOUND_TYPE_PIXTONE},
{32, "PixTone/032.pxt", SOUND_TYPE_PIXTONE},
{33, "PixTone/033.pxt", SOUND_TYPE_PIXTONE},
{34, "PixTone/034.pxt", SOUND_TYPE_PIXTONE},
{35, "PixTone/035.pxt", SOUND_TYPE_PIXTONE},
{37, "PixTone/037.pxt", SOUND_TYPE_PIXTONE},
{38, "PixTone/038.pxt", SOUND_TYPE_PIXTONE},
{39, "PixTone/039.pxt", SOUND_TYPE_PIXTONE},
{40, "PixTone/040.pxt", SOUND_TYPE_PIXTONE},
{41, "PixTone/041.pxt", SOUND_TYPE_PIXTONE},
{42, "PixTone/042.pxt", SOUND_TYPE_PIXTONE},
{43, "PixTone/043.pxt", SOUND_TYPE_PIXTONE},
{44, "PixTone/044.pxt", SOUND_TYPE_PIXTONE},
{45, "PixTone/045.pxt", SOUND_TYPE_PIXTONE},
{46, "PixTone/046.pxt", SOUND_TYPE_PIXTONE},
{47, "PixTone/047.pxt", SOUND_TYPE_PIXTONE},
{48, "PixTone/048.pxt", SOUND_TYPE_PIXTONE},
{49, "PixTone/049.pxt", SOUND_TYPE_PIXTONE},
{50, "PixTone/050.pxt", SOUND_TYPE_PIXTONE},
{51, "PixTone/051.pxt", SOUND_TYPE_PIXTONE},
{52, "PixTone/052.pxt", SOUND_TYPE_PIXTONE},
{53, "PixTone/053.pxt", SOUND_TYPE_PIXTONE},
{54, "PixTone/054.pxt", SOUND_TYPE_PIXTONE},
{55, "PixTone/055.pxt", SOUND_TYPE_PIXTONE},
{56, "PixTone/056.pxt", SOUND_TYPE_PIXTONE},
{57, "PixTone/057.pxt", SOUND_TYPE_PIXTONE},
{58, "PixTone/058.pxt", SOUND_TYPE_PIXTONE},
{59, "PixTone/059.pxt", SOUND_TYPE_PIXTONE},
{60, "PixTone/060.pxt", SOUND_TYPE_PIXTONE},
{61, "PixTone/061.pxt", SOUND_TYPE_PIXTONE},
{62, "PixTone/062.pxt", SOUND_TYPE_PIXTONE},
{63, "PixTone/063.pxt", SOUND_TYPE_PIXTONE},
{64, "PixTone/064.pxt", SOUND_TYPE_PIXTONE},
{65, "PixTone/065.pxt", SOUND_TYPE_PIXTONE},
{70, "PixTone/070.pxt", SOUND_TYPE_PIXTONE},
{71, "PixTone/071.pxt", SOUND_TYPE_PIXTONE},
{72, "PixTone/072.pxt", SOUND_TYPE_PIXTONE},
{100, "PixTone/100.pxt", SOUND_TYPE_PIXTONE},
{101, "PixTone/101.pxt", SOUND_TYPE_PIXTONE},
{102, "PixTone/102.pxt", SOUND_TYPE_PIXTONE},
{103, "PixTone/103.pxt", SOUND_TYPE_PIXTONE},
{104, "PixTone/104.pxt", SOUND_TYPE_PIXTONE},
{105, "PixTone/105.pxt", SOUND_TYPE_PIXTONE},
{106, "PixTone/106.pxt", SOUND_TYPE_PIXTONE},
{107, "PixTone/107.pxt", SOUND_TYPE_PIXTONE},
{108, "PixTone/108.pxt", SOUND_TYPE_PIXTONE},
{109, "PixTone/109.pxt", SOUND_TYPE_PIXTONE},
{110, "PixTone/110.pxt", SOUND_TYPE_PIXTONE},
{111, "PixTone/111.pxt", SOUND_TYPE_PIXTONE},
{112, "PixTone/112.pxt", SOUND_TYPE_PIXTONE},
{113, "PixTone/113.pxt", SOUND_TYPE_PIXTONE},
{114, "PixTone/114.pxt", SOUND_TYPE_PIXTONE},
{115, "PixTone/115.pxt", SOUND_TYPE_PIXTONE},
{116, "PixTone/116.pxt", SOUND_TYPE_PIXTONE},
{117, "PixTone/117.pxt", SOUND_TYPE_PIXTONE},
{150, "PixTone/150.pxt", SOUND_TYPE_PIXTONE},
{151, "PixTone/151.pxt", SOUND_TYPE_PIXTONE},
{152, "PixTone/152.pxt", SOUND_TYPE_PIXTONE},
{153, "PixTone/153.pxt", SOUND_TYPE_PIXTONE},
{154, "PixTone/154.pxt", SOUND_TYPE_PIXTONE},
{155, "PixTone/155.pxt", SOUND_TYPE_PIXTONE}
};
// Original decompiled from `PTone103.exe` - has since been modified
static BOOL LoadPixToneFile(const char *filename, PIXTONEPARAMETER *pixtone_parameters)
{
BOOL success = FALSE;
FILE *fp = fopen(filename, "r");
if (fp != NULL)
{
fseek(fp, 0, SEEK_END);
const size_t file_size = ftell(fp);
rewind(fp);
char *file_buffer = (char*)malloc(file_size);
fread(file_buffer, 1, file_size, fp);
fclose(fp);
char *p = file_buffer;
for (unsigned int i = 0; i < 4; ++i)
{
float freq;
int increment;
sscanf(p, "use :%d\n%n", &pixtone_parameters[i].use, &increment);
p += increment;
sscanf(p, "size :%d\n%n", &pixtone_parameters[i].size, &increment);
p += increment;
sscanf(p, "main_model :%d\n%n", &pixtone_parameters[i].oMain.model, &increment);
p += increment;
sscanf(p, "main_freq :%f\n%n", &freq, &increment);
p += increment;
pixtone_parameters[i].oMain.num = freq;
sscanf(p, "main_top :%d\n%n", &pixtone_parameters[i].oMain.top, &increment);
p += increment;
sscanf(p, "main_offset :%d\n%n", &pixtone_parameters[i].oMain.offset, &increment);
p += increment;
sscanf(p, "pitch_model :%d\n%n", &pixtone_parameters[i].oPitch.model, &increment);
p += increment;
sscanf(p, "pitch_freq :%f\n%n", &freq, &increment);
p += increment;
pixtone_parameters[i].oPitch.num = freq;
sscanf(p, "pitch_top :%d\n%n", &pixtone_parameters[i].oPitch.top, &increment);
p += increment;
sscanf(p, "pitch_offset :%d\n%n", &pixtone_parameters[i].oPitch.offset, &increment);
p += increment;
sscanf(p, "volume_model :%d\n%n", &pixtone_parameters[i].oVolume.model, &increment);
p += increment;
sscanf(p, "volume_freq :%f\n%n", &freq, &increment);
p += increment;
pixtone_parameters[i].oVolume.num = freq;
sscanf(p, "volume_top :%d\n%n", &pixtone_parameters[i].oVolume.top, &increment);
p += increment;
sscanf(p, "volume_offset:%d\n%n", &pixtone_parameters[i].oVolume.offset, &increment);
p += increment;
sscanf(p, "initialY:%d\n%n", &pixtone_parameters[i].initial, &increment);
p += increment;
sscanf(p, "ax :%d\n%n", &pixtone_parameters[i].pointAx, &increment);
p += increment;
sscanf(p, "ay :%d\n%n", &pixtone_parameters[i].pointAy, &increment);
p += increment;
sscanf(p, "bx :%d\n%n", &pixtone_parameters[i].pointBx, &increment);
p += increment;
sscanf(p, "by :%d\n%n", &pixtone_parameters[i].pointBy, &increment);
p += increment;
sscanf(p, "cx :%d\n%n", &pixtone_parameters[i].pointCx, &increment);
p += increment;
sscanf(p, "cy :%d\n\n%n", &pixtone_parameters[i].pointCy, &increment);
p += increment;
}
free(file_buffer);
success = TRUE;
}
return success;
}
BOOL ReloadAll(void){
BOOL bError;
bError = FALSE;
if (!ReloadBitmap_File("Resource/BITMAP/pixel", SURFACE_ID_PIXEL, 0, false))
bError = TRUE;
if (!ReloadBitmap_File("MyChar", SURFACE_ID_MY_CHAR, 1, false))
bError = TRUE;
if (!ReloadBitmap_File("Title", SURFACE_ID_TITLE, false, false))
bError = TRUE;
if (!ReloadBitmap_File("ArmsImage", SURFACE_ID_ARMS_IMAGE, 1, false))
bError = TRUE;
if (!ReloadBitmap_File("Arms", SURFACE_ID_ARMS, 1, false))
bError = TRUE;
if (!ReloadBitmap_File("ItemImage", SURFACE_ID_ITEM_IMAGE, 1, false))
bError = TRUE;
if (!ReloadBitmap_File("StageImage", SURFACE_ID_STAGE_ITEM, 1, false))
bError = TRUE;
if (!ReloadBitmap_File("Npc/NpcSym", SURFACE_ID_NPC_SYM, 1, false))
bError = TRUE;
if (!ReloadBitmap_File("Npc/NpcRegu", SURFACE_ID_NPC_REGU, 1, false))
bError = TRUE;
if (!ReloadBitmap_File("TextBox", SURFACE_ID_TEXT_BOX, 0, false))
bError = TRUE;
if (!ReloadBitmap_File("Caret", SURFACE_ID_CARET, 0, false))
bError = TRUE;
if (!ReloadBitmap_File("Bullet", SURFACE_ID_BULLET, 0, false))
bError = TRUE;
if (!ReloadBitmap_File("Face", SURFACE_ID_FACE, 3, false))
bError = TRUE;
if (!ReloadBitmap_File("Fade", SURFACE_ID_FADE, 0, false))
bError = TRUE;
if (!ReloadBitmap_File("Resource/BITMAP/Credit01", SURFACE_ID_CREDITS_IMAGE, 2, false))
bError = TRUE;
if(!ReloadBitmap_File("fgOverlay",SURFACE_ID_MENU_OVERLAY, 0, false))
bError = TRUE;
if(!ReloadBitmap_File("mapFrame",SURFACE_ID_MAP_CARET, false, false))
bError = TRUE;
if(bError)
return FALSE;
return TRUE;
}
BOOL LoadGenericData(void)
{
int pt_size;
BOOL bError;
bError = FALSE;
if (!MakeSurface_File("Resource/BITMAP/pixel", SURFACE_ID_PIXEL, false))
bError = TRUE;
if (!MakeSurface_File("MyChar", SURFACE_ID_MY_CHAR, true))
bError = TRUE;
if (!MakeSurface_File("Title", SURFACE_ID_TITLE, false))
bError = TRUE;
if (!MakeSurface_File("ArmsImage", SURFACE_ID_ARMS_IMAGE, 1))
bError = TRUE;
if (!MakeSurface_File("Arms", SURFACE_ID_ARMS, true))
bError = TRUE;
if (!MakeSurface_File("ItemImage", SURFACE_ID_ITEM_IMAGE, true))
bError = TRUE;
if (!MakeSurface_File("StageImage", SURFACE_ID_STAGE_ITEM, true))
bError = TRUE;
if (!MakeSurface_File("Npc/NpcSym", SURFACE_ID_NPC_SYM, true))
bError = TRUE;
if (!MakeSurface_File("Npc/NpcRegu", SURFACE_ID_NPC_REGU, true))
bError = TRUE;
if (!MakeSurface_File("TextBox", SURFACE_ID_TEXT_BOX, false))
bError = TRUE;
if (!MakeSurface_File("Caret", SURFACE_ID_CARET, false))
bError = TRUE;
if (!MakeSurface_File("Bullet", SURFACE_ID_BULLET, false))
bError = TRUE;
if (!MakeSurface_File("Face", SURFACE_ID_FACE, 3))
bError = TRUE;
if (!MakeSurface_File("Fade", SURFACE_ID_FADE, false))
bError = TRUE;
if (!MakeSurface_File("Resource/BITMAP/Credit01", SURFACE_ID_CREDITS_IMAGE, 2))
bError = TRUE;
if(!MakeSurface_File("fgOverlay",SURFACE_ID_MENU_OVERLAY, false))
bError = TRUE;
if(!MakeSurface_File("mapFrame",SURFACE_ID_MAP_CARET, false))
bError = TRUE;
if (bError)
return FALSE;
MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_SCREEN_GRAB, TRUE, TRUE);
MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_BACKGROUND, FALSE, FALSE);
MakeSurface_Generic(WINDOW_WIDTH, WINDOW_HEIGHT, SURFACE_ID_MAP, TRUE, TRUE);
MakeSurface_Generic(320, 240, SURFACE_ID_CASTS, FALSE, FALSE);
MakeSurface_Generic(256, 256, SURFACE_ID_LEVEL_TILESET, FALSE, FALSE);
MakeSurface_Generic(256, 256, SURFACE_ID_LEVEL_TILESET_2, FALSE, FALSE);
MakeSurface_Generic(160, 16, SURFACE_ID_ROOM_NAME, FALSE, TRUE);
MakeSurface_Generic(40, 240, SURFACE_ID_VALUE_VIEW, FALSE, TRUE);
MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_SPRITESET_1, FALSE, FALSE);
MakeSurface_Generic(320, 240, SURFACE_ID_LEVEL_SPRITESET_2, FALSE, FALSE);
MakeSurface_Generic(320, 16 * (MAX_STRIP - 1), SURFACE_ID_CREDIT_CAST, FALSE, TRUE);
pt_size = 0;
for (unsigned int i = 0; i < sizeof(ptp_table) / sizeof(ptp_table[0]); ++i)
{
std::string path = gDataPath + '/' + ptp_table[i].path;
switch (ptp_table[i].type)
{
case SOUND_TYPE_PIXTONE:
PIXTONEPARAMETER pixtone_parameters[4];
if (LoadPixToneFile(path.c_str(), pixtone_parameters))
{
int ptp_num = 0;
while (pixtone_parameters[ptp_num].use && ptp_num < 4)
++ptp_num;
pt_size += MakePixToneObject(pixtone_parameters, ptp_num, ptp_table[i].slot);
}
break;
#ifdef EXTRA_SOUND_FORMATS
case SOUND_TYPE_OTHER:
ExtraSound_LoadSFX(path.c_str(), ptp_table[i].slot);
break;
#endif
}
}
// Commented-out, since ints *technically* have an undefined length
/*
char str[0x40];
sprintf(str, "PixTone = %d byte", pt_size);
// There must have once been a 'OutputDebugStringA' call here or something.
// See 'EnumDevices_Callback' in 'Input.cpp' for an example of this.
*/
return TRUE;
}