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. GAMEFLAG_WORLDTOUR = 0x00008000, GAMEFLAG_DUKEDC = 0x00010000, GAMEFLAG_DUKENW = 0x00020000, GAMEFLAG_DUKEVACA = 0x00040000, GAMEFLAG_BLOODCP = 0x00080000, GAMEFLAG_ROUTE66 = 0x00100000, GAMEFLAG_SWWANTON = 0x00200000, GAMEFLAG_SWTWINDRAG = 0x00400000, GAMEFLAGMASK = 0x0000FFFF, // flags allowed from grpinfo // We still need these for the parsers. GAMEFLAG_FURY = 0, GAMEFLAG_DEER = 0, }; struct UserConfigStruct native { native readonly bool nomonsters; native readonly bool nosound; native readonly bool nologo; } extend struct _ { native @UserConfigStruct userConfig; native readonly MapRecord currentLevel; native readonly int paused; } 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; native readonly int cluster; // 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; } } struct SummaryInfo native { native readonly int kills; native readonly int maxkills; native readonly int secrets; native readonly int maxsecrets; native readonly int supersecrets; native readonly int time; native readonly int playercount; native readonly bool cheated; native readonly bool endofgame; } struct Raze { static int calcSinTableValue(int ang) { return int(16384 * sin((360./2048) * ang)); } native static Color shadeToLight(int shade); native static void StopAllSounds(); native static bool SoundEnabled(); native static void StopMusic(); native static bool MusicEnabled(); native static String PlayerName(int i); native static double GetTimeFrac(); 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; } // 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; } // 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; } } /* struct TileFiles { native static TextureID GetTexture(int tile, bool animate = false); } */ class RazeMenuDelegate : MenuDelegateBase { // Todo: Fix this so that it can be done outside the games' sound modules. native override void PlaySound(name sname); // This is native for security reasons. Having a script call to open the console could be subject to abuse. native override void MenuDismissed(); } // 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 {}