Initial commit
This commit is contained in:
commit
1d37b6345f
13
ANIMDEFS.txt
Normal file
13
ANIMDEFS.txt
Normal file
|
@ -0,0 +1,13 @@
|
|||
// Remove Animations
|
||||
flat NUKAGE1 pic 1 tics 1 pic 1 tics 1
|
||||
flat LAVA1 pic 1 tics 1 pic 1 tics 1
|
||||
flat SLIME01 pic 1 tics 1 pic 1 tics 1
|
||||
flat FWATER1 pic 1 tics 1 pic 1 tics 1
|
||||
flat BLOOD1 pic 1 tics 1 pic 1 tics 1
|
||||
|
||||
// warping Flats
|
||||
warp2 flat NUKAGE1
|
||||
warp flat LAVA1
|
||||
warp2 flat SLIME01
|
||||
warp2 flat FWATER1
|
||||
warp flat BLOOD1
|
5
MAPINFO.txt
Normal file
5
MAPINFO.txt
Normal file
|
@ -0,0 +1,5 @@
|
|||
gameinfo
|
||||
{
|
||||
// StatusBarClass = "RLStatusBar"
|
||||
AddEventHandlers = "RLHUDHandler"
|
||||
}
|
44
ZSCRIPT.txt
Normal file
44
ZSCRIPT.txt
Normal file
|
@ -0,0 +1,44 @@
|
|||
version "3.7.2"
|
||||
|
||||
// Base
|
||||
#include "ZScript/Util.zs"
|
||||
#include "ZScript/Player.zs"
|
||||
#include "ZScript/Weapon.zs"
|
||||
#include "ZScript/StatusBar.zs"
|
||||
|
||||
// Structs
|
||||
#include "ZScript/Structs.zs"
|
||||
|
||||
class RLHUDHandler : StaticEventHandler
|
||||
{
|
||||
RLBasePlayer RLPlayer;
|
||||
|
||||
Vector2 Size;
|
||||
|
||||
override void OnRegister()
|
||||
{
|
||||
Super.OnRegister();
|
||||
|
||||
RLPlayer = RLBasePlayer(Players[0].MO);
|
||||
|
||||
Size = (320, 240);
|
||||
}
|
||||
|
||||
override void RenderOverlay(RenderEvent e)
|
||||
{
|
||||
Super.RenderOverlay(e);
|
||||
|
||||
DrawTexture("MEDIA0", 0, 20);
|
||||
DrawBigText("" .. RLPlayer.Medikit, "Brick", 16, 16);
|
||||
}
|
||||
|
||||
ui void DrawBigText(string text, Color color, float x, float y) const
|
||||
{
|
||||
Screen.DrawText(Font.FindFont("BIGFONT"), color, x, y, text, DTA_VirtualWidth, int(Size.X), DTA_VirtualHeight, int(Size.Y));
|
||||
}
|
||||
|
||||
ui void DrawTexture(string texture, float x, float y) const
|
||||
{
|
||||
Screen.DrawTexture(TexMan.CheckForTexture(texture, TexMan.Type_Any), true, x, y, DTA_VirtualWidth, int(Size.X), DTA_VirtualHeight, int(Size.Y), DTA_CenterOffset, true);
|
||||
}
|
||||
}
|
20
ZScript/Player.zs
Normal file
20
ZScript/Player.zs
Normal file
|
@ -0,0 +1,20 @@
|
|||
class RLBasePlayer : PlayerPawn;
|
||||
|
||||
RLStats Stats;
|
||||
|
||||
int Medikit;
|
||||
int MedikitMax;
|
||||
|
||||
override void PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
|
||||
Stats.Init();
|
||||
|
||||
MedikitMax = 100;
|
||||
}
|
||||
|
||||
override void Tick()
|
||||
{
|
||||
Super.Tick();
|
||||
}
|
463
ZScript/StatusBar.zs
Normal file
463
ZScript/StatusBar.zs
Normal file
|
@ -0,0 +1,463 @@
|
|||
class RLStatusBar : BaseStatusBar;
|
||||
|
||||
static const string ArmorList[] =
|
||||
{
|
||||
// HELLO ELEMENT BLOAT MY OLD FRIEND
|
||||
"RLGenericArmor",
|
||||
"RLGreenArmor",
|
||||
"RLBlueArmor",
|
||||
"RLRedArmor",
|
||||
|
||||
// Assembled armors
|
||||
// Basic
|
||||
"RLTowerShieldArmor",
|
||||
"RLTacticalArmor",
|
||||
"RLBallisticGreenArmor",
|
||||
"RLBallisticBlueArmor",
|
||||
"RLBallisticRedArmor",
|
||||
"RLFireproofGreenArmor",
|
||||
"RLFireproofBlueArmor",
|
||||
"RLFireproofRedArmor",
|
||||
"RLNanofiberGreenArmor",
|
||||
"RLNanofiberBlueArmor",
|
||||
"RLNanofiberRedArmor",
|
||||
"RLPowerGreenArmor",
|
||||
"RLPowerBlueArmor",
|
||||
"RLPowerRedArmor",
|
||||
|
||||
// Advanced
|
||||
"RLFireshieldArmor",
|
||||
"RLAblativeGreenArmor",
|
||||
"RLAblativeBlueArmor",
|
||||
"RLAblativeRedArmor",
|
||||
"RLNanofiberSkinGreenArmor",
|
||||
"RLNanofiberSkinBlueArmor",
|
||||
"RLNanofiberSkinRedArmor",
|
||||
|
||||
// Master
|
||||
"RLCerberusArmor",
|
||||
"RLCybernanoGreenArmor",
|
||||
"RLCybernanoBlueArmor",
|
||||
"RLCybernanoRedArmor",
|
||||
|
||||
// dis be exotic shit yo
|
||||
"RLBallisticShieldArmor",
|
||||
"RLBallisticVestArmor",
|
||||
"RLBulletProofVestArmor",
|
||||
"RLCyberwarriorArmor",
|
||||
"RLDuelistArmor",
|
||||
"RLEnergyShieldedVestArmor",
|
||||
"RLEnergyShieldArmor",
|
||||
"RLGothicArmor",
|
||||
"RLMedicalArmor",
|
||||
"RLPhaseshiftArmor",
|
||||
"RLPlasmaShieldArmor",
|
||||
"RLRepulsionWaveSuitArmor",
|
||||
"RLSurvivalMediArmor",
|
||||
"RLOnyxArmor",
|
||||
"RLOverchargeSystemArmor",
|
||||
|
||||
// Many superiors
|
||||
"RLNuclearArmor",
|
||||
"RLRechargeableEnergyShieldArmor",
|
||||
|
||||
// Uniques
|
||||
"RLBerserkerArmor",
|
||||
"RLBerserkPowersuitArmor",
|
||||
"RLBlazingPhoenixDeviceSuitArmor",
|
||||
"RLCyberneticArmor",
|
||||
"RLEnergyDischargeHarnessArmor",
|
||||
"RLFrontlineEngineerSuitArmor",
|
||||
"RLGeosGoldenGauntletArmor",
|
||||
"RLJetpackArmor",
|
||||
"RLKateMatterstormHarnessArmor",
|
||||
"RLKyleTeslaboltArmor",
|
||||
"RLLavaArmor",
|
||||
"RLMaleksArmor",
|
||||
"RLMedicalPowerArmor",
|
||||
"RLNanoAblativeArmor",
|
||||
"RLNuclearPowerArmor",
|
||||
"RLPrototypeAssaultShieldArmor",
|
||||
"RLRoystensCommandArmor",
|
||||
"RLRyanCordellPsychicAmplifierSuitArmor",
|
||||
"RLShieldedArmor",
|
||||
"RLSoloOperativeSuitArmor",
|
||||
"RLTacticalAssemblerSuitArmor",
|
||||
"RLTerminusEst13BattlesuitArmor",
|
||||
"RLTorgueBlastplateArmor",
|
||||
"RLWildWeaselPeacekeeperArmor",
|
||||
"RLXaserPowerArmor",
|
||||
"RLZeroDiamondAssaultforceArmor",
|
||||
|
||||
// de-de-demon
|
||||
"RLDemonicCarapaceArmor",
|
||||
"RLNecroArmor",
|
||||
"RLSoulshatterArmor",
|
||||
|
||||
// LEGENDARIES? What for?!
|
||||
"RLAngelicArmor",
|
||||
"RLTheBeeArmor",
|
||||
"RLReactiveShieldSystemArmor",
|
||||
"RLChronotrooperArmor",
|
||||
|
||||
// Onyx modded
|
||||
"RLOModGreenArmor",
|
||||
"RLOModBlueArmor",
|
||||
"RLOModRedArmor",
|
||||
"RLOModBallisticVestArmor",
|
||||
"RLOModBulletProofVestArmor",
|
||||
"RLOModCyberwarriorArmor",
|
||||
"RLOModDuelistArmor",
|
||||
"RLOModEnergyShieldedVestArmor",
|
||||
"RLOModGothicArmor",
|
||||
"RLOModMedicalArmor",
|
||||
"RLOModPhaseshiftArmor",
|
||||
"RLOModRepulsionWaveSuitArmor",
|
||||
"RLOModSurvivalMediArmor",
|
||||
|
||||
// Cybernetic madness
|
||||
"RLCyberneticArmorBulk",
|
||||
"RLCyberneticArmorPower",
|
||||
"RLCyberneticArmorAgility",
|
||||
"RLCyberneticArmorTechnical",
|
||||
"RLCyberneticArmorSniper",
|
||||
"RLCyberneticArmorFirestorm",
|
||||
"RLCyberneticArmorNano",
|
||||
"RLCyberneticArmorOnyx",
|
||||
|
||||
// Boots
|
||||
"RLGenericBoots",
|
||||
"RLSteelBoots",
|
||||
"RLProtectiveBoots",
|
||||
"RLPlasteelBoots",
|
||||
|
||||
// Exotic time!
|
||||
"RLAcidProofBoots",
|
||||
"RLGothicBoots",
|
||||
"RLPhaseshiftBoots",
|
||||
"RLShockwaveBoots",
|
||||
|
||||
// Unique booty
|
||||
"RLEnviroBoots",
|
||||
"RLFrontlineEngineerBoots",
|
||||
"RLLavaBoots",
|
||||
"RLLeonidasBoots",
|
||||
"RLNuclearPowerBoots",
|
||||
"RLNyarlaptotepsBoots",
|
||||
"RLRoystensCombatBoots",
|
||||
"RLSoloOperativeBoots",
|
||||
"RLTacticalAssemblerBoots",
|
||||
"RLTorgueBlastBoots",
|
||||
|
||||
// DEEEEEEEEMONIC
|
||||
"RLDemonicBoots",
|
||||
|
||||
// Legenboots
|
||||
"RLAngelicBoots",
|
||||
|
||||
// Assemblo boots
|
||||
|
||||
// Basic
|
||||
"RLTacticalBoots",
|
||||
"RLFireproofSteelBoots",
|
||||
"RLFireproofProtectiveBoots",
|
||||
"RLFireproofPlasteelBoots",
|
||||
"RLGrapplingSteelBoots",
|
||||
"RLGrapplingProtectiveBoots",
|
||||
"RLGrapplingPlasteelBoots",
|
||||
|
||||
// Advanced
|
||||
"RLEnviromentalSteelBoots",
|
||||
"RLEnviromentalProtectiveBoots",
|
||||
"RLEnviromentalPlasteelBoots",
|
||||
"RLAntigravSteelBoots",
|
||||
"RLAntigravProtectiveBoots",
|
||||
"RLAntigravPlasteelBoots",
|
||||
|
||||
// Master
|
||||
"RLCerberusBoots"
|
||||
};
|
||||
|
||||
static const name ModColors[] =
|
||||
{
|
||||
"Red",
|
||||
"Blue",
|
||||
"Green",
|
||||
"Yellow",
|
||||
"White",
|
||||
"Orange",
|
||||
"Purple",
|
||||
"DarkRed"
|
||||
};
|
||||
|
||||
const LeftYBase = -20;
|
||||
const RightYBase = -20;
|
||||
|
||||
RLBasePlayer RLPlayer;
|
||||
|
||||
HUDFont BigFont;
|
||||
HUDFont SmallFont;
|
||||
HUDFont IndexFont;
|
||||
HUDFont AmountFont;
|
||||
|
||||
InventoryBarState InvBar;
|
||||
|
||||
DynamicValueInterpolator HealthInterp;
|
||||
DynamicValueInterpolator ArmorInterp;
|
||||
|
||||
int LeftY;
|
||||
int RightY;
|
||||
|
||||
override void Init()
|
||||
{
|
||||
Super.Init();
|
||||
|
||||
SetSize(0, 320, 240);
|
||||
|
||||
InitFonts();
|
||||
|
||||
InvBar = InventoryBarState.Create();
|
||||
|
||||
HealthInterp = DynamicValueInterpolator.Create(100, 0.25, 1, 8);
|
||||
ArmorInterp = DynamicValueInterpolator.Create(0, 0.25, 1, 8);
|
||||
}
|
||||
|
||||
override void Tick()
|
||||
{
|
||||
Super.Tick();
|
||||
|
||||
RLPlayer = RLBasePlayer(CPlayer.MO);
|
||||
|
||||
if (RLplayer == null || RLplayer.Health <= 0)
|
||||
return;
|
||||
|
||||
HealthInterp.Update(RLplayer.Health);
|
||||
ArmorInterp.Update(GetArmorAmount());
|
||||
}
|
||||
|
||||
override void Draw(int state, double ticFrac)
|
||||
{
|
||||
Super.Draw(state, ticFrac);
|
||||
|
||||
if (!(state == HUD_StatusBar || state == HUD_Fullscreen) ||
|
||||
RLplayer == null || RLplayer.Health <= 0)
|
||||
return;
|
||||
|
||||
LeftY = LeftYBase;
|
||||
RightY = RightYBase;
|
||||
|
||||
BeginHUD();
|
||||
|
||||
DrawMugArea();
|
||||
DrawTimers();
|
||||
DrawAmmoArea();
|
||||
DrawWeaponInfo();
|
||||
DrawInventory();
|
||||
}
|
||||
|
||||
void InitFonts()
|
||||
{
|
||||
Font fnt;
|
||||
|
||||
fnt = "HUDFONT_DOOM";
|
||||
BigFont = HUDFont.Create(fnt, fnt.GetCharWidth("0"), true, 4, 1);
|
||||
|
||||
fnt = "SMALLFONT";
|
||||
SmallFont = HUDFont.Create(fnt, 0, false, 1, 1);
|
||||
|
||||
fnt = "INDEXFONT_DOOM";
|
||||
IndexFont = HUDFont.Create(fnt, fnt.GetCharWidth("0"), true);
|
||||
|
||||
fnt = "INDEXFONT";
|
||||
AmountFont = HUDFont.Create(fnt);
|
||||
}
|
||||
|
||||
void DrawMugArea()
|
||||
{
|
||||
Inventory armor = RLPlayer.FindInventory("BasicArmor");
|
||||
|
||||
DrawTexture(GetMugShot(5), (0, -36), DI_ITEM_OFFSETS);
|
||||
|
||||
DrawString(BigFont, FormatNumber(HealthInterp.GetValue(), 3), (36, LeftY));
|
||||
|
||||
LeftY -= 18;
|
||||
|
||||
if (armor != null && GetArmorAmount() > 0)
|
||||
DrawString(BigFont, FormatNumber(ArmorInterp.GetValue(), 3), (36, LeftY), 0, Font.FindFontColor("Green"));
|
||||
|
||||
LeftY -= 18;
|
||||
|
||||
for (int i = 0; i < ArmorList.Size(); i++)
|
||||
{
|
||||
if (!Type.ClassExists(ArmorList[i] .. "Pickup") || !RLPlayer.FindInventory(ArmorList[i] .. "Token"))
|
||||
continue;
|
||||
|
||||
TextureID icon = GetIconForItem((Class<Inventory>)(ArmorList[i] .. "Pickup"));
|
||||
int width, height;
|
||||
bool boots = ArmorList[i].IndexOf("Boots") > 0;
|
||||
|
||||
[width, height] = TexMan.GetSize(icon);
|
||||
|
||||
DrawTexture(icon, (17, boots ? -48 - height : -40));
|
||||
}
|
||||
}
|
||||
|
||||
void DrawTimers()
|
||||
{
|
||||
int radiation = RLPlayer.GetEffectTicsForItem("RadSuit");
|
||||
int infrared = RLPlayer.GetEffectTicsForItem("Infrared");
|
||||
int blur = RLPlayer.GetEffectTicsForItem("BlurSphere");
|
||||
int invuln = RLPlayer.GetEffectTicsForItem("InvulnerabilitySphere");
|
||||
int air = CPlayer.air_finished - Level.Time;
|
||||
|
||||
if (radiation > 0)
|
||||
{
|
||||
DrawString(BigFont, FormatNumber(radiation / 35 + 1, 3), (36, LeftY), 0, Font.FindFontColor("DarkGreen"));
|
||||
|
||||
LeftY -= 18;
|
||||
}
|
||||
|
||||
if (infrared > 0)
|
||||
{
|
||||
DrawString(BigFont, FormatNumber(infrared / 35 + 1, 3), (36, LeftY), 0, Font.FindFontColor("Brick"));
|
||||
|
||||
LeftY -= 18;
|
||||
}
|
||||
|
||||
if (blur > 0)
|
||||
{
|
||||
DrawString(BigFont, FormatNumber(blur / 35 + 1, 3), (36, LeftY), 0, Font.FindFontColor("Blue"));
|
||||
|
||||
LeftY -= 18;
|
||||
}
|
||||
|
||||
if (invuln > 0)
|
||||
{
|
||||
DrawString(BigFont, FormatNumber(invuln / 35 + 1, 3), (36, LeftY), 0, Font.FindFontColor("Gold"));
|
||||
|
||||
LeftY -= 18;
|
||||
}
|
||||
|
||||
if (RLplayer.WaterLevel == 3 && radiation <= 0 && invuln <= 0)
|
||||
{
|
||||
DrawString(BigFont, FormatNumber(air > 0 ? air / 35 + 1 : 0, 3), (36, LeftY), 0, Font.FindFontColor("Cyan"));
|
||||
|
||||
LeftY -= 18;
|
||||
}
|
||||
}
|
||||
|
||||
void DrawAmmoArea()
|
||||
{
|
||||
Inventory ammo1, ammo2;
|
||||
int amount1, amount2;
|
||||
RLBaseWeapon weapon = RLBaseWeapon(CPlayer.ReadyWeapon);
|
||||
[ammo1, ammo2, amount1, amount2] = GetCurrentAmmo();
|
||||
Color ammoColor = Font.FindFontColor("White");
|
||||
|
||||
if (weapon != null)
|
||||
{
|
||||
if (ammo2 != null)
|
||||
{
|
||||
DrawInventoryIcon(Ammo2, (-14, RightY + 14));
|
||||
DrawString(BigFont, FormatNumber(amount2, 3), (-30, RightY), DI_TEXT_ALIGN_RIGHT, ammoColor);
|
||||
RightY -= 20;
|
||||
}
|
||||
|
||||
if (ammo1 != null)
|
||||
{
|
||||
DrawInventoryIcon(Ammo1, (-14, RightY + 14));
|
||||
DrawString(BigFont, FormatNumber(amount1, 3), (-30, RightY), DI_TEXT_ALIGN_RIGHT, ammoColor);
|
||||
RightY -= 20;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Stamina for melee only
|
||||
}
|
||||
|
||||
void DrawWeaponInfo()
|
||||
{
|
||||
RLBaseWeapon weapon = RLBaseWeapon(CPlayer.ReadyWeapon);
|
||||
Vector2 pos = (-2, 0);
|
||||
|
||||
if (weapon == null)
|
||||
return;
|
||||
|
||||
string name = weapon.GetClassName();
|
||||
array<string> upgrades;
|
||||
int y = 0;
|
||||
|
||||
upgrades.Push(name .. "PowerMod");
|
||||
upgrades.Push(name .. "BulkMod");
|
||||
upgrades.Push(name .. "AgilityMod");
|
||||
upgrades.Push(name .. "TechnicalMod");
|
||||
upgrades.Push(name .. "NanoMod");
|
||||
upgrades.Push(name .. "FirestormMod");
|
||||
upgrades.Push(name .. "SniperMod");
|
||||
upgrades.Push(name .. "DemonArtifacts");
|
||||
|
||||
DrawInventoryIcon(weapon, (pos.X - 48, pos.Y + 28));
|
||||
DrawString(SmallFont, weapon.GetTag(), pos, DI_TEXT_ALIGN_RIGHT, Font.FindFontColor("White"));
|
||||
|
||||
if (IsModdable())
|
||||
{
|
||||
for (int i = 0; i < upgrades.Size(); i++)
|
||||
{
|
||||
if (!Type.ClassExists(upgrades[i]))
|
||||
continue;
|
||||
|
||||
int amount = RLPlayer.CountInv(upgrades[i]);
|
||||
|
||||
if (amount > 0)
|
||||
DrawString(SmallFont, FormatNumber(amount), (pos.X, pos.Y + 8 + (y++ * 8)), DI_TEXT_ALIGN_RIGHT, Font.FindFontColor(ModColors[i]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DrawInventory()
|
||||
{
|
||||
if (!isInventoryBarVisible() && !Level.NoInventoryBar && RLPlayer.InvSel != null)
|
||||
{
|
||||
DrawInventoryIcon(RLPlayer.InvSel, (-14, RightY + 17));
|
||||
DrawString(BigFont, FormatNumber(RLPlayer.InvSel.Amount, 3), (-30, RightY), DI_TEXT_ALIGN_RIGHT, Font.FindFontColor("White"));
|
||||
}
|
||||
|
||||
if (IsInventoryBarVisible())
|
||||
DrawInventoryBar(InvBar, (3, 169), 14, DI_ITEM_LEFT_TOP);
|
||||
}
|
||||
|
||||
clearscope TextureID GetIconForItem(Class<Inventory> type) const
|
||||
{
|
||||
readonly<Inventory> inv = Inventory(GetDefaultByType(type));
|
||||
|
||||
if (inv.Icon.IsValid())
|
||||
return inv.Icon;
|
||||
else if (inv.AltHUDIcon.IsValid())
|
||||
return inv.AltHUDIcon;
|
||||
|
||||
if (inv.SpawnState)
|
||||
return inv.SpawnState.GetSpriteTexture(0);
|
||||
|
||||
if (Weapon(inv))
|
||||
{
|
||||
let ready = Weapon(inv).FindState('Ready');
|
||||
|
||||
if (ready)
|
||||
return ready.GetSpriteTexture(0);
|
||||
}
|
||||
|
||||
TextureID tex;
|
||||
|
||||
tex.SetNull();
|
||||
|
||||
return tex;
|
||||
}
|
||||
|
||||
bool IsModdable() const
|
||||
{
|
||||
return !RLPlayer.CountInv("RLFistSelected");
|
||||
}
|
||||
|
||||
bool IsDemonicWeapon() const
|
||||
{
|
||||
return RLPlayer.CountInv("RLDemonicWeaponToken");
|
||||
}
|
19
ZScript/Structs.zs
Normal file
19
ZScript/Structs.zs
Normal file
|
@ -0,0 +1,19 @@
|
|||
struct RLStats
|
||||
{
|
||||
int Level;
|
||||
int XP;
|
||||
|
||||
int Strength;
|
||||
int Defense;
|
||||
int Vitality;
|
||||
int Energy;
|
||||
int Regeneration;
|
||||
int Agility;
|
||||
int Capacity;
|
||||
int Luck;
|
||||
|
||||
void Init()
|
||||
{
|
||||
Level = 1;
|
||||
}
|
||||
}
|
22
ZScript/Util.zs
Normal file
22
ZScript/Util.zs
Normal file
|
@ -0,0 +1,22 @@
|
|||
class Type abstract
|
||||
{
|
||||
static clearscope bool ClassExists(string className)
|
||||
{
|
||||
Class type = className;
|
||||
|
||||
return type != null;
|
||||
}
|
||||
|
||||
static clearscope bool IsSubclass(string className, string parentName)
|
||||
{
|
||||
Class parent = parentName;
|
||||
Class type = className;
|
||||
|
||||
return (parent && type) ? type is parent : false;
|
||||
}
|
||||
|
||||
static clearscope bool ObjectIs(Object o, string className)
|
||||
{
|
||||
return ClassExists(className) ? o is className : false;
|
||||
}
|
||||
}
|
1
ZScript/Weapon.zs
Normal file
1
ZScript/Weapon.zs
Normal file
|
@ -0,0 +1 @@
|
|||
class RLBaseWeapon : Weapon;
|
Loading…
Reference in New Issue
Block a user