mirror of
https://github.com/ZDoom/Raze.git
synced 2024-12-18 16:41:49 +00:00
335 lines
7.8 KiB
Text
335 lines
7.8 KiB
Text
|
|
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,
|
|
|
|
};
|
|
|
|
enum AM_Mode
|
|
{
|
|
am_off,
|
|
am_overlay,
|
|
am_full,
|
|
am_count
|
|
}
|
|
|
|
enum EHudSize
|
|
{
|
|
Hud_Current = -1,
|
|
Hud_Frame50 = 0,
|
|
Hud_Frame60,
|
|
Hud_Frame70,
|
|
Hud_Frame80,
|
|
Hud_Frame90,
|
|
Hud_Stbar,
|
|
Hud_StbarOverlay,
|
|
Hud_Mini,
|
|
Hud_Full,
|
|
Hud_Althud,
|
|
Hud_Nothing,
|
|
Hud_MAX
|
|
}
|
|
|
|
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 automapMode;
|
|
native readonly int PlayClock;
|
|
|
|
native Array<@sectortype> Sectors;
|
|
native Array<@walltype> Walls;
|
|
|
|
}
|
|
|
|
struct MapRecord native
|
|
{
|
|
enum MIFlags
|
|
{
|
|
FORCEEOG = 1,
|
|
USERMAP = 2,
|
|
}
|
|
|
|
enum EMapFlags
|
|
{
|
|
LEVEL_NOINTERMISSION = 1,
|
|
LEVEL_SECRETEXITOVERRIDE = 2, // when given an explicit level number, override with secret exit in the map, mainly for compiling episodes out of single levels.
|
|
LEVEL_CLEARINVENTORY = 4,
|
|
LEVEL_CLEARWEAPONS = 8,
|
|
LEVEL_FORCENOEOG = 16, // RR E1L7 needs this to override its boss's death ending the game.
|
|
};
|
|
|
|
enum EMapGameFlags
|
|
{
|
|
LEVEL_RR_HULKSPAWN = 1,
|
|
LEVEL_RR_CLEARMOONSHINE = 2,
|
|
|
|
LEVEL_EX_COUNTDOWN = 4,
|
|
LEVEL_EX_TRAINING = 8,
|
|
LEVEL_EX_ALTSOUND = 16,
|
|
LEVEL_EX_MULTI = 32,
|
|
|
|
LEVEL_SW_SPAWNMINES = 64,
|
|
LEVEL_SW_BOSSMETER_SERPENT = 128,
|
|
LEVEL_SW_BOSSMETER_SUMO = 256,
|
|
LEVEL_SW_BOSSMETER_ZILLA = 512,
|
|
LEVEL_SW_DEATHEXIT_SERPENT = 1024,
|
|
LEVEL_SW_DEATHEXIT_SUMO = 2048,
|
|
LEVEL_SW_DEATHEXIT_ZILLA = 4096,
|
|
LEVEL_SW_DEATHEXIT_SERPENT_NEXT = 8192,
|
|
|
|
LEVEL_WT_BOSSSPAWN = 16384,
|
|
|
|
LEVEL_BOSSONLYCUTSCENE = 32768,
|
|
};
|
|
|
|
|
|
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 gameflags;
|
|
native readonly int levelNumber;
|
|
native readonly int cluster;
|
|
native readonly String InterBackground;
|
|
|
|
native readonly String nextMap;
|
|
native readonly String nextSecret;
|
|
|
|
//native readonly String messages[MAX_MESSAGES];
|
|
native readonly String author;
|
|
|
|
String GetLabelName()
|
|
{
|
|
if (flags & USERMAP) return StringTable.Localize("$MNU_USERMAP");
|
|
return labelName;
|
|
}
|
|
String DisplayName()
|
|
{
|
|
if (name == "") return labelName;
|
|
return StringTable.Localize(name);
|
|
}
|
|
|
|
native ClusterDef GetCluster();
|
|
}
|
|
|
|
struct ClusterDef
|
|
{
|
|
native readonly String name;
|
|
native readonly String InterBackground;
|
|
}
|
|
|
|
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 totaltime;
|
|
native readonly int playercount;
|
|
native readonly bool cheated;
|
|
native readonly bool endofgame;
|
|
}
|
|
|
|
// this only allows function getters to enable validation on the target.
|
|
struct CollisionData
|
|
{
|
|
int type;
|
|
int exbits;
|
|
voidptr hit; // do not access!
|
|
native walltype hitWall();
|
|
native sectortype hitSector();
|
|
native CoreActor hitActor();
|
|
native void setSector(sectortype s);
|
|
native void setWall(walltype w);
|
|
native void setActor(CoreActor a);
|
|
native void setVoid();
|
|
}
|
|
|
|
struct HitInfo
|
|
{
|
|
Vector3 hitpos;
|
|
sectortype hitSector;
|
|
walltype hitWall;
|
|
CoreActor hitActor;
|
|
}
|
|
|
|
struct Raze
|
|
{
|
|
const kAngleMask = 0x7FF;
|
|
const BAngToDegree = 360. / 2048.;
|
|
|
|
native static Color shadeToLight(int shade);
|
|
native static String PlayerName(int i);
|
|
static int bsin(double angle) { return int(sin(angle * (360. / 2048)) * 16384); }
|
|
static double bobval(double angle) { return sin(angle * (360. / 2048)); }
|
|
native static TextureID PickTexture(TextureID texid);
|
|
native static int GetBuildTime();
|
|
native static void forceSyncInput(int playeridx);
|
|
native static Font PickBigFont(String cmptext = "");
|
|
native static Font PickSmallFont(String cmptext = "");
|
|
native static int SoundEnabled();
|
|
native static void SetReverb(int r);
|
|
native static void SetReverbDelay(int d);
|
|
native static Sound FindSoundByResID(int id);
|
|
|
|
native static int tileflags(TextureID tex);
|
|
native static int tilesurface(TextureID tex);
|
|
|
|
native static sectortype updatesector(Vector2 pos, sectortype lastsect, double maxdist = 96);
|
|
native static sectortype, Vector3 clipmove(Vector3 pos, sectortype sect, Vector2 move, double walldist, double ceildist, double flordist, uint cliptype, CollisionData coll, int clipmoveboxtracenum = 3);
|
|
native static bool cansee(Vector3 start, sectortype startsec, Vector3 end, sectortype endsec);
|
|
native static int hitscan(Vector3 start, sectortype startsect, Vector3 vect, HitInfo hitinfo, uint cliptype, double maxrange = -1);
|
|
|
|
// game check shortcuts (todo: meake these compile time constant intrinsics)
|
|
|
|
static bool isDuke()
|
|
{
|
|
return gameinfo.gametype & GAMEFLAG_DUKE;
|
|
}
|
|
|
|
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 isRoute66()
|
|
{
|
|
return gameinfo.gametype & (GAMEFLAG_ROUTE66);
|
|
}
|
|
|
|
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 isVacation()
|
|
{
|
|
return gameinfo.gametype & GAMEFLAG_DUKEVACA;
|
|
}
|
|
|
|
static bool isShareware()
|
|
{
|
|
return gameinfo.gametype & GAMEFLAG_SHAREWARE;
|
|
}
|
|
|
|
static bool isBlood()
|
|
{
|
|
return gameinfo.gametype & GAMEFLAG_BLOOD;
|
|
}
|
|
|
|
static bool isSW()
|
|
{
|
|
return gameinfo.gametype & GAMEFLAG_SW;
|
|
}
|
|
|
|
// 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;
|
|
}
|
|
|
|
static void DrawScoreboard(int top)
|
|
{
|
|
// todo: reimplement this in a game independent fashion based on GZDoom's code.
|
|
// Right now, with no MP support there is no need, though.
|
|
}
|
|
|
|
static double, double setFreeAimVelocity(double vel, double zvel, double pitch, double zvspeed)
|
|
{
|
|
return vel * cos(pitch), sin(pitch) * zvspeed;
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
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();
|
|
|
|
}
|