mirror of
https://github.com/k4zmu2a/SpaceCadetPinball.git
synced 2023-12-30 21:52:56 +00:00
Added FT demo data support.
Tested with .006 ,.020 RC2, there might be more versions out there. Fixed mds2midi. Ref #22.
This commit is contained in:
parent
95007c9253
commit
919b537e28
@ -34,9 +34,12 @@ TBall::TBall(TPinballTable* table) : TPinballComponent(table, -1, false)
|
|||||||
ListBitmap = new std::vector<gdrv_bitmap8*>();
|
ListBitmap = new std::vector<gdrv_bitmap8*>();
|
||||||
|
|
||||||
/*Full tilt: ball is ballN, where N[0,2] resolution*/
|
/*Full tilt: ball is ballN, where N[0,2] resolution*/
|
||||||
if (pb::FullTiltMode)
|
|
||||||
ballGroupName[4] = '0' + fullscrn::GetResolution();
|
|
||||||
auto groupIndex = loader::query_handle(ballGroupName);
|
auto groupIndex = loader::query_handle(ballGroupName);
|
||||||
|
if (groupIndex < 0)
|
||||||
|
{
|
||||||
|
ballGroupName[4] = '0' + fullscrn::GetResolution();
|
||||||
|
groupIndex = loader::query_handle(ballGroupName);
|
||||||
|
}
|
||||||
|
|
||||||
Offset = *loader::query_float_attribute(groupIndex, 0, 500);
|
Offset = *loader::query_float_attribute(groupIndex, 0, 500);
|
||||||
|
|
||||||
|
@ -54,11 +54,13 @@ TTableLayer::TTableLayer(TPinballTable* table): TCollisionComponent(table, -1, f
|
|||||||
|
|
||||||
GraityDirX = cos(PinballTable->GravityAnglY) * sin(PinballTable->GravityAngleX) * PinballTable->GravityDirVectMult;
|
GraityDirX = cos(PinballTable->GravityAnglY) * sin(PinballTable->GravityAngleX) * PinballTable->GravityDirVectMult;
|
||||||
GraityDirY = sin(PinballTable->GravityAnglY) * sin(PinballTable->GravityAngleX) * PinballTable->GravityDirVectMult;
|
GraityDirY = sin(PinballTable->GravityAnglY) * sin(PinballTable->GravityAngleX) * PinballTable->GravityDirVectMult;
|
||||||
auto angleMultArr = loader::query_float_attribute(groupIndex, 0, 701);
|
|
||||||
|
|
||||||
/*Full tilt hack - GraityMult should be 0.2*/
|
/*Full tilt hack - GraityMult should be 0.2*/
|
||||||
if (angleMultArr && !pb::FullTiltMode)
|
if (!pb::FullTiltMode && !pb::FullTiltDemoMode)
|
||||||
|
{
|
||||||
|
auto angleMultArr = loader::query_float_attribute(groupIndex, 0, 701);
|
||||||
GraityMult = *angleMultArr;
|
GraityMult = *angleMultArr;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
GraityMult = 0.2f;
|
GraityMult = 0.2f;
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ int fullscrn::GetResolution()
|
|||||||
|
|
||||||
void fullscrn::SetResolution(int value)
|
void fullscrn::SetResolution(int value)
|
||||||
{
|
{
|
||||||
if (!pb::FullTiltMode)
|
if (!pb::FullTiltMode || pb::FullTiltDemoMode)
|
||||||
value = 0;
|
value = 0;
|
||||||
assertm(value >= 0 && value <= 2, "Resolution value out of bounds");
|
assertm(value >= 0 && value <= 2, "Resolution value out of bounds");
|
||||||
resolution = value;
|
resolution = value;
|
||||||
@ -103,7 +103,7 @@ void fullscrn::SetResolution(int value)
|
|||||||
|
|
||||||
int fullscrn::GetMaxResolution()
|
int fullscrn::GetMaxResolution()
|
||||||
{
|
{
|
||||||
return pb::FullTiltMode ? 2 : 0;
|
return pb::FullTiltMode && !pb::FullTiltDemoMode ? 2 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fullscrn::window_size_changed()
|
void fullscrn::window_size_changed()
|
||||||
|
@ -56,6 +56,10 @@ int midi::music_init()
|
|||||||
track1 = load_track("TABA1");
|
track1 = load_track("TABA1");
|
||||||
track2 = load_track("TABA2");
|
track2 = load_track("TABA2");
|
||||||
track3 = load_track("TABA3");
|
track3 = load_track("TABA3");
|
||||||
|
|
||||||
|
// FT demo .006 has only one music track, but it is nearly 9 min. long
|
||||||
|
if (!track1 && pb::FullTiltDemoMode)
|
||||||
|
track1 = load_track("DEMO");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -271,8 +275,7 @@ std::vector<uint8_t>* midi::MdsToMidi(std::string file)
|
|||||||
// Delta time is in variable quantity, Big Endian
|
// Delta time is in variable quantity, Big Endian
|
||||||
uint32_t deltaVarLen;
|
uint32_t deltaVarLen;
|
||||||
auto count = ToVariableLen(delta, deltaVarLen);
|
auto count = ToVariableLen(delta, deltaVarLen);
|
||||||
deltaVarLen = SwapByteOrderInt(deltaVarLen);
|
auto deltaData = reinterpret_cast<const uint8_t*>(&deltaVarLen);
|
||||||
auto deltaData = reinterpret_cast<const uint8_t*>(&deltaVarLen) + 4 - count;
|
|
||||||
midiBytes.insert(midiBytes.end(), deltaData, deltaData + count);
|
midiBytes.insert(midiBytes.end(), deltaData, deltaData + count);
|
||||||
|
|
||||||
switch (event.iEvent >> 24)
|
switch (event.iEvent >> 24)
|
||||||
|
@ -86,6 +86,11 @@ DatFile* partman::load_records(LPCSTR lpFileName, bool fullTiltMode)
|
|||||||
{
|
{
|
||||||
zMapResolution = LRead<uint8_t>(fileHandle);
|
zMapResolution = LRead<uint8_t>(fileHandle);
|
||||||
fieldSize--;
|
fieldSize--;
|
||||||
|
|
||||||
|
// -1 means universal resolution, maybe. FT demo .006 is the only known user.
|
||||||
|
if (zMapResolution == 0xff)
|
||||||
|
zMapResolution = 0;
|
||||||
|
|
||||||
assertm(zMapResolution <= 2, "partman: zMap resolution out of bounds");
|
assertm(zMapResolution <= 2, "partman: zMap resolution out of bounds");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ DatFile* pb::record_table = nullptr;
|
|||||||
int pb::time_ticks = 0, pb::demo_mode = 0, pb::game_mode = 2;
|
int pb::time_ticks = 0, pb::demo_mode = 0, pb::game_mode = 2;
|
||||||
float pb::mode_countdown_, pb::time_now = 0, pb::time_next = 0, pb::ball_speed_limit, pb::time_ticks_remainder = 0;
|
float pb::mode_countdown_, pb::time_now = 0, pb::time_next = 0, pb::ball_speed_limit, pb::time_ticks_remainder = 0;
|
||||||
high_score_struct pb::highscore_table[5];
|
high_score_struct pb::highscore_table[5];
|
||||||
bool pb::FullTiltMode = false, pb::cheat_mode = false;
|
bool pb::FullTiltMode = false, pb::FullTiltDemoMode = false, pb::cheat_mode = false;
|
||||||
std::string pb::DatFileName;
|
std::string pb::DatFileName;
|
||||||
|
|
||||||
|
|
||||||
@ -121,14 +121,16 @@ int pb::uninit()
|
|||||||
void pb::SelectDatFile(std::array<char*, 2> dataSearchPaths)
|
void pb::SelectDatFile(std::array<char*, 2> dataSearchPaths)
|
||||||
{
|
{
|
||||||
DatFileName.clear();
|
DatFileName.clear();
|
||||||
|
FullTiltDemoMode = FullTiltMode = false;
|
||||||
|
|
||||||
std::string datFileNames[2]
|
std::string datFileNames[3]
|
||||||
{
|
{
|
||||||
"CADET.DAT",
|
"CADET.DAT",
|
||||||
options::get_string("Pinball Data", pinball::get_rc_string(168, 0))
|
options::get_string("Pinball Data", pinball::get_rc_string(168, 0)),
|
||||||
|
"DEMO.DAT",
|
||||||
};
|
};
|
||||||
|
|
||||||
// Default game data test order: CADET.DAT, PINBALL.DAT
|
// Default game data test order: CADET.DAT, PINBALL.DAT, DEMO.DAT
|
||||||
if (options::Options.Prefer3DPBGameData)
|
if (options::Options.Prefer3DPBGameData)
|
||||||
std::swap(datFileNames[0], datFileNames[1]);
|
std::swap(datFileNames[0], datFileNames[1]);
|
||||||
for (auto path : dataSearchPaths)
|
for (auto path : dataSearchPaths)
|
||||||
@ -136,16 +138,19 @@ void pb::SelectDatFile(std::array<char*, 2> dataSearchPaths)
|
|||||||
if (DatFileName.empty() && path)
|
if (DatFileName.empty() && path)
|
||||||
{
|
{
|
||||||
pinball::BasePath = path;
|
pinball::BasePath = path;
|
||||||
for (int i = 0; i < 2; i++)
|
for (auto datFileName : datFileNames)
|
||||||
{
|
{
|
||||||
auto datFileName = datFileNames[i];
|
|
||||||
auto datFilePath = pinball::make_path_name(datFileName);
|
auto datFilePath = pinball::make_path_name(datFileName);
|
||||||
auto datFile = fopenu(datFilePath.c_str(), "r");
|
auto datFile = fopenu(datFilePath.c_str(), "r");
|
||||||
if (datFile)
|
if (datFile)
|
||||||
{
|
{
|
||||||
fclose(datFile);
|
fclose(datFile);
|
||||||
DatFileName = datFileName;
|
DatFileName = datFileName;
|
||||||
FullTiltMode = datFileName == "CADET.DAT";
|
if (datFileName == "CADET.DAT")
|
||||||
|
FullTiltMode = true;
|
||||||
|
if (datFileName == "DEMO.DAT")
|
||||||
|
FullTiltDemoMode = FullTiltMode = true;
|
||||||
|
|
||||||
printf("Loading game from: %s\n", datFilePath.c_str());
|
printf("Loading game from: %s\n", datFilePath.c_str());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ public:
|
|||||||
static DatFile* record_table;
|
static DatFile* record_table;
|
||||||
static TPinballTable* MainTable;
|
static TPinballTable* MainTable;
|
||||||
static high_score_struct highscore_table[5];
|
static high_score_struct highscore_table[5];
|
||||||
static bool FullTiltMode;
|
static bool FullTiltMode, FullTiltDemoMode;
|
||||||
static std::string DatFileName;
|
static std::string DatFileName;
|
||||||
|
|
||||||
static int init();
|
static int init();
|
||||||
|
Loading…
Reference in New Issue
Block a user