Table of Contents

Pet Mechanic - Code References

Pet Mechanic allows the hero to tame and command mobs as permanent companions that fight alongside them.

Entity Type

Game Mechanic (AI/Pet System)

Java Classes

Pet Management: PetInventoryManager.java

Pet Base Class: Mob.java (pet functionality)

Mob Pet Methods: Mob.java

AI States: MobAi.java

UI: Toolbar.java

Windows: WndPetItem.java

Actions: CommonActions.java

JSON Configuration

Mob Pet Property: In `mobsDesc/<Mob>.json`

{
  "canBePet": true,
  "name": "Rat_Name",
  ...
}

Mobs with `“canBePet”: true`:

String Resources

English (values/strings_all.xml):

<string name="PetInventory_Title">Pet Inventory</string>
<string name="PetInventory_ViewManage">View and manage your pet's equipment</string>
<string name="PetInventory_GiveToPet">Give to Pet</string>
<string name="PetInventory_TakeFromPet">Take from Pet</string>
<string name="PetInventory_GaveItem">You gave %s to your pet</string>
<string name="PetInventory_TookItem">You took %s from your pet</string>
<string name="PetInventory_GiveN">Give %d</string>
<string name="PetInventory_TakeN">Take %d</string>
<string name="PetInventory_PetBackpackFull">Pet's backpack is full</string>
<string name="PetInventory_HeroBackpackFull">Your backpack is full</string>
<string name="PetInventory_TooFar">Pet is too far away</string>
<string name="PetInventory_CantGiveEquipped">Can't give equipped items</string>
<string name="Mob_Cannot_Be_Pet">This creature cannot be tamed</string>
<string name="PetInventory_ACTakeFromPet">Take from Pet</string>
<string name="PetInventory_ACGiveToPet">Give to Pet</string>

Russian (values-ru/strings_all.xml):

<string name="PetInventory_Title">Инвентарь питомца</string>
<string name="PetInventory_ViewManage">Просмотр и управление экипировкой питомца</string>
<string name="PetInventory_GiveToPet">Отдать питомцу</string>
<string name="PetInventory_TakeFromPet">Забрать у питомца</string>
<string name="PetInventory_GaveItem">Вы отдали %s питомцу</string>
<string name="PetInventory_TookItem">Вы забрали %s у питомца</string>
<string name="PetInventory_GiveN">Отдать %d</string>
<string name="PetInventory_TakeN">Забрать %d</string>
<string name="PetInventory_PetBackpackFull">Рюкзак питомца полон</string>
<string name="PetInventory_HeroBackpackFull">Ваш рюкзак полон</string>
<string name="PetInventory_TooFar">Питомец слишком далеко</string>
<string name="PetInventory_CantGiveEquipped">Нельзя отдать экипированные предметы</string>
<string name="Mob_Cannot_Be_Pet">Это существо нельзя приручить</string>
<string name="PetInventory_ACTakeFromPet">Забрать у питомца</string>
<string name="PetInventory_ACGiveToPet">Отдать питомцу</string>

Lua Scripts

Game Mechanics

Code Fragments

Taming a mob:

// In Mob.java
public void makePet(Hero hero) {
    this.petMaster = hero.id();
    hero.pets.add(this);
    setState(MobAi.getStateByClass(Hunting.class)); // Follow and fight
}

Pet inventory access:

// In PetInventoryManager.java
public static void giveToPet(Hero hero, Item item) {
    Pet pet = getSelectedPet(hero);
    if (pet != null && pet.collect(item)) {
        GLog.p("PetInventory_GaveItem", item.name());
    }
}

Lua pet creation:

-- Possess spell
RPD.Mob:makePet(target, caster)
target:setState(RPD.MobAi:getStateByClass("ControlledAi"))
 
-- Raise Dead
local mob = RPD.MobFactory:mobByName(latestDeadMob.class)
RPD.Mob:makePet(mob, chr)
level:spawnMob(mob)