Merge remote-tracking branch 'remotes/origin/master' into 2D_Refactor

# Conflicts:
#	src/posix/cocoa/i_video.mm
This commit is contained in:
Christoph Oelckers 2018-03-30 22:06:17 +02:00
commit 1e5fbc1423
18 changed files with 541 additions and 519 deletions

View file

@ -174,8 +174,9 @@ bool E_CheckHandler(DStaticEventHandler* handler)
bool E_IsStaticType(PClass* type)
{
return (type->IsDescendantOf(RUNTIME_CLASS(DStaticEventHandler)) && // make sure it's from our hierarchy at all.
!type->IsDescendantOf(RUNTIME_CLASS(DEventHandler)));
assert(type != nullptr);
assert(type->IsDescendantOf(RUNTIME_CLASS(DStaticEventHandler)));
return !type->IsDescendantOf(RUNTIME_CLASS(DEventHandler));
}
void E_SerializeEvents(FSerializer& arc)
@ -230,27 +231,24 @@ void E_SerializeEvents(FSerializer& arc)
}
}
static void E_InitStaticHandler(PClass* type, FString typestring, bool map)
static PClass* E_GetHandlerClass(const FString& typeName)
{
PClass* type = PClass::FindClass(typeName);
if (type == nullptr)
{
I_Error("Fatal: unknown event handler class %s in MAPINFO!\n", typestring.GetChars());
return;
I_Error("Fatal: unknown event handler class %s", typeName.GetChars());
}
else if (!type->IsDescendantOf(RUNTIME_CLASS(DStaticEventHandler)))
{
I_Error("Fatal: event handler class %s is not derived from StaticEventHandler", typeName.GetChars());
}
if (E_IsStaticType(type) && map)
{
I_Error("Fatal: invalid event handler class %s in MAPINFO!\nMap-specific event handlers cannot be static.\n", typestring.GetChars());
return;
}
/*
if (!E_IsStaticType(type) && !map)
{
Printf("%cGWarning: invalid event handler class %s in MAPINFO!\nMAPINFO event handlers should inherit Static* directly!\n", TEXTCOLOR_ESCAPE, typestring.GetChars());
return;
}*/
return type;
}
static void E_InitHandler(PClass* type)
{
// check if type already exists, don't add twice.
bool typeExists = false;
for (DStaticEventHandler* handler = E_FirstEventHandler; handler; handler = handler->next)
@ -269,41 +267,34 @@ static void E_InitStaticHandler(PClass* type, FString typestring, bool map)
void E_InitStaticHandlers(bool map)
{
// don't initialize map handlers if restoring from savegame.
if (savegamerestore)
return;
// just make sure
E_Shutdown(map);
if (map) // don't initialize map handlers if restoring from savegame.
// initialize event handlers from gameinfo
for (const FString& typeName : gameinfo.EventHandlers)
{
// load non-static handlers from gameinfo
for (unsigned int i = 0; i < gameinfo.EventHandlers.Size(); i++)
{
FString typestring = gameinfo.EventHandlers[i];
PClass* type = PClass::FindClass(typestring);
if (!type || E_IsStaticType(type)) // don't init the really global stuff here.
continue;
E_InitStaticHandler(type, typestring, false);
}
for (unsigned int i = 0; i < level.info->EventHandlers.Size(); i++)
{
FString typestring = level.info->EventHandlers[i];
PClass* type = PClass::FindClass(typestring);
E_InitStaticHandler(type, typestring, true);
}
PClass* type = E_GetHandlerClass(typeName);
// don't init the really global stuff here on startup initialization.
// don't init map-local global stuff here on level setup.
if (map == E_IsStaticType(type))
continue;
E_InitHandler(type);
}
else
if (!map)
return;
// initialize event handlers from mapinfo
for (const FString& typeName : level.info->EventHandlers)
{
for (unsigned int i = 0; i < gameinfo.EventHandlers.Size(); i++)
{
FString typestring = gameinfo.EventHandlers[i];
PClass* type = PClass::FindClass(typestring);
if (!type || !E_IsStaticType(type)) // don't init map-local global stuff here.
continue;
E_InitStaticHandler(type, typestring, false);
}
PClass* type = E_GetHandlerClass(typeName);
if (E_IsStaticType(type))
I_Error("Fatal: invalid event handler class %s in MAPINFO!\nMap-specific event handlers cannot be static.\n", typeName.GetChars());
E_InitHandler(type);
}
}

View file

@ -1429,11 +1429,11 @@ static void InitMusicMenus()
if (menu != nullptr)
{
if (soundfonts.Size() > 0)
int adl_banks_count = adl_getBanksCount();
if (adl_banks_count > 0)
{
int adl_banks_count = adl_getBanksCount();
const char *const *adl_bank_names = adl_getBankNames();
for(int i=0; i < adl_banks_count; i++)
for (int i=0; i < adl_banks_count; i++)
{
auto it = CreateOptionMenuItemCommand(adl_bank_names[i], FStringf("adl_bank %d", i), true);
static_cast<DOptionMenuDescriptor*>(*menu)->mItems.Push(it);

View file

@ -4888,8 +4888,8 @@ bool P_LineTrace(AActor *t1, DAngle angle, double distance,
ActorFlags aflags = (flags & TRF_ALLACTORS) ? ActorFlags::FromInt(0xFFFFFFFF) : MF_SHOOTABLE;
int lflags = 0;
if ( !(lflags & TRF_THRUBLOCK) ) lflags |= ML_BLOCKEVERYTHING;
if ( !(lflags & TRF_THRUHITSCAN) ) lflags |= ML_BLOCKHITSCAN;
if ( !(flags & TRF_THRUBLOCK) ) lflags |= ML_BLOCKEVERYTHING;
if ( !(flags & TRF_THRUHITSCAN) ) lflags |= ML_BLOCKHITSCAN;
int tflags = TRACE_ReportPortals;
if ( flags & TRF_NOSKY ) tflags |= TRACE_NoSky;

View file

@ -153,10 +153,13 @@ DPSprite::DPSprite(player_t *owner, AActor *caller, int id)
: x(.0), y(.0),
oldx(.0), oldy(.0),
firstTic(true),
Tics(0),
Flags(0),
Caller(caller),
Owner(owner),
State(nullptr),
Sprite(0),
Frame(0),
ID(id),
processPending(true)
{

View file

@ -356,7 +356,8 @@ void RenderPolyPlayerSprites::RenderSprite(PolyRenderThread *thread, DPSprite *p
invertcolormap = !invertcolormap;
}
bool fullbright = !foggy && pspr->GetState()->GetFullbright();
const FState* const psprState = pspr->GetState();
bool fullbright = !foggy && (psprState == nullptr ? false : psprState->GetFullbright());
bool fadeToBlack = (vis.RenderStyle.Flags & STYLEF_FadeToBlack) != 0;
vis.Light.SetColormap(0, spriteshade, basecolormap, fullbright, invertcolormap, fadeToBlack);

View file

@ -55,6 +55,7 @@
#include "v_text.h"
#include "v_video.h"
#include "version.h"
#include "videomodes.h"
#include "gl/system/gl_system.h"
#include "gl/data/gl_vertexbuffer.h"
@ -346,80 +347,6 @@ extern id appCtrl;
namespace
{
const struct
{
uint16_t width;
uint16_t height;
}
VideoModes[] =
{
{ 320, 200 },
{ 320, 240 },
{ 400, 225 }, // 16:9
{ 400, 300 },
{ 480, 270 }, // 16:9
{ 480, 360 },
{ 512, 288 }, // 16:9
{ 512, 384 },
{ 640, 360 }, // 16:9
{ 640, 400 },
{ 640, 480 },
{ 720, 480 }, // 16:10
{ 720, 540 },
{ 800, 450 }, // 16:9
{ 800, 480 },
{ 800, 500 }, // 16:10
{ 800, 600 },
{ 848, 480 }, // 16:9
{ 960, 600 }, // 16:10
{ 960, 720 },
{ 1024, 576 }, // 16:9
{ 1024, 600 }, // 17:10
{ 1024, 640 }, // 16:10
{ 1024, 768 },
{ 1088, 612 }, // 16:9
{ 1152, 648 }, // 16:9
{ 1152, 720 }, // 16:10
{ 1152, 864 },
{ 1280, 540 }, // 21:9
{ 1280, 720 }, // 16:9
{ 1280, 854 },
{ 1280, 800 }, // 16:10
{ 1280, 960 },
{ 1280, 1024 }, // 5:4
{ 1360, 768 }, // 16:9
{ 1366, 768 },
{ 1400, 787 }, // 16:9
{ 1400, 875 }, // 16:10
{ 1400, 1050 },
{ 1440, 900 },
{ 1440, 960 },
{ 1440, 1080 },
{ 1600, 900 }, // 16:9
{ 1600, 1000 }, // 16:10
{ 1600, 1200 },
{ 1680, 1050 }, // 16:10
{ 1920, 1080 },
{ 1920, 1200 },
{ 2048, 1152 }, // 16:9, iMac Retina 4K 21.5", HiDPI off
{ 2048, 1536 },
{ 2304, 1440 }, // 16:10, MacBook Retina 12"
{ 2560, 1080 }, // 21:9
{ 2560, 1440 },
{ 2560, 1600 },
{ 2560, 2048 },
{ 2880, 1800 }, // 16:10, MacBook Pro Retina 15"
{ 3200, 1800 },
{ 3440, 1440 }, // 21:9
{ 3840, 2160 },
{ 3840, 2400 },
{ 4096, 2160 },
{ 4096, 2304 }, // 16:9, iMac Retina 4K 21.5"
{ 5120, 2160 }, // 21:9
{ 5120, 2880 } // 16:9, iMac Retina 5K 27"
};
extern cycle_t BlitCycles;
cycle_t FlipCycles;
@ -601,7 +528,7 @@ DFrameBuffer* CocoaVideo::CreateFrameBuffer(const int width, const int height, c
else
{
fb = CreateGLSWFrameBuffer(width, height, bgra, fullscreen);
}
}
fb->SetFlash(flashColor, flashAmount);

View file

@ -45,6 +45,7 @@
#include "version.h"
#include "c_console.h"
#include "videomodes.h"
#include "sdlglvideo.h"
#include "gl/system/gl_system.h"
#include "r_defs.h"
@ -62,11 +63,6 @@
// TYPES -------------------------------------------------------------------
struct MiniModeInfo
{
uint16_t Width, Height;
};
// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
@ -105,67 +101,6 @@ CUSTOM_CVAR(Bool, gl_es, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCA
// PRIVATE DATA DEFINITIONS ------------------------------------------------
// Dummy screen sizes to pass when windowed
static MiniModeInfo WinModes[] =
{
{ 320, 200 },
{ 320, 240 },
{ 400, 225 }, // 16:9
{ 400, 300 },
{ 480, 270 }, // 16:9
{ 480, 360 },
{ 512, 288 }, // 16:9
{ 512, 384 },
{ 640, 360 }, // 16:9
{ 640, 400 },
{ 640, 480 },
{ 720, 480 }, // 16:10
{ 720, 540 },
{ 800, 450 }, // 16:9
{ 800, 480 },
{ 800, 500 }, // 16:10
{ 800, 600 },
{ 848, 480 }, // 16:9
{ 960, 600 }, // 16:10
{ 960, 720 },
{ 1024, 576 }, // 16:9
{ 1024, 600 }, // 17:10
{ 1024, 640 }, // 16:10
{ 1024, 768 },
{ 1088, 612 }, // 16:9
{ 1152, 648 }, // 16:9
{ 1152, 720 }, // 16:10
{ 1152, 864 },
{ 1280, 720 }, // 16:9
{ 1280, 854 },
{ 1280, 800 }, // 16:10
{ 1280, 960 },
{ 1280, 1024 }, // 5:4
{ 1360, 768 }, // 16:9
{ 1366, 768 },
{ 1400, 787 }, // 16:9
{ 1400, 875 }, // 16:10
{ 1400, 1050 },
{ 1440, 900 },
{ 1440, 960 },
{ 1440, 1080 },
{ 1600, 900 }, // 16:9
{ 1600, 1000 }, // 16:10
{ 1600, 1200 },
{ 1920, 1080 },
{ 1920, 1200 },
{ 2048, 1536 },
{ 2560, 1440 },
{ 2560, 1600 },
{ 2560, 2048 },
{ 2880, 1800 },
{ 3200, 1800 },
{ 3840, 2160 },
{ 3840, 2400 },
{ 4096, 2160 },
{ 5120, 2880 }
};
// CODE --------------------------------------------------------------------
SDLGLVideo::SDLGLVideo (int parm)
@ -193,10 +128,10 @@ bool SDLGLVideo::NextMode (int *width, int *height, bool *letterbox)
if (IteratorBits != 8)
return false;
if ((unsigned)IteratorMode < sizeof(WinModes)/sizeof(WinModes[0]))
if ((unsigned)IteratorMode < sizeof(VideoModes)/sizeof(VideoModes[0]))
{
*width = WinModes[IteratorMode].Width;
*height = WinModes[IteratorMode].Height;
*width = VideoModes[IteratorMode].width;
*height = VideoModes[IteratorMode].height;
++IteratorMode;
return true;
}

105
src/posix/videomodes.h Normal file
View file

@ -0,0 +1,105 @@
/*
** videomodes.h
**
**---------------------------------------------------------------------------
** Copyright 2018 Alexey Lysiuk
** All rights reserved.
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions
** are met:
**
** 1. Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** 2. Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in the
** documentation and/or other materials provided with the distribution.
** 3. The name of the author may not be used to endorse or promote products
** derived from this software without specific prior written permission.
**
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**---------------------------------------------------------------------------
**
*/
static const struct
{
uint16_t width;
uint16_t height;
}
VideoModes[] =
{
{ 320, 200 },
{ 320, 240 },
{ 400, 225 }, // 16:9
{ 400, 300 },
{ 480, 270 }, // 16:9
{ 480, 360 },
{ 512, 288 }, // 16:9
{ 512, 384 },
{ 640, 360 }, // 16:9
{ 640, 400 },
{ 640, 480 },
{ 720, 480 }, // 16:10
{ 720, 540 },
{ 800, 450 }, // 16:9
{ 800, 480 },
{ 800, 500 }, // 16:10
{ 800, 600 },
{ 848, 480 }, // 16:9
{ 960, 600 }, // 16:10
{ 960, 720 },
{ 1024, 576 }, // 16:9
{ 1024, 600 }, // 17:10
{ 1024, 640 }, // 16:10
{ 1024, 768 },
{ 1088, 612 }, // 16:9
{ 1152, 648 }, // 16:9
{ 1152, 720 }, // 16:10
{ 1152, 864 },
{ 1280, 540 }, // 21:9
{ 1280, 720 }, // 16:9
{ 1280, 854 },
{ 1280, 800 }, // 16:10
{ 1280, 960 },
{ 1280, 1024 }, // 5:4
{ 1360, 768 }, // 16:9
{ 1366, 768 },
{ 1400, 787 }, // 16:9
{ 1400, 875 }, // 16:10
{ 1400, 1050 },
{ 1440, 900 },
{ 1440, 960 },
{ 1440, 1080 },
{ 1600, 900 }, // 16:9
{ 1600, 1000 }, // 16:10
{ 1600, 1200 },
{ 1680, 1050 }, // 16:10
{ 1920, 1080 },
{ 1920, 1200 },
{ 2048, 1152 }, // 16:9, iMac Retina 4K 21.5", HiDPI off
{ 2048, 1536 },
{ 2304, 1440 }, // 16:10, MacBook Retina 12"
{ 2560, 1080 }, // 21:9
{ 2560, 1440 },
{ 2560, 1600 },
{ 2560, 2048 },
{ 2880, 1800 }, // 16:10, MacBook Pro Retina 15"
{ 3200, 1800 },
{ 3440, 1440 }, // 21:9
{ 3840, 2160 },
{ 3840, 2400 },
{ 4096, 2160 },
{ 4096, 2304 }, // 16:9, iMac Retina 4K 21.5"
{ 5120, 2160 }, // 21:9
{ 5120, 2880 } // 16:9, iMac Retina 5K 27"
};

View file

@ -817,14 +817,17 @@ static void CalcPosVel(int type, const AActor *actor, const sector_t *sector,
//
//==========================================================================
inline bool Validate(const float value)
inline bool Validate(const float value, const float limit)
{
return value >= -32768.f && value <= 32768.f;
return value >= -limit && value <= limit;
}
static bool Validate(const FVector3 &value, const char *const name, const AActor *const actor)
static bool Validate(const FVector3 &value, const float limit, const char *const name, const AActor *const actor)
{
const bool valid = Validate(value.X) && Validate(value.Y) && Validate(value.Z);
const bool valid =
Validate(value.X, limit)
&& Validate(value.Y, limit)
&& Validate(value.Z, limit);
if (!valid)
{
@ -845,8 +848,13 @@ static bool Validate(const FVector3 &value, const char *const name, const AActor
static bool ValidatePosVel(const AActor *actor, const FVector3 &pos, const FVector3 &vel)
{
const bool valid = Validate(pos, "position", actor);
return Validate(vel, "velocity", actor) && valid;
// The actual limit for map coordinates
static const float POSITION_LIMIT = 32768.f;
const bool valid = Validate(pos, POSITION_LIMIT, "position", actor);
// The maximum velocity is enough to travel through entire map in one tic
static const float VELOCITY_LIMIT = 2 * POSITION_LIMIT * TICRATE;
return Validate(vel, VELOCITY_LIMIT, "velocity", actor) && valid;
}
static bool ValidatePosVel(const FSoundChan *const chan, const FVector3 &pos, const FVector3 &vel)

View file

@ -4,7 +4,7 @@
* FROM A NUMBER OF SOURCES, MOSTLY PC GAMES.
* PREPROCESSED, CONVERTED, AND POSTPROCESSED OFF-SCREEN.
*/
const adldata adl[4425] =
const adldata adl[4423] =
{ // ,---------+-------- Wave select settings
// | ,-------ч-+------ Sustain/release rates
// | | ,-----ч-ч-+---- Attack/decay rates
@ -4116,7 +4116,7 @@ const adldata adl[4425] =
{ 0x332F985,0x0A5D684, 0x05,0x40, 0xE, +0 },
{ 0x0FFF00B,0x2FF220C, 0x00,0x00, 0xE, +0 },
{ 0x223A133,0x4F4F131, 0xD6,0x09, 0x6, +0 },
{ 0x223B132,0x0F4F131, 0xD3,0x0A, 0x6, +0 },
{ 0x023B131,0x0F4F131, 0xD3,0x0A, 0x6, +0 },
{ 0x433F133,0x0F4F131, 0xD6,0x09, 0x8, +0 },
{ 0x2F3F132,0x4F6F131, 0xD3,0x0A, 0x6, +0 },
{ 0x2A4A112,0x4B5F211, 0xD2,0x05, 0x4, +0 },
@ -4135,10 +4135,10 @@ const adldata adl[4425] =
{ 0x587F617,0x0E4F231, 0x54,0x08, 0x9, +0 },
{ 0x0A5F33F,0x0F2C312, 0xA1,0x06, 0xC, -12 },
{ 0x0A5F43F,0x0F2F392, 0xD5,0x07, 0x0, -12 },
{ 0x461A417,0x0017C11, 0xAA,0x08, 0x7, +0 },
{ 0x061A416,0x0018911, 0xA7,0x07, 0x7, +0 },
{ 0x0F6F2B2,0x0F6F281, 0xE5,0x00, 0xF, +0 },
{ 0x0F6F2A4,0x007F08F, 0x40,0x00, 0x1, +0 },
{ 0x462A417,0x0027A11, 0x9C,0x08, 0x9, +0 },
{ 0x062A416,0x0028811, 0x99,0x07, 0x9, +0 },
{ 0x0F6F2B2,0x0F6F281, 0xE8,0x05, 0xF, +0 },
{ 0x0F6F2A4,0x007F08F, 0x45,0x05, 0x1, +0 },
{ 0x0F6F618,0x0F7E500, 0x63,0x80, 0x6, +12 },
{ 0x5A6F40E,0x007D804, 0x5B,0x80, 0x0, +0 },
{ 0x2F6F71A,0x0F5F413, 0x1F,0x03, 0x4, -19 },
@ -4162,8 +4162,8 @@ const adldata adl[4425] =
{ 0x105FF2C,0x01A6222, 0x9D,0x12, 0x8, +0 },
{ 0x107F021,0x2055232, 0x92,0x07, 0x8, +0 },
{ 0x107F021,0x2055232, 0x92,0x07, 0x0, +0 },
{ 0x274A613,0x4B8F401, 0xDD,0x05, 0x6, +0 },
{ 0x2249134,0x2B8D301, 0x5E,0x05, 0xA, -12 },
{ 0x574A613,0x4B8F401, 0x9D,0x0D, 0x6, +0 },
{ 0x2249134,0x2B8D301, 0x61,0x05, 0xA, -12 },
{ 0x5E5F133,0x1E4F211, 0x99,0x07, 0x6, +0 },
{ 0x1E5F133,0x5E4F211, 0x9E,0x0B, 0x0, +0 },
{ 0x21FF021,0x088F211, 0xA5,0x80, 0xA, +12 },
@ -4178,8 +4178,8 @@ const adldata adl[4425] =
{ 0x0F78140,0x3F7F040, 0x40,0x05, 0xC, +14 },
{ 0x6F78AE8,0x649B1F4, 0x03,0x0A, 0xA, +0 },
{ 0x6F78AE8,0x649B1F4, 0x43,0x4B, 0xA, +0 },
{ 0x0209221,0x0E6C131, 0x97,0x05, 0x0, +0 },
{ 0x0608521,0x0E6A131, 0xD4,0x05, 0x4, +0 },
{ 0x0609533,0x4E5C131, 0x63,0x05, 0x0, +0 },
{ 0x0608521,0x0E4A131, 0xD4,0x05, 0x4, +0 },
{ 0x0F9F030,0x0F8F131, 0x9D,0x05, 0xA, +12 },
{ 0x7F0F017,0x7F9B700, 0x00,0x0F, 0xA, +12 },
{ 0x026AA21,0x0D7F132, 0xCF,0x84, 0xA, +0 },
@ -4191,7 +4191,8 @@ const adldata adl[4425] =
{ 0x2E69515,0x1B6B211, 0x17,0x08, 0x0, +0 },
{ 0x077FA21,0x06AC332, 0x07,0x0D, 0x0, +0 },
{ 0x0F5F430,0x0F6F330, 0x0E,0x00, 0xA, +12 },
{ 0x1468331,0x017D232, 0x15,0x00, 0xA, +0 },
{ 0x139A331,0x0F8F133, 0x93,0x08, 0xC, +0 },
{ 0x139A331,0x0F8F133, 0x93,0x08, 0xA, +0 },
{ 0x2257020,0x4266161, 0x95,0x05, 0xA, +0 },
{ 0x1257021,0x0266141, 0x99,0x07, 0x8, +0 },
{ 0x2426070,0x2154130, 0x4F,0x00, 0xA, +0 },
@ -4200,12 +4201,12 @@ const adldata adl[4425] =
{ 0x521F571,0x4166022, 0x90,0x09, 0x6, +0 },
{ 0x52151F0,0x4156021, 0x97,0x0D, 0x4, +12 },
{ 0x223F8F2,0x4055421, 0x99,0x8A, 0xC, +0 },
{ 0x0A05211,0x0E4C411, 0x9F,0x03, 0xA, +0 },
{ 0x1C79612,0x0E45411, 0xD9,0x03, 0x4, +0 },
{ 0x4A35211,0x0E4C411, 0x9C,0x08, 0x6, +0 },
{ 0x2C79613,0x4E45411, 0xD7,0x08, 0xA, +0 },
{ 0x023E133,0x0F2F131, 0xA2,0x09, 0xE, +0 },
{ 0x023F132,0x0F2F131, 0x24,0x0A, 0xE, +0 },
{ 0x4C3C413,0x0B4D214, 0x9B,0x48, 0xA, -24 },
{ 0x5BAF900,0x0B4F211, 0x87,0x48, 0x6, +0 },
{ 0x5C3C404,0x1B4B519, 0xA1,0x00, 0xC, -31 },
{ 0x17A9913,0x0B4F213, 0x0F,0x00, 0x8, -19 },
{ 0x223F832,0x4055421, 0x99,0x8A, 0xC, +0 },
{ 0x433CB32,0x5057561, 0x9B,0x8A, 0xA, +0 },
{ 0x1029033,0x4044561, 0x5B,0x85, 0x4, +0 },
@ -4225,7 +4226,7 @@ const adldata adl[4425] =
{ 0x0235271,0x0198161, 0x1E,0x08, 0xE, +0 },
{ 0x0235361,0x0196161, 0x1D,0x03, 0xE, +0 },
{ 0x0155331,0x0378261, 0x94,0x00, 0xA, +0 },
{ 0x118537A,0x5177432, 0x21,0x00, 0x4, -12 },
{ 0x118543A,0x5177472, 0x1E,0x00, 0x4, -12 },
{ 0x0364121,0x02B7221, 0x21,0x08, 0xC, +0 },
{ 0x026F021,0x0056121, 0x26,0x03, 0xC, +0 },
{ 0x0578321,0x117C021, 0x19,0x03, 0xC, +0 },
@ -4233,21 +4234,22 @@ const adldata adl[4425] =
{ 0x036F121,0x337F121, 0x92,0x08, 0xE, +0 },
{ 0x0368121,0x037F121, 0x92,0x08, 0xE, +0 },
{ 0x0A66121,0x0976121, 0x9B,0x08, 0xE, +0 },
{ 0x0F37011,0x1F65052, 0x51,0x04, 0xA, +0 },
{ 0x1067021,0x1165231, 0x8A,0x00, 0x6, +0 },
{ 0x5237731,0x1F65012, 0x4B,0x00, 0xA, +0 },
{ 0x0137732,0x0F65011, 0xC7,0x0A, 0xA, +0 },
{ 0x1067021,0x1165231, 0x46,0x00, 0x6, +0 },
{ 0x00B9820,0x10B5330, 0x8E,0x00, 0xA, +12 },
{ 0x10B8020,0x11B6330, 0x87,0x00, 0x8, +12 },
{ 0x0235031,0x0076C64, 0x58,0x08, 0xA, +0 },
{ 0x055D531,0x0076C72, 0x17,0x0D, 0x6, +0 },
{ 0x2077830,0x2076331, 0x94,0x00, 0xA, +0 },
{ 0x1235031,0x0077C24, 0xC0,0x08, 0x2, +0 },
{ 0x045D933,0x4076C35, 0xD0,0x26, 0x4, +0 },
{ 0x2077830,0x2076331, 0x9F,0x00, 0xA, +0 },
{ 0x0199031,0x01B6134, 0x95,0x80, 0xA, +0 },
{ 0x0177532,0x0174531, 0x93,0x03, 0xC, +0 },
{ 0x0277530,0x0174536, 0x14,0x9C, 0xE, +12 },
{ 0x08D6EF1,0x02A3571, 0xC0,0x00, 0xE, +0 },
{ 0x08860A1,0x01A6561, 0x5C,0x00, 0x8, +0 },
{ 0x2176522,0x0277421, 0x5A,0x00, 0x6, +0 },
{ 0x1274472,0x01745B1, 0x8D,0x05, 0x4, +0 },
{ 0x2F0F051,0x09A7801, 0x03,0x12, 0xA, +0 },
{ 0x1267532,0x0166531, 0x8D,0x05, 0x4, +0 },
{ 0x2F0F011,0x0987801, 0x03,0x17, 0xA, +0 },
{ 0x00457F2,0x0375761, 0xA8,0x00, 0xE, +0 },
{ 0x2545C73,0x0776821, 0x00,0x0D, 0xE, +0 },
{ 0x5543737,0x25D67A1, 0x28,0x00, 0x8, +0 },
@ -4260,23 +4262,23 @@ const adldata adl[4425] =
{ 0x3AB8120,0x308F130, 0x9E,0x06, 0x0, +0 },
{ 0x13357F1,0x00767E1, 0x21,0x00, 0xA, +0 },
{ 0x43357F2,0x00767E1, 0x28,0x00, 0x0, +0 },
{ 0x2444830,0x43D67A1, 0x22,0x00, 0x8, +0 },
{ 0x534B821,0x13D87A1, 0x1F,0x00, 0xA, +0 },
{ 0x2444830,0x21D67A1, 0x22,0x00, 0x8, +0 },
{ 0x534B821,0x02D87A1, 0x1F,0x00, 0xA, +0 },
{ 0x32B7420,0x12BF134, 0x46,0x00, 0x8, +0 },
{ 0x5029072,0x0069061, 0x96,0x0C, 0x8, +0 },
{ 0x1019031,0x0069061, 0x1A,0x0C, 0x6, +0 },
{ 0x245C224,0x2550133, 0x83,0x80, 0x9, -36 },
{ 0x2459224,0x2556133, 0x83,0x80, 0x9, -36 },
{ 0x132ED10,0x3E7D010, 0x87,0x08, 0x6, +12 },
{ 0x132ED30,0x3E7D010, 0x87,0x0D, 0x6, +12 },
{ 0x2946374,0x005A0A1, 0xA5,0x05, 0x2, +0 },
{ 0x2055F02,0x004FFE1, 0xA8,0x05, 0x0, +0 },
{ 0x0031131,0x0054361, 0xD4,0x00, 0x4, +0 },
{ 0x20311B0,0x00543E1, 0xD9,0x00, 0x4, +0 },
{ 0x245C224,0x2550133, 0x81,0x80, 0xB, -36 },
{ 0x2459224,0x2556133, 0x81,0x80, 0xB, -36 },
{ 0x132ED10,0x3E7D010, 0x87,0x0D, 0x6, +12 },
{ 0x132ED30,0x3E7D010, 0x87,0x12, 0x6, +12 },
{ 0x033513A,0x013C121, 0xA4,0x06, 0x2, +0 },
{ 0x273F325,0x0228231, 0x20,0x06, 0x4, +0 },
{ 0x0031131,0x0054361, 0xD4,0x08, 0x4, +0 },
{ 0x20311B0,0x00543E1, 0xD9,0x08, 0x4, +0 },
{ 0x245A121,0x126A121, 0x98,0x05, 0xC, +0 },
{ 0x255A421,0x126A121, 0x98,0x05, 0xC, +0 },
{ 0x20470E0,0x1148161, 0x59,0x03, 0x2, +0 },
{ 0x10460E1,0x2148161, 0x5F,0x83, 0x6, +0 },
{ 0x50470E1,0x1148161, 0x59,0x03, 0x2, +0 },
{ 0x10460E2,0x4148161, 0x5F,0x83, 0x6, +0 },
{ 0x0336186,0x05452E1, 0xA7,0x00, 0x6, +0 },
{ 0x13351A6,0x05452E1, 0xA7,0x00, 0x0, +0 },
{ 0x2529084,0x1534341, 0x9D,0x80, 0xC, +0 },
@ -4290,8 +4292,8 @@ const adldata adl[4425] =
{ 0x2322122,0x0133221, 0x8C,0x92, 0x6, +0 },
{ 0x4033121,0x0132122, 0x93,0x48, 0x4, +7 },
{ 0x074F624,0x0249303, 0xC0,0x0D, 0x0, +0 },
{ 0x3D2C092,0x1D2D131, 0x8E,0x03, 0x0, +0 },
{ 0x0D2D091,0x1D23132, 0x8E,0x03, 0x0, +0 },
{ 0x3D2C092,0x1D2D131, 0x8E,0x09, 0x0, +0 },
{ 0x0D2D091,0x1D23132, 0x8E,0x09, 0x0, +0 },
{ 0x5F29054,0x0F2C241, 0x99,0x06, 0xE, +0 },
{ 0x1F19011,0x0F2C241, 0x1A,0x06, 0x6, +0 },
{ 0x05233E1,0x0131371, 0x1A,0x88, 0x7, +0 },
@ -4306,7 +4308,7 @@ const adldata adl[4425] =
{ 0x3F0F014,0x6F7F611, 0x40,0x43, 0xA, +0 },
{ 0x033F201,0x373F402, 0xD1,0x8A, 0x0, +0 },
{ 0x6A7F907,0x229A904, 0x1A,0x00, 0xA, -12 },
{ 0x332F320,0x6E49423, 0x0E,0x08, 0x8, +0 },
{ 0x5E2F321,0x6E4F523, 0x1B,0x08, 0x8, +0 },
{ 0x455F71C,0x0D68501, 0xA3,0x08, 0x6, +0 },
{ 0x055F718,0x0D6E501, 0x23,0x08, 0x0, +0 },
{ 0x1397931,0x2099B22, 0x80,0x00, 0x6, +0 },
@ -4326,7 +4328,7 @@ const adldata adl[4425] =
{ 0x250F610,0x0E7F510, 0x00,0xC8, 0x6, +0 },
{ 0x2114109,0x51D2101, 0x05,0x80, 0xA, +0 },
{ 0x2114108,0x31D2101, 0x05,0x80, 0xA, +12 },
{ 0x4543311,0x357451A, 0x19,0x03, 0xE, -14 },
{ 0x0534313,0x7574A1F, 0x20,0x03, 0xE, -14 },
{ 0x00437D2,0x0343471, 0xA1,0x07, 0xC, +0 },
{ 0x0F0F00C,0x0F66700, 0x00,0xCD, 0xE, +0 },
{ 0x200C327,0x6021300, 0x80,0x12, 0xE, -23 },
@ -4355,29 +4357,22 @@ const adldata adl[4425] =
{ 0x2F7F602,0x0F8F802, 0x00,0x88, 0xE, +12 },
{ 0x05476C1,0x30892C5, 0x80,0x08, 0x0, +0 },
{ 0x05477C1,0x30892C5, 0x00,0x08, 0xA, -2 },
{ 0x007C604,0x007C604, 0x08,0x08, 0x1, +0 },
{ 0x201F302,0x057AB09, 0x03,0x07, 0xC, +12 },
{ 0x005C604,0x005C604, 0x08,0x00, 0x1, +0 },
{ 0x509F902,0x057AB07, 0x03,0x07, 0xC, +12 },
{ 0x254F307,0x307F905, 0x04,0x08, 0x6, -5 },
{ 0x254F307,0x207F905, 0x04,0x08, 0x8, +0 },
{ 0x006C604,0x007C604, 0x08,0x08, 0x1, +0 },
{ 0x201F312,0x057AB09, 0x03,0x07, 0xC, +12 },
{ 0x509F912,0x057AB07, 0x03,0x07, 0xC, +12 },
{ 0x254D307,0x3288905, 0x04,0x03, 0xA, -5 },
{ 0x0015500,0x007C716, 0x0C,0x00, 0x0, +0 },
{ 0x201F312,0x057AB09, 0x00,0x07, 0xC, +12 },
{ 0x0015500,0x007C719, 0x0C,0x00, 0x0, +0 },
{ 0x001F312,0x047BB05, 0x03,0x07, 0xC, +12 },
{ 0x0015500,0x007C71B, 0x0C,0x00, 0x0, +0 },
{ 0x201F312,0x047BB09, 0x03,0x07, 0xC, +12 },
{ 0x0015500,0x007C71F, 0x0C,0x00, 0x0, +0 },
{ 0x210F509,0x305FE03, 0x8A,0x85, 0xE, +12 },
{ 0x200F508,0x305FE03, 0xC7,0x85, 0xC, +12 },
{ 0x2E1F119,0x3F3F11B, 0x04,0x0D, 0x8, +0 },
{ 0x509F902,0x057AB07, 0x03,0x07, 0x0, +12 },
{ 0x210F509,0x605FE05, 0x8A,0x8A, 0xE, +12 },
{ 0x400F509,0x605FE05, 0x07,0x8A, 0xA, +12 },
{ 0x2E1F11E,0x3F3F318, 0x04,0x00, 0x8, +0 },
{ 0x2777603,0x3679601, 0x87,0x08, 0x6, +12 },
{ 0x277C643,0x3679601, 0x87,0x08, 0xE, +12 },
{ 0x366F905,0x099F701, 0x00,0x00, 0xC, +12 },
{ 0x431A000,0x085B41A, 0x81,0x05, 0xA, +12 },
{ 0x459F640,0x185B418, 0x00,0x20, 0xB, +12 },
{ 0x212FD04,0x305FD03, 0x01,0x00, 0x8, +12 },
{ 0x212FD08,0x305FD03, 0x01,0x03, 0x8, +12 },
{ 0x2A8F9E3,0x0779643, 0x1E,0x08, 0x2, +6 },
{ 0x0A5F7E8,0x0D89949, 0xDE,0x00, 0x0, +0 },
{ 0x2A8F9E3,0x0779643, 0x1E,0x00, 0xE, +12 },
@ -4394,8 +4389,11 @@ const adldata adl[4425] =
{ 0x367FE05,0x678F701, 0x09,0x08, 0x8, +12 },
{ 0x367FD10,0x078F901, 0x00,0x0D, 0x8, +11 },
{ 0x098600F,0x3FC8590, 0x08,0xC0, 0xE, +12 },
{ 0x009F020,0x37DA588, 0x07,0x00, 0xA, +12 },
{ 0x00FC020,0x32DA5A8, 0x07,0x00, 0xA, +12 },
{ 0x009F020,0x27DA788, 0x25,0x00, 0x0, +12 },
{ 0x00FC020,0x22DA388, 0x25,0x00, 0xA, +12 },
{ 0x0F00000,0x0F00000, 0x3F,0x3F, 0xC, +0 },
{ 0x000F020,0x40A8A00, 0x0A,0x00, 0xE, +0 },
{ 0x70F5F20,0x70F4F00, 0x00,0x00, 0x2, -12 },
{ 0x0D1F815,0x078F512, 0x44,0x00, 0x8, +12 },
{ 0x2D1F213,0x098F614, 0x9D,0x00, 0x0, +0 },
{ 0x2D1F213,0x098F614, 0x9D,0x21, 0x0, -2 },
@ -4442,7 +4440,7 @@ const adldata adl[4425] =
{ 0x04CA700,0x04FC600, 0x00,0x2B, 0x0, -12 },
{ 0x0B5F704,0x002010C, 0x00,0x00, 0x8, +21 },
};
const struct adlinsdata adlins[4547] =
const struct adlinsdata adlins[4549] =
{
{ 0, 0, 0, 0, 1660, 1660,0.000000 },
{ 1, 1, 0, 0, 1746, 1746,0.000000 },
@ -8783,7 +8781,7 @@ const struct adlinsdata adlins[4547] =
{3547,3547,109, 0, 1780, 1780,0.000000 },
{4097,4097, 79, 0, 126, 126,0.000000 },
{4098,4098, 0, 0, 3413, 3413,0.000000 },
{4099,4100, 0, 1, 2040, 2040,0.031250 },
{4099,4100, 0, 1, 1613, 1613,0.031250 },
{4101,4102, 0, 1, 2146, 2146,0.031250 },
{4103,4104, 0, 1, 1646, 1646,0.046875 },
{4105,4106, 0, 1, 1900, 1900,0.156250 },
@ -8793,7 +8791,7 @@ const struct adlinsdata adlins[4547] =
{4113,4114, 0, 1, 1740, 1740,0.000000 },
{4115,4116, 0, 1, 993, 993,0.000025 },
{4117,4118, 0, 1, 886, 886,0.000000 },
{4119,4120, 0, 1, 1900, 1900,0.046875 },
{4119,4120, 0, 1, 1153, 1153,0.046875 },
{4121,4122, 0, 1, 1420, 1420,0.000000 },
{4123,4124, 0, 1, 193, 193,0.000000 },
{4125,4126, 0, 1, 406, 406,0.000000 },
@ -8807,7 +8805,7 @@ const struct adlinsdata adlins[4547] =
{4140,4141, 0, 1, 40000, 46,0.140625 },
{4142,4143, 0, 1, 40000, 6,0.000000 },
{4144,4145, 0, 1, 40000, 153,0.109375 },
{4146,4147, 0, 1, 600, 600,0.000000 },
{4146,4147, 0, 1, 920, 920,0.000000 },
{4148,4149, 0, 1, 653, 653,0.000025 },
{4150,4151, 0, 1, 633, 633,0.000000 },
{4152,4153, 0, 1, 893, 893,0.046875 },
@ -8815,182 +8813,184 @@ const struct adlinsdata adlins[4547] =
{4156,4157, 0, 1, 40000, 60,-1.906250 },
{4158,4159, 0, 1, 40000, 60,-1.906250 },
{4160,4161, 0, 1, 2033, 2033,0.234375 },
{4162,4163, 0, 1, 1600, 1600,0.031250 },
{4162,4163, 0, 1, 1900, 1900,0.031250 },
{4164,4165, 0, 1, 1453, 1453,0.000000 },
{4166,4167, 0, 1, 2186, 2186,0.000000 },
{4168,4169, 0, 1, 1933, 1933,0.046875 },
{4170,4171, 0, 1, 633, 633,0.000000 },
{4172,4173, 0, 1, 486, 486,0.000000 },
{4174,4174, 0, 0, 313, 313,0.000000 },
{4175,4175, 0, 1, 40000, 33,0.156250 },
{4176,4177, 0, 1, 2040, 13,0.000000 },
{4178,4178, 0, 0, 40000, 66,0.000000 },
{4179,4180, 0, 1, 40000, 60,0.000025 },
{4181,4181, 0, 0, 40000, 133,0.000000 },
{4182,4183, 0, 1, 40000, 173,0.078125 },
{4184,4185, 0, 1, 320, 320,0.156250 },
{4186,4187, 0, 1, 1813, 1813,0.031250 },
{4188,4189, 0, 1, 1740, 1740,0.031250 },
{4190,4191, 0, 1, 40000, 213,0.062500 },
{4192,4193, 0, 1, 40000, 500,-0.062500 },
{4194,4194, 0, 1, 40000, 326,0.109375 },
{4195,4195, 0, 1, 40000, 406,0.109375 },
{4196,4197, 0, 1, 40000, 280,0.140625 },
{4198,4199, 0, 1, 40000, 53,0.140625 },
{4200,4201, 0, 1, 40000, 286,0.156250 },
{4202,4203, 0, 1, 206, 206,0.125000 },
{4204,4205, 0, 1, 40000, 26,0.000000 },
{4206,4207, 0, 1, 40000, 20,0.031250 },
{4208,4208, 0, 0, 40000, 6,0.000000 },
{4209,4209, 0, 0, 40000, 20,0.000000 },
{4210,4211, 0, 1, 40000, 160,0.031250 },
{4212,4213, 0, 1, 40000, 73,0.062500 },
{4214,4215, 0, 1, 2526, 2526,0.093750 },
{4216,4216, 0, 1, 5153, 5153,0.125000 },
{4217,4217, 0, 0, 40000, 66,0.000000 },
{4218,4218, 0, 0, 40000, 40,0.000000 },
{4219,4219, 0, 0, 40000, 0,0.000000 },
{4220,4220, 0, 0, 40000, 0,0.000000 },
{4221,4222, 0, 1, 40000, 60,0.000000 },
{4223,4223, 0, 0, 40000, 33,0.000000 },
{4224,4224, 0, 0, 40000, 6,0.000000 },
{4225,4226, 0, 1, 40000, 40,0.000000 },
{4227,4227, 0, 0, 40000, 0,0.000000 },
{4228,4228, 0, 0, 40000, 6,0.000000 },
{4229,4229, 0, 0, 40000, 33,0.000000 },
{4230,4231, 0, 1, 40000, 33,0.031250 },
{4232,4233, 0, 1, 40000, 20,0.046875 },
{4234,4235, 0, 1, 420, 420,0.031250 },
{4236,4236, 0, 0, 40000, 106,0.000000 },
{4237,4237, 0, 0, 40000, 6,0.000000 },
{4238,4239, 0, 1, 40000, 6,0.125000 },
{4240,4241, 0, 1, 40000, 13,0.109375 },
{4242,4243, 0, 1, 40000, 53,0.109375 },
{4244,4245, 0, 1, 120, 0,-0.031250 },
{4246,4246, 0, 0, 40000, 6,0.000000 },
{4247,4248, 0, 1, 40000, 133,0.156250 },
{4249,4250, 0, 1, 3886, 3886,0.125000 },
{4251,4252, 0, 1, 40000, 26,0.031250 },
{4253,4254, 0, 1, 40000, 320,0.078125 },
{4255,4256, 0, 1, 846, 66,0.109375 },
{4257,4258, 0, 1, 1293, 80,0.078125 },
{4259,4260, 0, 1, 40000, 193,0.156250 },
{4261,4262, 0, 1, 2040, 2040,0.109375 },
{4263,4264, 0, 1, 1360, 1360,0.062500 },
{4265,4266, 0, 1, 40000, 433,0.093750 },
{4267,4268, 0, 1, 40000, 533,0.109375 },
{4269,4270, 0, 1, 826, 826,0.093750 },
{4271,4272, 0, 1, 40000, 926,0.125000 },
{4273,4273, 0, 1, 886, 886,0.109375 },
{4274,4275, 0, 1, 2186, 2186,-0.046875 },
{4276,4277, 0, 1, 1486, 1486,0.125000 },
{4278,4279, 0, 1, 40000, 393,-0.078125 },
{4280,4281, 0, 1, 40000, 1166,0.140625 },
{4282,4283, 0, 1, 360, 360,0.078125 },
{4284,4285, 0, 1, 1693, 1693,0.031250 },
{4286,4287, 0, 1, 760, 760,0.000000 },
{4288,4289, 0, 1, 126, 126,0.031250 },
{4290,4290, 0, 0, 633, 633,0.000000 },
{4291,4292, 0, 1, 280, 280,0.000000 },
{4293,4294, 0, 1, 40000, 26,0.062500 },
{4295,4295, 0, 0, 40000, 66,0.000000 },
{4296,4296, 0, 0, 40000, 53,0.000000 },
{4297,4297, 0, 0, 1940, 1940,0.000000 },
{4298,4298, 0, 0, 86, 86,0.000000 },
{4299,4300, 0, 1, 280, 280,0.031250 },
{4301,4301, 0, 0, 40, 40,0.000000 },
{4302,4303, 0, 1, 53, 53,0.000000 },
{4304,4305, 0, 1, 140, 140,0.000000 },
{4306,4307, 0, 1, 26, 26,0.000000 },
{4308,4309, 0, 1, 2153, 2153,0.109375 },
{4310,4310, 0, 0, 600, 600,0.000000 },
{4311,4312, 0, 1, 993, 26,0.000000 },
{4313,4314, 0, 1, 5613, 5613,0.000000 },
{4315,4315, 0, 0, 220, 220,0.000000 },
{4316,4317, 0, 1, 10306, 526,0.000000 },
{4318,4319, 0, 1, 1486, 13,0.000000 },
{4320,4321, 0, 1, 40000, 660,0.000000 },
{4322,4322, 0, 0, 120, 120,0.000000 },
{4323,4323, 34, 0, 40, 40,0.000000 },
{4324,4324, 28, 0, 73, 73,0.000000 },
{4325,4326, 39, 1, 233, 233,0.000000 },
{4325,4326, 33, 1, 193, 193,0.000000 },
{4327,4328, 63, 1, 33, 33,0.000000 },
{4329,4329, 15, 0, 13, 13,0.000000 },
{4330,4330, 36, 0, 13, 13,0.000000 },
{4330,4331, 36, 1, 133, 133,0.406250 },
{4332,4333, 25, 1, 13, 13,0.000000 },
{4334,4333, 25, 1, 33, 33,0.000000 },
{4335,4336, 61, 1, 40, 40,0.000000 },
{4337,4338, 37, 1, 53, 53,0.000000 },
{4339,4340, 15, 1, 80, 80,0.000000 },
{4341,4342, 48, 1, 73, 73,-1.906250 },
{4343,4344, 19, 1, 120, 120,0.000000 },
{4345,4345, 48, 0, 53, 53,0.000000 },
{4346,4347, 15, 1, 33, 33,0.000000 },
{4348,4349, 12, 1, 33, 33,0.000000 },
{4350,4351, 12, 1, 33, 33,0.000000 },
{4352,4351, 10, 1, 40, 40,0.000000 },
{4353,4354, 60, 1, 286, 286,0.062500 },
{4355,4355, 62, 0, 1726, 1726,0.000000 },
{4356,4357, 80, 1, 106, 106,0.125000 },
{4358,4358, 58, 0, 73, 73,0.000000 },
{4359,4360, 31, 1, 313, 313,0.000000 },
{4361,4361, 61, 0, 206, 206,0.000000 },
{4362,4363, 41, 1, 100, 100,0.000000 },
{4364,4365, 35, 1, 160, 160,0.000000 },
{4366,4367, 29, 1, 40, 40,0.000000 },
{4368,4369, 41, 1, 166, 166,0.000000 },
{4368,4369, 37, 1, 160, 160,0.000000 },
{4370,4371, 54, 1, 80, 80,0.000000 },
{4370,4372, 48, 1, 80, 80,0.000000 },
{4373,4374, 77, 1, 53, 53,0.000000 },
{4375,4376, 72, 1, 46, 46,0.000000 },
{4377,4377, 40, 0, 140, 140,0.000000 },
{4378,4378, 45, 0, 313, 313,0.000000 },
{4379,4379, 42, 0, 40000, 0,0.000000 },
{4380,4380, 73, 0, 60, 60,0.000000 },
{4381,4382, 68, 1, 40, 40,0.000000 },
{4383,4384, 18, 1, 60, 60,0.000000 },
{4385,4386, 18, 1, 106, 106,0.000000 },
{4387,4387, 90, 0, 80, 80,0.000000 },
{4388,4388, 90, 0, 306, 306,0.000000 },
{4389,4390, 64, 1, 233, 233,0.031250 },
{4391,4392, 80, 1, 140, 140,0.031250 },
{4393,4394, 64, 1, 606, 606,0.000000 },
{4395,4395, 67, 0, 20, 20,0.000000 },
{4396,4397, 50, 1, 53, 53,0.000000 },
{4398,4398, 36, 0, 66, 66,0.000000 },
{4399,4399, 0, 0, 40000, 20,0.000000 },
{4400,4400, 0, 0, 40000, 0,0.000000 },
{4401,4401, 0, 0, 360, 360,0.000000 },
{4402,4402, 0, 0, 586, 586,0.000000 },
{4175,4176, 0, 1, 2533, 2533,0.078125 },
{4177,4178, 0, 1, 2040, 13,0.000000 },
{4179,4179, 0, 0, 40000, 66,0.000000 },
{4180,4181, 0, 1, 40000, 60,0.000025 },
{4182,4182, 0, 0, 40000, 133,0.000000 },
{4183,4184, 0, 1, 40000, 173,0.078125 },
{4185,4186, 0, 1, 333, 333,0.109375 },
{4187,4188, 0, 1, 1813, 1813,0.031250 },
{4189,4190, 0, 1, 1473, 1473,0.031250 },
{4191,4192, 0, 1, 40000, 213,0.062500 },
{4193,4194, 0, 1, 40000, 500,-0.062500 },
{4195,4195, 0, 1, 40000, 326,0.109375 },
{4196,4196, 0, 1, 40000, 406,0.109375 },
{4197,4198, 0, 1, 40000, 280,0.140625 },
{4199,4200, 0, 1, 40000, 53,0.140625 },
{4201,4202, 0, 1, 40000, 286,0.156250 },
{4203,4204, 0, 1, 206, 206,0.125000 },
{4205,4206, 0, 1, 40000, 26,0.000000 },
{4207,4208, 0, 1, 40000, 20,0.031250 },
{4209,4209, 0, 0, 40000, 6,0.000000 },
{4210,4210, 0, 0, 40000, 20,0.000000 },
{4211,4212, 0, 1, 40000, 160,0.031250 },
{4213,4214, 0, 1, 40000, 73,0.062500 },
{4215,4216, 0, 1, 2526, 2526,0.093750 },
{4217,4217, 0, 1, 5153, 5153,0.125000 },
{4218,4219, 0, 1, 40000, 73,0.000000 },
{4220,4220, 0, 0, 40000, 60,0.000000 },
{4221,4221, 0, 0, 40000, 0,0.000000 },
{4222,4222, 0, 0, 40000, 0,0.000000 },
{4223,4224, 0, 1, 40000, 73,0.000000 },
{4225,4225, 0, 0, 40000, 33,0.000000 },
{4226,4226, 0, 0, 40000, 6,0.000000 },
{4227,4228, 0, 1, 40000, 40,0.000000 },
{4229,4229, 0, 0, 40000, 0,0.000000 },
{4230,4230, 0, 0, 40000, 6,0.000000 },
{4231,4231, 0, 0, 40000, 33,0.000000 },
{4232,4233, 0, 1, 40000, 53,0.031250 },
{4234,4235, 0, 1, 40000, 20,0.046875 },
{4236,4237, 0, 1, 420, 420,0.031250 },
{4238,4238, 0, 0, 40000, 106,0.000000 },
{4239,4239, 0, 0, 40000, 6,0.000000 },
{4240,4241, 0, 1, 40000, 6,0.125000 },
{4242,4243, 0, 1, 40000, 13,0.109375 },
{4244,4245, 0, 1, 40000, 53,0.109375 },
{4246,4247, 0, 1, 226, 6,-0.031250 },
{4248,4248, 0, 0, 40000, 6,0.000000 },
{4249,4250, 0, 1, 40000, 133,0.156250 },
{4251,4252, 0, 1, 4186, 13,0.125000 },
{4253,4254, 0, 1, 40000, 26,0.031250 },
{4255,4256, 0, 1, 40000, 660,0.078125 },
{4257,4258, 0, 1, 846, 66,0.109375 },
{4259,4260, 0, 1, 1293, 80,0.078125 },
{4261,4262, 0, 1, 40000, 300,0.140625 },
{4263,4264, 0, 1, 2040, 2040,0.109375 },
{4265,4266, 0, 1, 1360, 1360,0.062500 },
{4267,4268, 0, 1, 40000, 433,0.093750 },
{4269,4270, 0, 1, 40000, 533,0.109375 },
{4271,4272, 0, 1, 826, 826,0.093750 },
{4273,4274, 0, 1, 40000, 926,0.125000 },
{4275,4275, 0, 1, 886, 886,0.109375 },
{4276,4277, 0, 1, 2186, 2186,-0.046875 },
{4278,4279, 0, 1, 1486, 1486,0.125000 },
{4280,4281, 0, 1, 40000, 393,-0.078125 },
{4282,4283, 0, 1, 40000, 1166,0.140625 },
{4284,4285, 0, 1, 360, 360,0.078125 },
{4286,4287, 0, 1, 1693, 1693,0.031250 },
{4288,4289, 0, 1, 760, 760,0.000000 },
{4290,4291, 0, 1, 126, 126,0.031250 },
{4292,4292, 0, 0, 300, 300,0.000000 },
{4293,4294, 0, 1, 280, 280,0.000000 },
{4295,4296, 0, 1, 40000, 26,0.062500 },
{4297,4297, 0, 0, 40000, 66,0.000000 },
{4298,4298, 0, 0, 40000, 53,0.000000 },
{4299,4299, 0, 0, 1940, 1940,0.000000 },
{4300,4300, 0, 0, 86, 86,0.000000 },
{4301,4302, 0, 1, 280, 280,0.031250 },
{4303,4303, 0, 0, 40, 40,0.000000 },
{4304,4305, 0, 1, 53, 53,0.000000 },
{4306,4307, 0, 1, 140, 140,0.000000 },
{4308,4309, 0, 1, 26, 26,0.000000 },
{4310,4311, 0, 1, 2153, 2153,0.109375 },
{4312,4312, 0, 0, 293, 293,0.000000 },
{4313,4314, 0, 1, 993, 26,0.000000 },
{4315,4316, 0, 1, 5613, 5613,0.000000 },
{4317,4317, 0, 0, 220, 220,0.000000 },
{4318,4319, 0, 1, 10306, 526,0.000000 },
{4320,4321, 0, 1, 1486, 13,0.000000 },
{4322,4323, 0, 1, 40000, 660,0.000000 },
{4324,4324, 0, 0, 120, 120,0.000000 },
{4325,4325, 34, 0, 40, 40,0.000000 },
{4326,4326, 28, 0, 73, 73,0.000000 },
{4327,4328, 39, 1, 233, 233,0.000000 },
{4327,4328, 33, 1, 193, 193,0.000000 },
{4329,4330, 63, 1, 33, 33,0.000000 },
{4331,4331, 15, 0, 13, 13,0.000000 },
{4332,4332, 36, 0, 13, 13,0.000000 },
{4332,4333, 36, 1, 133, 133,0.406250 },
{4334,4335, 25, 1, 13, 13,0.000000 },
{4336,4335, 25, 1, 33, 33,0.000000 },
{4337,4338, 61, 1, 40, 40,0.000000 },
{4339,4340, 37, 1, 53, 53,0.000000 },
{4341,4342, 15, 1, 320, 320,0.000000 },
{4343,4344, 48, 1, 73, 73,-1.906250 },
{4341,4345, 19, 1, 320, 320,0.000000 },
{4346,4346, 48, 0, 53, 53,0.000000 },
{4341,4342, 22, 1, 353, 353,0.000000 },
{4341,4342, 24, 1, 360, 360,0.000000 },
{4341,4347, 27, 1, 393, 393,0.000000 },
{4341,4342, 31, 1, 380, 380,0.000000 },
{4348,4349, 60, 1, 246, 246,0.031250 },
{4350,4350, 70, 0, 340, 340,0.000000 },
{4351,4352, 80, 1, 106, 106,0.125000 },
{4353,4353, 58, 0, 73, 73,0.000000 },
{4354,4355, 31, 1, 313, 313,0.000000 },
{4356,4356, 61, 0, 253, 253,0.000000 },
{4357,4358, 41, 1, 100, 100,0.000000 },
{4359,4360, 35, 1, 160, 160,0.000000 },
{4361,4362, 29, 1, 40, 40,0.000000 },
{4363,4364, 41, 1, 166, 166,0.000000 },
{4363,4364, 37, 1, 160, 160,0.000000 },
{4365,4366, 54, 1, 80, 80,0.000000 },
{4365,4367, 48, 1, 80, 80,0.000000 },
{4368,4369, 77, 1, 53, 53,0.000000 },
{4370,4371, 72, 1, 46, 46,0.000000 },
{4372,4372, 40, 0, 140, 140,0.000000 },
{4373,4373, 38, 0, 73, 73,0.000000 },
{4374,4374, 36, 0, 533, 533,0.000000 },
{4375,4376, 60, 1, 26, 26,0.000000 },
{4376,4377, 60, 1, 26, 26,0.000000 },
{4378,4378, 73, 0, 60, 60,0.000000 },
{4379,4380, 68, 1, 40, 40,0.000000 },
{4381,4382, 18, 1, 60, 60,0.000000 },
{4383,4384, 18, 1, 106, 106,0.000000 },
{4385,4385, 90, 0, 80, 80,0.000000 },
{4386,4386, 90, 0, 306, 306,0.000000 },
{4387,4388, 64, 1, 233, 233,0.031250 },
{4389,4390, 80, 1, 140, 140,0.031250 },
{4391,4392, 64, 1, 606, 606,0.000000 },
{4393,4393, 67, 0, 20, 20,0.000000 },
{4394,4395, 50, 1, 53, 53,0.000000 },
{4396,4396, 36, 0, 66, 66,0.000000 },
{4397,4397, 0, 0, 40000, 20,0.000000 },
{4398,4398, 0, 0, 40000, 0,0.000000 },
{4399,4399, 0, 0, 360, 360,0.000000 },
{4400,4400, 0, 0, 586, 586,0.000000 },
{4401,4401, 0, 0, 40000, 0,0.000000 },
{4402,4402, 0, 0, 40000, 0,0.000000 },
{4403,4403, 0, 0, 40000, 0,0.000000 },
{4404,4404, 0, 0, 40000, 0,0.000000 },
{4404,4404, 0, 0, 40000, 6,0.000000 },
{4405,4405, 0, 0, 40000, 0,0.000000 },
{4406,4406, 0, 0, 40000, 6,0.000000 },
{4407,4407, 0, 0, 40000, 0,0.000000 },
{4408,4408, 0, 0, 146, 146,0.000000 },
{4408,4408, 73, 0, 886, 886,0.000000 },
{4409,4409, 0, 0, 40, 0,0.000000 },
{4410,4410, 0, 0, 486, 0,0.000000 },
{4411,4411, 0, 0, 1226, 1226,0.000000 },
{4412,4412, 0, 0, 1480, 1480,0.000000 },
{4413,4413, 0, 0, 46, 46,0.000000 },
{4414,4414, 0, 0, 126, 126,0.000000 },
{4414,4414, 12, 0, 106, 106,0.000000 },
{4415,4415, 0, 0, 160, 160,0.000000 },
{4415,4415, 1, 0, 153, 153,0.000000 },
{4416,4416, 0, 0, 20, 20,0.000000 },
{4416,4416, 23, 0, 26, 26,0.000000 },
{4417,4417, 0, 0, 140, 140,0.000000 },
{4418,4418, 0, 0, 486, 486,0.000000 },
{4419,4419, 0, 0, 40000, 13,0.000000 },
{4420,4420, 0, 0, 40000, 0,0.000000 },
{4421,4421, 0, 0, 1226, 1226,0.000000 },
{4422,4422, 0, 0, 766, 766,0.000000 },
{4423,4423, 0, 0, 93, 93,0.000000 },
{4424,4424, 0, 2, 40000, 0,0.000000 },
{4406,4406, 0, 0, 146, 146,0.000000 },
{4406,4406, 73, 0, 886, 886,0.000000 },
{4407,4407, 0, 0, 40, 0,0.000000 },
{4408,4408, 0, 0, 486, 0,0.000000 },
{4409,4409, 0, 0, 1226, 1226,0.000000 },
{4410,4410, 0, 0, 1480, 1480,0.000000 },
{4411,4411, 0, 0, 46, 46,0.000000 },
{4412,4412, 0, 0, 126, 126,0.000000 },
{4412,4412, 12, 0, 106, 106,0.000000 },
{4413,4413, 0, 0, 160, 160,0.000000 },
{4413,4413, 1, 0, 153, 153,0.000000 },
{4414,4414, 0, 0, 20, 20,0.000000 },
{4414,4414, 23, 0, 26, 26,0.000000 },
{4415,4415, 0, 0, 140, 140,0.000000 },
{4416,4416, 0, 0, 486, 486,0.000000 },
{4417,4417, 0, 0, 40000, 13,0.000000 },
{4418,4418, 0, 0, 40000, 0,0.000000 },
{4419,4419, 0, 0, 1226, 1226,0.000000 },
{4420,4420, 0, 0, 766, 766,0.000000 },
{4421,4421, 0, 0, 93, 93,0.000000 },
{4422,4422, 0, 2, 40000, 0,0.000000 },
};
@ -9002,7 +9002,7 @@ int maxAdlBanks()
const char* const banknames[74] =
{
"AIL (Star Control 3, Albion, Empire 2, many others)",
"AIL (Star Control 3, Albion, Empire 2, etc.)",
"Bisqwit (selection of 4op and 2op)",
"HMI (Descent, Asterix)",
"HMI (Descent:: Int)",
@ -9016,47 +9016,47 @@ const char* const banknames[74] =
"HMI (Aces of the Deep)",
"HMI (Earthsiege)",
"HMI (Anvil of Dawn)",
"DMX (Doom)",
"DMX (Doom 2)",
"DMX (Hexen, Heretic)",
"DMX (MUS Play)",
"AIL (Discworld, Grandest Fleet)",
"DMX (DOOM, MUS Play)",
"AIL (Discworld, Grandest Fleet, etc.)",
"AIL (Warcraft 2)",
"AIL (Syndicate)",
"AIL (Guilty, Orion Conspiracy)",
"AIL (Guilty, Orion Conspiracy, TNSFC ::4op)",
"AIL (Magic Carpet 2)",
"AIL (Nemesis)",
"AIL (Jagged Alliance)",
"AIL (When Two Worlds War)",
"AIL (Bards Tale Construction)",
"AIL (When Two Worlds War :MISS-INS:)",
"AIL (Bards Tale Construction :MISS-INS:)",
"AIL (Return to Zork)",
"AIL (Theme Hospital)",
"AIL (National Hockey League PA)",
"AIL (Inherit The Earth)",
"AIL (Inherit The Earth, file two)",
"AIL (Little Big Adventure)",
"AIL (Little Big Adventure :: 4op)",
"AIL (Wreckin Crew)",
"AIL (Death Gate)",
"AIL (FIFA International Soccer)",
"AIL (Starship Invasion)",
"AIL (Super Street Fighter 2)",
"AIL (Lords of the Realm)",
"AIL (SimFarm, SimHealth)",
"AIL (Super Street Fighter 2 :4op:)",
"AIL (Lords of the Realm :MISS-INS:)",
"AIL (SimFarm, SimHealth :: 4op)",
"AIL (SimFarm, Settlers, Serf City)",
"AIL (Caesar 2, MISSING INSTRUMENTS)",
"AIL (Caesar 2, :p4op::MISS-INS:)",
"AIL (Syndicate Wars)",
"AIL (Bubble Bobble Feat. Rainbow Islands, Z)",
"AIL (Warcraft)",
"AIL (Terra Nova Strike Force Centuri)",
"AIL (System Shock)",
"AIL (Terra Nova Strike Force Centuri :p4op:)",
"AIL (System Shock :p4op:)",
"AIL (Advanced Civilization)",
"AIL (Battle Chess 4000, melodic only)",
"AIL (Ultimate Soccer Manager)",
"AIL (Air Bucks, Blue And The Gray)",
"AIL (Battle Chess 4000 :p4op:)",
"AIL (Ultimate Soccer Manager :p4op:)",
"AIL (Air Bucks, Blue And The Gray, etc)",
"AIL (Ultima Underworld 2)",
"AIL (Kasparov's Gambit)",
"AIL (High Seas Trader)",
"AIL (Master of Magic, std percussion)",
"AIL (Master of Magic, orchestral percussion)",
"AIL (High Seas Trader :MISS-INS:)",
"AIL (Master of Magic, :4op: std percussion)",
"AIL (Master of Magic, :4op: orchestral percussion)",
"SB (Action Soccer)",
"SB (3d Cyberpuck :: melodic only)",
"SB (Simon the Sorcerer :: melodic only)",
@ -10388,14 +10388,14 @@ const unsigned short banks[74][256] =
806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,4467,4468,4469,4470,4471,
4472,4473,4474,4475,4476,4477,4217,4478,4218,4479,4480,4481,4482,4483,4221,4484,
4485,4222,4486,4487,4224,4488,4489,4226,4490,4227,4491,4492,4493,4494,4495,4496,
4497,4498,4499,4500,4501, 320,4502,4503,4504,4231,4232,4505,4506,1374,4507,4508,
4509,4510,4511,4512,4513,4514,4515,4516, 806, 806, 806, 806, 806, 806, 806, 806,
4497,4498,4499,4500,4501, 320,4502,4503,4504,4505,4506,4507,4508,1374,4509,4510,
4511,4512,4513,4514,4515,4516,4517,4518, 806, 806, 806, 806, 806, 806, 806, 806,
806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806, 806,
},
{
4517,4518,4519,4520,4518,4521,4522,4523,4524,4525,4526,4528,4529,4530,4531,4532,
4533,4535,4537,4530,4539,4540,4541,4542,4543,4544,4545, 295, 28, 29, 30, 31,
4519,4520,4521,4522,4520,4523,4524,4525,4526,4527,4528,4530,4531,4532,4533,4534,
4535,4537,4539,4532,4541,4542,4543,4544,4545,4546,4547, 295, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 33, 39, 40, 41, 42, 43, 44, 45, 46,
47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
@ -10404,8 +10404,8 @@ const unsigned short banks[74][256] =
111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 127,4534, 128,4536, 130, 131, 132,4538, 134, 135, 136, 137, 138,
139, 140, 141, 142, 143, 144,4527, 146, 147, 148, 149, 150, 151, 152, 153, 154,
295, 295, 295, 127,4536, 128,4538, 130, 131, 132,4540, 134, 135, 136, 137, 138,
139, 140, 141, 142, 143, 144,4529, 146, 147, 148, 149, 150, 151, 152, 153, 154,
155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295,
@ -10415,7 +10415,7 @@ const unsigned short banks[74][256] =
const AdlBankSetup adlbanksetup[74] =
{
{0, 1, 1, 0, 0}, //Bank 0, AIL (Star Control 3, Albion, Empire 2, Sensible Soccer, Settlers 2, many others)
{0, 1, 1, 0, 0}, //Bank 0, AIL (Star Control 3, Albion, Empire 2, etc.)
{0, 1, 1, 0, 0}, //Bank 1, Bisqwit (selection of 4op and 2op)
{0, 0, 0, 0, 0}, //Bank 2, HMI (Descent, Asterix)
{0, 0, 0, 0, 0}, //Bank 3, HMI (Descent:: Int)
@ -10429,18 +10429,18 @@ const AdlBankSetup adlbanksetup[74] =
{0, 0, 0, 0, 0}, //Bank 11, HMI (Aces of the Deep)
{0, 0, 0, 0, 0}, //Bank 12, HMI (Earthsiege)
{0, 0, 0, 0, 0}, //Bank 13, HMI (Anvil of Dawn)
{2, 0, 0, 0, 0}, //Bank 14, DMX (Doom :: partially pseudo 4op)
{2, 0, 0, 0, 0}, //Bank 15, DMX (Hexen, Heretic :: partially pseudo 4op)
{2, 0, 0, 0, 0}, //Bank 16, DMX (MUS Play :: partially pseudo 4op)
{0, 1, 1, 0, 0}, //Bank 17, AIL (Discworld, Grandest Fleet, Pocahontas, Slob Zone 3d, Ultima 4, Zorro)
{2, 0, 0, 0, 0}, //Bank 14, DMX (Doom 2)
{2, 0, 0, 0, 0}, //Bank 15, DMX (Hexen, Heretic)
{2, 0, 0, 0, 0}, //Bank 16, DMX (DOOM, MUS Play)
{0, 1, 1, 0, 0}, //Bank 17, AIL (Discworld, Grandest Fleet, etc.)
{0, 1, 1, 0, 0}, //Bank 18, AIL (Warcraft 2)
{0, 1, 1, 0, 0}, //Bank 19, AIL (Syndicate)
{0, 1, 1, 0, 0}, //Bank 20, AIL (Guilty, Orion Conspiracy, Terra Nova Strike Force Centauri :: 4op)
{0, 1, 1, 0, 0}, //Bank 20, AIL (Guilty, Orion Conspiracy, TNSFC ::4op)
{0, 1, 1, 0, 0}, //Bank 21, AIL (Magic Carpet 2)
{0, 1, 1, 0, 0}, //Bank 22, AIL (Nemesis)
{0, 1, 1, 0, 0}, //Bank 23, AIL (Jagged Alliance)
{0, 1, 1, 0, 0}, //Bank 24, AIL (When Two Worlds War :: 4op, MISSING INSTRUMENTS)
{0, 1, 1, 0, 0}, //Bank 25, AIL (Bards Tale Construction :: MISSING INSTRUMENTS)
{0, 1, 1, 0, 0}, //Bank 24, AIL (When Two Worlds War :MISS-INS:)
{0, 1, 1, 0, 0}, //Bank 25, AIL (Bards Tale Construction :MISS-INS:)
{0, 1, 1, 0, 0}, //Bank 26, AIL (Return to Zork)
{0, 1, 1, 0, 0}, //Bank 27, AIL (Theme Hospital)
{0, 1, 1, 0, 0}, //Bank 28, AIL (National Hockey League PA)
@ -10451,25 +10451,25 @@ const AdlBankSetup adlbanksetup[74] =
{0, 1, 1, 0, 0}, //Bank 33, AIL (Death Gate)
{0, 1, 1, 0, 0}, //Bank 34, AIL (FIFA International Soccer)
{0, 1, 1, 0, 0}, //Bank 35, AIL (Starship Invasion)
{0, 1, 1, 0, 0}, //Bank 36, AIL (Super Street Fighter 2 :: 4op)
{0, 1, 1, 0, 0}, //Bank 37, AIL (Lords of the Realm :: MISSING INSTRUMENTS)
{0, 1, 1, 0, 0}, //Bank 36, AIL (Super Street Fighter 2 :4op:)
{0, 1, 1, 0, 0}, //Bank 37, AIL (Lords of the Realm :MISS-INS:)
{0, 1, 1, 0, 0}, //Bank 38, AIL (SimFarm, SimHealth :: 4op)
{0, 1, 1, 0, 0}, //Bank 39, AIL (SimFarm, Settlers, Serf City)
{0, 1, 1, 0, 0}, //Bank 40, AIL (Caesar 2 :: partially 4op, MISSING INSTRUMENTS)
{0, 1, 1, 0, 0}, //Bank 40, AIL (Caesar 2, :p4op::MISS-INS:)
{0, 1, 1, 0, 0}, //Bank 41, AIL (Syndicate Wars)
{0, 1, 1, 0, 0}, //Bank 42, AIL (Bubble Bobble Feat. Rainbow Islands, Z)
{0, 1, 1, 0, 0}, //Bank 43, AIL (Warcraft)
{0, 1, 1, 0, 0}, //Bank 44, AIL (Terra Nova Strike Force Centuri :: partially 4op)
{0, 1, 1, 0, 0}, //Bank 45, AIL (System Shock :: partially 4op)
{0, 1, 1, 0, 0}, //Bank 44, AIL (Terra Nova Strike Force Centuri :p4op:)
{0, 1, 1, 0, 0}, //Bank 45, AIL (System Shock :p4op:)
{0, 1, 1, 0, 0}, //Bank 46, AIL (Advanced Civilization)
{0, 1, 1, 0, 0}, //Bank 47, AIL (Battle Chess 4000 :: partially 4op, melodic only)
{0, 1, 1, 0, 0}, //Bank 48, AIL (Ultimate Soccer Manager :: partially 4op)
{0, 1, 1, 0, 0}, //Bank 49, AIL (Air Bucks, Blue And The Gray, America Invades, Terminator 2029)
{0, 1, 1, 0, 0}, //Bank 47, AIL (Battle Chess 4000 :p4op:)
{0, 1, 1, 0, 0}, //Bank 48, AIL (Ultimate Soccer Manager :p4op:)
{0, 1, 1, 0, 0}, //Bank 49, AIL (Air Bucks, Blue And The Gray, etc)
{0, 1, 1, 0, 0}, //Bank 50, AIL (Ultima Underworld 2)
{0, 1, 1, 0, 0}, //Bank 51, AIL (Kasparov's Gambit)
{0, 1, 1, 0, 0}, //Bank 52, AIL (High Seas Trader :: MISSING INSTRUMENTS)
{0, 0, 0, 0, 0}, //Bank 53, AIL (Master of Magic, Master of Orion 2 :: 4op, std percussion)
{0, 0, 0, 0, 0}, //Bank 54, AIL (Master of Magic, Master of Orion 2 :: 4op, orchestral percussion)
{0, 1, 1, 0, 0}, //Bank 52, AIL (High Seas Trader :MISS-INS:)
{0, 0, 0, 0, 0}, //Bank 53, AIL (Master of Magic, :4op: std percussion)
{0, 0, 0, 0, 0}, //Bank 54, AIL (Master of Magic, :4op: orchestral percussion)
{0, 0, 0, 0, 0}, //Bank 55, SB (Action Soccer)
{0, 0, 0, 0, 0}, //Bank 56, SB (3d Cyberpuck :: melodic only)
{0, 0, 0, 0, 0}, //Bank 57, SB (Simon the Sorcerer :: melodic only)

View file

@ -108,7 +108,7 @@ ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank)
if(static_cast<uint32_t>(bankno) >= NumBanks)
{
char errBuf[150];
std::snprintf(errBuf, 150, "Embedded bank number may only be 0..%u!\n", (NumBanks - 1));
snprintf(errBuf, 150, "Embedded bank number may only be 0..%u!\n", (NumBanks - 1));
play->setErrorString(errBuf);
return -1;
}
@ -139,7 +139,7 @@ ADLMIDI_EXPORT int adl_setNumFourOpsChn(ADL_MIDIPlayer *device, int ops4)
if((unsigned int)ops4 > 6 * play->m_setup.NumCards)
{
char errBuff[250];
std::snprintf(errBuff, 250, "number of four-op channels may only be 0..%u when %u OPL3 cards are used.\n", (6 * (play->m_setup.NumCards)), play->m_setup.NumCards);
snprintf(errBuff, 250, "number of four-op channels may only be 0..%u when %u OPL3 cards are used.\n", (6 * (play->m_setup.NumCards)), play->m_setup.NumCards);
play->setErrorString(errBuff);
return -1;
}

View file

@ -103,7 +103,8 @@ enum WOPL_InstrumentFlags
{
WOPL_Flags_NONE = 0,
WOPL_Flag_Enable4OP = 0x01,
WOPL_Flag_Pseudo4OP = 0x02
WOPL_Flag_Pseudo4OP = 0x02,
WOPL_Flag_NoSound = 0x04,
};
struct WOPL_Inst
@ -151,6 +152,7 @@ static bool readInstrument(MIDIplay::fileReader &file, WOPL_Inst &ins, uint16_t
uint8_t flags = idata[39];
ins.adlins.flags = (flags & WOPL_Flag_Enable4OP) && (flags & WOPL_Flag_Pseudo4OP) ? adlinsdata::Flag_Pseudo4op : 0;
ins.adlins.flags|= (flags & WOPL_Flag_NoSound) ? adlinsdata::Flag_NoSound : 0;
ins.fourOps = (flags & WOPL_Flag_Enable4OP) || (flags & WOPL_Flag_Pseudo4OP);
ins.op[0].feedconn = (idata[40]);

View file

@ -319,7 +319,7 @@ bool MIDIplay::buildTrackData()
evtPos.delay = ReadVarLenEx(&trackPtr, end, ok);
if(!ok)
{
int len = std::sprintf(error, "buildTrackData: Can't read variable-length value at begin of track %d.\n", (int)tk);
int len = snprintf(error, 150, "buildTrackData: Can't read variable-length value at begin of track %d.\n", (int)tk);
if((len > 0) && (len < 150))
errorString += std::string(error, (size_t)len);
return false;
@ -347,7 +347,7 @@ bool MIDIplay::buildTrackData()
event = parseEvent(&trackPtr, end, status);
if(!event.isValid)
{
int len = std::sprintf(error, "buildTrackData: Fail to parse event in the track %d.\n", (int)tk);
int len = snprintf(error, 150, "buildTrackData: Fail to parse event in the track %d.\n", (int)tk);
if((len > 0) && (len < 150))
errorString += std::string(error, (size_t)len);
return false;
@ -1031,7 +1031,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
{
if(!caugh_missing_banks_melodic.count(bank))
{
hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing percussion bank %i (patch %i)", channel, bank, midiins);
hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing percussion MIDI bank %i (patch %i)", channel, bank, midiins);
caugh_missing_banks_melodic.insert(bank);
}
}
@ -1046,7 +1046,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
{
if(!caugh_missing_banks_percussion.count(bank))
{
hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing melodic bank %i (patch %i)", channel, bank, midiins);
hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing melodic MIDI bank %i (patch %i)", channel, bank, midiins);
caugh_missing_banks_percussion.insert(bank);
}
}
@ -1060,29 +1060,48 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
if(midiins == 48 || midiins == 50) vol /= 4; // HACK
*/
//if(midiins == 56) vol = vol*6/10; // HACK
//int meta = banks[opl.AdlBank][midiins];
const size_t meta = opl.GetAdlMetaNumber(midiins);
const adlinsdata &ains = opl.GetAdlMetaIns(meta);
size_t meta = opl.GetAdlMetaNumber(midiins);
const adlinsdata *ains = &opl.GetAdlMetaIns(meta);
int16_t tone = note;
if(ains.tone)
if(!isPercussion && !isXgPercussion && (bank > 0)) // For non-zero banks
{
if(ains->flags & adlinsdata::Flag_NoSound)
{
if(hooks.onDebugMessage)
{
if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)))
{
hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Caugh a blank instrument %i (offset %i) in the MIDI bank %u", channel, Ch[channel].patch, midiins, bank);
caugh_missing_instruments.insert(static_cast<uint8_t>(midiins));
}
}
bank = 0;
midiins = Ch[channel].patch;
meta = opl.GetAdlMetaNumber(midiins);
ains = &opl.GetAdlMetaIns(meta);
}
}
if(ains->tone)
{
/*if(ains.tone < 20)
tone += ains.tone;
else*/
if(ains.tone < 128)
tone = ains.tone;
if(ains->tone < 128)
tone = ains->tone;
else
tone -= ains.tone - 128;
tone -= ains->tone - 128;
}
//uint16_t i[2] = { ains.adlno1, ains.adlno2 };
bool pseudo_4op = ains.flags & adlinsdata::Flag_Pseudo4op;
bool pseudo_4op = ains->flags & adlinsdata::Flag_Pseudo4op;
MIDIchannel::NoteInfo::Phys voices[2] =
{
{ains.adlno1, false},
{ains.adlno2, pseudo_4op}
{ains->adlno1, false},
{ains->adlno2, pseudo_4op}
};
if((opl.AdlPercussionMode == 1) && PercussionMap[midiins & 0xFF])
@ -1090,7 +1109,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity)
if(hooks.onDebugMessage)
{
if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)) && (ains.flags & adlinsdata::Flag_NoSound))
if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)) && (ains->flags & adlinsdata::Flag_NoSound))
{
hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing instrument %i", channel, midiins);
caugh_missing_instruments.insert(static_cast<uint8_t>(midiins));
@ -2624,12 +2643,12 @@ ADLMIDI_EXPORT void AdlInstrumentTester::NextAdl(int offset)
if(ains.tone)
{
/*if(ains.tone < 20)
std::sprintf(ToneIndication, "+%-2d", ains.tone);
snprintf(ToneIndication, 8, "+%-2d", ains.tone);
else*/
if(ains.tone < 128)
std::sprintf(ToneIndication, "=%-2d", ains.tone);
snprintf(ToneIndication, 8, "=%-2d", ains.tone);
else
std::sprintf(ToneIndication, "-%-2d", ains.tone - 128);
snprintf(ToneIndication, 8, "-%-2d", ains.tone - 128);
}
std::printf("%s%s%s%u\t",
ToneIndication,

View file

@ -280,10 +280,14 @@ bool OPNMIDIplay::LoadBank(OPNMIDIplay::fileReader &fr)
size_t off = 37 + op * 7;
std::memcpy(data.OPS[op].data, idata + off, 7);
}
meta.flags = 0;
if(version >= 2)
{
meta.ms_sound_kon = toUint16BE(idata + 65);
meta.ms_sound_koff = toUint16BE(idata + 67);
if((meta.ms_sound_kon == 0) && (meta.ms_sound_koff == 0))
meta.flags |= opnInstMeta::Flag_NoSound;
}
else
{
@ -295,7 +299,6 @@ bool OPNMIDIplay::LoadBank(OPNMIDIplay::fileReader &fr)
meta.opnno2 = uint16_t(opn.dynamic_instruments.size());
/* Junk, delete later */
meta.flags = 0;
meta.fine_tune = 0.0;
/* Junk, delete later */

View file

@ -280,7 +280,7 @@ bool OPNMIDIplay::buildTrackData()
evtPos.delay = ReadVarLenEx(&trackPtr, end, ok);
if(!ok)
{
int len = std::sprintf(error, "buildTrackData: Can't read variable-length value at begin of track %d.\n", (int)tk);
int len = snprintf(error, 150, "buildTrackData: Can't read variable-length value at begin of track %d.\n", (int)tk);
if((len > 0) && (len < 150))
errorString += std::string(error, (size_t)len);
return false;
@ -308,7 +308,7 @@ bool OPNMIDIplay::buildTrackData()
event = parseEvent(&trackPtr, end, status);
if(!event.isValid)
{
int len = std::sprintf(error, "buildTrackData: Fail to parse event in the track %d.\n", (int)tk);
int len = snprintf(error, 150, "buildTrackData: Fail to parse event in the track %d.\n", (int)tk);
if((len > 0) && (len < 150))
errorString += std::string(error, (size_t)len);
return false;
@ -981,7 +981,7 @@ bool OPNMIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocit
{
if(!caugh_missing_banks_melodic.count(bank))
{
hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing percussion bank %i (patch %i)", channel, bank, midiins);
hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing percussion MIDI bank %i (patch %i)", channel, bank, midiins);
caugh_missing_banks_melodic.insert(bank);
}
}
@ -996,7 +996,7 @@ bool OPNMIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocit
{
if(!caugh_missing_banks_melodic.count(bank))
{
hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing melodic bank %i (patch %i)", channel, bank, midiins);
hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing melodic MIDI bank %i (patch %i)", channel, bank, midiins);
caugh_missing_banks_melodic.insert(bank);
}
}
@ -1011,28 +1011,47 @@ bool OPNMIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocit
*/
//if(midiins == 56) vol = vol*6/10; // HACK
const size_t meta = opn.GetAdlMetaNumber(midiins);
const opnInstMeta &ains = opn.GetAdlMetaIns(meta);
size_t meta = opn.GetAdlMetaNumber(midiins);
const opnInstMeta *ains = &opn.GetAdlMetaIns(meta);
int16_t tone = note;
if(ains.tone)
if(!isPercussion && !isXgPercussion && (bank > 0)) // For non-zero banks
{
if(ains->flags & opnInstMeta::Flag_NoSound)
{
if(hooks.onDebugMessage)
{
if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)))
{
hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Caugh a blank instrument %i (offset %i) in the MIDI bank %u", channel, Ch[channel].patch, midiins, bank);
caugh_missing_instruments.insert(static_cast<uint8_t>(midiins));
}
}
bank = 0;
midiins = Ch[channel].patch;
meta = opn.GetAdlMetaNumber(midiins);
ains = &opn.GetAdlMetaIns(meta);
}
}
if(ains->tone)
{
/*if(ains.tone < 20)
tone += ains.tone;
else*/
if(ains.tone < 128)
tone = ains.tone;
if(ains->tone < 128)
tone = ains->tone;
else
tone -= ains.tone - 128;
tone -= ains->tone - 128;
}
uint16_t i[2] = { ains.opnno1, ains.opnno2 };
uint16_t i[2] = { ains->opnno1, ains->opnno2 };
//bool pseudo_4op = ains.flags & opnInstMeta::Flag_Pseudo8op;
//if((opn.AdlPercussionMode == 1) && PercussionMap[midiins & 0xFF]) i[1] = i[0];
if(hooks.onDebugMessage)
{
if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)) && (ains.flags & opnInstMeta::Flag_NoSound))
if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)) && (ains->flags & opnInstMeta::Flag_NoSound))
{
hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing instrument %i", channel, midiins);
caugh_missing_instruments.insert(static_cast<uint8_t>(midiins));
@ -2548,12 +2567,12 @@ retry_arpeggio:
// if(ains.tone)
// {
// /*if(ains.tone < 20)
// std::sprintf(ToneIndication, "+%-2d", ains.tone);
// snprintf(ToneIndication, 8, "+%-2d", ains.tone);
// else*/
// if(ains.tone < 128)
// std::sprintf(ToneIndication, "=%-2d", ains.tone);
// snprintf(ToneIndication, 8, "=%-2d", ains.tone);
// else
// std::sprintf(ToneIndication, "-%-2d", ains.tone - 128);
// snprintf(ToneIndication, 8, "-%-2d", ains.tone - 128);
// }
// std::printf("%s%s%s%u\t",
// ToneIndication,

View file

@ -357,7 +357,8 @@ namespace swrenderer
invertcolormap = !invertcolormap;
}
bool fullbright = !foggy && pspr->GetState()->GetFullbright();
const FState* const psprState = pspr->GetState();
bool fullbright = !foggy && (psprState == nullptr ? false : psprState->GetFullbright());
bool fadeToBlack = (vis.RenderStyle.Flags & STYLEF_FadeToBlack) != 0;
vis.Light.SetColormap(0, spriteshade, basecolormap, fullbright, invertcolormap, fadeToBlack);

View file

@ -66,13 +66,21 @@ class FastProjectile : Actor
int count = 8;
if (radius > 0)
{
while ( abs(Vel.X) >= radius * count || abs(Vel.Y) >= radius * count || abs(Vel.Z) >= height * count)
while (abs(Vel.X) >= radius * count || abs(Vel.Y) >= radius * count)
{
// we need to take smaller steps.
count += count;
}
}
if (height > 0)
{
while (abs(Vel.Z) >= height * count)
{
count += count;
}
}
// Handle movement
if (Vel != (0, 0, 0) || (pos.Z != floorz))
{

View file

@ -44,16 +44,16 @@ class RandomSpawner : Actor
{
while (di != null)
{
if (di.Name != 'None')
bool shouldSkip = (di.Name == 'None') || (nomonsters && IsMonster(di));
if (!shouldSkip)
{
if (!nomonsters || !IsMonster(di))
{
int amt = di.Amount;
if (amt < 0) amt = 1; // default value is -1, we need a positive value.
n += amt; // this is how we can weight the list.
}
di = di.Next;
int amt = di.Amount;
if (amt < 0) amt = 1; // default value is -1, we need a positive value.
n += amt; // this is how we can weight the list.
}
di = di.Next;
}
if (n == 0)
{ // Nothing left to spawn. They must have all been monsters, and monsters are disabled.