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

Hero Pet List: Char.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` (e.g. Bee, DeepSnail, MazeShadow, ShamanElder):

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 (actual implementation in Mob.java):

public static Mob makePet(@NotNull Mob pet, int ownerId) {
    var owner = CharsList.getById(ownerId);
    if(owner.fraction()==Fraction.HEROES) {
        pet.expForKill = 0;
    }
    if (pet.canBePet()) {
        pet.setFraction(owner.fraction());
        pet.setOwnerId(ownerId);
    }
    return pet;
}

Lua pet creation:

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