In theory, this code SHOULD work:
Code: Select all
ACTOR MaxWater : Inventory {} // Governs maximum water capacity.
ACTOR WaterFlask : CustomInventory replaces HealthBonus
{
	Inventory.Icon "FLSKICON"
	Inventory.InterHubAmount 0x7fffffff
	Inventory.MaxAmount 0x7fffffff
	Inventory.PickupMessage "Found some water."
	Tag "Water Bottle"
	Scale 0.65
	+INVENTORY.INVBAR
	+INVENTORY.UNDROPPABLE
	+INVENTORY.KEEPDEPLETED
	+INVENTORY.UNTOSSABLE
	States
	{
	Spawn:
		FLSK A -1
		Stop
	Pickup:
		TNT1 A 0 {
			if (CountInv("WaterFlask") == CountInv("MaxWater")) {
				return state("DontPickup");
			}
			else {
				A_GiveInventory("WaterFlask", 1);
			}
		}
		Stop
	DontPickup:
		TNT1 A 0 A_Print("Water bottle is full.")
		Fail
	Use:
		TNT1 A 0 A_JumpIf(health >= 100, "DontDrinkNoNoise")
	UseLoop:
		TNT1 A 0 A_JumpIf(health >= 100, "DontDrink")
		TNT1 A 0 A_TakeInventory("WaterFlask", 1)
		TNT1 A 0 A_GiveInventory("Health", 1)
		TNT1 A 0 A_JumpIfInventory("WaterFlask", 1, "UseLoop")
	FlaskEmpty:
		TNT1 A 0 A_PlaySound("water/drink", CHAN_ITEM)
		Fail
	DontDrink:
		TNT1 A 0 A_PlaySound("water/drink", CHAN_ITEM)
		Fail
	DontDrinkNoNoise:
		TNT1 A 0 A_Print("Can't drink water, health already full!")
		Fail
	}
}
ACTOR EmptyWaterFlask : CustomInventory
{
	Inventory.PickupMessage "Found an empty bottle - Water capacity increased."
	Scale 0.65
	States
	{
	Spawn:
		FLSK B -1
		Stop
	Pickup:
		TNT1 A 0 A_GiveInventory("MaxWater", 1)
		Stop
	}
}





