2020-10-06 18:49:55 +00:00
|
|
|
|
|
|
|
enum EGameType
|
|
|
|
{
|
|
|
|
GAMEFLAG_DUKE = 0x00000001,
|
|
|
|
GAMEFLAG_NAM = 0x00000002,
|
|
|
|
GAMEFLAG_NAPALM = 0x00000004,
|
|
|
|
GAMEFLAG_WW2GI = 0x00000008,
|
|
|
|
GAMEFLAG_ADDON = 0x00000010,
|
|
|
|
GAMEFLAG_SHAREWARE = 0x00000020,
|
|
|
|
GAMEFLAG_DUKEBETA = 0x00000060, // includes 0x20 since it's a shareware beta
|
|
|
|
GAMEFLAG_PLUTOPAK = 0x00000080,
|
|
|
|
GAMEFLAG_RR = 0x00000100,
|
|
|
|
GAMEFLAG_RRRA = 0x00000200,
|
|
|
|
GAMEFLAG_RRALL = GAMEFLAG_RR | GAMEFLAG_RRRA,
|
|
|
|
GAMEFLAG_BLOOD = 0x00000800,
|
|
|
|
GAMEFLAG_SW = 0x00001000,
|
|
|
|
GAMEFLAG_POWERSLAVE = 0x00002000,
|
|
|
|
GAMEFLAG_EXHUMED = 0x00004000,
|
|
|
|
GAMEFLAG_PSEXHUMED = GAMEFLAG_POWERSLAVE | GAMEFLAG_EXHUMED, // the two games really are the same, except for the name and the publisher.
|
2021-04-25 23:24:57 +00:00
|
|
|
GAMEFLAG_WORLDTOUR = 0x00008000,
|
|
|
|
GAMEFLAG_DUKEDC = 0x00010000,
|
|
|
|
GAMEFLAG_DUKENW = 0x00020000,
|
|
|
|
GAMEFLAG_DUKEVACA = 0x00040000,
|
|
|
|
GAMEFLAG_BLOODCP = 0x00080000,
|
|
|
|
GAMEFLAG_ROUTE66 = 0x00100000,
|
|
|
|
GAMEFLAG_SWWANTON = 0x00200000,
|
|
|
|
GAMEFLAG_SWTWINDRAG = 0x00400000,
|
2020-10-06 18:49:55 +00:00
|
|
|
GAMEFLAGMASK = 0x0000FFFF, // flags allowed from grpinfo
|
|
|
|
|
|
|
|
// We still need these for the parsers.
|
|
|
|
GAMEFLAG_FURY = 0,
|
|
|
|
GAMEFLAG_DEER = 0,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
2021-04-22 17:59:45 +00:00
|
|
|
struct UserConfigStruct native
|
|
|
|
{
|
2021-04-25 18:02:40 +00:00
|
|
|
native readonly bool nomonsters;
|
|
|
|
native readonly bool nosound;
|
|
|
|
native readonly bool nologo;
|
2021-04-22 17:59:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
extend struct _
|
|
|
|
{
|
|
|
|
native @UserConfigStruct userConfig;
|
2021-04-25 18:02:40 +00:00
|
|
|
native readonly MapRecord currentLevel;
|
|
|
|
native readonly int paused;
|
2021-04-22 17:59:45 +00:00
|
|
|
}
|
2020-10-06 18:49:55 +00:00
|
|
|
|
2021-04-23 10:24:42 +00:00
|
|
|
struct MapRecord native
|
|
|
|
{
|
|
|
|
enum MIFlags
|
|
|
|
{
|
|
|
|
FORCEEOG = 1,
|
|
|
|
USERMAP = 2,
|
|
|
|
}
|
|
|
|
|
|
|
|
native readonly int parTime;
|
|
|
|
native readonly int designerTime;
|
|
|
|
native readonly String fileName;
|
|
|
|
native readonly String labelName;
|
|
|
|
native readonly String name;
|
|
|
|
native readonly String music;
|
|
|
|
native readonly int cdSongId;
|
|
|
|
native readonly int flags;
|
|
|
|
native readonly int levelNumber;
|
|
|
|
|
|
|
|
// The rest is only used by Blood
|
|
|
|
native readonly int nextLevel;
|
|
|
|
native readonly int nextSecret;
|
|
|
|
//native readonly String messages[MAX_MESSAGES];
|
|
|
|
native readonly String author;
|
|
|
|
|
|
|
|
String GetLabelName()
|
|
|
|
{
|
|
|
|
if (flags & USERMAP) return "$TXT_USERMAP";
|
|
|
|
return labelName;
|
|
|
|
}
|
|
|
|
String DisplayName()
|
|
|
|
{
|
|
|
|
if (name == "") return labelName;
|
|
|
|
return name;
|
|
|
|
}
|
2021-04-23 12:19:25 +00:00
|
|
|
int volumeNum()
|
|
|
|
{
|
|
|
|
return levelNumber / 1000;
|
|
|
|
}
|
2021-04-23 10:24:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2021-04-23 08:07:02 +00:00
|
|
|
struct Raze
|
2020-10-06 22:50:26 +00:00
|
|
|
{
|
2020-10-07 22:21:07 +00:00
|
|
|
static int calcSinTableValue(int ang)
|
|
|
|
{
|
|
|
|
return int(16384 * sin((360./2048) * ang));
|
|
|
|
}
|
|
|
|
|
2020-10-06 22:50:26 +00:00
|
|
|
native static Color shadeToLight(int shade);
|
2021-04-23 08:07:02 +00:00
|
|
|
native static void StopAllSounds();
|
|
|
|
native static bool SoundEnabled();
|
2021-04-25 18:02:40 +00:00
|
|
|
native static void StopMusic();
|
2021-04-23 08:07:02 +00:00
|
|
|
native static bool MusicEnabled();
|
2021-04-23 10:24:42 +00:00
|
|
|
native static String PlayerName(int i);
|
2021-04-25 18:02:40 +00:00
|
|
|
native static double GetTimeFrac();
|
2021-04-22 17:59:45 +00:00
|
|
|
|
2021-04-23 12:19:25 +00:00
|
|
|
static bool specialKeyEvent(InputEvent ev)
|
|
|
|
{
|
|
|
|
if (ev.type == InputEvent.Type_KeyDown || ev.type == InputEvent.Type_KeyUp)
|
|
|
|
{
|
|
|
|
int key = ev.KeyScan;
|
|
|
|
if (key == InputEvent.KEY_VOLUMEDOWN || key == InputEvent.KEY_VOLUMEUP || (key > InputEvent.KEY_LASTJOYBUTTON && key < InputEvent.KEY_PAD_LTHUMB_RIGHT)) return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2021-04-22 17:59:45 +00:00
|
|
|
// game check shortcuts
|
|
|
|
static bool isNam()
|
|
|
|
{
|
|
|
|
return gameinfo.gametype & (GAMEFLAG_NAM | GAMEFLAG_NAPALM);
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool isNamWW2GI()
|
|
|
|
{
|
|
|
|
return gameinfo.gametype & (GAMEFLAG_NAM | GAMEFLAG_NAPALM |GAMEFLAG_WW2GI);
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool isWW2GI()
|
|
|
|
{
|
|
|
|
return gameinfo.gametype & (GAMEFLAG_WW2GI);
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool isRR()
|
|
|
|
{
|
|
|
|
return gameinfo.gametype & (GAMEFLAG_RRALL);
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool isRRRA()
|
|
|
|
{
|
|
|
|
return gameinfo.gametype & (GAMEFLAG_RRRA);
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool isWorldTour()
|
|
|
|
{
|
|
|
|
return gameinfo.gametype & GAMEFLAG_WORLDTOUR;
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool isPlutoPak()
|
|
|
|
{
|
|
|
|
return gameinfo.gametype & GAMEFLAG_PLUTOPAK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool isShareware()
|
|
|
|
{
|
|
|
|
return gameinfo.gametype & GAMEFLAG_SHAREWARE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool isBlood()
|
|
|
|
{
|
|
|
|
return gameinfo.gametype & GAMEFLAG_BLOOD;
|
|
|
|
}
|
|
|
|
|
2021-04-23 10:24:42 +00:00
|
|
|
// Dont know yet how to best export this, so for now these are just placeholders as MP is not operational anyway.
|
|
|
|
static int playerPalette(int i)
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int playerFrags(int i, int j)
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int playerFraggedSelf(int i)
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2020-10-06 22:50:26 +00:00
|
|
|
}
|
|
|
|
|
2020-10-06 18:05:51 +00:00
|
|
|
/*
|
2020-10-05 22:34:35 +00:00
|
|
|
struct TileFiles
|
|
|
|
{
|
|
|
|
native static TextureID GetTexture(int tile, bool animate = false);
|
|
|
|
}
|
2020-10-06 18:05:51 +00:00
|
|
|
*/
|
2020-10-06 23:00:43 +00:00
|
|
|
|
|
|
|
class RazeMenuDelegate : MenuDelegateBase
|
|
|
|
{
|
|
|
|
// Todo: Fix this so that it can be done outside the games' sound modules.
|
|
|
|
native override void PlaySound(name sname);
|
2020-10-06 23:12:57 +00:00
|
|
|
// This is native for security reasons. Having a script call to open the console could be subject to abuse.
|
|
|
|
native override void MenuDismissed();
|
|
|
|
|
2020-10-06 23:00:43 +00:00
|
|
|
}
|
2020-10-28 18:27:12 +00:00
|
|
|
|
|
|
|
// dummy definitions for the status bar. We need them to create the class descriptors
|
|
|
|
|
|
|
|
class BaseStatusBar : StatusBarCore native
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
|
|
class BloodStatusBar : BaseStatusBar native
|
|
|
|
{}
|
|
|
|
|
|
|
|
class DukeCommonStatusBar : BaseStatusBar native
|
|
|
|
{}
|
|
|
|
|
|
|
|
class DukeStatusBar : DukeCommonStatusBar native
|
|
|
|
{}
|
|
|
|
|
|
|
|
class RedneckStatusBar : DukeCommonStatusBar native
|
|
|
|
{}
|
|
|
|
|
|
|
|
class ExhumedStatusBar : BaseStatusBar native
|
|
|
|
{}
|
|
|
|
|
|
|
|
class SWStatusBar : BaseStatusBar native
|
|
|
|
{}
|