script GRAPPLE_GETUNUSEDTID (int mode, int fromItem)
{
    int newTID = TIDSTART;

    switch (mode)
    {
    case 0:
        while (ThingCount(0, newTID) > 0)
        {
            newTID++;
        }

        if (fromItem)
        {
            GiveInventory("ItemGrappleTID", newTID);
        }
        else
        {
            GiveInventory("GrappleTIDIndicator", newTID);
        }

        Thing_ChangeTID(0, newTID);
        break;

    case 1:
        if (fromItem)
        {
            SetResultValue(CheckInventory("ItemGrappleTID"));
        }
        else
        {
            SetResultValue(CheckInventory("GrappleTIDIndicator"));
        }
        break;

    case 2:
        while (ThingCount(0, newTID) > 0)
        {
            newTID++;
        }


        if (fromItem)
        {
            GiveInventory("ItemGrappleTID", newTID);
        }
        else
        {
            GiveInventory("GrappleTIDIndicator", newTID);
        }

        Thing_ChangeTID(0, newTID);
        SetResultValue(newTID);
        break;
    }
}
Exemple #2
0
void CheckCombo()
{
    // Time Freeze special handling
    if (Player.Combo > 0 && (CheckInventory("PowerTimeFreezer") || CheckInventory("DRPGPowerStimChrono")) && Player.ComboTimer >= COMBO_MAX)
        Player.ComboTimer = COMBO_MAX - 1;
    
    // Subtract the combo timer each tic
    if ((Player.Combo > 0 || Player.ComboTimer < COMBO_MAX) && !CheckInventory("PowerTimeFreezer") && !CheckInventory("DRPGPowerStimChrono"))
        Player.ComboTimer--;
    
    // Reset values if you start the combo again while it was cooling down
    if (Player.ComboTimer == COMBO_MAX)
    {
        Player.BonusGained = 0;
        Player.XPGained = 0;
        Player.RankGained = 0;
    }
    
    // Add up and randomize the XP and Rank gain
    if (Player.ComboTimer == COMBO_STOP || (Player.Aura.Type[AURA_WHITE].Active && Player.Aura.Type[AURA_WHITE].Level >= 2 && Timer() == 4))
    {
        long int ComboBonus = ((Player.XPGained + Player.RankGained) / 100 * Player.Combo);
        
        // You cannot gain Negative XP, but you can lose Rank
        if (Player.XPGained < 0) Player.XPGained = 0;
        
        if (Player.Combo > 1)
        {
            Player.BonusGained += ComboBonus;
            Player.XP += Player.XPGained + ComboBonus;
            Player.Rank += Player.RankGained + ComboBonus;
        }
        else
        {
            Player.XP += Player.XPGained;
            Player.Rank += Player.RankGained;
        }
        
        Player.XPGained = 0;
        Player.RankGained = 0;
    }
    
    if (Player.ComboTimer < 0)
    {
        Player.Combo = 0;
        Player.ComboTimer = COMBO_MAX;
        Player.BonusGained = 0;
        Player.XPGained = 0;
        Player.RankGained = 0;
    }
}
script GRAPPLE_REEL (int grappleTid, int strength, int firetype)
{
    int nX;   int nY;   int nZ;
    int plX;  int plY;  int plZ;
    int vX;   int vY;   int vZ;
    int velX; int velY; int velZ;

    int breakLoop = false;

    int magnitude;

    int pln = PlayerNumber();
    int playerTid = ActivatorTID();

    if (playerTid == 0) // can we give him a TID without breaking anything?
    {
        playerTid = unusedTID(TIDSTART, -1);
        Thing_ChangeTID(0, playerTid);
    }

    // if not, then okay, just use the one he has already

    int grX = GetActorX(grappleTid);
    int grY = GetActorY(grappleTid);
    int grZ = GetActorZ(grappleTid);

    while (!breakLoop)
    {
        if (ThingCount(0, grappleTID) != 1)
        {
            break;
        }
        
        plX  = GetActorX(0);    plY  = GetActorY(0);    plZ  = GetActorZ(0);
        vX   = grX - plX;       vY   = grY - plY;       vZ   = grZ - plZ;

        // NOTE: I had to drop precision here in exchange for not overflowing
        magnitude = magnitudeThree(vX >> 16, vY >> 16, vZ >> 16);

        if (magnitude != 0)
        {
            nX = vX / magnitude; nY = vY / magnitude; nZ = vZ / magnitude;
            ACS_ExecuteAlways(GRAPPLE_DRAWLINE, 0, grappleTid, playerTid, 16);
        }
        else
        {
            nX = 0; nY = 0; nZ = 0;
        }

        SetActorVelocity(0, nX*strength, nY*strength, nZ*strength, true, true);

        if (CheckInventory("Grappling") == 0)
            { breakLoop = true; }

        Delay(1);
    }

    Thing_Remove(grappleTid);
}
Exemple #4
0
function int SplinterCount(void)
{
    int i, ret;
    for (i = 0; i < 5; i++)
    {
        if (CheckInventory(Splinters[i])) { ret += 1; }
    }
    return ret;
}
Exemple #5
0
void ShopItemTryAutoDeposit(ItemInfoPtr Item)
{
    bool deposited = false;

    // Special handling for DRLA weapons since you can only keep one weapon with mods in the locker
    if (CompatMode == COMPAT_DRLA && Item->Category == 0 && Player.Locker[Item->Category][Item->Index] > 0) return;

    while (CheckInventory(Item->Actor) > 0 && (Player.EP >= LOCKER_EPRATE || CurrentLevel->UACBase))
    {
        DepositItem(Item->Category, Item->Index, false, true);
        deposited = true;
    }

    if (deposited)
        ActivatorSound("shop/autostore", 127);
}
void CGameStateRecorder::OnGameplayEvent(IEntity *pEntity, const GameplayEvent &event)
{
	EntityId id;
	if(!pEntity || !(id = pEntity->GetId()))
	{
		GameWarning("TimeDemo:GameState::OnGamePlayEvent: Entity not found");
		return;
	}
	CActor *pActor = (CActor*)(gEnv->pGame->GetIGameFramework()->GetIActorSystem()->GetActor(id));
	if(!pActor)
	{
		GameWarning("TimeDemo:GameState::OnGamePlayEvent: Entity %s has no actor", pEntity->GetName());
		return;
	}

	GameplayEvent  event2 = event;
	event2.extra = 0;// event2 is the forwarded event, extra either will be not used by the listener or re-set as a string
	uint8 eType = event.event;

	bool bPlayer = (pActor->IsPlayer() && m_mode);
	if(bPlayer || m_mode==GPM_AllActors)
	{
		//items
		switch(eType)
		{
			case eGE_ItemPickedUp:
				{
					CheckInventory(pActor,0);//,*m_pRecordGameEventFtor);
				}
				break;

			case eGE_ItemDropped:
				{
					TItemName itemName = GetItemName(EntityId(event.extra));
					if(!itemName ) //if(itemIdx < 0)
						break;
					event2.description = itemName;
					SendGamePlayEvent(pEntity,event2);
					IEntity* pItemEntity = gEnv->pEntitySystem->FindEntityByName(itemName);
					if(!pItemEntity)
						break;
					IItem* pItem = g_pGame->GetIGameFramework()->GetIItemSystem()->GetItem(pItemEntity->GetId());
					if(!pItem)
						break;

					IEntityClass* pItemClass = pItem->GetEntity()->GetClass();
					if(pItemClass && !strcmpi(pItemClass->GetName(),"SOCOM"))
					{
						IItem* pCurrentItem = pActor->GetCurrentItem();
						if(pCurrentItem)
						{
							IEntityClass* pCurrentItemClass = pCurrentItem->GetEntity()->GetClass();
							if(pCurrentItemClass && !strcmpi(pCurrentItemClass->GetName(),"SOCOM"))
							{
								GameplayEvent event3;
								event3.event = eGE_ItemSelected;
								TItemName itemName = GetItemName(pCurrentItem->GetEntity()->GetId());
								if(!itemName)
									break;
								event3.value = 0;
								event3.description = (const char*)itemName;
								SendGamePlayEvent(pEntity,event3);
							}
						}
					}
				}
				break;

			case eGE_WeaponFireModeChanged:
				{
					TItemName itemIdx = GetItemName(EntityId(event.extra));
					if(!itemIdx)//if(itemIdx < 0)
						break;
					event2.description = (const char*)itemIdx;
					SendGamePlayEvent(pEntity,event2);
				}
				break;

			case eGE_ItemSelected:
				{
					EntityId itemId = EntityId(event.extra);
					TItemName itemIdx = GetItemName(itemId);
					if(itemId && !itemIdx)
						break;
					event2.value = 0;
					event2.description = (const char*)itemIdx;
					SendGamePlayEvent(pEntity,event2);
				}
				break;

			case eGE_AttachedAccessory:
				{
					if(!IsGrenade(event.description)) // NOT OffHandGrenade
						SendGamePlayEvent(pEntity,event2);
				}
				break;

			case eGE_AmmoCount:
				{
					const char* itemIdx = event.description;
					if(!itemIdx)
						break;

					TGameStates::iterator itGS;
					/*if(pActor->IsPlayer())
						itGS = m_itSingleActorGameState;
					else */if(pActor->GetEntity())
						itGS = m_GameStates.find(pActor->GetEntity()->GetId());
					else
						break;

					if(itGS == m_GameStates.end())
						break;

					SActorGameState& gstate = itGS->second;

					IEntity* pItemEntity = gEnv->pEntitySystem->FindEntityByName(itemIdx);
					if(!pItemEntity)
						break;
					IItem* pItem = g_pGame->GetIGameFramework()->GetIItemSystem()->GetItem(pItemEntity->GetId());
					if(!pItem)
						break;

					CWeapon* pWeapon = (CWeapon*)(pItem->GetIWeapon());
					if(pWeapon && pWeapon->GetEntity())
					{
						TItemContainer::iterator it = gstate.Items.find(itemIdx);
						if(it==gstate.Items.end())
							break;
						SItemProperties& recItem = it->second;
						
						SWeaponAmmo weaponAmmo = pWeapon->GetFirstAmmo();
						bool bGrenade = false;
						if(!weaponAmmo.pAmmoClass)
						{
							// special case for grenades
							if(IsAmmoGrenade((const char*)(event.extra)))
							{
								weaponAmmo.pAmmoClass = gEnv->pEntitySystem->GetClassRegistry()->FindClass((const char*)event.extra);
								weaponAmmo.count = (int)event.value;
								bGrenade = true;
							}
						}
						
						for(; weaponAmmo.pAmmoClass ; weaponAmmo = pWeapon->GetNextAmmo())
						{
							int ammoCount = weaponAmmo.count;
							const char* ammoClass;
							if(weaponAmmo.pAmmoClass && (ammoClass = weaponAmmo.pAmmoClass->GetName()))
							{
								TAmmoContainer& recAmmo = bGrenade? gstate.AmmoMags : recItem.Ammo;
								if(recAmmo.find(ammoClass) == recAmmo.end())
									recAmmo.insert(std::make_pair(ammoClass,0));
								if(ammoCount != recAmmo[ammoClass])
								{
									event2.event = eGE_AmmoCount;
									event2.value = (float)ammoCount;
									if(event2.value < 0)
										event2.value = 0;
									event2.extra = (void*)ammoClass;
									event2.description = (const char*)itemIdx;
									SendGamePlayEvent(pEntity,event2);
								}
							}
						}
					}

				}
				break;

			case eGE_EntityGrabbed:
				{
					EntityId entityId = EntityId(event.extra);
					IEntity * pGrabbedEntity = gEnv->pEntitySystem->GetEntity(entityId);
					if(pGrabbedEntity)
					{
						event2.description = pGrabbedEntity->GetName();
						SendGamePlayEvent(pEntity,event2);
					}
				}
				break;

			case eGE_WeaponReload:
			case eGE_ZoomedIn:
			case eGE_ZoomedOut:			
			case eGE_HealthChanged:
			case eGE_ItemExchanged:
				SendGamePlayEvent(pEntity,event2);
				break;

			default:
				break;
		}

	}
}
Exemple #7
0
script SAMSARA_DECORATE (int choice, int arg1, int arg2)
{
    int clipcount;
    int result;
    int i, j, k;
    int x, y, z;
    int armorIndex, armorToSet;
    int pln = PlayerNumber();
    
    switch (choice)
    {
      case 1:
        result = GetActorProperty(0, APROP_Dropped);
        break;
        
      case 2:
        if (CheckInventory("WolfenMovement") == 1) { SetActorState(0, "Spawn"); }
        break;
        
      case 3:
        result = !(GetCVar("sv_itemrespawn") || GetCVar("sv_weaponstay"));
        break;
        
      case 4:
        result = isInvasion() || !(isCoop() || isSinglePlayer());
        break;

      case 5:
        SetActivatorToTarget(0);
        result = CheckInventory("Cell");
        if (arg1) { TakeInventory("Cell", result); }
        break;

      case 6:
        result = GetCVar("skulltag");
        break;
      
      case 7:
        if (arg2 != 1)
        {
            GiveQuad(arg1);
        }
        else
        {
            if (isLMS())
            {
                if (GetCvar("samsara_permaquad") == 1)
                { GiveInventory("QuadDamageItem", 1); }
                break;
            }

            GiveQuad(arg1);

            if (GetCvar("samsara_permaquad") == 1)//if (isCoop() || isSinglePlayer())
            { GiveInventory("QuadDamageItem", 1); }
        }
        break;

      case 8:
        result = defaultCVar("samsara_cl_expparticles", 0);
        if (!result) { result = 100; }

        result = max(0, result);

        result *= max(arg1, 1);
        result /= max(arg2, 1);

        GiveInventory("QuakeExplosionCounter", result);
        break;

      case 9:
        clipcount = CheckInventory("Clip");

        if (clipcount < 50)
        {
            GiveInventory("Clip", 50 - clipcount);
            TakeInventory("Clip", CheckInventory("Clip") - 50);
            result = 1;
        }
        break;

      case 10:
        TakeInventory("QuakeExplosionCounter", arg1);
        result = CheckInventory("QuakeExplosionCounter");
        break;

      case 15:
        SetActorProperty(0, APROP_Speed, percFloat(arg1, arg2));
        break;
        
      case 16:
        if (GameType () != GAME_SINGLE_PLAYER)
        {
            SetHudSize(400, 300, 0);
            Hudmessage(s:"Press any button to respawn.";
            HUDMSG_PLAIN,1,CR_LIGHTBLUE,200.4,9.1,1.75);
            delay(15);

            if (!CheckInventory("DukeBallgag"))
            {
                LocalAmbientSound("duke/mpdeath",127);
                GiveInventory("DukeTauntCooldown",5);
                ACS_ExecuteAlways(205,0,0);
            }
        }
        break;

      case 17:
        if (arg1) { result = GetCVar("samsara_permault"); }
        else { result = GetCVar("sv_weaponstay"); }
        break;

      case 18:
        if (MapArmors[0] == -1) { CheckMapArmors(); }
        SetArmorMode();

        i = Timer() != 0;

        if (MapArmors[ARMOR_YELLOW] == 1) { i += 2; }

        SetActorState(0, ArmorModeStates[ArmorMode][i]);
        break;

      case 19:
        result = isLMS();
        break;

      case 20:
        SetArmorMode();

        armorIndex = -1;
        armorToSet = arg1;

        for (i = 0; i < ARMORCOUNT; i++)
        {
            if (GetArmorType(ArmorItems[ArmorMode][i][0], pln))
            {
                armorIndex = i;
                break;
            }
        }

        arg1 = middle(0, arg1, ARMORCOUNT-1);
        i = CheckInventory("Armor");
        j = ArmorItems[ArmorMode][arg1][1];

        if (j == 0) { result = 0; break; }


        /* If we're adding armor, always follow through
           Else, if the ending armor count is lower than the current armor count
           and we're not upgrading our armor, give up now */

        if (arg2 > 0)
        {
            if (arg1 <= armorIndex) { armorToSet = armorIndex; }
        }
        else if (((arg2 == 0 && i > j) || (arg2 < 0 && i > -arg2)) && (arg1 <= armorIndex))
        {
            result = 0;
            break;
        }

        if (arg2 <= 0)
        {
            TakeInventory("BasicArmor", i);
            GiveInventory(ArmorItems[ArmorMode][armorToSet][0], 1);

            k = CheckInventory("Armor");

            if (arg2 == 0) { break; }

            TakeInventory("BasicArmor", k-1);
            GiveInventory("InfiniteArmorBonus", -arg2 - 1);
        }
        else
        {
            TakeInventory("BasicArmor", i);
            GiveInventory(ArmorItems[ArmorMode][armorToSet][0], 1);

            k = CheckInventory("Armor");
            TakeInventory("BasicArmor", k-1);

            GiveInventory("InfiniteArmorBonus", (i + arg2) - 1);
        }

        result = 1;
        break;

      case 21:
        i = CheckInventory("Armor");
        if (i < arg1) { result = 0; break; }

        TakeInventory("BasicArmor", i-arg1);
        result = 1;
        break;

      case 22:
        result = GetCVar("samsara_nohealthcap");
        break;

      case 23:
        GiveInventory("TimeBombPause", 1);
        Delay(arg1);
        TakeInventory("TimeBombPause", 1);
        break;

      case 24:
        result = GetCVar("samsara_noult");
        break;

      case 25:
        if (GameType() == GAME_NET_COOPERATIVE)
		{ AmbientSound("quake/invisannouncer",127); }
		else
		{ LocalAmbientSound("quake/invisannouncer",127); }
        break;
		
	  case 26:
	    if (CheckInventory("PowerInvisibility") == 0)
		{ GiveInventory("PowerInvisibility",1); }
		else
		{ TakeInventory("PowerInvisibility",1); 
		delay(1);
		GiveInventory("PowerShadow",1);
		delay(1);
		GiveInventory("PowerShadow",1); }
	    break;

      case 27:
        result = GetCVar("samsara_nounique");
        break;

      case 28:
        result = GetCVar("samsara_noinvuln");
        break;

      case 29:
        result = GetCVar("instagib");
        break;

      case 30:
        result = GetCVar("samsara_cl_bloodyhell");
        break;

      case 31:
        result = GetCVar("samsara_cl_bloodypersistent");
        break;

      case 32:
        result = GetCVar("samsara_nohealth");
        break;

      case 33:
        result = GetCVar("samsara_vanillaquake");
        break;
    }
Exemple #8
0
NamedScript void ShopItemAutoHandler()
{
    bool ItemsCurrent = false;
    bool ButtonHeld = false;
    // These are actually too big for the script auto handler to allocate properly, so they need to be static-scope here.
    RPGMap static int Items[ITEM_CATEGORIES][ITEM_MAX];
    RPGMap static int PrevItems[ITEM_CATEGORIES][ITEM_MAX];

    UpdateShopAutoList();

    while (true)
    {
        // Auto-Sell/Store doesn't need to run constantly like run-pickup does.
        if (!GetActivatorCVar("drpg_pickup_behavior")) Delay(5);

        // Auto-Sell
        bool CanSellItems = Player.RankLevel > 0 || CurrentLevel->UACBase;
        bool UseAutoDepositFallback = GetActivatorCVar("drpg_autosell_lockerfallback");
        if (CanSellItems || UseAutoDepositFallback)
            for (int i = 0; i < Player.AutoSellList.Position; i++)
            {
                ItemInfoPtr Item = ((ItemInfoPtr *)Player.AutoSellList.Data)[i];
                int Quantity = CheckInventory(Item->Actor);

                // Keep
                if (Player.ItemKeep[Item->Category][Item->Index])
                    Quantity--;

                if (Quantity > 0 && !(Player.Mission.Active && Player.Mission.Type == MT_COLLECT && !StrCmp(Player.Mission.Item->Actor, Item->Actor)))
                {
                    if (CanSellItems)
                        SellItem(Item->Actor, Quantity, true);
                    else if (UseAutoDepositFallback)
                        ShopItemTryAutoDeposit(Item);
                }
            }

        // Auto-Store
        if (Player.EP >= LOCKER_EPRATE || CurrentLevel->UACBase)
            for (int i = 0; i < Player.AutoStoreList.Position; i++)
            {
                ItemInfoPtr Item = ((ItemInfoPtr *)Player.AutoStoreList.Data)[i];

                if (CheckInventory(Item->Actor) > 0)
                    ShopItemTryAutoDeposit(Item);
            }

        // Run-pickup.
        if (GetActivatorCVar("drpg_pickup_behavior"))
        {
            // Get input.
            ButtonHeld = CheckInput(BT_SPEED, KEY_HELD, false, PlayerNumber());

            // For post-checks
            if (ButtonHeld)
                for (int i = 0; i < ItemCategories; i++)
                    for (int j = 0; j < ItemMax[i]; j++)
                        Items[i][j] = CheckInventory(ItemData[i][j].Actor);

            // Run-pickup behavior stuff
            if (ItemsCurrent && ButtonHeld)
            {
                for (int i = 0; i < ItemCategories; i++)
                    for (int j = 0; j < ItemMax[i]; j++)
                    {
                        ItemInfoPtr Item = &ItemData[i][j];

                        // Auto-Sell
                        if (!Player.InShop && GetActivatorCVar("drpg_pickup_behavior") == 1 && Items[i][j] > PrevItems[i][j])
                            if (CheckInventory(Item->Actor) > 0)
                                SellItem(Item->Actor, true, true);

                        // Auto-Store
                        if (!Player.InShop && GetActivatorCVar("drpg_pickup_behavior") == 2 && Items[i][j] > PrevItems[i][j])
                            ShopItemTryAutoDeposit(Item);
                    }
            }

            // Run-pickup has to run constantly or it might miss what the player ran over.
            Delay(1);

            // Prevent using old Items so we don't sell recently picked up stuff.
            if (!ButtonHeld)
                ItemsCurrent = false;

            if (ButtonHeld)
                ItemsCurrent = true;
            for (int i = 0; i < ItemCategories; i++)
                for (int j = 0; j < ItemMax[i]; j++)
                    PrevItems[i][j] = Items[i][j];
        }
    }
}
script GRAPPLE_HOOK (int strength, int firetype)
{
    int playerInput;
    int myX; int myY; int myZ;

    int firerPln = ACS_ExecuteWithResult(GETFIRERPLN, 0,0,0);
    int projTid = PROJOFFSET+firerPln;

    while (ThingCount(0, projTid) > 0)
    {
        projTid++;
    }

    Thing_ChangeTID(0, projTid);

    SetActivatorToTarget(0);

    while (ThingCount(0, projTid) > 0)
    {
        myX = GetActorX(projTid);
        myY = GetActorY(projTid);
        myZ = GetActorZ(projTid);
        playerInput = GetPlayerInput(-1, MODINPUT_BUTTONS);

        switch (firetype)
        {
        case 0:
            if (!(GetPlayerInput(-1, MODINPUT_BUTTONS) & BT_ALTATTACK))
            {
                Thing_Remove(projTid);
                Spawn("GuaranteedTeleportFog", myX, myY, myZ-20.0);
                terminate;
            }
            break;

        case 1:
            if (!(GetPlayerInput(-1, MODINPUT_BUTTONS) & BT_ATTACK))
            {
                Thing_Remove(projTid);
                Spawn("GuaranteedTeleportFog", myX, myY, myZ-20.0);
                terminate;
            }
            break;

        case 2:
            if (CheckInventory("InventoryToggle"))
            {
                Thing_Remove(projTid);
                Spawn("GuaranteedTeleportFog", myX, myY, myZ-20.0);
                terminate;
            }
            break;
        }

        Delay(1);
    }

    Spawn("GrappleSpot", myX, myY, myZ, projTid);

    ACS_ExecuteAlways(GRAPPLE_REEL, 0, projTid, strength, firetype);
}
Exemple #10
0
NamedScript void UpdateOverviewPanel(GUIPanel *OverviewPanel)
{
    //-------------------------
    //Character
    //-------------------------
    
    GUILabels.NameLabel->Text = StrParam("%tS", PlayerNumber() + 1);
    GUILabels.LevelLabel->Text = StrParam("Level: %d", Player.Level);
    GUILabels.XPLabel->Text = StrParam("XP: %ld / %ld", Player.XP, Player.XPNext);
    GUILabels.TitleLabel->Text = StrParam("Title: %S (%d/%d)", Ranks[Player.RankLevel], Player.RankLevel, MAX_RANK);
    GUILabels.RankLabel->Text = StrParam("Rank: %ld / %ld", Player.Rank, Player.RankNext);
    if (Player.PayReady && !Player.PayingOut)
        GUILabels.PPLabel->Text = StrParam("PP: %d (%S) [\C[%S]Ready\C-]", Player.PP, FormatTime(Player.PayTimer), PayReadyColor);
    else
        GUILabels.PPLabel->Text = StrParam("PP: %d (%S)", Player.PP, FormatTime(Player.PayTimer));
    
    //-------------------------
    //Inventory
    //-------------------------
    
    GUILabels.ModuleLabel->Text = StrParam("%d", CheckInventory("DRPGModule"));
    GUILabels.TurretPartsLabel->Text = StrParam("%d", CheckInventory("DRPGTurretPart"));
    GUILabels.AugChargeLabel->Text = StrParam("%d%% / %d%%", (int)Player.Augs.Battery, (int)Player.Augs.BatteryMax);
    GUILabels.AugSlotsLabel->Text = StrParam("%d / %d", Player.Augs.SlotsUsed, Player.Augs.Slots);
    GUILabels.AugUpgradesLabel->Text = StrParam("%d / %d", CheckInventory("DRPGAugCanister"), CheckInventory("DRPGAugUpgradeCanister"));
    GUILabels.StimsLabel->Text = StrParam("S: %d\nM: %d\nL: %d\nXL: %d", CheckInventory("DRPGStimSmall"), CheckInventory("DRPGStimMedium"), CheckInventory("DRPGStimLarge"), CheckInventory("DRPGStimXL"));
    GUILabels.ChipsGoldLabel->Text = StrParam("%d", CheckInventory("DRPGChipGold"));
    GUILabels.ChipsPlatLabel->Text = StrParam("%d", CheckInventory("DRPGChipPlatinum"));
    GUILabels.InventoryLabel->Text = StrParam("Inventory: %d / %d\n\CaBullets: %d / %d\n\CiShells: %d / %d\n\CcRockets: %d / %d\n\CdCells: %d / %d",
                                    Player.InvItems, CheckInventoryMax(),
                                    CheckInventory("Clip"), GetAmmoCapacity("Clip"),
                                    CheckInventory("Shell"), GetAmmoCapacity("Shell"),
                                    CheckInventory("RocketAmmo"), GetAmmoCapacity("RocketAmmo"),
                                    CheckInventory("Cell"), GetAmmoCapacity("Cell"));


    //-----------------------------
    //DRLA Inventory
    //
    
    if (CompatMode == COMPAT_DRLA)
    {
        int IsTechnician = (PlayerClass(PlayerNumber()) == 2);
        int Weapons = CheckInventory("RLWeaponLimit");
        int Armors = CheckInventory("RLArmorInInventory");
        int ModPacks = (IsTechnician ? CheckInventory("RLScavengerModLimit") : CheckInventory("RLModLimit"));
        int Skulls = CheckInventory("RLSkullLimit");
        int Devices = CheckInventory("RLPhaseDeviceLimit");
        
        GUILabels.DRLALabel->Text = StrParam("DRLA Inventory:\n%SWeapons: %d / 6\n%SArmor: %d / %d\n%SModpacks: %d / %d\n%SSkulls: %d / %d\n%SDevices: %d / %d",
            (Weapons >= 6 ? "\Cf" : "\Ca"), Weapons,
            (Armors >= DRLA_ARMOR_MAX ? "\Cf" : "\Cd"), Armors, DRLA_ARMOR_MAX,
            (((!IsTechnician && ModPacks >= 4) || (IsTechnician && ModPacks >= 8)) ? "\Cf" : "\Cc"),
            ModPacks, (IsTechnician ? 8 : 4),
            (Skulls >= DRLA_SKULL_MAX ? "\Cf" : "\Cr"), Skulls, DRLA_SKULL_MAX,
            (Devices >= DRLA_DEVICE_MAX ? "\Cf" : "\Ct"), Devices, DRLA_DEVICE_MAX);
    }