units

package
v0.0.0-...-3cf5308 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 25, 2025 License: BSD-3-Clause Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var AllUnits []Unit = []Unit{}/* 196 elements not displayed */

Functions

func GetUnitBackgroundImage

func GetUnitBackgroundImage(banner data.BannerType, imageCache *util.ImageCache) (*ebiten.Image, error)

func MakeUpdateUnitColorsFunc

func MakeUpdateUnitColorsFunc(banner data.BannerType) util.ImageTransformFunc

Types

type AttackSound

type AttackSound int
const (
	AttackSoundNone AttackSound = iota
	AttackSoundMonster1
	AttackSoundMonster2
	AttackSoundMonster3
	AttackSoundMonster4
	AttackSoundMonsterVsNormal
	AttackSoundMonster5
	AttackSoundNormal
	AttackSoundWeak
)

func (AttackSound) LbxIndex

func (sound AttackSound) LbxIndex() int

type BusyStatus

type BusyStatus int

reasons a unit might be unable to move

const (
	BusyStatusNone      BusyStatus = iota
	BusyStatusBuildRoad            // for engineers
	BusyStatusPurify               // for priests
	BusyStatusPatrol               // any unit can patrol
)

type Damage

type Damage int
const (
	DamageNone Damage = iota
	DamageRangedMagical
	DamageRangedPhysical
	DamageRangedBoulder
	DamageMeleePhysical
	DamageFire
	DamageCold
	DamageImmolation
	DamageThrown
)

type ExperienceData

type ExperienceData interface {
	ToInt() int
	Name() string
}

type ExperienceInfo

type ExperienceInfo interface {
	HasWarlord() bool
	Crusade() bool
}

type Facing

type Facing int
const (
	FacingUp Facing = iota
	FacingUpRight
	FacingRight
	FacingDownRight
	FacingDown
	FacingDownLeft
	FacingLeft
	FacingUpLeft
)

type HeroExperienceLevel

type HeroExperienceLevel int
const (
	ExperienceHero HeroExperienceLevel = iota
	ExperienceMyrmidon
	ExperienceCaptain
	ExperienceCommander
	ExperienceChampionHero
	ExperienceLord
	ExperienceGrandLord
	ExperienceSuperHero
	ExperienceDemiGod
)

func GetHeroExperienceLevel

func GetHeroExperienceLevel(experience int, warlordRetort bool, crusade bool) HeroExperienceLevel

func (HeroExperienceLevel) ExperienceRequired

func (level HeroExperienceLevel) ExperienceRequired(warlordRetort bool, crusade bool) int

func (*HeroExperienceLevel) Name

func (hero *HeroExperienceLevel) Name() string

func (*HeroExperienceLevel) ToInt

func (hero *HeroExperienceLevel) ToInt() int

type MovementSound

type MovementSound int
const (
	MovementSoundNone MovementSound = iota
	MovementSoundMarching
	MovementSoundHorse
	MovementSoundFly
	MovementSoundFly2
	MovementSoundBigSteps
	MovementSoundBigSteps2
	MovementSoundMerge
	MovementSoundShuffle
	MovementSoundBoat
	MovementSoundSilent
)

func (MovementSound) LbxIndex

func (sound MovementSound) LbxIndex() int

type NoExperienceInfo

type NoExperienceInfo struct {
}

func (*NoExperienceInfo) Crusade

func (noInfo *NoExperienceInfo) Crusade() bool

func (*NoExperienceInfo) HasWarlord

func (noInfo *NoExperienceInfo) HasWarlord() bool

type NormalExperienceLevel

type NormalExperienceLevel int
const (
	ExperienceRecruit NormalExperienceLevel = iota
	ExperienceRegular
	ExperienceVeteran
	ExperienceElite
	// also needs either warlord retort or crusade enchantment
	ExperienceUltraElite
	// needs both warlord retort and crusade enchantment in play
	ExperienceChampionNormal
)

func GetNormalExperienceLevel

func GetNormalExperienceLevel(experience int, warlordRetort bool, crusade bool) NormalExperienceLevel

func (NormalExperienceLevel) ExperienceRequired

func (level NormalExperienceLevel) ExperienceRequired(warlordRetort bool, crusade bool) int

func (*NormalExperienceLevel) Name

func (level *NormalExperienceLevel) Name() string

func (*NormalExperienceLevel) ToInt

func (level *NormalExperienceLevel) ToInt() int

type NormalizeCoordinateFunc

type NormalizeCoordinateFunc func(int, int) (int, int)

type OverworldUnit

type OverworldUnit struct {
	ExperienceInfo ExperienceInfo
	Unit           Unit
	MovesLeft      fraction.Fraction
	Banner         data.BannerType
	Plane          data.Plane
	X              int
	Y              int
	Id             uint64
	Health         int
	// to get the level, use the conversion functions in experience.go
	Experience  int
	WeaponBonus data.WeaponBonus
	Undead      bool

	Busy BusyStatus

	Enchantments []data.UnitEnchantment
}

func MakeOverworldUnit

func MakeOverworldUnit(unit Unit, x int, y int, plane data.Plane) *OverworldUnit

func MakeOverworldUnitFromUnit

func MakeOverworldUnitFromUnit(unit Unit, x int, y int, plane data.Plane, banner data.BannerType, experienceInfo ExperienceInfo) *OverworldUnit

func (*OverworldUnit) AddEnchantment

func (unit *OverworldUnit) AddEnchantment(enchantment data.UnitEnchantment)

func (*OverworldUnit) AddExperience

func (unit *OverworldUnit) AddExperience(amount int)

func (*OverworldUnit) AdjustHealth

func (unit *OverworldUnit) AdjustHealth(amount int)

func (*OverworldUnit) CanTouchAttack

func (unit *OverworldUnit) CanTouchAttack(damage Damage) bool

func (*OverworldUnit) GetAbilities

func (unit *OverworldUnit) GetAbilities() []data.Ability

func (*OverworldUnit) GetAbilityValue

func (unit *OverworldUnit) GetAbilityValue(ability data.AbilityType) float32

func (*OverworldUnit) GetArtifactSlots

func (unit *OverworldUnit) GetArtifactSlots() []artifact.ArtifactSlot

func (*OverworldUnit) GetArtifacts

func (unit *OverworldUnit) GetArtifacts() []*artifact.Artifact

func (*OverworldUnit) GetAttackSound

func (unit *OverworldUnit) GetAttackSound() AttackSound

func (*OverworldUnit) GetBanner

func (unit *OverworldUnit) GetBanner() data.BannerType

func (*OverworldUnit) GetBaseDefense

func (unit *OverworldUnit) GetBaseDefense() int

func (*OverworldUnit) GetBaseHitPoints

func (unit *OverworldUnit) GetBaseHitPoints() int

func (*OverworldUnit) GetBaseMeleeAttackPower

func (unit *OverworldUnit) GetBaseMeleeAttackPower() int

func (*OverworldUnit) GetBaseRangedAttackPower

func (unit *OverworldUnit) GetBaseRangedAttackPower() int

func (*OverworldUnit) GetBaseResistance

func (unit *OverworldUnit) GetBaseResistance() int

func (*OverworldUnit) GetBusy

func (unit *OverworldUnit) GetBusy() BusyStatus

func (*OverworldUnit) GetCombatIndex

func (unit *OverworldUnit) GetCombatIndex(facing Facing) int

func (*OverworldUnit) GetCombatLbxFile

func (unit *OverworldUnit) GetCombatLbxFile() string

func (*OverworldUnit) GetCombatRangeIndex

func (unit *OverworldUnit) GetCombatRangeIndex(facing Facing) int

func (*OverworldUnit) GetCount

func (unit *OverworldUnit) GetCount() int

func (*OverworldUnit) GetDefense

func (unit *OverworldUnit) GetDefense() int

func (*OverworldUnit) GetEnchantments

func (unit *OverworldUnit) GetEnchantments() []data.UnitEnchantment

func (*OverworldUnit) GetExperience

func (unit *OverworldUnit) GetExperience() int

func (*OverworldUnit) GetExperienceData

func (unit *OverworldUnit) GetExperienceData() ExperienceData

func (*OverworldUnit) GetExperienceLevel

func (unit *OverworldUnit) GetExperienceLevel() NormalExperienceLevel

func (*OverworldUnit) GetHealth

func (unit *OverworldUnit) GetHealth() int

func (*OverworldUnit) GetHeroExperienceLevel

func (unit *OverworldUnit) GetHeroExperienceLevel() HeroExperienceLevel

func (*OverworldUnit) GetHitPoints

func (unit *OverworldUnit) GetHitPoints() int

func (*OverworldUnit) GetKnownSpells

func (unit *OverworldUnit) GetKnownSpells() []string

func (*OverworldUnit) GetLbxFile

func (unit *OverworldUnit) GetLbxFile() string

func (*OverworldUnit) GetLbxIndex

func (unit *OverworldUnit) GetLbxIndex() int

func (*OverworldUnit) GetMaxHealth

func (unit *OverworldUnit) GetMaxHealth() int

func (*OverworldUnit) GetMeleeAttackPower

func (unit *OverworldUnit) GetMeleeAttackPower() int

func (*OverworldUnit) GetMovementSound

func (unit *OverworldUnit) GetMovementSound() MovementSound

func (*OverworldUnit) GetMovementSpeed

func (unit *OverworldUnit) GetMovementSpeed() int

func (*OverworldUnit) GetMovesLeft

func (unit *OverworldUnit) GetMovesLeft() fraction.Fraction

func (*OverworldUnit) GetName

func (unit *OverworldUnit) GetName() string

func (*OverworldUnit) GetPlane

func (unit *OverworldUnit) GetPlane() data.Plane

func (*OverworldUnit) GetProductionCost

func (unit *OverworldUnit) GetProductionCost() int

func (*OverworldUnit) GetRace

func (unit *OverworldUnit) GetRace() data.Race

func (*OverworldUnit) GetRangeAttackSound

func (unit *OverworldUnit) GetRangeAttackSound() RangeAttackSound

func (*OverworldUnit) GetRangedAttackDamageType

func (unit *OverworldUnit) GetRangedAttackDamageType() Damage

func (*OverworldUnit) GetRangedAttackPower

func (unit *OverworldUnit) GetRangedAttackPower() int

func (*OverworldUnit) GetRangedAttacks

func (unit *OverworldUnit) GetRangedAttacks() int

func (*OverworldUnit) GetRawUnit

func (unit *OverworldUnit) GetRawUnit() Unit

func (*OverworldUnit) GetRealm

func (unit *OverworldUnit) GetRealm() data.MagicType

func (*OverworldUnit) GetResistance

func (unit *OverworldUnit) GetResistance() int

func (*OverworldUnit) GetSightRange

func (unit *OverworldUnit) GetSightRange() int

func (*OverworldUnit) GetSpellChargeSpells

func (unit *OverworldUnit) GetSpellChargeSpells() map[spellbook.Spell]int

func (*OverworldUnit) GetTitle

func (unit *OverworldUnit) GetTitle() string

func (*OverworldUnit) GetToHitMelee

func (unit *OverworldUnit) GetToHitMelee() int

func (*OverworldUnit) GetUpkeepFood

func (unit *OverworldUnit) GetUpkeepFood() int

func (*OverworldUnit) GetUpkeepGold

func (unit *OverworldUnit) GetUpkeepGold() int

func (*OverworldUnit) GetUpkeepMana

func (unit *OverworldUnit) GetUpkeepMana() int

func (*OverworldUnit) GetWeaponBonus

func (unit *OverworldUnit) GetWeaponBonus() data.WeaponBonus

func (*OverworldUnit) GetX

func (unit *OverworldUnit) GetX() int

func (*OverworldUnit) GetY

func (unit *OverworldUnit) GetY() int

func (*OverworldUnit) HasAbility

func (unit *OverworldUnit) HasAbility(ability data.AbilityType) bool

an ability can either be inherint to the unit or granted by an enchantment

func (*OverworldUnit) HasEnchantment

func (unit *OverworldUnit) HasEnchantment(enchantment data.UnitEnchantment) bool

func (*OverworldUnit) HasItemAbility

func (unit *OverworldUnit) HasItemAbility(ability data.ItemAbility) bool

func (*OverworldUnit) HasMovesLeft

func (unit *OverworldUnit) HasMovesLeft() bool

func (*OverworldUnit) IsFlying

func (unit *OverworldUnit) IsFlying() bool

func (*OverworldUnit) IsHero

func (unit *OverworldUnit) IsHero() bool

func (*OverworldUnit) IsLandWalker

func (unit *OverworldUnit) IsLandWalker() bool

func (*OverworldUnit) IsSailing

func (unit *OverworldUnit) IsSailing() bool

func (*OverworldUnit) IsSwimmer

func (unit *OverworldUnit) IsSwimmer() bool

func (*OverworldUnit) IsUndead

func (unit *OverworldUnit) IsUndead() bool

func (*OverworldUnit) Move

func (unit *OverworldUnit) Move(dx int, dy int, cost fraction.Fraction, normalize NormalizeCoordinateFunc)

func (*OverworldUnit) NaturalHeal

func (unit *OverworldUnit) NaturalHeal(rate float64)

restore health points on the overworld

func (*OverworldUnit) RemoveEnchantment

func (unit *OverworldUnit) RemoveEnchantment(toRemove data.UnitEnchantment)

func (*OverworldUnit) ResetMoves

func (unit *OverworldUnit) ResetMoves()

func (*OverworldUnit) SetBanner

func (unit *OverworldUnit) SetBanner(banner data.BannerType)

func (*OverworldUnit) SetBusy

func (unit *OverworldUnit) SetBusy(busy BusyStatus)

func (*OverworldUnit) SetId

func (unit *OverworldUnit) SetId(id uint64)

func (*OverworldUnit) SetMovesLeft

func (unit *OverworldUnit) SetMovesLeft(moves fraction.Fraction)

func (*OverworldUnit) SetPlane

func (unit *OverworldUnit) SetPlane(plane data.Plane)

func (*OverworldUnit) SetWeaponBonus

func (unit *OverworldUnit) SetWeaponBonus(bonus data.WeaponBonus)

func (*OverworldUnit) SetX

func (unit *OverworldUnit) SetX(x int)

func (*OverworldUnit) SetY

func (unit *OverworldUnit) SetY(y int)

type RangeAttackSound

type RangeAttackSound int
const (
	RangeAttackSoundNone RangeAttackSound = iota
	RangeAttackSoundFireball
	RangeAttackSoundMagic
	RangeAttackSoundMagic2
	RangeAttackSoundArrow
	RangeAttackSoundSling
	RangeAttackSoundLaunch // for catapult or other similar things
)

func (RangeAttackSound) LbxIndex

func (sound RangeAttackSound) LbxIndex() int

type StackUnit

type StackUnit interface {
	SetId(id uint64)
	ResetMoves()
	NaturalHeal(rate float64)
	IsFlying() bool
	IsSwimmer() bool
	IsSailing() bool
	IsLandWalker() bool
	GetName() string
	GetTitle() string
	GetPlane() data.Plane
	SetPlane(data.Plane)
	GetMovesLeft() fraction.Fraction
	SetMovesLeft(fraction.Fraction)
	GetRace() data.Race
	GetRealm() data.MagicType
	GetUpkeepGold() int
	GetUpkeepFood() int
	GetUpkeepMana() int
	GetEnchantments() []data.UnitEnchantment
	AddEnchantment(data.UnitEnchantment)
	HasEnchantment(data.UnitEnchantment) bool
	RemoveEnchantment(data.UnitEnchantment)
	IsUndead() bool
	GetBanner() data.BannerType
	SetBanner(data.BannerType)
	SetWeaponBonus(data.WeaponBonus)
	GetWeaponBonus() data.WeaponBonus
	GetX() int
	GetY() int
	SetX(int)
	SetY(int)
	IsHero() bool
	Move(int, int, fraction.Fraction, NormalizeCoordinateFunc)
	GetLbxFile() string
	GetLbxIndex() int
	GetKnownSpells() []string
	HasAbility(data.AbilityType) bool
	HasItemAbility(data.ItemAbility) bool
	GetAbilityValue(data.AbilityType) float32
	GetAbilities() []data.Ability
	GetBaseDefense() int
	GetDefense() int
	GetBaseHitPoints() int
	GetHitPoints() int
	GetBaseMeleeAttackPower() int
	GetMeleeAttackPower() int
	GetBaseRangedAttackPower() int
	GetBaseResistance() int
	GetCombatLbxFile() string
	GetCombatIndex(Facing) int
	GetCount() int
	GetMovementSpeed() int
	GetProductionCost() int
	GetRangedAttackPower() int
	GetResistance() int
	AdjustHealth(amount int)
	GetAttackSound() AttackSound
	GetCombatRangeIndex(Facing) int
	GetHealth() int
	GetMaxHealth() int
	GetMovementSound() MovementSound
	GetRangeAttackSound() RangeAttackSound
	GetRangedAttackDamageType() Damage
	GetRangedAttacks() int
	AddExperience(int)
	GetExperience() int
	GetExperienceData() ExperienceData
	GetExperienceLevel() NormalExperienceLevel
	GetHeroExperienceLevel() HeroExperienceLevel
	GetRawUnit() Unit
	GetToHitMelee() int
	CanTouchAttack(Damage) bool
	GetArtifactSlots() []artifact.ArtifactSlot
	GetArtifacts() []*artifact.Artifact
	GetSpellChargeSpells() map[spellbook.Spell]int
	GetBusy() BusyStatus
	SetBusy(BusyStatus)
	GetSightRange() int
}

type Unit

type Unit struct {
	// icon on the overworld and in various ui's
	LbxFile string
	Index   int

	// sprites to use in combat
	CombatLbxFile string
	// first index of combat tiles, order is always up, up-right, right, down-right, down, down-left, left, up-left
	CombatIndex int
	Name        string
	Race        data.Race
	Flying      bool
	// true if the unit can swim, but also be on land (like lizardmen)
	Swimming bool
	// true for water-only units, such as trieme
	Sailing   bool
	Abilities []data.Ability

	// fantastic units belong to a specific magic realm
	Realm data.MagicType

	RequiredBuildings []building.Building

	RangedAttackDamageType Damage

	AttackSound      AttackSound
	MovementSound    MovementSound
	RangeAttackSound RangeAttackSound

	// first sprite index in cmbmagic.lbx for the range attack
	RangeAttackIndex int

	KnownSpells []string

	// number of figures that are drawn in a single combat tile
	Count int

	// cost in terms of production to build the unit
	ProductionCost int

	MeleeAttackPower  int
	MovementSpeed     int
	Defense           int
	Resistance        int
	HitPoints         int
	RangedAttackPower int
	RangedAttacks     int
	UpkeepGold        int
	UpkeepFood        int
	UpkeepMana        int

	// For heroes, the spells the unit can cast
	Spells []string

	// For fantastic units
	CastingCost int
}
var AirElemental Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            74,
	Name:             "Air Elemental",
	Race:             data.RaceFantastic,
	CombatLbxFile:    "figure13.lbx",
	CombatIndex:      112,
	Count:            1,
	Realm:            data.SorceryMagic,
	Flying:           true,
	MovementSound:    MovementSoundFly,
	AttackSound:      AttackSoundMonster2,
	MovementSpeed:    5,
	MeleeAttackPower: 15,
	Defense:          8,
	Resistance:       9,
	HitPoints:        10,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 10),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityStoningImmunity),
		data.MakeAbility(data.AbilityWeaponImmunity),
		data.MakeAbility(data.AbilityInvisibility),
	},
	CastingCost: 50,
}
var AirShip Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  75,
	CombatLbxFile:          "figures6.lbx",
	CombatIndex:            0,
	Name:                   "Air Ship",
	ProductionCost:         200,
	UpkeepGold:             4,
	UpkeepFood:             1,
	Count:                  1,
	Flying:                 true,
	MovementSound:          MovementSoundFly,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundLaunch,
	RangeAttackIndex:       32,
	MovementSpeed:          4,
	MeleeAttackPower:       5,
	RangedAttackPower:      10,
	RangedAttacks:          10,
	RangedAttackDamageType: DamageRangedBoulder,
	Defense:                5,
	Resistance:             8,
	HitPoints:              20,
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityScouting, 2), data.MakeAbility(data.AbilityWallCrusher)},
	RequiredBuildings:      []building.Building{building.BuildingShipYard},
	Race:                   data.RaceDraconian,
}
var Angel Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            57,
	CombatLbxFile:    "figure12.lbx",
	CombatIndex:      96,
	Name:             "Angel",
	UpkeepMana:       15,
	Count:            1,
	Flying:           true,
	MovementSound:    MovementSoundFly2,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    3,
	MeleeAttackPower: 13,
	Defense:          7,
	Resistance:       8,
	HitPoints:        15,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 20),
		data.MakeAbilityValue(data.AbilityHolyBonus, 1),
		data.MakeAbility(data.AbilityIllusionsImmunity),
		data.MakeAbility(data.AbilityDispelEvil),
	},
	Race:        data.RaceFantastic,
	Realm:       data.LifeMagic,
	CastingCost: 550,
}
var ArchAngel Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            58,
	CombatLbxFile:    "figure12.lbx",
	CombatIndex:      104,
	Name:             "Arch Angel",
	UpkeepMana:       20,
	Count:            1,
	Flying:           true,
	MovementSound:    MovementSoundFly2,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    4,
	MeleeAttackPower: 15,
	Defense:          10,
	Resistance:       12,
	HitPoints:        18,
	KnownSpells: []string{
		"Bless",
		"Star Fires",
		"Holy Weapon",
		"Healing",
		"Holy Armor",
		"Heroism",
		"True Light",
		"True Sight",
		"Dispel Evil",
		"Prayer",
		"Raise Dead",
		"Invulnerability",
		"Lionheart",
		"Righteousness",
	},
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 30),
		data.MakeAbilityValue(data.AbilityCaster, 40),
		data.MakeAbilityValue(data.AbilityHolyBonus, 2),
		data.MakeAbility(data.AbilityIllusionsImmunity),
	},
	Race:        data.RaceFantastic,
	Realm:       data.LifeMagic,
	CastingCost: 950,
}
var BarbarianBowmen Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  41,
	Name:                   "Bowmen",
	CombatLbxFile:          "figures3.lbx",
	CombatIndex:            88,
	ProductionCost:         30,
	UpkeepGold:             1,
	UpkeepFood:             1,
	Count:                  6,
	MovementSound:          MovementSoundMarching,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangeAttackIndex:       8,
	MovementSpeed:          1,
	MeleeAttackPower:       1,
	RangedAttackPower:      1,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedPhysical,
	Defense:                1,
	Resistance:             5,
	HitPoints:              1,
	RequiredBuildings:      []building.Building{building.BuildingBarracks, building.BuildingSawmill},
	Race:                   data.RaceBarbarian,
}
var BarbarianCavalry Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             42,
	Name:              "Cavalry",
	CombatLbxFile:     "figures3.lbx",
	CombatIndex:       96,
	ProductionCost:    60,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             4,
	MovementSound:     MovementSoundHorse,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     2,
	MeleeAttackPower:  4,
	Defense:           2,
	Resistance:        5,
	HitPoints:         3,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityFirstStrike), data.MakeAbilityValue(data.AbilityThrown, 1)},
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingStables},
	Race:              data.RaceBarbarian,
}
var BarbarianSettlers Unit = Unit{
	LbxFile:        "units1.lbx",
	Index:          44,
	CombatLbxFile:  "figures3.lbx",
	CombatIndex:    112,
	Name:           "Settlers",
	ProductionCost: 60,
	UpkeepGold:     2,
	UpkeepFood:     1,
	Count:          1,
	MovementSpeed:  1,
	Defense:        1,
	Resistance:     5,
	HitPoints:      10,
	AttackSound:    AttackSoundNormal,
	MovementSound:  MovementSoundShuffle,
	Abilities:      []data.Ability{data.MakeAbility(data.AbilityCreateOutpost)},
	Race:           data.RaceBarbarian,
}
var BarbarianShaman Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            43,
	CombatLbxFile:    "figures3.lbx",
	CombatIndex:      104,
	Name:             "Shaman",
	ProductionCost:   50,
	UpkeepGold:       1,
	UpkeepFood:       1,
	Count:            4,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	RangeAttackSound: RangeAttackSoundMagic,
	RangeAttackIndex: 88,
	MovementSpeed:    1,
	MeleeAttackPower: 2,

	RangedAttackPower:      2,
	RangedAttacks:          4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                3,
	Resistance:             7,
	HitPoints:              1,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityHealer), data.MakeAbility(data.AbilityPurify)},
	RequiredBuildings:      []building.Building{building.BuildingShrine},
	Race:                   data.RaceBarbarian,
}
var BarbarianSpearmen Unit = Unit{
	LbxFile:          "units1.lbx",
	Name:             "Spearmen",
	Index:            39,
	CombatLbxFile:    "figures3.lbx",
	CombatIndex:      72,
	ProductionCost:   15,
	UpkeepFood:       1,
	Count:            8,
	MovementSound:    MovementSoundMarching,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	MeleeAttackPower: 1,
	Defense:          2,
	Resistance:       5,
	HitPoints:        1,
	Abilities:        []data.Ability{data.MakeAbilityValue(data.AbilityThrown, 1)},
	Race:             data.RaceBarbarian,
}
var BarbarianSwordsmen Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             40,
	Name:              "Swordsmen",
	CombatLbxFile:     "figures3.lbx",
	CombatIndex:       80,
	ProductionCost:    30,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  3,
	Defense:           2,
	Resistance:        5,
	HitPoints:         1,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityLargeShield), data.MakeAbilityValue(data.AbilityThrown, 1)},
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingSmithy},
	Race:              data.RaceBarbarian,
}
var Basilisk Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            62,
	Name:             "Basilisk",
	CombatLbxFile:    "figure13.lbx",
	CombatIndex:      16,
	UpkeepMana:       7,
	Count:            1,
	Realm:            data.NatureMagic,
	MovementSound:    MovementSoundBigSteps2,
	AttackSound:      AttackSoundMonster2,
	MovementSpeed:    2,
	MeleeAttackPower: 15,
	Defense:          4,
	Resistance:       7,
	HitPoints:        30,
	Abilities:        []data.Ability{data.MakeAbilityValue(data.AbilityToHit, 10), data.MakeAbilityValue(data.AbilityStoningGaze, -1)},
	Race:             data.RaceFantastic,
	CastingCost:      325,
}
var BeastmenBowmen Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  49,
	CombatLbxFile:          "figures4.lbx",
	CombatIndex:            32,
	Name:                   "Bowmen",
	ProductionCost:         60,
	UpkeepGold:             2,
	UpkeepFood:             1,
	Count:                  6,
	MovementSound:          MovementSoundMarching,
	MovementSpeed:          1,
	MeleeAttackPower:       2,
	RangedAttackPower:      1,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedPhysical,
	RangeAttackIndex:       8,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	Defense:                1,
	Resistance:             5,
	HitPoints:              2,
	RequiredBuildings:      []building.Building{building.BuildingBarracks, building.BuildingSawmill},
	Race:                   data.RaceBeastmen,
}
var BeastmenEngineer Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             52,
	CombatLbxFile:     "figures4.lbx",
	CombatIndex:       56,
	Name:              "Engineers",
	ProductionCost:    60,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundShuffle,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  2,
	Defense:           1,
	Resistance:        5,
	HitPoints:         2,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityConstruction), data.MakeAbility(data.AbilityWallCrusher)},
	RequiredBuildings: []building.Building{building.BuildingBuildersHall},
	Race:              data.RaceBeastmen,
}
var BeastmenHalberdiers Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             48,
	CombatLbxFile:     "figures4.lbx",
	CombatIndex:       24,
	ProductionCost:    80,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  5,
	Defense:           3,
	Resistance:        5,
	HitPoints:         2,
	Name:              "Halberdiers",
	RequiredBuildings: []building.Building{building.BuildingArmory},
	Race:              data.RaceBeastmen,
}
var BeastmenMagician Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            51,
	CombatLbxFile:    "figures4.lbx",
	CombatIndex:      48,
	Name:             "Magicians",
	ProductionCost:   180,
	UpkeepGold:       4,
	UpkeepFood:       1,
	Count:            4,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	RangeAttackSound: RangeAttackSoundMagic,
	RangeAttackIndex: 72,
	MovementSpeed:    1,
	MeleeAttackPower: 2,

	RangedAttackPower:      5,
	RangedAttacks:          4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                3,
	Resistance:             9,
	HitPoints:              2,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityMissileImmunity), data.MakeAbilityValue(data.AbilityFireballSpell, 1)},
	RequiredBuildings:      []building.Building{building.BuildingWizardsGuild},
	Race:                   data.RaceBeastmen,
}
var BeastmenPriest Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            50,
	CombatLbxFile:    "figures4.lbx",
	CombatIndex:      40,
	Name:             "Priests",
	ProductionCost:   150,
	UpkeepGold:       3,
	UpkeepFood:       1,
	Count:            4,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	RangeAttackSound: RangeAttackSoundMagic,
	RangeAttackIndex: 88,
	MovementSpeed:    1,
	MeleeAttackPower: 4,

	RangedAttackPower:      4,
	RangedAttacks:          4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                4,
	Resistance:             8,
	HitPoints:              2,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityHealer), data.MakeAbility(data.AbilityPurify), data.MakeAbilityValue(data.AbilityHealingSpell, 1)},
	RequiredBuildings:      []building.Building{building.BuildingParthenon},
	Race:                   data.RaceBeastmen,
}
var BeastmenSettlers Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            53,
	CombatLbxFile:    "figures4.lbx",
	CombatIndex:      64,
	ProductionCost:   120,
	UpkeepGold:       3,
	UpkeepFood:       1,
	Count:            1,
	MovementSpeed:    1,
	MeleeAttackPower: 1,
	Defense:          1,
	Resistance:       5,
	HitPoints:        20,
	AttackSound:      AttackSoundNormal,
	MovementSound:    MovementSoundShuffle,
	Abilities:        []data.Ability{data.MakeAbility(data.AbilityCreateOutpost)},
	Name:             "Settlers",
	Race:             data.RaceBeastmen,
}
var BeastmenSpearmen Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            46,
	CombatLbxFile:    "figures4.lbx",
	CombatIndex:      8,
	ProductionCost:   20,
	UpkeepFood:       1,
	Count:            8,
	MovementSound:    MovementSoundMarching,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	MeleeAttackPower: 2,
	Defense:          2,
	Resistance:       5,
	HitPoints:        2,
	Name:             "Spearmen",
	Race:             data.RaceBeastmen,
}
var BeastmenSwordsmen Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             47,
	CombatLbxFile:     "figures4.lbx",
	CombatIndex:       16,
	Name:              "Swordsmen",
	ProductionCost:    40,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  4,
	Defense:           2,
	Resistance:        5,
	HitPoints:         2,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityLargeShield)},
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingSmithy},
	Race:              data.RaceBeastmen,
}
var Behemoth Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            68,
	Name:             "Behemoth",
	CombatLbxFile:    "figure13.lbx",
	CombatIndex:      64,
	UpkeepMana:       15,
	Count:            1,
	MovementSound:    MovementSoundBigSteps,
	AttackSound:      AttackSoundMonster2,
	Realm:            data.NatureMagic,
	MovementSpeed:    2,
	MeleeAttackPower: 25,
	Defense:          9,
	Resistance:       10,
	HitPoints:        45,
	Race:             data.RaceFantastic,
	Abilities:        []data.Ability{data.MakeAbilityValue(data.AbilityToHit, 20)},
	CastingCost:      700,
}
var Berserkers Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             45,
	CombatLbxFile:     "figures4.lbx",
	CombatIndex:       0,
	Name:              "Berserkers",
	ProductionCost:    120,
	UpkeepGold:        3,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  7,
	Defense:           3,
	Resistance:        7,
	HitPoints:         3,
	Abilities:         []data.Ability{data.MakeAbilityValue(data.AbilityThrown, 3)},
	RequiredBuildings: []building.Building{building.BuildingArmorersGuild},
	Race:              data.RaceBarbarian,
}
var Catapult Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  37,
	CombatLbxFile:          "figures3.lbx",
	CombatIndex:            56,
	Name:                   "Catapult",
	ProductionCost:         100,
	UpkeepGold:             2,
	UpkeepFood:             1,
	Count:                  1,
	MovementSound:          MovementSoundShuffle,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundLaunch,
	RangeAttackIndex:       32,
	MovementSpeed:          1,
	RangedAttackPower:      10,
	RangedAttacks:          10,
	RangedAttackDamageType: DamageRangedBoulder,
	Defense:                2,
	Resistance:             4,
	HitPoints:              10,
	RequiredBuildings:      []building.Building{building.BuildingMechaniciansGuild},
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityWallCrusher), data.MakeAbility(data.AbilityLongRange)},
	Race:                   data.RaceAll,
}
var Centaur Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  54,
	CombatLbxFile:          "figures4.lbx",
	CombatIndex:            72,
	Name:                   "Centaurs",
	ProductionCost:         100,
	UpkeepGold:             2,
	UpkeepFood:             1,
	Count:                  4,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangeAttackIndex:       8,
	MovementSpeed:          2,
	MeleeAttackPower:       3,
	RangedAttackPower:      2,
	RangedAttacks:          6,
	RangedAttackDamageType: DamageRangedPhysical,
	Defense:                3,
	Resistance:             5,
	HitPoints:              3,
	RequiredBuildings:      []building.Building{building.BuildingBarracks, building.BuildingStables},
	Race:                   data.RaceBeastmen,
}
var ChaosSpawn Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            39,
	Name:             "Chaos Spawn",
	CombatLbxFile:    "figure11.lbx",
	CombatIndex:      72,
	Realm:            data.ChaosMagic,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	UpkeepMana:       12,
	Flying:           true,
	Count:            1,
	MeleeAttackPower: 1,
	Defense:          6,
	Resistance:       10,
	HitPoints:        15,
	Abilities: []data.Ability{
		data.MakeAbility(data.AbilityCauseFear),
		data.MakeAbilityValue(data.AbilityPoisonTouch, 4),
		data.MakeAbilityValue(data.AbilityDoomGaze, 4),
		data.MakeAbilityValue(data.AbilityDeathGaze, 4),
		data.MakeAbilityValue(data.AbilityStoningGaze, 4),
	},
	Race:        data.RaceFantastic,
	CastingCost: 500,
}
var Chimeras Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            40,
	Name:             "Chimeras",
	CombatLbxFile:    "figure11.lbx",
	CombatIndex:      80,
	Realm:            data.ChaosMagic,
	UpkeepMana:       10,
	MovementSpeed:    2,
	Flying:           true,
	Count:            4,
	MovementSound:    MovementSoundFly,
	AttackSound:      AttackSoundMonster2,
	MeleeAttackPower: 7,
	Defense:          5,
	Resistance:       8,
	HitPoints:        8,
	Abilities:        []data.Ability{data.MakeAbilityValue(data.AbilityFireBreath, 4), data.MakeAbilityValue(data.AbilityToHit, 10)},
	Race:             data.RaceFantastic,
	CastingCost:      350,
}
var Cockatrices Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            61,
	Name:             "Cockatrices",
	CombatLbxFile:    "figure13.lbx",
	CombatIndex:      8,
	UpkeepMana:       8,
	Realm:            data.NatureMagic,
	Count:            4,
	MovementSound:    MovementSoundFly,
	AttackSound:      AttackSoundMonster2,
	MovementSpeed:    2,
	Flying:           true,
	MeleeAttackPower: 4,
	Defense:          3,
	Resistance:       7,
	HitPoints:        3,
	Abilities:        []data.Ability{data.MakeAbilityValue(data.AbilityToHit, 10), data.MakeAbilityValue(data.AbilityStoningTouch, -3)},
	Race:             data.RaceFantastic,
	CastingCost:      275,
}
var Colossus Unit = Unit{
	LbxFile:                "units2.lbx",
	Index:                  65,
	Name:                   "Colossus",
	CombatLbxFile:          "figure13.lbx",
	CombatIndex:            40,
	UpkeepMana:             17,
	Count:                  1,
	Realm:                  data.NatureMagic,
	MovementSound:          MovementSoundBigSteps,
	AttackSound:            AttackSoundMonster2,
	RangeAttackSound:       RangeAttackSoundLaunch,
	RangeAttackIndex:       32,
	MovementSpeed:          2,
	RangedAttackPower:      20,
	RangedAttacks:          2,
	RangedAttackDamageType: DamageRangedBoulder,
	MeleeAttackPower:       20,
	Defense:                10,
	Resistance:             15,
	HitPoints:              30,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 30),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityStoningImmunity),
		data.MakeAbility(data.AbilityWallCrusher),
		data.MakeAbility(data.AbilityFirstStrike),
	},
	Race:        data.RaceFantastic,
	CastingCost: 800,
}
var DarkElfCavalry Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            60,
	CombatLbxFile:    "figures5.lbx",
	CombatIndex:      0,
	Name:             "Cavalry",
	ProductionCost:   100,
	UpkeepGold:       2,
	UpkeepFood:       1,
	Count:            4,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	RangeAttackSound: RangeAttackSoundMagic2,
	RangeAttackIndex: 80,
	MovementSpeed:    2,
	MeleeAttackPower: 4,

	RangedAttackPower:      1,
	RangedAttacks:          4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                2,
	Resistance:             7,
	HitPoints:              3,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityFirstStrike)},
	RequiredBuildings:      []building.Building{building.BuildingBarracks, building.BuildingStables},
	Race:                   data.RaceDarkElf,
}
var DarkElfHalberdiers Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            59,
	CombatLbxFile:    "figures4.lbx",
	CombatIndex:      112,
	Name:             "Halberdiers",
	ProductionCost:   100,
	UpkeepGold:       2,
	UpkeepFood:       1,
	Count:            6,
	MovementSound:    MovementSoundMarching,
	AttackSound:      AttackSoundNormal,
	RangeAttackSound: RangeAttackSoundMagic2,
	RangeAttackIndex: 80,
	MovementSpeed:    1,
	MeleeAttackPower: 4,

	RangedAttackPower:      1,
	RangedAttacks:          4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                3,
	Resistance:             7,
	HitPoints:              1,
	RequiredBuildings:      []building.Building{building.BuildingArmory},
	Race:                   data.RaceDarkElf,
}
var DarkElfPriests Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            61,
	CombatLbxFile:    "figures5.lbx",
	CombatIndex:      8,
	Name:             "Priests",
	ProductionCost:   200,
	UpkeepGold:       4,
	UpkeepFood:       1,
	Count:            4,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	RangeAttackSound: RangeAttackSoundMagic2,
	RangeAttackIndex: 80,
	MovementSpeed:    1,
	MeleeAttackPower: 3,

	RangedAttackPower:      6,
	RangedAttacks:          4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                4,
	Resistance:             10,
	HitPoints:              1,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityHealer), data.MakeAbility(data.AbilityPurify), data.MakeAbilityValue(data.AbilityHealingSpell, 1)},
	RequiredBuildings:      []building.Building{building.BuildingParthenon},
	Race:                   data.RaceDarkElf,
}
var DarkElfSettlers Unit = Unit{
	LbxFile:        "units1.lbx",
	Index:          62,
	CombatLbxFile:  "figures5.lbx",
	CombatIndex:    16,
	Name:           "Settlers",
	ProductionCost: 150,
	UpkeepGold:     3,
	UpkeepFood:     1,
	Count:          1,
	MovementSpeed:  1,
	Defense:        1,
	Resistance:     7,
	HitPoints:      10,
	AttackSound:    AttackSoundNormal,
	MovementSound:  MovementSoundShuffle,
	Abilities:      []data.Ability{data.MakeAbility(data.AbilityCreateOutpost)},
	Race:           data.RaceDarkElf,
}
var DarkElfSpearmen Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            57,
	CombatLbxFile:    "figures4.lbx",
	CombatIndex:      96,
	Name:             "Spearmen",
	ProductionCost:   25,
	UpkeepFood:       1,
	Count:            8,
	MovementSound:    MovementSoundMarching,
	AttackSound:      AttackSoundNormal,
	RangeAttackSound: RangeAttackSoundMagic2,
	RangeAttackIndex: 80,
	MovementSpeed:    1,
	MeleeAttackPower: 1,

	RangedAttackPower:      1,
	RangedAttacks:          4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                2,
	Resistance:             7,
	HitPoints:              1,
	Race:                   data.RaceDarkElf,
}
var DarkElfSwordsmen Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            58,
	CombatLbxFile:    "figures4.lbx",
	CombatIndex:      104,
	Name:             "Swordsmen",
	ProductionCost:   50,
	UpkeepGold:       1,
	UpkeepFood:       1,
	Count:            6,
	MovementSound:    MovementSoundMarching,
	AttackSound:      AttackSoundNormal,
	RangeAttackSound: RangeAttackSoundMagic2,
	RangeAttackIndex: 80,
	MovementSpeed:    1,
	MeleeAttackPower: 3,

	RangedAttackPower:      1,
	RangedAttacks:          4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                2,
	Resistance:             7,
	HitPoints:              1,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityLargeShield)},
	RequiredBuildings:      []building.Building{building.BuildingBarracks, building.BuildingSmithy},
	Race:                   data.RaceDarkElf,
}
var DeathKnights Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            52,
	CombatLbxFile:    "figure12.lbx",
	CombatIndex:      56,
	Name:             "Death Knights",
	UpkeepMana:       8,
	Count:            4,
	Flying:           true,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    3,
	MeleeAttackPower: 9,
	Defense:          8,
	Resistance:       10,
	HitPoints:        8,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 30),
		data.MakeAbilityValue(data.AbilityLifeSteal, -4),
		data.MakeAbility(data.AbilityArmorPiercing),
		data.MakeAbility(data.AbilityFirstStrike),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityWeaponImmunity),
		data.MakeAbility(data.AbilityIllusionsImmunity),
		data.MakeAbility(data.AbilityColdImmunity),
		data.MakeAbility(data.AbilityDeathImmunity),
	},
	Realm:       data.DeathMagic,
	Race:        data.RaceFantastic,
	CastingCost: 600,
}
var Demon Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            49,
	Name:             "Demon",
	Race:             data.RaceFantastic,
	CombatLbxFile:    "figure12.lbx",
	CombatIndex:      32,
	Count:            1,
	Realm:            data.DeathMagic,
	MovementSound:    MovementSoundFly2,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	Flying:           true,
	MeleeAttackPower: 14,
	Defense:          6,
	Resistance:       7,
	HitPoints:        12,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 10),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityIllusionsImmunity),
		data.MakeAbility(data.AbilityColdImmunity),
		data.MakeAbility(data.AbilityDeathImmunity),
		data.MakeAbility(data.AbilityWeaponImmunity),
		data.MakeAbility(data.AbilityMissileImmunity),
	},
}
var DemonLord Unit = Unit{
	LbxFile:                "units2.lbx",
	Index:                  53,
	CombatLbxFile:          "figure12.lbx",
	CombatIndex:            64,
	Name:                   "Demon Lord",
	UpkeepMana:             15,
	Count:                  1,
	Flying:                 true,
	MovementSound:          MovementSoundFly2,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       48,
	MovementSpeed:          2,
	MeleeAttackPower:       20,
	RangedAttackPower:      10,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                10,
	Resistance:             12,
	HitPoints:              20,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 30),
		data.MakeAbilityValue(data.AbilityLifeSteal, -5),
		data.MakeAbilityValue(data.AbilitySummonDemons, 3),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityWeaponImmunity),
		data.MakeAbility(data.AbilityIllusionsImmunity),
		data.MakeAbility(data.AbilityColdImmunity),
		data.MakeAbility(data.AbilityDeathImmunity),
		data.MakeAbility(data.AbilityCauseFear),
	},
	Realm:       data.DeathMagic,
	Race:        data.RaceFantastic,
	CastingCost: 1000,
}
var Djinn Unit = Unit{
	LbxFile:                "units2.lbx",
	Index:                  75,
	Name:                   "Djinn",
	CombatLbxFile:          "figure14.lbx",
	CombatIndex:            0,
	UpkeepMana:             17,
	Count:                  1,
	Realm:                  data.SorceryMagic,
	MovementSpeed:          3,
	MovementSound:          MovementSoundFly2,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       88,
	Flying:                 true,
	MeleeAttackPower:       15,
	RangedAttackPower:      8,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                8,
	Resistance:             10,
	HitPoints:              20,
	KnownSpells: []string{
		"Resist Magic",
		"Guardian Wind",
		"Phantom Warriors",
		"Counter Magic",
		"Dispel Magic True",
		"Psionic Blast",
		"Confusion",
		"Spell Lock",
		"Word of Recall",
		"Banish",
	},
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 30),
		data.MakeAbilityValue(data.AbilityCaster, 20),
		data.MakeAbility(data.AbilityTeleporting),
		data.MakeAbility(data.AbilityWindWalking),
	},
	Race:        data.RaceFantastic,
	CastingCost: 650,
}
var DoomBat Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            41,
	Name:             "Doom Bat",
	CombatLbxFile:    "figure11.lbx",
	CombatIndex:      88,
	MovementSound:    MovementSoundFly,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    4,
	UpkeepMana:       8,
	Realm:            data.ChaosMagic,
	Flying:           true,
	MeleeAttackPower: 10,
	Defense:          5,
	Resistance:       9,
	Count:            1,
	HitPoints:        20,
	Abilities:        []data.Ability{data.MakeAbilityValue(data.AbilityToHit, 10), data.MakeAbility(data.AbilityImmolation)},
	Race:             data.RaceFantastic,
	CastingCost:      300,
}
var DoomDrake Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             74,
	CombatLbxFile:     "figures5.lbx",
	CombatIndex:       112,
	Name:              "Doom Drake",
	ProductionCost:    160,
	UpkeepGold:        4,
	UpkeepFood:        1,
	Count:             2,
	Flying:            true,
	MovementSound:     MovementSoundFly,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     3,
	MeleeAttackPower:  8,
	Defense:           3,
	Resistance:        9,
	HitPoints:         10,
	Abilities:         []data.Ability{data.MakeAbilityValue(data.AbilityScouting, 2), data.MakeAbilityValue(data.AbilityFireBreath, 6)},
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingStables},
	Race:              data.RaceDraconian,
}
var DraconianBowmen Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  69,
	CombatLbxFile:          "figures5.lbx",
	CombatIndex:            72,
	Name:                   "Bowmen",
	ProductionCost:         45,
	UpkeepGold:             1,
	UpkeepFood:             1,
	Count:                  6,
	Flying:                 true,
	MovementSound:          MovementSoundFly,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangeAttackIndex:       8,
	MovementSpeed:          2,
	MeleeAttackPower:       1,
	RangedAttackPower:      1,
	RangedAttacks:          1,
	RangedAttackDamageType: DamageRangedPhysical,
	Defense:                2,
	Resistance:             6,
	HitPoints:              1,
	RequiredBuildings:      []building.Building{building.BuildingBarracks, building.BuildingSawmill},
	Race:                   data.RaceDraconian,
}
var DraconianHalberdiers Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             68,
	CombatLbxFile:     "figures5.lbx",
	CombatIndex:       64,
	Name:              "Halberdiers",
	ProductionCost:    100,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             6,
	Flying:            true,
	MovementSound:     MovementSoundFly,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     2,
	MeleeAttackPower:  4,
	Defense:           4,
	Resistance:        6,
	HitPoints:         1,
	Abilities:         []data.Ability{data.MakeAbilityValue(data.AbilityFireBreath, 1)},
	RequiredBuildings: []building.Building{building.BuildingArmory},
	Race:              data.RaceDraconian,
}
var DraconianMagician Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             71,
	CombatLbxFile:     "figures5.lbx",
	CombatIndex:       88,
	Name:              "Magicians",
	ProductionCost:    180,
	UpkeepGold:        4,
	UpkeepFood:        1,
	Count:             4,
	Flying:            true,
	MovementSound:     MovementSoundFly,
	AttackSound:       AttackSoundNormal,
	RangeAttackSound:  RangeAttackSoundMagic,
	RangeAttackIndex:  72,
	MovementSpeed:     2,
	MeleeAttackPower:  1,
	RangedAttackPower: 5,
	RangedAttacks:     4,

	RangedAttackDamageType: DamageRangedMagical,
	Defense:                4,
	Resistance:             10,
	HitPoints:              1,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityMissileImmunity), data.MakeAbilityValue(data.AbilityFireballSpell, 1)},
	RequiredBuildings:      []building.Building{building.BuildingWizardsGuild},
	Race:                   data.RaceDraconian,
}
var DraconianSettlers Unit = Unit{
	LbxFile:        "units1.lbx",
	Index:          73,
	CombatLbxFile:  "figures5.lbx",
	CombatIndex:    104,
	ProductionCost: 150,
	UpkeepGold:     3,
	UpkeepFood:     1,
	Count:          1,
	Flying:         true,
	MovementSpeed:  1,
	Defense:        2,
	Resistance:     6,
	HitPoints:      10,
	AttackSound:    AttackSoundNormal,
	MovementSound:  MovementSoundFly,
	Abilities:      []data.Ability{data.MakeAbility(data.AbilityCreateOutpost)},
	Name:           "Settlers",
	Race:           data.RaceDraconian,
}
var DraconianShaman Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            70,
	CombatLbxFile:    "figures5.lbx",
	CombatIndex:      80,
	Name:             "Shaman",
	ProductionCost:   75,
	UpkeepGold:       2,
	UpkeepFood:       1,
	Count:            4,
	Flying:           true,
	MovementSound:    MovementSoundFly,
	AttackSound:      AttackSoundNormal,
	RangeAttackSound: RangeAttackSoundMagic,
	RangeAttackIndex: 88,
	MovementSpeed:    2,
	MeleeAttackPower: 2,

	RangedAttackPower:      2,
	RangedAttackDamageType: DamageRangedMagical,
	RangedAttacks:          4,
	Defense:                4,
	Resistance:             8,
	HitPoints:              1,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityHealer), data.MakeAbility(data.AbilityPurify)},
	RequiredBuildings:      []building.Building{building.BuildingShrine},
	Race:                   data.RaceDraconian,
}
var DraconianSpearmen Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            66,
	CombatLbxFile:    "figures5.lbx",
	CombatIndex:      48,
	Name:             "Spearmen",
	ProductionCost:   25,
	UpkeepFood:       1,
	Count:            8,
	Flying:           true,
	MovementSound:    MovementSoundFly,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 1,
	Defense:          3,
	Resistance:       6,
	HitPoints:        1,
	Abilities:        []data.Ability{data.MakeAbilityValue(data.AbilityFireBreath, 1)},
	Race:             data.RaceDraconian,
}
var DraconianSwordsmen Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             67,
	CombatLbxFile:     "figures5.lbx",
	CombatIndex:       56,
	Name:              "Swordsmen",
	ProductionCost:    50,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             6,
	Flying:            true,
	MovementSound:     MovementSoundFly,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     2,
	MeleeAttackPower:  3,
	Defense:           3,
	Resistance:        6,
	HitPoints:         1,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityLargeShield), data.MakeAbilityValue(data.AbilityFireBreath, 1)},
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingSmithy},
	Race:              data.RaceDraconian,
}
var DragonTurtle Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             6,
	Name:              "Dragon Turtle",
	CombatLbxFile:     "figures9.lbx",
	CombatIndex:       48,
	RequiredBuildings: []building.Building{building.BuildingArmorersGuild, building.BuildingStables},
	Race:              data.RaceLizard,
	Abilities:         []data.Ability{data.MakeAbilityValue(data.AbilityFireBreath, 5)},
	ProductionCost:    100,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             1,
	MovementSound:     MovementSoundBigSteps2,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     2,
	Swimming:          true,
	MeleeAttackPower:  10,
	Defense:           8,
	Resistance:        8,
	HitPoints:         15,
}
var DwarfEngineer Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             78,
	CombatLbxFile:     "figures6.lbx",
	CombatIndex:       24,
	Name:              "Engineers",
	ProductionCost:    40,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundShuffle,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  1,
	Defense:           1,
	Resistance:        8,
	HitPoints:         3,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityConstruction), data.MakeAbility(data.AbilityWallCrusher), data.MakeAbility(data.AbilityMountaineer)},
	RequiredBuildings: []building.Building{building.BuildingBuildersHall},
	Race:              data.RaceDwarf,
}
var DwarfHalberdiers Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             77,
	CombatLbxFile:     "figures6.lbx",
	CombatIndex:       16,
	Name:              "Halberdiers",
	ProductionCost:    100,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  4,
	Defense:           3,
	Resistance:        8,
	HitPoints:         3,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityMountaineer)},
	RequiredBuildings: []building.Building{building.BuildingArmory},
	Race:              data.RaceDwarf,
}
var DwarfSettlers Unit = Unit{
	LbxFile:        "units1.lbx",
	Index:          82,
	CombatLbxFile:  "figures6.lbx",
	CombatIndex:    56,
	Name:           "Settlers",
	ProductionCost: 150,
	UpkeepGold:     3,
	UpkeepFood:     1,
	Count:          1,
	MovementSpeed:  1,
	Defense:        1,
	Resistance:     8,
	HitPoints:      30,
	AttackSound:    AttackSoundNormal,
	MovementSound:  MovementSoundShuffle,
	Abilities:      []data.Ability{data.MakeAbility(data.AbilityCreateOutpost)},
	Race:           data.RaceDwarf,
}
var DwarfSwordsmen Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             76,
	CombatLbxFile:     "figures6.lbx",
	CombatIndex:       8,
	Name:              "Swordsmen",
	ProductionCost:    50,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  3,
	Defense:           2,
	Resistance:        8,
	HitPoints:         3,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityLargeShield), data.MakeAbility(data.AbilityMountaineer)},
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingSmithy},
	Race:              data.RaceDwarf,
}
var EarthElemental Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            67,
	Race:             data.RaceFantastic,
	CombatLbxFile:    "figure15.lbx",
	CombatIndex:      64,
	Realm:            data.NatureMagic,
	Name:             "Earth Elemental",
	Count:            1,
	MovementSound:    MovementSoundBigSteps,
	AttackSound:      AttackSoundMonster2,
	MeleeAttackPower: 25,
	Defense:          4,
	MovementSpeed:    1,
	Resistance:       8,
	HitPoints:        30,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 10),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityStoningImmunity),
		data.MakeAbility(data.AbilityWallCrusher),
	},
	CastingCost: 60,
}
var Efreet Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            42,
	Name:             "Efreet",
	CombatLbxFile:    "figure11.lbx",
	CombatIndex:      96,
	MovementSound:    MovementSoundFly2,
	AttackSound:      AttackSoundNormal,
	RangeAttackSound: RangeAttackSoundMagic,
	RangeAttackIndex: 88,
	MovementSpeed:    3,
	Realm:            data.ChaosMagic,
	UpkeepMana:       15,
	Flying:           true,
	Count:            1,

	KnownSpells: []string{
		"Fire Bolt",
		"Warp Wood",
		"Lightning Bolt",
		"Shatter",
		"Eldritch Weapon",
		"Disrupt",
		"Fireball",
		"Warp Creature",
		"Fire Elemental",
	},
	MeleeAttackPower:       9,
	RangedAttackPower:      9,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                7,
	Resistance:             10,
	HitPoints:              12,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityFireImmunity), data.MakeAbilityValue(data.AbilityToHit, 20), data.MakeAbilityValue(data.AbilityCaster, 20)},
	Race:                   data.RaceFantastic,
	CastingCost:            550,
}
var ElvenLord Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             102,
	CombatLbxFile:     "figures7.lbx",
	CombatIndex:       96,
	Name:              "ElvenLord",
	ProductionCost:    160,
	UpkeepGold:        4,
	UpkeepFood:        1,
	Count:             4,
	MovementSound:     MovementSoundHorse,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     2,
	MeleeAttackPower:  5,
	Defense:           4,
	Resistance:        9,
	HitPoints:         3,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityForester), data.MakeAbilityValue(data.AbilityToHit, 20), data.MakeAbility(data.AbilityArmorPiercing), data.MakeAbility(data.AbilityFirstStrike)},
	RequiredBuildings: []building.Building{building.BuildingArmorersGuild},
	Race:              data.RaceHighElf,
}
var FireElemental Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            38,
	Race:             data.RaceFantastic,
	CombatLbxFile:    "figure11.lbx",
	CombatIndex:      64,
	Realm:            data.ChaosMagic,
	Name:             "Fire Elemental",
	Count:            1,
	AttackSound:      AttackSoundMonsterVsNormal,
	MovementSound:    MovementSoundFly2,
	MovementSpeed:    1,
	MeleeAttackPower: 12,
	Defense:          4,
	Resistance:       6,
	HitPoints:        10,
	Abilities:        []data.Ability{data.MakeAbility(data.AbilityFireImmunity), data.MakeAbility(data.AbilityPoisonImmunity), data.MakeAbility(data.AbilityStoningImmunity)},
	CastingCost:      20,
}
var FireGiant Unit = Unit{
	LbxFile:                "units2.lbx",
	Index:                  37,
	Name:                   "Fire Giant",
	CombatLbxFile:          "figure11.lbx",
	CombatIndex:            56,
	MovementSpeed:          2,
	UpkeepMana:             3,
	Realm:                  data.ChaosMagic,
	Count:                  1,
	MovementSound:          MovementSoundBigSteps2,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundLaunch,
	RangeAttackIndex:       32,
	MeleeAttackPower:       10,
	RangedAttackPower:      10,
	RangedAttackDamageType: DamageRangedBoulder,
	RangedAttacks:          2,
	HitPoints:              15,
	Defense:                5,
	Resistance:             7,
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityToHit, 10), data.MakeAbility(data.AbilityMountaineer), data.MakeAbility(data.AbilityWallCrusher), data.MakeAbility(data.AbilityFireImmunity)},
	Race:                   data.RaceFantastic,
	CastingCost:            150,
}
var FloatingIsland Unit = Unit{
	LbxFile:       "units2.lbx",
	Index:         70,
	CombatLbxFile: "figure13.lbx",
	CombatIndex:   80,
	Count:         1,
	UpkeepMana:    5,
	MovementSound: MovementSoundSilent,
	MovementSpeed: 2,
	Name:          "Floating Island",
	Swimming:      true,
	Defense:       0,
	Resistance:    10,
	HitPoints:     45,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityTransport, 8),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityDeathImmunity),
		data.MakeAbility(data.AbilityStoningImmunity),
	},
	Race:        data.RaceFantastic,
	Realm:       data.SorceryMagic,
	CastingCost: 50,
}
var Galley Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  36,
	CombatLbxFile:          "figures3.lbx",
	CombatIndex:            48,
	ProductionCost:         100,
	UpkeepGold:             2,
	UpkeepFood:             1,
	Name:                   "Galley",
	Count:                  1,
	Swimming:               true,
	Sailing:                true,
	MovementSound:          MovementSoundBoat,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangeAttackIndex:       8,
	MovementSpeed:          3,
	MeleeAttackPower:       8,
	RangedAttackPower:      2,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedPhysical,
	Defense:                4,
	Resistance:             6,
	HitPoints:              20,
	RequiredBuildings:      []building.Building{building.BuildingShipYard},
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityTransport, 5)},
	Race:                   data.RaceAll,
}
var Gargoyle Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            36,
	Name:             "Gargoyles",
	CombatLbxFile:    "figure11.lbx",
	CombatIndex:      48,
	UpkeepMana:       5,
	Realm:            data.ChaosMagic,
	MovementSound:    MovementSoundFly2,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	Flying:           true,
	MeleeAttackPower: 4,
	Count:            4,
	Defense:          8,
	Resistance:       7,
	HitPoints:        4,
	Abilities:        []data.Ability{data.MakeAbilityValue(data.AbilityToHit, 10), data.MakeAbility(data.AbilityPoisonImmunity), data.MakeAbility(data.AbilityStoningImmunity)},
	Race:             data.RaceFantastic,
	CastingCost:      200,
}
var Ghoul Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            46,
	CombatLbxFile:    "figure12.lbx",
	CombatIndex:      8,
	Name:             "Ghouls",
	UpkeepMana:       1,
	Count:            4,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	MeleeAttackPower: 4,
	Defense:          3,
	Resistance:       6,
	HitPoints:        3,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 10),
		data.MakeAbilityValue(data.AbilityPoisonTouch, 1),
		data.MakeAbility(data.AbilityCreateUndead),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityIllusionsImmunity),
		data.MakeAbility(data.AbilityColdImmunity),
		data.MakeAbility(data.AbilityDeathImmunity),
	},
	Realm:       data.DeathMagic,
	Race:        data.RaceFantastic,
	CastingCost: 80,
}
var GiantSpiders Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            63,
	Name:             "Giant Spiders",
	CombatLbxFile:    "figure13.lbx",
	CombatIndex:      24,
	Realm:            data.NatureMagic,
	UpkeepMana:       4,
	Count:            2,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 4,
	Defense:          3,
	Resistance:       7,
	HitPoints:        10,
	Abilities:        []data.Ability{data.MakeAbilityValue(data.AbilityToHit, 10), data.MakeAbilityValue(data.AbilityWebSpell, 1), data.MakeAbilityValue(data.AbilityPoisonTouch, 4)},
	Race:             data.RaceFantastic,
	CastingCost:      200,
}
var GnollBowmen Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  86,
	CombatLbxFile:          "figures6.lbx",
	CombatIndex:            88,
	Name:                   "Bowmen",
	ProductionCost:         30,
	UpkeepGold:             1,
	UpkeepFood:             1,
	Count:                  6,
	MovementSound:          MovementSoundMarching,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangeAttackIndex:       8,
	MovementSpeed:          1,
	MeleeAttackPower:       3,
	RangedAttackPower:      1,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedPhysical,
	Defense:                1,
	Resistance:             4,
	HitPoints:              1,
	RequiredBuildings:      []building.Building{building.BuildingBarracks, building.BuildingSawmill},
	Race:                   data.RaceGnoll,
}
var GnollHalberdiers Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             85,
	CombatLbxFile:     "figures6.lbx",
	CombatIndex:       80,
	Name:              "Halberdiers",
	ProductionCost:    40,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  6,
	Defense:           3,
	Resistance:        4,
	HitPoints:         1,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityNegateFirstStrike)},
	RequiredBuildings: []building.Building{building.BuildingArmory},
	Race:              data.RaceGnoll,
}
var GnollSettlers Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            87,
	CombatLbxFile:    "figures6.lbx",
	CombatIndex:      96,
	Name:             "Settlers",
	ProductionCost:   60,
	UpkeepGold:       2,
	UpkeepFood:       1,
	Count:            1,
	MovementSpeed:    1,
	MeleeAttackPower: 2,
	Defense:          1,
	Resistance:       4,
	HitPoints:        10,
	AttackSound:      AttackSoundNormal,
	MovementSound:    MovementSoundShuffle,
	Abilities:        []data.Ability{data.MakeAbility(data.AbilityCreateOutpost)},
	Race:             data.RaceGnoll,
}
var GnollSpearmen Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            83,
	CombatLbxFile:    "figures6.lbx",
	CombatIndex:      64,
	Name:             "Spearmen",
	ProductionCost:   10,
	UpkeepFood:       1,
	Count:            8,
	MovementSound:    MovementSoundMarching,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	MeleeAttackPower: 3,
	Defense:          2,
	Resistance:       4,
	HitPoints:        1,
	Race:             data.RaceGnoll,
}
var GnollSwordsmen Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             84,
	CombatLbxFile:     "figures6.lbx",
	CombatIndex:       72,
	Name:              "Swordsmen",
	ProductionCost:    20,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  5,
	Defense:           2,
	Resistance:        4,
	HitPoints:         1,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityLargeShield)},
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingSmithy},
	Race:              data.RaceGnoll,
}
var Golem Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             81,
	CombatLbxFile:     "figures6.lbx",
	CombatIndex:       48,
	Name:              "Golem",
	ProductionCost:    200,
	UpkeepGold:        4,
	UpkeepFood:        1,
	Count:             1,
	MovementSound:     MovementSoundBigSteps2,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  12,
	Defense:           8,
	Resistance:        15,
	HitPoints:         20,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityPoisonImmunity), data.MakeAbility(data.AbilityDeathImmunity)},
	RequiredBuildings: []building.Building{building.BuildingArmorersGuild},
	Race:              data.RaceDwarf,
}
var Gorgon Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            66,
	Name:             "Gorgons",
	CombatLbxFile:    "figure13.lbx",
	CombatIndex:      48,
	UpkeepMana:       15,
	Count:            2,
	MovementSpeed:    2,
	Realm:            data.NatureMagic,
	Flying:           true,
	MovementSound:    MovementSoundFly,
	AttackSound:      AttackSoundMonster2,
	MeleeAttackPower: 8,
	Defense:          7,
	Resistance:       9,
	HitPoints:        9,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 20),
		data.MakeAbilityValue(data.AbilityStoningGaze, -2),
	},
	Race:        data.RaceFantastic,
	CastingCost: 600,
}
var GreatDrake Unit = Unit{
	LbxFile:       "units2.lbx",
	Index:         44,
	CombatLbxFile: "figure11.lbx",
	CombatIndex:   112,
	Name:          "Great Drake",
	Race:          data.RaceFantastic,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityFireBreath, 30),
		data.MakeAbilityValue(data.AbilityToHit, 30),
	},
	Count:            1,
	Realm:            data.ChaosMagic,
	HitPoints:        30,
	Flying:           true,
	AttackSound:      AttackSoundMonster2,
	MovementSound:    MovementSoundFly,
	MeleeAttackPower: 30,
	MovementSpeed:    2,
	UpkeepMana:       30,
	Defense:          10,
	Resistance:       12,
	CastingCost:      900,
}
var GreatWyrm Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            69,
	Name:             "Great Wyrm",
	CombatLbxFile:    "figure13.lbx",
	CombatIndex:      72,
	UpkeepMana:       20,
	Count:            1,
	MovementSound:    MovementSoundMerge,
	AttackSound:      AttackSoundMonster1,
	Realm:            data.NatureMagic,
	MovementSpeed:    3,
	MeleeAttackPower: 25,
	Defense:          12,
	Resistance:       12,
	HitPoints:        45,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 30),
		data.MakeAbilityValue(data.AbilityPoisonTouch, 15),
		data.MakeAbility(data.AbilityMerging),
	},
	Race:        data.RaceFantastic,
	CastingCost: 1000,
}
var Griffin Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             16,
	CombatLbxFile:     "figure10.lbx",
	CombatIndex:       8,
	Name:              "Griffins",
	ProductionCost:    200,
	UpkeepGold:        4,
	UpkeepFood:        1,
	Count:             2,
	Flying:            true,
	MovementSpeed:     2,
	MeleeAttackPower:  9,
	MovementSound:     MovementSoundFly,
	AttackSound:       AttackSoundNormal,
	Defense:           5,
	Resistance:        7,
	HitPoints:         10,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityArmorPiercing), data.MakeAbility(data.AbilityFirstStrike)},
	RequiredBuildings: []building.Building{building.BuildingFantasticStable},
	Race:              data.RaceNomad,
}
var GuardianSpirit Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            56,
	CombatLbxFile:    "figure12.lbx",
	CombatIndex:      88,
	Name:             "Guardian Spirit",
	UpkeepMana:       1,
	Count:            1,
	MovementSpeed:    1,
	Swimming:         true,
	MovementSound:    MovementSoundSilent,
	AttackSound:      AttackSoundNormal,
	MeleeAttackPower: 10,
	Defense:          4,
	Resistance:       10,
	HitPoints:        10,
	Race:             data.RaceFantastic,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityResistanceToAll, 1),
		data.MakeAbility(data.AbilityMeld),
		data.MakeAbility(data.AbilityNonCorporeal),
	},
	Realm:       data.LifeMagic,
	CastingCost: 80,
}
var HalflingBowmen Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  91,
	CombatLbxFile:          "figures7.lbx",
	CombatIndex:            8,
	Name:                   "Bowmen",
	ProductionCost:         45,
	UpkeepGold:             1,
	UpkeepFood:             1,
	Count:                  6,
	MovementSound:          MovementSoundMarching,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangeAttackIndex:       8,
	MovementSpeed:          1,
	MeleeAttackPower:       1,
	RangedAttackPower:      1,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedPhysical,
	Defense:                1,
	Resistance:             6,
	HitPoints:              1,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityLucky)},
	RequiredBuildings:      []building.Building{building.BuildingBarracks, building.BuildingSawmill},
	Race:                   data.RaceHalfling,
}
var HalflingSettlers Unit = Unit{
	LbxFile:        "units1.lbx",
	Index:          93,
	CombatLbxFile:  "figures7.lbx",
	CombatIndex:    24,
	ProductionCost: 90,
	UpkeepGold:     2,
	UpkeepFood:     1,
	Count:          1,
	MovementSpeed:  1,
	Defense:        1,
	Resistance:     6,
	HitPoints:      10,
	AttackSound:    AttackSoundNormal,
	MovementSound:  MovementSoundShuffle,
	Abilities:      []data.Ability{data.MakeAbility(data.AbilityCreateOutpost), data.MakeAbility(data.AbilityLucky)},
	Name:           "Settlers",
	Race:           data.RaceHalfling,
}
var HalflingShamans Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             92,
	CombatLbxFile:     "figures7.lbx",
	CombatIndex:       16,
	Name:              "Shamans",
	ProductionCost:    75,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             4,
	MovementSound:     MovementSoundShuffle,
	AttackSound:       AttackSoundNormal,
	RangeAttackSound:  RangeAttackSoundMagic2,
	RangeAttackIndex:  88,
	MovementSpeed:     1,
	MeleeAttackPower:  1,
	RangedAttackPower: 2,
	RangedAttacks:     4,

	RangedAttackDamageType: DamageRangedMagical,
	Defense:                3,
	Resistance:             8,
	HitPoints:              1,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityHealer), data.MakeAbility(data.AbilityPurify), data.MakeAbility(data.AbilityLucky)},
	RequiredBuildings:      []building.Building{building.BuildingShrine},
	Race:                   data.RaceHalfling,
}
var HalflingSpearmen Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            89,
	CombatLbxFile:    "figures6.lbx",
	CombatIndex:      112,
	Name:             "Spearmen",
	ProductionCost:   15,
	UpkeepFood:       1,
	Count:            8,
	MovementSound:    MovementSoundMarching,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	MeleeAttackPower: 1,
	Defense:          2,
	Resistance:       6,
	HitPoints:        1,
	Abilities:        []data.Ability{data.MakeAbility(data.AbilityLucky)},
	Race:             data.RaceHalfling,
}
var HalflingSwordsmen Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             90,
	CombatLbxFile:     "figures7.lbx",
	CombatIndex:       0,
	Name:              "Swordsmen",
	ProductionCost:    30,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             8,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  2,
	Defense:           2,
	Resistance:        6,
	HitPoints:         1,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityLargeShield), data.MakeAbility(data.AbilityLucky)},
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingSmithy},
	Race:              data.RaceHalfling,
}
var Hammerhands Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             79,
	CombatLbxFile:     "figures6.lbx",
	CombatIndex:       32,
	Name:              "Hammerhands",
	ProductionCost:    160,
	UpkeepGold:        4,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  8,
	Defense:           4,
	Resistance:        9,
	HitPoints:         4,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityMountaineer)},
	RequiredBuildings: []building.Building{building.BuildingFightersGuild},
	Race:              data.RaceDwarf,
}
var HellHounds Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            35,
	Name:             "Hell Hounds",
	CombatLbxFile:    "figure11.lbx",
	CombatIndex:      40,
	UpkeepMana:       1,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	Realm:            data.ChaosMagic,
	MeleeAttackPower: 3,
	Count:            4,
	Defense:          2,
	Resistance:       6,
	HitPoints:        4,
	Abilities:        []data.Ability{data.MakeAbilityValue(data.AbilityFireBreath, 3), data.MakeAbilityValue(data.AbilityToHit, 10)},
	Race:             data.RaceFantastic,
	CastingCost:      40,
}
var HeroAerie Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  25,
	CombatLbxFile:          "figures2.lbx",
	CombatIndex:            80,
	Name:                   "Aerie",
	Count:                  1,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       72,
	MovementSpeed:          2,
	UpkeepGold:             10,
	MeleeAttackPower:       1,
	RangedAttackPower:      5,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                4,
	Resistance:             6,
	HitPoints:              5,
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityCaster, 10), data.MakeAbility(data.AbilityMissileImmunity), data.MakeAbility(data.AbilityIllusion)},
	Race:                   data.RaceHero,
	Spells:                 []string{"Psionic Blast", "Vertigo", "Mind Storm"},
}
var HeroAlorra Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  30,
	CombatLbxFile:          "figures3.lbx",
	CombatIndex:            0,
	Count:                  1,
	UpkeepGold:             10,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangeAttackIndex:       8,
	MovementSpeed:          2,
	MeleeAttackPower:       5,
	RangedAttackPower:      8,
	RangedAttackDamageType: DamageRangedPhysical,
	RangedAttacks:          8,
	Defense:                6,
	Resistance:             6,
	HitPoints:              6,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityCaster, 5),
		data.MakeAbility(data.AbilityForester),
		data.MakeAbility(data.AbilityBlademaster),
	},
	Name:   "Alorra",
	Race:   data.RaceHero,
	Spells: []string{"Resist Magic", "Flight"},
}
var HeroAureus Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  19,
	CombatLbxFile:          "figures2.lbx",
	CombatIndex:            32,
	Name:                   "Aureus",
	Count:                  1,
	UpkeepGold:             4,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       72,
	MovementSpeed:          2,
	MeleeAttackPower:       6,
	RangedAttackPower:      6,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                6,
	Resistance:             6,
	HitPoints:              6,
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityCaster, 5)},
	Race:                   data.RaceHero,
}
var HeroBShan Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  3,
	CombatLbxFile:          "figures1.lbx",
	CombatIndex:            24,
	Count:                  1,
	Name:                   "B'Shan",
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangeAttackIndex:       8,
	MovementSpeed:          2,
	MeleeAttackPower:       4,
	RangedAttackPower:      4,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedPhysical,
	Defense:                4,
	Resistance:             6,
	HitPoints:              6,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityNoble)},
	Race:                   data.RaceHero,
}
var HeroBahgtru Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            6,
	CombatLbxFile:    "figures1.lbx",
	CombatIndex:      48,
	Count:            1,
	Name:             "Bahgtru",
	UpkeepGold:       2,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 6,
	Defense:          4,
	Resistance:       6,
	HitPoints:        8,
	Race:             data.RaceHero,
	Abilities:        []data.Ability{data.MakeAbilityValue(data.AbilityThrown, 3), data.MakeAbility(data.AbilityMountaineer)},
}
var HeroBrax Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            0,
	CombatLbxFile:    "figures1.lbx",
	CombatIndex:      0,
	UpkeepGold:       2,
	Name:             "Brax",
	Count:            1,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 5,
	Defense:          4,
	Resistance:       10,
	HitPoints:        10,
	Abilities: []data.Ability{
		data.MakeAbility(data.AbilityMountaineer),
		data.MakeAbility(data.AbilityConstitution),
	},
	Race: data.RaceHero,
}
var HeroDethStryke Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            26,
	CombatLbxFile:    "figures2.lbx",
	CombatIndex:      88,
	Name:             "Deth Stryke",
	Count:            1,
	UpkeepGold:       10,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 6,
	Defense:          5,
	Resistance:       6,
	HitPoints:        10,
	Abilities: []data.Ability{
		data.MakeAbility(data.AbilityLeadership),
		data.MakeAbility(data.AbilityLegendary),
		data.MakeAbility(data.AbilityArmsmaster),
		data.MakeAbility(data.AbilityConstitution),
		data.MakeAbility(data.AbilityMight),
	},
	Race: data.RaceHero,
}
var HeroElana Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  27,
	CombatLbxFile:          "figures2.lbx",
	CombatIndex:            96,
	Count:                  1,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       72,
	MovementSpeed:          2,
	MeleeAttackPower:       2,
	RangedAttackPower:      8,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                5,
	Resistance:             6,
	HitPoints:              5,

	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityCaster, 12.5),
		data.MakeAbility(data.AbilityHealer),
		data.MakeAbility(data.AbilityPurify),
		data.MakeAbility(data.AbilityArcanePower),
		data.MakeAbility(data.AbilitySuperPrayermaster),
		data.MakeAbility(data.AbilityCharmed),
		data.MakeAbility(data.AbilityNoble),
	},
	Name:   "Elana",
	Race:   data.RaceHero,
	Spells: []string{"Dispel Evil", "Healing", "Prayer", "Holy Word"},
}
var HeroFang Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            17,
	CombatLbxFile:    "figures2.lbx",
	CombatIndex:      16,
	Name:             "Fang",
	Count:            1,
	UpkeepGold:       4,
	Flying:           true,
	MovementSound:    MovementSoundFly,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    3,
	MeleeAttackPower: 7,
	Defense:          5,
	Resistance:       6,
	HitPoints:        8,
	Abilities:        []data.Ability{data.MakeAbility(data.AbilityMight), data.MakeAbilityValue(data.AbilityFireBreath, 5)},
	Race:             data.RaceHero,
}
var HeroGreyfairer Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  10,
	CombatLbxFile:          "figures1.lbx",
	CombatIndex:            80,
	UpkeepGold:             3,
	Name:                   "Greyfairer",
	MovementSpeed:          2,
	Count:                  1,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       72,
	MeleeAttackPower:       1,
	RangedAttackPower:      8,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                5,
	Resistance:             6,
	HitPoints:              6,
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityCaster, 7.5), data.MakeAbilityValue(data.AbilityScouting, 3), data.MakeAbility(data.AbilityPurify)},
	Race:                   data.RaceHero,
	Spells:                 []string{"Ice Bolt", "Petrify", "Web"},
}
var HeroGunther Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            1,
	CombatLbxFile:    "figures1.lbx",
	CombatIndex:      8,
	Count:            1,
	UpkeepGold:       2,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 5,
	Defense:          3,
	Resistance:       6,
	HitPoints:        9,
	Name:             "Gunther",
	Race:             data.RaceHero,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityThrown, 5),
		data.MakeAbility(data.AbilityMight),
	},
}
var HeroJaer Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  15,
	CombatLbxFile:          "figures2.lbx",
	CombatIndex:            0,
	Count:                  1,
	UpkeepGold:             4,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       72,
	MovementSpeed:          2,
	MeleeAttackPower:       1,
	RangedAttackPower:      6,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                5,
	Resistance:             6,
	HitPoints:              5,
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityCaster, 7.5), data.MakeAbility(data.AbilityMissileImmunity), data.MakeAbility(data.AbilityWindWalking)},
	Name:                   "Jaer",
	Race:                   data.RaceHero,
	Spells:                 []string{"Word of Recall", "Guardian Wind"},
}
var HeroMalleus Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  13,
	CombatLbxFile:          "figures1.lbx",
	CombatIndex:            104,
	UpkeepGold:             3,
	Count:                  1,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       16,
	MovementSpeed:          2,
	MeleeAttackPower:       1,
	RangedAttackPower:      8,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                5,
	Resistance:             10,
	HitPoints:              5,
	Name:                   "Malleus",
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityCaster, 10), data.MakeAbility(data.AbilityMissileImmunity), data.MakeAbility(data.AbilityArcanePower)},
	Race:                   data.RaceHero,
	Spells:                 []string{"Fire Bolt", "Fireball", "Fire Elemental", "Flame Strike"},
}
var HeroMarcus Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  16,
	CombatLbxFile:          "figures2.lbx",
	CombatIndex:            8,
	Name:                   "Marcus",
	Count:                  1,
	UpkeepGold:             4,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangeAttackIndex:       8,
	MovementSpeed:          2,
	MeleeAttackPower:       6,
	RangedAttackPower:      5,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedPhysical,
	Defense:                5,
	Resistance:             6,
	HitPoints:              8,
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityCaster, 5), data.MakeAbilityValue(data.AbilityScouting, 2), data.MakeAbility(data.AbilityPathfinding), data.MakeAbility(data.AbilityMight)},
	Race:                   data.RaceHero,
	Spells:                 []string{"Resist Elements", "Stone Skin"},
}
var HeroMorgana Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  18,
	CombatLbxFile:          "figures2.lbx",
	CombatIndex:            24,
	Name:                   "Morgana",
	Count:                  1,
	UpkeepGold:             4,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       72,
	MovementSpeed:          2,
	MeleeAttackPower:       1,
	RangedAttackPower:      8,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                5,
	Resistance:             6,
	HitPoints:              5,
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityCaster, 10), data.MakeAbility(data.AbilityMissileImmunity), data.MakeAbility(data.AbilityCharmed)},
	Race:                   data.RaceHero,
	Spells:                 []string{"Darkness", "Mana Leak", "Black Prayer", "Possession"},
}
var HeroMortu Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            29,
	CombatLbxFile:    "figures2.lbx",
	CombatIndex:      112,
	Count:            1,
	UpkeepGold:       10,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 9,
	Defense:          5,
	Resistance:       6,
	HitPoints:        10,
	Abilities: []data.Ability{
		data.MakeAbility(data.AbilityMagicImmunity),
		data.MakeAbility(data.AbilityFirstStrike),
		data.MakeAbility(data.AbilityArmorPiercing),
		data.MakeAbility(data.AbilityLegendary),
		data.MakeAbility(data.AbilityBlademaster),
		data.MakeAbility(data.AbilityConstitution),
		data.MakeAbility(data.AbilityMight),
	},
	Name: "Mortu",
	Race: data.RaceHero,
}
var HeroMysticX Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  24,
	CombatLbxFile:          "figures2.lbx",
	CombatIndex:            72,
	Name:                   "Mystic X",
	UpkeepGold:             6,
	MovementSpeed:          2,
	Count:                  1,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       72,
	MeleeAttackPower:       5,
	RangedAttackPower:      5,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                4,
	Resistance:             10,
	HitPoints:              8,
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityCaster, 5)},
	Race:                   data.RaceHero,
}
var HeroRakir Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            4,
	CombatLbxFile:    "figures1.lbx",
	CombatIndex:      32,
	Name:             "Rakir",
	Count:            1,
	HitPoints:        7,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MeleeAttackPower: 5,
	Defense:          4,
	UpkeepGold:       2,
	Resistance:       6,
	MovementSpeed:    2,
	Race:             data.RaceHero,
	Abilities:        []data.Ability{data.MakeAbilityValue(data.AbilityCaster, 5), data.MakeAbilityValue(data.AbilityScouting, 3), data.MakeAbility(data.AbilityForester)},
	Spells:           []string{"Resist Elements"},
}
var HeroRavashack Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  32,
	CombatLbxFile:          "figures3.lbx",
	CombatIndex:            16,
	Name:                   "Ravashack",
	Count:                  1,
	UpkeepGold:             10,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       72,
	MovementSpeed:          2,
	MeleeAttackPower:       1,
	RangedAttackPower:      7,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                5,
	Resistance:             6,
	HitPoints:              5,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityLifeSteal, 0),
		data.MakeAbilityValue(data.AbilityCaster, 12.5),
		data.MakeAbility(data.AbilityMissileImmunity),
		data.MakeAbility(data.AbilityArcanePower),
	},
	Race: data.RaceHero,
}
var HeroReywind Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  12,
	CombatLbxFile:          "figures1.lbx",
	CombatIndex:            96,
	UpkeepGold:             3,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       72,
	MovementSpeed:          2,
	MeleeAttackPower:       4,
	RangedAttackPower:      4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                4,
	Resistance:             6,
	HitPoints:              7,
	Count:                  1,
	Name:                   "Reywind",
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityCaster, 5)},
	Race:                   data.RaceHero,
	Spells:                 []string{"Eldritch Weapon", "Shatter", "Flame Blade"},
}
var HeroRoland Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            28,
	CombatLbxFile:    "figures2.lbx",
	CombatIndex:      104,
	Count:            1,
	UpkeepGold:       10,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 9,
	Defense:          5,
	Resistance:       6,
	HitPoints:        8,
	Abilities: []data.Ability{
		data.MakeAbility(data.AbilityMissileImmunity),
		data.MakeAbility(data.AbilityHealer),
		data.MakeAbility(data.AbilityFirstStrike),
		data.MakeAbility(data.AbilityArmorPiercing),
		data.MakeAbility(data.AbilityLegendary),
		data.MakeAbility(data.AbilitySuperMight),
		data.MakeAbility(data.AbilityPrayermaster),
	},
	Name: "Roland",
	Race: data.RaceHero,
}
var HeroSerena Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  7,
	CombatLbxFile:          "figures1.lbx",
	CombatIndex:            56,
	Name:                   "Serena",
	Count:                  1,
	UpkeepGold:             2,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       72,
	MovementSpeed:          2,
	MeleeAttackPower:       3,
	RangedAttackPower:      6,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                5,
	Resistance:             7,
	HitPoints:              5,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityHealer), data.MakeAbilityValue(data.AbilityCaster, 7.5)},
	Race:                   data.RaceHero,
}
var HeroShalla Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            22,
	CombatLbxFile:    "figures2.lbx",
	CombatIndex:      56,
	Count:            1,
	UpkeepGold:       6,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 7,
	Defense:          4,
	Resistance:       6,
	HitPoints:        8,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityThrown, 4),
		data.MakeAbility(data.AbilityBlademaster),
		data.MakeAbility(data.AbilityMight),
		data.MakeAbility(data.AbilityCharmed),
	},
	Name: "Shalla",
	Race: data.RaceHero,
}
var HeroShinBo Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            20,
	CombatLbxFile:    "figures2.lbx",
	CombatIndex:      40,
	Count:            1,
	UpkeepGold:       6,
	MovementSound:    MovementSoundSilent,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 6,
	Defense:          5,
	Resistance:       6,
	HitPoints:        7,
	Abilities:        []data.Ability{data.MakeAbility(data.AbilityInvisibility), data.MakeAbility(data.AbilityBlademaster)},
	Name:             "Shin Bo",
	Race:             data.RaceHero,
}
var HeroShuri Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  8,
	CombatLbxFile:          "figures1.lbx",
	CombatIndex:            64,
	Name:                   "Shuri",
	Count:                  1,
	UpkeepGold:             2,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       72,
	MovementSpeed:          2,
	MeleeAttackPower:       5,
	RangedAttackPower:      4,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedPhysical,
	Defense:                3,
	Resistance:             6,
	HitPoints:              7,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityPathfinding), data.MakeAbility(data.AbilityBlademaster)},
	Race:                   data.RaceHero,
}
var HeroSirHarold Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            31,
	CombatLbxFile:    "figures3.lbx",
	CombatIndex:      8,
	Count:            1,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 8,
	Defense:          5,
	Resistance:       6,
	HitPoints:        9,
	Abilities: []data.Ability{
		data.MakeAbility(data.AbilitySuperLeadership),
		data.MakeAbility(data.AbilitySuperLegendary),
		data.MakeAbility(data.AbilityConstitution),
		data.MakeAbility(data.AbilityNoble),
	},
	Name: "Sir Harold",
	Race: data.RaceHero,
}
var HeroSpyder Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            21,
	CombatLbxFile:    "figures2.lbx",
	CombatIndex:      48,
	Count:            1,
	UpkeepGold:       6,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 7,
	Defense:          5,
	Resistance:       6,
	HitPoints:        8,
	Abilities:        []data.Ability{data.MakeAbility(data.AbilityLeadership), data.MakeAbility(data.AbilitySuperLegendary)},
	Name:             "Spyder",
	Race:             data.RaceHero,
}
var HeroTaki Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            11,
	CombatLbxFile:    "figures1.lbx",
	CombatIndex:      88,
	Name:             "Taki",
	UpkeepGold:       3,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	Count:            1,
	MeleeAttackPower: 6,
	Defense:          5,
	Resistance:       6,
	HitPoints:        6,
	Abilities:        []data.Ability{data.MakeAbility(data.AbilitySuperAgility)},
	Race:             data.RaceHero,
}
var HeroTheria Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            9,
	CombatLbxFile:    "figures1.lbx",
	CombatIndex:      72,
	Name:             "Theria",
	Count:            1,
	UpkeepGold:       2,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 5,
	Defense:          5,
	Resistance:       6,
	HitPoints:        7,
	Abilities:        []data.Ability{data.MakeAbility(data.AbilityAgility), data.MakeAbility(data.AbilityCharmed)},
	Race:             data.RaceHero,
}
var HeroTorin Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            34,
	CombatLbxFile:    "figures3.lbx",
	CombatIndex:      32,
	Name:             "Torin",
	Count:            1,
	UpkeepMana:       12,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 12,
	Defense:          8,
	Resistance:       12,
	HitPoints:        12,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityCaster, 15),
		data.MakeAbility(data.AbilityMagicImmunity),
		data.MakeAbility(data.AbilityMissileImmunity),
		data.MakeAbility(data.AbilitySuperLeadership),
		data.MakeAbility(data.AbilityConstitution),
		data.MakeAbility(data.AbilitySuperMight),
		data.MakeAbility(data.AbilityPrayermaster),
	},
	Race:   data.RaceHero,
	Spells: []string{"True Light", "Healing", "Holy Armor", "Lionheart"},
}
var HeroTumu Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            14,
	CombatLbxFile:    "figures1.lbx",
	CombatIndex:      112,
	Count:            1,
	UpkeepGold:       3,
	MovementSpeed:    2,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MeleeAttackPower: 3,
	Defense:          5,
	Resistance:       6,
	HitPoints:        6,
	Abilities:        []data.Ability{data.MakeAbilityValue(data.AbilityPoisonTouch, 5), data.MakeAbility(data.AbilityBlademaster)},
	Name:             "Tumu",
	Race:             data.RaceHero,
}
var HeroValana Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            5,
	CombatLbxFile:    "figures1.lbx",
	CombatIndex:      40,
	Name:             "Valana",
	Count:            1,
	UpkeepGold:       2,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	MeleeAttackPower: 4,
	Defense:          5,
	Resistance:       6,
	HitPoints:        6,
	MovementSpeed:    2,
	Abilities:        []data.Ability{data.MakeAbilityValue(data.AbilityCaster, 5), data.MakeAbility(data.AbilityLeadership)},
	Race:             data.RaceHero,
	Spells:           []string{"Confusion", "Vertigo"},
}
var HeroWarrax Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  33,
	CombatLbxFile:          "figures3.lbx",
	CombatIndex:            24,
	Name:                   "Warrax",
	UpkeepGold:             10,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundFireball,
	RangeAttackIndex:       16,
	MovementSpeed:          2,
	MeleeAttackPower:       8,
	RangedAttackPower:      8,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                5,
	Resistance:             9,
	HitPoints:              8,
	Count:                  1,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityCaster, 10),
		data.MakeAbility(data.AbilityArmorPiercing),
		data.MakeAbility(data.AbilityConstitution),
		data.MakeAbility(data.AbilityArcanePower),
	},
	Race: data.RaceHero,
}
var HeroYramrag Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  23,
	CombatLbxFile:          "figures2.lbx",
	CombatIndex:            64,
	Name:                   "Yramrag",
	Count:                  1,
	UpkeepGold:             6,
	MovementSpeed:          2,
	MeleeAttackPower:       1,
	RangedAttackPower:      8,
	RangedAttackDamageType: DamageRangedMagical,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackIndex:       72,
	RangeAttackSound:       RangeAttackSoundFireball,
	Defense:                5,
	Resistance:             10,
	HitPoints:              5,
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityCaster, 15), data.MakeAbility(data.AbilityMissileImmunity)},
	Race:                   data.RaceHero,
	Spells:                 []string{"Lightning Bolt", "Warp Lightning", "Doom Bolt"},
}
var HeroZaldron Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  2,
	CombatLbxFile:          "figures1.lbx",
	CombatIndex:            16,
	Name:                   "Zaldron",
	UpkeepGold:             2,
	Count:                  1,
	MovementSpeed:          2,
	MeleeAttackPower:       1,
	RangedAttackPower:      6,
	RangedAttackDamageType: DamageRangedMagical,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackIndex:       72,
	RangeAttackSound:       RangeAttackSoundFireball,
	Defense:                4,
	Resistance:             6,
	HitPoints:              5,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityCaster, 7.5),
		data.MakeAbility(data.AbilitySage),
	},
	Race:   data.RaceHero,
	Spells: []string{"Dispel Magic True", "Counter Magic"},
}
var HighElfCavalry Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             98,
	CombatLbxFile:     "figures7.lbx",
	CombatIndex:       64,
	Name:              "Cavalry",
	ProductionCost:    60,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             4,
	MovementSound:     MovementSoundHorse,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     2,
	MeleeAttackPower:  4,
	Defense:           2,
	Resistance:        6,
	HitPoints:         3,
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingStables},
	Abilities:         []data.Ability{data.MakeAbilityValue(data.AbilityToHit, 10), data.MakeAbility(data.AbilityForester), data.MakeAbility(data.AbilityFirstStrike)},
	Race:              data.RaceHighElf,
}
var HighElfHalberdiers Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             97,
	CombatLbxFile:     "figures7.lbx",
	CombatIndex:       56,
	Name:              "Halberdiers",
	ProductionCost:    60,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  4,
	Defense:           3,
	Resistance:        6,
	HitPoints:         1,
	RequiredBuildings: []building.Building{building.BuildingArmory},
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityForester), data.MakeAbilityValue(data.AbilityToHit, 10)},
	Race:              data.RaceHighElf,
}
var HighElfMagician Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  99,
	CombatLbxFile:          "figures7.lbx",
	CombatIndex:            72,
	Name:                   "Magicians",
	ProductionCost:         180,
	UpkeepGold:             4,
	UpkeepFood:             1,
	Count:                  4,
	MovementSound:          MovementSoundShuffle,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       72,
	MovementSpeed:          2,
	MeleeAttackPower:       1,
	RangedAttackPower:      5,
	RangedAttacks:          4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                3,
	Resistance:             10,
	HitPoints:              1,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityFireballSpell, 1),
		data.MakeAbilityValue(data.AbilityToHit, 10),
		data.MakeAbility(data.AbilityMissileImmunity),
		data.MakeAbility(data.AbilityForester),
	},
	RequiredBuildings: []building.Building{building.BuildingWizardsGuild},
	Race:              data.RaceHighElf,
}
var HighElfSettlers Unit = Unit{
	LbxFile:          "units1.lbx",
	Name:             "Settlers",
	CombatLbxFile:    "figures7.lbx",
	CombatIndex:      80,
	Count:            1,
	Index:            100,
	UpkeepGold:       2,
	UpkeepFood:       1,
	Race:             data.RaceHighElf,
	ProductionCost:   90,
	MovementSpeed:    1,
	Resistance:       6,
	MeleeAttackPower: 1,
	HitPoints:        10,
	Defense:          1,
	AttackSound:      AttackSoundNormal,
	MovementSound:    MovementSoundShuffle,

	Abilities: []data.Ability{data.MakeAbility(data.AbilityCreateOutpost), data.MakeAbilityValue(data.AbilityToHit, 10), data.MakeAbility(data.AbilityForester)},
}
var HighElfSpearmen Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            95,
	CombatLbxFile:    "figures7.lbx",
	CombatIndex:      40,
	Count:            8,
	Name:             "Spearmen",
	ProductionCost:   15,
	MeleeAttackPower: 1,
	Defense:          2,
	AttackSound:      AttackSoundNormal,
	MovementSound:    MovementSoundMarching,
	Resistance:       6,
	Abilities:        []data.Ability{data.MakeAbility(data.AbilityForester), data.MakeAbilityValue(data.AbilityToHit, 10)},
	MovementSpeed:    1,
	Race:             data.RaceHighElf,
	HitPoints:        1,
	UpkeepFood:       1,
}
var HighElfSwordsmen Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             96,
	CombatLbxFile:     "figures7.lbx",
	CombatIndex:       48,
	Name:              "Swordsmen",
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingSmithy},
	ProductionCost:    30,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  3,
	Defense:           2,
	Resistance:        6,
	HitPoints:         1,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityLargeShield), data.MakeAbilityValue(data.AbilityToHit, 10), data.MakeAbility(data.AbilityForester)},
	Race:              data.RaceHighElf,
}
var HighMenBowmen Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  106,
	Race:                   data.RaceHighMen,
	Name:                   "Bowmen",
	UpkeepGold:             1,
	UpkeepFood:             1,
	RequiredBuildings:      []building.Building{building.BuildingBarracks, building.BuildingSawmill},
	ProductionCost:         30,
	Count:                  6,
	Defense:                1,
	MovementSpeed:          1,
	MeleeAttackPower:       1,
	RangedAttackPower:      1,
	RangeAttackIndex:       8,
	RangedAttacks:          8,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangedAttackDamageType: DamageRangedPhysical,
	MovementSound:          MovementSoundShuffle,
	AttackSound:            AttackSoundNormal,
	Resistance:             4,
	HitPoints:              1,
	CombatLbxFile:          "figures8.lbx",
	CombatIndex:            8,
}
var HighMenCavalry Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             107,
	Name:              "Cavalry",
	CombatLbxFile:     "figures8.lbx",
	CombatIndex:       16,
	ProductionCost:    40,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             4,
	MovementSound:     MovementSoundHorse,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     2,
	MeleeAttackPower:  4,
	Defense:           2,
	Resistance:        4,
	HitPoints:         3,
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingStables},
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityFirstStrike)},
	Race:              data.RaceHighMen,
}
var HighMenEngineer Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             110,
	CombatLbxFile:     "figures8.lbx",
	CombatIndex:       40,
	Name:              "Engineers",
	ProductionCost:    40,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundShuffle,
	AttackSound:       AttackSoundNormal,
	MeleeAttackPower:  1,
	Defense:           1,
	Resistance:        4,
	HitPoints:         1,
	MovementSpeed:     1,
	RequiredBuildings: []building.Building{building.BuildingBuildersHall},
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityConstruction), data.MakeAbility(data.AbilityWallCrusher)},
	Race:              data.RaceHighMen,
}
var HighMenMagician Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             109,
	CombatLbxFile:     "figures8.lbx",
	CombatIndex:       32,
	Name:              "Magicians",
	ProductionCost:    120,
	UpkeepGold:        3,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundShuffle,
	AttackSound:       AttackSoundNormal,
	RangeAttackSound:  RangeAttackSoundMagic,
	RangeAttackIndex:  72,
	MovementSpeed:     1,
	MeleeAttackPower:  1,
	RangedAttackPower: 5,
	RangedAttacks:     4,
	Defense:           3,
	Resistance:        8,
	HitPoints:         1,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityMissileImmunity), data.MakeAbilityValue(data.AbilityFireballSpell, 1)},
	RequiredBuildings: []building.Building{building.BuildingWizardsGuild},
	Race:              data.RaceHighMen,
}
var HighMenPikemen Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             112,
	CombatLbxFile:     "figures8.lbx",
	CombatIndex:       56,
	Name:              "Pikemen",
	ProductionCost:    80,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             8,
	MovementSpeed:     1,
	MeleeAttackPower:  5,
	AttackSound:       AttackSoundNormal,
	MovementSound:     MovementSoundMarching,
	Defense:           3,
	Resistance:        5,
	HitPoints:         1,
	RequiredBuildings: []building.Building{building.BuildingFightersGuild},
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityNegateFirstStrike), data.MakeAbility(data.AbilityArmorPiercing)},
	Race:              data.RaceHighMen,
}
var HighMenPriest Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  108,
	CombatLbxFile:          "figures8.lbx",
	CombatIndex:            24,
	Name:                   "Priests",
	ProductionCost:         100,
	UpkeepGold:             2,
	UpkeepFood:             1,
	Count:                  4,
	MovementSound:          MovementSoundMarching,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       72,
	MovementSpeed:          1,
	MeleeAttackPower:       3,
	RangedAttackPower:      4,
	RangedAttacks:          4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                4,
	Resistance:             7,
	HitPoints:              1,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityHealer), data.MakeAbility(data.AbilityPurify), data.MakeAbilityValue(data.AbilityHealingSpell, 1)},
	RequiredBuildings:      []building.Building{building.BuildingParthenon},
	Race:                   data.RaceHighMen,
}
var HighMenSettlers Unit = Unit{
	LbxFile:        "units1.lbx",
	Name:           "Settlers",
	Index:          111,
	CombatLbxFile:  "figures8.lbx",
	CombatIndex:    48,
	MovementSpeed:  1,
	ProductionCost: 60,
	UpkeepGold:     2,
	UpkeepFood:     1,
	Count:          1,
	Defense:        1,
	Resistance:     4,
	HitPoints:      10,
	AttackSound:    AttackSoundNormal,
	MovementSound:  MovementSoundShuffle,
	Abilities:      []data.Ability{data.MakeAbility(data.AbilityCreateOutpost)},
	Race:           data.RaceHighMen,
}
var HighMenSpearmen Unit = Unit{
	LbxFile:          "units1.lbx",
	Name:             "Spearmen",
	Index:            104,
	CombatLbxFile:    "figures7.lbx",
	CombatIndex:      112,
	Race:             data.RaceHighMen,
	ProductionCost:   10,
	UpkeepFood:       1,
	MovementSound:    MovementSoundMarching,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	MeleeAttackPower: 1,
	Defense:          2,
	Resistance:       4,
	HitPoints:        1,
	Count:            8,
}
var HighMenSwordsmen Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             105,
	CombatLbxFile:     "figures8.lbx",
	CombatIndex:       0,
	Name:              "Swordsmen",
	ProductionCost:    20,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  3,
	Defense:           2,
	Resistance:        4,
	HitPoints:         1,
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingSmithy},
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityLargeShield)},
	Race:              data.RaceHighMen,
}
var Hydra Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            43,
	Name:             "Hydra",
	CombatLbxFile:    "figure11.lbx",
	CombatIndex:      104,
	UpkeepMana:       14,
	Count:            1,
	MovementSound:    MovementSoundBigSteps,
	AttackSound:      AttackSoundMonster2,
	Realm:            data.ChaosMagic,
	MovementSpeed:    1,
	MeleeAttackPower: 6,
	Defense:          4,
	Resistance:       11,
	HitPoints:        10,
	Abilities:        []data.Ability{data.MakeAbility(data.AbilityRegeneration), data.MakeAbilityValue(data.AbilityToHit, 10), data.MakeAbilityValue(data.AbilityFireBreath, 5)},
	Race:             data.RaceFantastic,
	CastingCost:      650,
}

FIXME: hydra has 9 virtual figures, one for each head

var KlackonEngineer Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             117,
	CombatLbxFile:     "figures8.lbx",
	CombatIndex:       96,
	Name:              "Engineer",
	RequiredBuildings: []building.Building{building.BuildingBuildersHall},
	ProductionCost:    80,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundShuffle,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  1,
	Defense:           1,
	Resistance:        5,
	HitPoints:         1,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityConstruction), data.MakeAbility(data.AbilityWallCrusher)},
	Race:              data.RaceKlackon,
}
var KlackonHalberdiers Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             116,
	CombatLbxFile:     "figures8.lbx",
	CombatIndex:       88,
	Name:              "Halberdiers",
	RequiredBuildings: []building.Building{building.BuildingArmory},
	ProductionCost:    80,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  4,
	Defense:           5,
	Resistance:        5,
	HitPoints:         1,
	Race:              data.RaceKlackon,
}
var KlackonSettlers Unit = Unit{
	LbxFile:        "units1.lbx",
	Index:          118,
	CombatLbxFile:  "figures8.lbx",
	CombatIndex:    104,
	Name:           "Settlers",
	UpkeepGold:     3,
	UpkeepFood:     1,
	Count:          1,
	ProductionCost: 120,
	MovementSpeed:  1,
	Defense:        1,
	Resistance:     5,
	HitPoints:      20,
	AttackSound:    AttackSoundNormal,
	MovementSound:  MovementSoundShuffle,
	Abilities:      []data.Ability{data.MakeAbility(data.AbilityConstruction)},
	Race:           data.RaceKlackon,
}
var KlackonSpearmen Unit = Unit{
	LbxFile:          "units1.lbx",
	Index:            114,
	CombatLbxFile:    "figures8.lbx",
	CombatIndex:      72,
	Name:             "Spearmen",
	ProductionCost:   20,
	UpkeepFood:       1,
	Count:            8,
	MovementSound:    MovementSoundMarching,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	MeleeAttackPower: 1,
	Defense:          4,
	Resistance:       5,
	HitPoints:        1,
	Race:             data.RaceKlackon,
}
var KlackonSwordsmen Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             115,
	Name:              "Swordsmen",
	CombatLbxFile:     "figures8.lbx",
	CombatIndex:       80,
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingSmithy},
	ProductionCost:    40,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  3,
	Defense:           4,
	Resistance:        5,
	HitPoints:         1,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityLargeShield)},
	Race:              data.RaceKlackon,
}
var LizardHalberdiers Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             2,
	Name:              "Halberdiers",
	CombatLbxFile:     "figures9.lbx",
	CombatIndex:       16,
	RequiredBuildings: []building.Building{building.BuildingArmory},
	Race:              data.RaceLizard,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityNegateFirstStrike)},
	ProductionCost:    40,
	UpkeepGold:        1,
	UpkeepFood:        1,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	Swimming:          true,
	MeleeAttackPower:  4,
	Defense:           4,
	Resistance:        4,
	HitPoints:         2,
	Count:             6,
}
var LizardJavelineers Unit = Unit{
	LbxFile:                "units2.lbx",
	Index:                  3,
	Name:                   "Javelineers",
	CombatLbxFile:          "figures9.lbx",
	CombatIndex:            24,
	RequiredBuildings:      []building.Building{building.BuildingFightersGuild},
	Race:                   data.RaceLizard,
	RangedAttacks:          6,
	ProductionCost:         80,
	UpkeepGold:             2,
	UpkeepFood:             1,
	Count:                  6,
	MovementSound:          MovementSoundMarching,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangeAttackIndex:       64,
	MeleeAttackPower:       4,
	RangedAttackPower:      3,
	RangedAttackDamageType: DamageRangedPhysical,
	Defense:                4,
	Resistance:             5,
	HitPoints:              2,
	MovementSpeed:          1,
	Swimming:               true,
}
var LizardSettlers Unit = Unit{
	LbxFile:        "units2.lbx",
	Index:          5,
	Name:           "Settlers",
	CombatLbxFile:  "figures9.lbx",
	CombatIndex:    40,
	MovementSpeed:  1,
	Defense:        2,
	Resistance:     4,
	HitPoints:      20,
	Count:          1,
	ProductionCost: 120,
	Swimming:       true,
	UpkeepGold:     3,
	UpkeepFood:     1,
	AttackSound:    AttackSoundNormal,
	MovementSound:  MovementSoundShuffle,
	Abilities:      []data.Ability{data.MakeAbility(data.AbilityCreateOutpost)},
	Race:           data.RaceLizard,
}
var LizardShamans Unit = Unit{
	LbxFile:                "units2.lbx",
	Index:                  4,
	Name:                   "Shamans",
	CombatLbxFile:          "figures9.lbx",
	CombatIndex:            32,
	RequiredBuildings:      []building.Building{building.BuildingShrine},
	Race:                   data.RaceLizard,
	MovementSound:          MovementSoundShuffle,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       88,
	RangedAttacks:          4,
	MeleeAttackPower:       2,
	RangedAttackPower:      2,
	RangedAttackDamageType: DamageRangedMagical,
	ProductionCost:         60,
	UpkeepGold:             2,
	UpkeepFood:             1,
	Count:                  4,
	MovementSpeed:          1,
	Swimming:               true,
	Defense:                3,
	Resistance:             6,
	HitPoints:              2,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityHealer), data.MakeAbility(data.AbilityPurify)},
}
var LizardSpearmen Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            0,
	Name:             "Spearmen",
	CombatLbxFile:    "figures9.lbx",
	CombatIndex:      0,
	Race:             data.RaceLizard,
	UpkeepFood:       1,
	ProductionCost:   10,
	Count:            8,
	MovementSound:    MovementSoundMarching,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	Swimming:         true,
	MeleeAttackPower: 1,
	Defense:          3,
	Resistance:       4,
	HitPoints:        2,
}
var LizardSwordsmen Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             1,
	Name:              "Swordsmen",
	CombatLbxFile:     "figures9.lbx",
	CombatIndex:       8,
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingSmithy},
	ProductionCost:    20,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	Swimming:          true,
	MeleeAttackPower:  3,
	Defense:           3,
	Resistance:        4,
	HitPoints:         4,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityLargeShield)},
	Race:              data.RaceLizard,
}
var Longbowmen Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  101,
	CombatLbxFile:          "figures7.lbx",
	CombatIndex:            88,
	Name:                   "Longbowmen",
	ProductionCost:         80,
	UpkeepGold:             2,
	UpkeepFood:             1,
	Count:                  6,
	MovementSpeed:          1,
	MeleeAttackPower:       1,
	RangedAttackPower:      3,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedPhysical,
	RangeAttackIndex:       8,
	MovementSound:          MovementSoundMarching,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	Defense:                2,
	Resistance:             6,
	HitPoints:              1,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityForester), data.MakeAbilityValue(data.AbilityToHit, 10)},
	RequiredBuildings:      []building.Building{building.BuildingBarracks, building.BuildingSawmill},
	Race:                   data.RaceHighElf,
}
var MagicSpirit Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            34,
	CombatLbxFile:    "figure11.lbx",
	CombatIndex:      32,
	Name:             "Magic Spirit",
	Realm:            data.ArcaneMagic,
	UpkeepMana:       1,
	MovementSound:    MovementSoundFly2,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	Swimming:         true,
	Count:            1,
	MeleeAttackPower: 5,
	Defense:          4,
	Resistance:       8,
	HitPoints:        10,
	Abilities:        []data.Ability{data.MakeAbility(data.AbilityMeld), data.MakeAbility(data.AbilityNonCorporeal)},
	Race:             data.RaceFantastic,
	CastingCost:      30,
}
var Manticore Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             55,
	CombatLbxFile:     "figures4.lbx",
	CombatIndex:       80,
	Name:              "Manticores",
	ProductionCost:    160,
	UpkeepGold:        4,
	UpkeepFood:        1,
	Count:             2,
	Flying:            true,
	MovementSound:     MovementSoundFly2,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     2,
	MeleeAttackPower:  5,
	Defense:           3,
	Resistance:        6,
	HitPoints:         7,
	Abilities:         []data.Ability{data.MakeAbilityValue(data.AbilityScouting, 2), data.MakeAbilityValue(data.AbilityPoisonTouch, 6)},
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingAnimistsGuild},
	Race:              data.RaceBeastmen,
}
var Minotaur Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             56,
	CombatLbxFile:     "figures4.lbx",
	CombatIndex:       88,
	Name:              "Minotaurs",
	ProductionCost:    200,
	UpkeepGold:        4,
	UpkeepFood:        1,
	Count:             2,
	MovementSpeed:     1,
	MeleeAttackPower:  12,
	AttackSound:       AttackSoundNormal,
	MovementSound:     MovementSoundShuffle,
	Defense:           4,
	Resistance:        7,
	HitPoints:         12,
	Abilities:         []data.Ability{data.MakeAbilityValue(data.AbilityToHit, 20), data.MakeAbility(data.AbilityLargeShield)},
	RequiredBuildings: []building.Building{building.BuildingArmorersGuild},
	Race:              data.RaceBeastmen,
}
var Nagas Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            77,
	Name:             "Nagas",
	CombatLbxFile:    "figure14.lbx",
	CombatIndex:      16,
	UpkeepMana:       2,
	Realm:            data.SorceryMagic,
	MovementSpeed:    1,
	Count:            2,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	MeleeAttackPower: 4,
	Defense:          3,
	Resistance:       7,
	HitPoints:        6,
	Race:             data.RaceFantastic,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 10),
		data.MakeAbilityValue(data.AbilityPoisonTouch, 4),
		data.MakeAbility(data.AbilityFirstStrike),
	},
	CastingCost: 100,
}
var NightStalker Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            47,
	Name:             "Night Stalker",
	CombatLbxFile:    "figure12.lbx",
	CombatIndex:      16,
	UpkeepMana:       1,
	Count:            1,
	MovementSound:    MovementSoundSilent,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 7,
	Defense:          3,
	Resistance:       8,
	HitPoints:        10,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 10),
		data.MakeAbilityValue(data.AbilityDeathGaze, 2),
		data.MakeAbility(data.AbilityInvisibility),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityIllusionsImmunity),
		data.MakeAbility(data.AbilityColdImmunity),
		data.MakeAbility(data.AbilityDeathImmunity),
	},
	Realm:       data.DeathMagic,
	Race:        data.RaceFantastic,
	CastingCost: 250,
}
var Nightblades Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             63,
	CombatLbxFile:     "figures5.lbx",
	CombatIndex:       24,
	Name:              "Nightblades",
	ProductionCost:    120,
	UpkeepGold:        3,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundSilent,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  4,
	Defense:           3,
	Resistance:        7,
	HitPoints:         1,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityInvisibility), data.MakeAbilityValue(data.AbilityPoisonTouch, 1)},
	RequiredBuildings: []building.Building{building.BuildingFightersGuild},
	Race:              data.RaceDarkElf,
}
var Nightmares Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  65,
	CombatLbxFile:          "figures5.lbx",
	CombatIndex:            40,
	Name:                   "Nightmares",
	ProductionCost:         160,
	UpkeepGold:             4,
	UpkeepFood:             1,
	Count:                  2,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic2,
	RangeAttackIndex:       80,
	MovementSpeed:          3,
	Flying:                 true,
	MeleeAttackPower:       8,
	RangedAttackPower:      5,
	RangedAttacks:          4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                4,
	Resistance:             8,
	HitPoints:              10,
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityScouting, 2)},
	RequiredBuildings:      []building.Building{building.BuildingFantasticStable},
	Race:                   data.RaceDarkElf,
}
var NomadBowmen Unit = Unit{
	LbxFile:                "units2.lbx",
	Index:                  9,
	CombatLbxFile:          "figures9.lbx",
	CombatIndex:            72,
	Name:                   "Bowmen",
	ProductionCost:         30,
	UpkeepGold:             1,
	UpkeepFood:             1,
	Count:                  6,
	MovementSound:          MovementSoundMarching,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangeAttackIndex:       8,
	MovementSpeed:          1,
	MeleeAttackPower:       1,
	RangedAttackPower:      1,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedPhysical,
	Defense:                1,
	Resistance:             4,
	HitPoints:              1,
	RequiredBuildings:      []building.Building{building.BuildingBarracks, building.BuildingSawmill},
	Race:                   data.RaceNomad,
}
var NomadHorsebowemen Unit = Unit{
	LbxFile:                "units2.lbx",
	Index:                  13,
	CombatLbxFile:          "figures9.lbx",
	CombatIndex:            104,
	Name:                   "Horsebowmen",
	ProductionCost:         60,
	UpkeepGold:             2,
	UpkeepFood:             1,
	Count:                  4,
	MovementSound:          MovementSoundHorse,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangeAttackIndex:       8,
	MovementSpeed:          2,
	MeleeAttackPower:       4,
	RangedAttackPower:      2,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedPhysical,
	Defense:                2,
	Resistance:             4,
	HitPoints:              3,
	RequiredBuildings:      []building.Building{building.BuildingBarracks, building.BuildingStables},
	Race:                   data.RaceNomad,
}
var NomadPikemen Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             14,
	CombatLbxFile:     "figures9.lbx",
	CombatIndex:       112,
	Name:              "Pikemen",
	ProductionCost:    80,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             8,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  5,
	Defense:           3,
	Resistance:        5,
	HitPoints:         1,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityNegateFirstStrike), data.MakeAbility(data.AbilityArmorPiercing)},
	RequiredBuildings: []building.Building{building.BuildingFightersGuild},
	Race:              data.RaceNomad,
}
var NomadPriest Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             10,
	CombatLbxFile:     "figures9.lbx",
	CombatIndex:       80,
	Name:              "Priests",
	ProductionCost:    100,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             4,
	MovementSound:     MovementSoundShuffle,
	AttackSound:       AttackSoundNormal,
	RangeAttackSound:  RangeAttackSoundMagic,
	RangeAttackIndex:  88,
	MovementSpeed:     1,
	MeleeAttackPower:  3,
	RangedAttackPower: 4,
	RangedAttacks:     4,

	RangedAttackDamageType: DamageRangedMagical,
	Defense:                4,
	Resistance:             7,
	HitPoints:              1,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityHealer), data.MakeAbility(data.AbilityPurify), data.MakeAbilityValue(data.AbilityHealingSpell, 1)},
	RequiredBuildings:      []building.Building{building.BuildingParthenon},
	Race:                   data.RaceNomad,
}
var NomadRangers Unit = Unit{
	LbxFile:                "units2.lbx",
	Index:                  15,
	CombatLbxFile:          "figure10.lbx",
	CombatIndex:            0,
	Name:                   "Rangers",
	ProductionCost:         120,
	UpkeepGold:             3,
	UpkeepFood:             1,
	Count:                  4,
	MovementSound:          MovementSoundMarching,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangeAttackIndex:       8,
	MovementSpeed:          2,
	MeleeAttackPower:       4,
	RangedAttackPower:      3,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedPhysical,
	Defense:                4,
	Resistance:             6,
	HitPoints:              2,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityPathfinding)},
	RequiredBuildings:      []building.Building{building.BuildingBarracks, building.BuildingAnimistsGuild},
	Race:                   data.RaceNomad,
}
var NomadSettlers Unit = Unit{
	LbxFile:        "units2.lbx",
	Index:          12,
	CombatLbxFile:  "figures9.lbx",
	CombatIndex:    96,
	Name:           "Settlers",
	ProductionCost: 60,
	UpkeepGold:     2,
	UpkeepFood:     1,
	Count:          1,
	MovementSpeed:  1,
	Defense:        1,
	Resistance:     4,
	HitPoints:      10,
	AttackSound:    AttackSoundNormal,
	MovementSound:  MovementSoundShuffle,
	Abilities:      []data.Ability{data.MakeAbility(data.AbilityCreateOutpost)},
	Race:           data.RaceNomad,
}
var NomadSpearmen Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            7,
	CombatLbxFile:    "figures9.lbx",
	CombatIndex:      56,
	Name:             "Spearmen",
	ProductionCost:   10,
	UpkeepFood:       1,
	Count:            8,
	MovementSound:    MovementSoundMarching,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	MeleeAttackPower: 1,
	Defense:          2,
	Resistance:       4,
	HitPoints:        1,
	Race:             data.RaceNomad,
}
var NomadSwordsmen Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             8,
	CombatLbxFile:     "figures9.lbx",
	CombatIndex:       64,
	Name:              "Swordsmen",
	ProductionCost:    20,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  3,
	Defense:           2,
	Resistance:        4,
	HitPoints:         1,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityLargeShield)},
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingSmithy},
	Race:              data.RaceNomad,
}
var OrcBowmen Unit = Unit{
	LbxFile:                "units2.lbx",
	Index:                  20,
	CombatLbxFile:          "figure10.lbx",
	CombatIndex:            40,
	Name:                   "Bowmen",
	ProductionCost:         30,
	UpkeepGold:             1,
	UpkeepFood:             1,
	Count:                  6,
	MovementSound:          MovementSoundMarching,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangeAttackIndex:       8,
	MovementSpeed:          1,
	MeleeAttackPower:       1,
	RangedAttackPower:      1,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedPhysical,
	Defense:                1,
	Resistance:             4,
	HitPoints:              1,
	RequiredBuildings:      []building.Building{building.BuildingBarracks, building.BuildingSawmill},
	Race:                   data.RaceOrc,
}
var OrcCavalry Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             21,
	CombatLbxFile:     "figure10.lbx",
	CombatIndex:       48,
	Name:              "Calvary",
	ProductionCost:    40,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             4,
	MovementSound:     MovementSoundHorse,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     2,
	MeleeAttackPower:  4,
	Defense:           2,
	Resistance:        4,
	HitPoints:         3,
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingStables},
	Race:              data.RaceOrc,
}
var OrcEngineers Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             24,
	CombatLbxFile:     "figure10.lbx",
	CombatIndex:       72,
	Name:              "Engineers",
	ProductionCost:    40,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundShuffle,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  1,
	Defense:           1,
	Resistance:        4,
	HitPoints:         1,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityConstruction), data.MakeAbility(data.AbilityWallCrusher)},
	RequiredBuildings: []building.Building{building.BuildingBuildersHall},
	Race:              data.RaceOrc,
}
var OrcHalberdiers Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             19,
	CombatLbxFile:     "figure10.lbx",
	CombatIndex:       32,
	Name:              "Halberdiers",
	ProductionCost:    40,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  4,
	Defense:           3,
	Resistance:        4,
	HitPoints:         1,
	RequiredBuildings: []building.Building{building.BuildingArmory},
	Race:              data.RaceOrc,
}
var OrcMagicians Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            23,
	CombatLbxFile:    "figure10.lbx",
	CombatIndex:      64,
	Name:             "Magicians",
	ProductionCost:   120,
	UpkeepGold:       3,
	UpkeepFood:       1,
	Count:            4,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	RangeAttackSound: RangeAttackSoundMagic,
	RangeAttackIndex: 72,
	MovementSpeed:    1,
	MeleeAttackPower: 1,

	RangedAttackPower:      5,
	RangedAttacks:          4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                3,
	Resistance:             8,
	HitPoints:              1,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityMissileImmunity), data.MakeAbilityValue(data.AbilityFireballSpell, 1)},
	RequiredBuildings:      []building.Building{building.BuildingWizardsGuild},
	Race:                   data.RaceOrc,
}
var OrcSettlers Unit = Unit{
	LbxFile:        "units2.lbx",
	Index:          25,
	CombatLbxFile:  "figure10.lbx",
	CombatIndex:    80,
	Name:           "Settlers",
	ProductionCost: 60,
	UpkeepGold:     2,
	UpkeepFood:     1,
	Count:          1,
	MovementSpeed:  1,
	Defense:        1,
	Resistance:     4,
	HitPoints:      10,
	AttackSound:    AttackSoundNormal,
	MovementSound:  MovementSoundShuffle,
	Abilities:      []data.Ability{data.MakeAbility(data.AbilityCreateOutpost)},
	Race:           data.RaceOrc,
}
var OrcShamans Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            22,
	CombatLbxFile:    "figure10.lbx",
	CombatIndex:      56,
	Name:             "Shamans",
	ProductionCost:   60,
	UpkeepGold:       2,
	UpkeepFood:       1,
	Count:            4,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	RangeAttackSound: RangeAttackSoundMagic,
	RangeAttackIndex: 88,
	MovementSpeed:    1,
	MeleeAttackPower: 2,

	RangedAttackPower:      2,
	RangedAttacks:          4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                3,
	Resistance:             6,
	HitPoints:              1,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityHealer), data.MakeAbility(data.AbilityPurify)},
	RequiredBuildings:      []building.Building{building.BuildingShrine},
	Race:                   data.RaceOrc,
}
var OrcSpearmen Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            17,
	CombatLbxFile:    "figure10.lbx",
	CombatIndex:      16,
	Name:             "Spearmen",
	ProductionCost:   10,
	UpkeepFood:       1,
	Count:            8,
	MovementSound:    MovementSoundMarching,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	MeleeAttackPower: 1,
	Defense:          2,
	Resistance:       4,
	HitPoints:        1,
	Race:             data.RaceOrc,
}
var OrcSwordsmen Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             18,
	CombatLbxFile:     "figure10.lbx",
	CombatIndex:       24,
	Name:              "Swordsmen",
	ProductionCost:    20,
	UpkeepGold:        1,
	UpkeepFood:        1,
	Count:             6,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  3,
	Defense:           2,
	Resistance:        4,
	HitPoints:         1,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityLargeShield)},
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingSmithy},
	Race:              data.RaceOrc,
}
var Paladin Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             113,
	CombatLbxFile:     "figures8.lbx",
	CombatIndex:       64,
	Name:              "Paladins",
	ProductionCost:    200,
	UpkeepGold:        4,
	UpkeepFood:        1,
	Count:             4,
	MovementSound:     MovementSoundHorse,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     2,
	MeleeAttackPower:  6,
	Defense:           5,
	Resistance:        8,
	HitPoints:         4,
	RequiredBuildings: []building.Building{building.BuildingArmorersGuild, building.BuildingCathedral},
	Abilities: []data.Ability{
		data.MakeAbility(data.AbilityMagicImmunity),
		data.MakeAbilityValue(data.AbilityHolyBonus, 1),
		data.MakeAbility(data.AbilityArmorPiercing),
		data.MakeAbility(data.AbilityFirstStrike),
	},
	Race: data.RaceHighMen,
}
var Pegasai Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  103,
	CombatLbxFile:          "figures7.lbx",
	CombatIndex:            104,
	Name:                   "Pegasai",
	ProductionCost:         160,
	UpkeepGold:             4,
	UpkeepFood:             1,
	Count:                  2,
	Flying:                 true,
	MovementSound:          MovementSoundFly2,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundArrow,
	RangeAttackIndex:       8,
	MovementSpeed:          3,
	MeleeAttackPower:       5,
	RangedAttackPower:      3,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedPhysical,
	Defense:                4,
	Resistance:             8,
	HitPoints:              5,
	RequiredBuildings:      []building.Building{building.BuildingFantasticStable},
	Race:                   data.RaceHighElf,
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityScouting, 2), data.MakeAbilityValue(data.AbilityToHit, 10)},
}
var PhantomBeast Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            71,
	Race:             data.RaceFantastic,
	CombatLbxFile:    "figure13.lbx",
	CombatIndex:      88,
	Realm:            data.SorceryMagic,
	Name:             "Phantom Beast",
	Count:            1,
	MovementSound:    MovementSoundSilent,
	AttackSound:      AttackSoundMonster2,
	MeleeAttackPower: 18,
	MovementSpeed:    2,
	Resistance:       8,
	HitPoints:        20,

	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 10),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityDeathImmunity),
		data.MakeAbility(data.AbilityStoningImmunity),
		data.MakeAbility(data.AbilityNonCorporeal),
		data.MakeAbility(data.AbilityIllusion),
	},
	CastingCost: 35,
}
var PhantomWarrior Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            72,
	CombatLbxFile:    "figure13.lbx",
	CombatIndex:      96,
	Realm:            data.SorceryMagic,
	Name:             "Phantom Warriors",
	MovementSound:    MovementSoundSilent,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	Count:            6,
	MeleeAttackPower: 3,
	Defense:          0,
	HitPoints:        1,
	Resistance:       6,
	Abilities: []data.Ability{
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityDeathImmunity),
		data.MakeAbility(data.AbilityStoningImmunity),
		data.MakeAbility(data.AbilityNonCorporeal),
		data.MakeAbility(data.AbilityIllusion),
	},
	Race:        data.RaceFantastic,
	CastingCost: 10,
}
var ShadowDemons Unit = Unit{
	LbxFile:                "units2.lbx",
	Index:                  51,
	CombatLbxFile:          "figure12.lbx",
	CombatIndex:            48,
	Name:                   "Shadow Demons",
	UpkeepMana:             7,
	Count:                  4,
	Flying:                 true,
	MovementSound:          MovementSoundFly2,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       48,
	MovementSpeed:          1,
	MeleeAttackPower:       5,
	RangedAttackPower:      4,
	RangedAttacks:          8,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                4,
	Resistance:             8,
	HitPoints:              5,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 20),
		data.MakeAbility(data.AbilityPlaneShift),
		data.MakeAbility(data.AbilityNonCorporeal),
		data.MakeAbility(data.AbilityRegeneration),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityWeaponImmunity),
		data.MakeAbility(data.AbilityIllusionsImmunity),
		data.MakeAbility(data.AbilityColdImmunity),
		data.MakeAbility(data.AbilityDeathImmunity),
	},
	Realm:       data.DeathMagic,
	Race:        data.RaceFantastic,
	CastingCost: 325,
}
var Skeleton Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            45,
	CombatLbxFile:    "figure12.lbx",
	CombatIndex:      0,
	Name:             "Skeletons",
	UpkeepMana:       1,
	Count:            6,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	MeleeAttackPower: 3,
	Defense:          4,
	Resistance:       5,
	HitPoints:        1,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 10),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityMissileImmunity),
		data.MakeAbility(data.AbilityIllusionsImmunity),
		data.MakeAbility(data.AbilityColdImmunity),
		data.MakeAbility(data.AbilityDeathImmunity),
	},
	Race:        data.RaceFantastic,
	Realm:       data.DeathMagic,
	CastingCost: 25,
}
var SkyDrake Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            76,
	Name:             "Sky Drake",
	Realm:            data.SorceryMagic,
	CombatLbxFile:    "figure14.lbx",
	CombatIndex:      8,
	UpkeepMana:       25,
	Count:            1,
	MovementSound:    MovementSoundFly,
	AttackSound:      AttackSoundMonster2,
	MovementSpeed:    4,
	Flying:           true,
	MeleeAttackPower: 20,
	Defense:          10,
	Resistance:       14,
	HitPoints:        25,
	Race:             data.RaceFantastic,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 30),
		data.MakeAbilityValue(data.AbilityLightningBreath, 20),
		data.MakeAbility(data.AbilityMagicImmunity),
		data.MakeAbility(data.AbilityIllusionsImmunity),
	},
	CastingCost: 1000,
}
var Slingers Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  94,
	CombatLbxFile:          "figures7.lbx",
	CombatIndex:            32,
	Name:                   "Slingers",
	ProductionCost:         100,
	UpkeepGold:             2,
	UpkeepFood:             1,
	Count:                  8,
	MovementSound:          MovementSoundShuffle,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundSling,
	RangeAttackIndex:       40,
	MovementSpeed:          1,
	MeleeAttackPower:       1,
	RangedAttackPower:      2,
	RangedAttacks:          6,
	RangedAttackDamageType: DamageRangedBoulder,
	Defense:                2,
	Resistance:             6,
	HitPoints:              1,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityLucky)},
	RequiredBuildings:      []building.Building{building.BuildingArmory},
	Race:                   data.RaceHalfling,
}
var Sprites Unit = Unit{
	LbxFile:                "units2.lbx",
	Name:                   "Sprites",
	Index:                  60,
	CombatLbxFile:          "figure15.lbx",
	CombatIndex:            8,
	Count:                  4,
	UpkeepMana:             3,
	Realm:                  data.NatureMagic,
	MeleeAttackPower:       4,
	RangedAttacks:          4,
	RangedAttackPower:      3,
	RangedAttackDamageType: DamageRangedMagical,
	RangeAttackIndex:       88,
	MovementSound:          MovementSoundFly2,
	AttackSound:            AttackSoundWeak,
	RangeAttackSound:       RangeAttackSoundMagic,
	MovementSpeed:          2,
	Defense:                2,
	Resistance:             8,
	HitPoints:              1,
	Flying:                 true,
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityToHit, 10), data.MakeAbility(data.AbilityForester)},
	Race:                   data.RaceFantastic,
	CastingCost:            100,
}
var StagBeetle Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             119,
	CombatLbxFile:     "figures8.lbx",
	CombatIndex:       112,
	Name:              "Stag Beetle",
	RequiredBuildings: []building.Building{building.BuildingArmorersGuild, building.BuildingStables},
	ProductionCost:    160,
	UpkeepGold:        4,
	UpkeepFood:        1,
	Count:             1,
	MovementSpeed:     2,
	MovementSound:     MovementSoundBigSteps,
	AttackSound:       AttackSoundNormal,
	MeleeAttackPower:  15,
	Defense:           7,
	Resistance:        6,
	HitPoints:         20,
	Abilities:         []data.Ability{data.MakeAbilityValue(data.AbilityFireBreath, 5)},
	Race:              data.RaceKlackon,
}
var SteamCannon Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  80,
	CombatLbxFile:          "figures6.lbx",
	CombatIndex:            40,
	Name:                   "Steam Cannon",
	ProductionCost:         180,
	UpkeepGold:             4,
	UpkeepFood:             1,
	Count:                  1,
	MovementSound:          MovementSoundShuffle,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundLaunch,
	RangeAttackIndex:       32,
	MovementSpeed:          1,
	RangedAttackPower:      12,
	RangedAttacks:          10,
	RangedAttackDamageType: DamageRangedBoulder,
	Defense:                2,
	Resistance:             9,
	HitPoints:              12,
	RequiredBuildings:      []building.Building{building.BuildingMinersGuild},
	Race:                   data.RaceDwarf,
}
var StoneGiant Unit = Unit{
	LbxFile:                "units2.lbx",
	Index:                  64,
	Name:                   "Stone Giant",
	CombatLbxFile:          "figure13.lbx",
	CombatIndex:            32,
	UpkeepMana:             9,
	Count:                  1,
	Realm:                  data.NatureMagic,
	MovementSound:          MovementSoundBigSteps,
	AttackSound:            AttackSoundNormal,
	RangeAttackSound:       RangeAttackSoundLaunch,
	RangeAttackIndex:       32,
	MovementSpeed:          2,
	MeleeAttackPower:       15,
	RangedAttackPower:      15,
	RangedAttackDamageType: DamageRangedBoulder,
	RangedAttacks:          2,
	Defense:                8,
	Resistance:             9,
	HitPoints:              20,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 20),
		data.MakeAbility(data.AbilityMountaineer),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityStoningImmunity),
		data.MakeAbility(data.AbilityWallCrusher),
	},
	Race:        data.RaceFantastic,
	CastingCost: 450,
}
var StormGiant Unit = Unit{
	LbxFile:                "units2.lbx",
	Index:                  73,
	Name:                   "Storm Giant",
	CombatLbxFile:          "figure13.lbx",
	CombatIndex:            104,
	UpkeepMana:             10,
	Count:                  1,
	Realm:                  data.SorceryMagic,
	MovementSound:          MovementSoundBigSteps,
	AttackSound:            AttackSoundMonster2,
	RangeAttackSound:       RangeAttackSoundMagic,
	RangeAttackIndex:       0,
	MovementSpeed:          2,
	MeleeAttackPower:       12,
	RangedAttackPower:      10,
	RangedAttacks:          4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                7,
	Resistance:             9,
	HitPoints:              20,

	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 20),
		data.MakeAbility(data.AbilityWallCrusher),
		data.MakeAbility(data.AbilityArmorPiercing),
	},
	Race:        data.RaceFantastic,
	CastingCost: 500,
}
var Trireme Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             35,
	CombatLbxFile:     "figures3.lbx",
	CombatIndex:       40,
	Name:              "Trireme",
	ProductionCost:    60,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             1,
	Swimming:          true,
	Sailing:           true,
	MovementSound:     MovementSoundBoat,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     2,
	MeleeAttackPower:  6,
	Defense:           4,
	Resistance:        4,
	HitPoints:         10,
	Abilities:         []data.Ability{data.MakeAbilityValue(data.AbilityTransport, 2)},
	RequiredBuildings: []building.Building{building.BuildingShipwrightsGuild},
	Race:              data.RaceAll,
}
var TrollHalberdiers Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             29,
	CombatLbxFile:     "figure10.lbx",
	CombatIndex:       112,
	Name:              "Halberdiers",
	ProductionCost:    120,
	UpkeepGold:        3,
	UpkeepFood:        1,
	Count:             4,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  6,
	Defense:           3,
	Resistance:        7,
	HitPoints:         4,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityNegateFirstStrike), data.MakeAbility(data.AbilityRegeneration)},
	RequiredBuildings: []building.Building{building.BuildingArmory},
	Race:              data.RaceTroll,
}
var TrollSettlers Unit = Unit{
	LbxFile:        "units2.lbx",
	Index:          31,
	CombatLbxFile:  "figure11.lbx",
	CombatIndex:    8,
	Name:           "Settlers",
	ProductionCost: 180,
	UpkeepGold:     4,
	UpkeepFood:     1,
	Count:          1,
	MovementSpeed:  1,
	Defense:        1,
	Resistance:     7,
	HitPoints:      40,
	AttackSound:    AttackSoundNormal,
	MovementSound:  MovementSoundShuffle,
	Abilities:      []data.Ability{data.MakeAbility(data.AbilityCreateOutpost), data.MakeAbility(data.AbilityRegeneration)},
	Race:           data.RaceTroll,
}
var TrollShamans Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            30,
	CombatLbxFile:    "figure11.lbx",
	CombatIndex:      0,
	Name:             "Shamans",
	ProductionCost:   180,
	UpkeepGold:       4,
	UpkeepFood:       1,
	Count:            4,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	RangeAttackSound: RangeAttackSoundMagic,
	RangeAttackIndex: 88,
	MovementSpeed:    1,
	MeleeAttackPower: 4,

	RangedAttackPower:      2,
	RangedAttacks:          4,
	RangedAttackDamageType: DamageRangedMagical,
	Defense:                3,
	Resistance:             8,
	HitPoints:              4,
	Abilities:              []data.Ability{data.MakeAbility(data.AbilityHealer), data.MakeAbility(data.AbilityPurify), data.MakeAbility(data.AbilityRegeneration)},
	RequiredBuildings:      []building.Building{building.BuildingShrine},
	Race:                   data.RaceTroll,
}
var TrollSpearmen Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            27,
	CombatLbxFile:    "figure10.lbx",
	CombatIndex:      96,
	Name:             "Spearmen",
	ProductionCost:   30,
	UpkeepFood:       1,
	Count:            4,
	MovementSound:    MovementSoundMarching,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	MeleeAttackPower: 3,
	Defense:          2,
	Resistance:       7,
	HitPoints:        4,
	Abilities:        []data.Ability{data.MakeAbility(data.AbilityRegeneration)},
	Race:             data.RaceTroll,
}
var TrollSwordsmen Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             28,
	CombatLbxFile:     "figure10.lbx",
	CombatIndex:       104,
	Name:              "Swordsmen",
	ProductionCost:    60,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             4,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     1,
	MeleeAttackPower:  5,
	Defense:           2,
	Resistance:        7,
	HitPoints:         4,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityLargeShield), data.MakeAbility(data.AbilityRegeneration)},
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingSmithy},
	Race:              data.RaceTroll,
}
var Unicorn Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            55,
	CombatLbxFile:    "figure12.lbx",
	CombatIndex:      80,
	Name:             "Unicorns",
	UpkeepMana:       5,
	Count:            4,
	MovementSpeed:    2,
	MeleeAttackPower: 5,
	MovementSound:    MovementSoundHorse,
	AttackSound:      AttackSoundNormal,
	Defense:          3,
	Resistance:       7,
	HitPoints:        6,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 20),
		data.MakeAbilityValue(data.AbilityResistanceToAll, 2),
		data.MakeAbility(data.AbilityTeleporting),
		data.MakeAbility(data.AbilityPoisonImmunity),
	},
	Race:        data.RaceFantastic,
	Realm:       data.LifeMagic,
	CastingCost: 250,
}
var UnitNone Unit = Unit{
	Index: -1,
}
var WarBear Unit = Unit{
	LbxFile:          "units2.lbx",
	Name:             "War Bears",
	Index:            59,
	CombatLbxFile:    "figure15.lbx",
	CombatIndex:      0,
	Count:            2,
	UpkeepMana:       2,
	Realm:            data.NatureMagic,
	MeleeAttackPower: 7,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	Defense:          3,
	Resistance:       6,
	HitPoints:        8,
	MovementSpeed:    2,
	Abilities:        []data.Ability{data.MakeAbility(data.AbilityForester)},
	Race:             data.RaceFantastic,
	CastingCost:      70,
}
var WarMammoths Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             33,
	CombatLbxFile:     "figure11.lbx",
	CombatIndex:       24,
	Name:              "War Mammoths",
	ProductionCost:    240,
	UpkeepGold:        5,
	UpkeepFood:        1,
	Count:             2,
	MovementSound:     MovementSoundBigSteps2,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     2,
	MeleeAttackPower:  10,
	Defense:           6,
	Resistance:        9,
	HitPoints:         12,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityWallCrusher), data.MakeAbility(data.AbilityFirstStrike)},
	RequiredBuildings: []building.Building{building.BuildingArmorersGuild, building.BuildingStables},
	Race:              data.RaceTroll,
}
var WarTrolls Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             32,
	CombatLbxFile:     "figure11.lbx",
	CombatIndex:       16,
	Name:              "War Trolls",
	ProductionCost:    160,
	UpkeepGold:        4,
	UpkeepFood:        1,
	Count:             4,
	MovementSound:     MovementSoundMarching,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     2,
	MeleeAttackPower:  8,
	Defense:           4,
	Resistance:        8,
	HitPoints:         5,
	Abilities:         []data.Ability{data.MakeAbility(data.AbilityRegeneration)},
	RequiredBuildings: []building.Building{building.BuildingFightersGuild},
	Race:              data.RaceTroll,
}
var Warlocks Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  64,
	CombatLbxFile:          "figures5.lbx",
	CombatIndex:            32,
	Name:                   "Warlocks",
	ProductionCost:         240,
	UpkeepGold:             5,
	UpkeepFood:             1,
	Count:                  4,
	MovementSpeed:          1,
	AttackSound:            AttackSoundNormal,
	MeleeAttackPower:       1,
	RangedAttackDamageType: DamageRangedMagical,
	RangeAttackIndex:       16,
	RangedAttackPower:      7,
	RangedAttacks:          4,
	RangeAttackSound:       RangeAttackSoundFireball,
	Defense:                4,
	Resistance:             9,
	HitPoints:              1,
	MovementSound:          MovementSoundShuffle,
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityDoomBoltSpell, 1), data.MakeAbility(data.AbilityMissileImmunity)},
	RequiredBuildings:      []building.Building{building.BuildingWizardsGuild},
	Race:                   data.RaceDarkElf,
}
var Warship Unit = Unit{
	LbxFile:                "units1.lbx",
	Index:                  38,
	CombatLbxFile:          "figures3.lbx",
	CombatIndex:            64,
	Name:                   "Warship",
	ProductionCost:         160,
	UpkeepGold:             4,
	UpkeepFood:             1,
	Count:                  1,
	MovementSpeed:          4,
	Swimming:               true,
	Sailing:                true,
	MovementSound:          MovementSoundBoat,
	AttackSound:            AttackSoundNormal,
	RangeAttackIndex:       32,
	RangeAttackSound:       RangeAttackSoundLaunch,
	MeleeAttackPower:       10,
	RangedAttackPower:      10,
	RangedAttacks:          99,
	RangedAttackDamageType: DamageRangedBoulder,
	Defense:                5,
	Resistance:             7,
	HitPoints:              30,
	Abilities:              []data.Ability{data.MakeAbilityValue(data.AbilityTransport, 3), data.MakeAbility(data.AbilityLongRange)},
	RequiredBuildings:      []building.Building{building.BuildingMaritimeGuild},
	Race:                   data.RaceAll,
}
var WereWolf Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            48,
	CombatLbxFile:    "figure12.lbx",
	CombatIndex:      24,
	Name:             "WereWolves",
	UpkeepMana:       5,
	Count:            6,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 5,
	Defense:          1,
	Resistance:       6,
	HitPoints:        5,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 10),
		data.MakeAbility(data.AbilityRegeneration),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityIllusionsImmunity),
		data.MakeAbility(data.AbilityColdImmunity),
		data.MakeAbility(data.AbilityDeathImmunity),
		data.MakeAbility(data.AbilityWeaponImmunity),
	},
	Realm:       data.DeathMagic,
	Race:        data.RaceFantastic,
	CastingCost: 180,
}
var WolfRiders Unit = Unit{
	LbxFile:           "units1.lbx",
	Index:             88,
	CombatLbxFile:     "figures6.lbx",
	CombatIndex:       104,
	Name:              "Wolf Riders",
	ProductionCost:    100,
	UpkeepGold:        2,
	UpkeepFood:        1,
	Count:             4,
	MovementSound:     MovementSoundHorse,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     3,
	MeleeAttackPower:  7,
	Defense:           3,
	Resistance:        4,
	HitPoints:         5,
	RequiredBuildings: []building.Building{building.BuildingBarracks, building.BuildingStables},
	Race:              data.RaceGnoll,
}
var Wraith Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            50,
	CombatLbxFile:    "figure12.lbx",
	CombatIndex:      40,
	Name:             "Wraiths",
	UpkeepMana:       5,
	Count:            4,
	Flying:           true,
	MovementSound:    MovementSoundFly2,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    2,
	MeleeAttackPower: 7,
	Defense:          6,
	Resistance:       8,
	HitPoints:        8,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 20),
		data.MakeAbilityValue(data.AbilityLifeSteal, -3),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityIllusionsImmunity),
		data.MakeAbility(data.AbilityColdImmunity),
		data.MakeAbility(data.AbilityDeathImmunity),
		data.MakeAbility(data.AbilityWeaponImmunity),
		data.MakeAbility(data.AbilityNonCorporeal),
	},
	Realm:       data.DeathMagic,
	Race:        data.RaceFantastic,
	CastingCost: 500,
}
var WyvernRiders Unit = Unit{
	LbxFile:           "units2.lbx",
	Index:             26,
	CombatLbxFile:     "figure10.lbx",
	CombatIndex:       88,
	Name:              "Wyvern Riders",
	ProductionCost:    200,
	UpkeepGold:        4,
	UpkeepFood:        1,
	Count:             2,
	Flying:            true,
	MovementSound:     MovementSoundFly,
	AttackSound:       AttackSoundNormal,
	MovementSpeed:     3,
	MeleeAttackPower:  5,
	Defense:           5,
	Resistance:        7,
	HitPoints:         10,
	Abilities:         []data.Ability{data.MakeAbilityValue(data.AbilityPoisonTouch, 6)},
	RequiredBuildings: []building.Building{building.BuildingFantasticStable},
	Race:              data.RaceOrc,
}
var Zombie Unit = Unit{
	LbxFile:          "units2.lbx",
	Index:            54,
	CombatLbxFile:    "figure12.lbx",
	CombatIndex:      72,
	Name:             "Zombies",
	Count:            6,
	MovementSound:    MovementSoundShuffle,
	AttackSound:      AttackSoundNormal,
	MovementSpeed:    1,
	MeleeAttackPower: 4,
	Defense:          3,
	Resistance:       3,
	HitPoints:        3,
	Abilities: []data.Ability{
		data.MakeAbilityValue(data.AbilityToHit, 10),
		data.MakeAbility(data.AbilityPoisonImmunity),
		data.MakeAbility(data.AbilityIllusionsImmunity),
		data.MakeAbility(data.AbilityColdImmunity),
		data.MakeAbility(data.AbilityDeathImmunity),
	},
	Realm: data.DeathMagic,
	Race:  data.RaceFantastic,
}

func ChooseRandomUnit

func ChooseRandomUnit(race data.Race) Unit

func GetUnitByName

func GetUnitByName(name string) Unit

func UnitsByRace

func UnitsByRace(race data.Race) []Unit

func (*Unit) Equals

func (unit *Unit) Equals(other Unit) bool

func (*Unit) GetAbilities

func (unit *Unit) GetAbilities() []data.Ability

func (*Unit) GetAbilityValue

func (unit *Unit) GetAbilityValue(ability data.AbilityType) float32

func (*Unit) GetBaseDefense

func (unit *Unit) GetBaseDefense() int

func (*Unit) GetBaseHitPoints

func (unit *Unit) GetBaseHitPoints() int

func (*Unit) GetBaseMeleeAttackPower

func (unit *Unit) GetBaseMeleeAttackPower() int

func (*Unit) GetBaseRangedAttackPower

func (unit *Unit) GetBaseRangedAttackPower() int

func (*Unit) GetBaseResistance

func (unit *Unit) GetBaseResistance() int

func (*Unit) GetCombatIndex

func (unit *Unit) GetCombatIndex(facing Facing) int

func (*Unit) GetCombatLbxFile

func (unit *Unit) GetCombatLbxFile() string

func (*Unit) GetCombatRangeIndex

func (unit *Unit) GetCombatRangeIndex(facing Facing) int

func (*Unit) GetCount

func (unit *Unit) GetCount() int

func (*Unit) GetDefense

func (unit *Unit) GetDefense() int

func (*Unit) GetHitPoints

func (unit *Unit) GetHitPoints() int

func (*Unit) GetMaxHealth

func (unit *Unit) GetMaxHealth() int

maximum health is the number of figures * the number of hit points per figure

func (*Unit) GetMeleeAttackPower

func (unit *Unit) GetMeleeAttackPower() int

func (*Unit) GetMovementSpeed

func (unit *Unit) GetMovementSpeed() int

func (*Unit) GetName

func (unit *Unit) GetName() string

func (*Unit) GetProductionCost

func (unit *Unit) GetProductionCost() int

func (*Unit) GetRangedAttackDamageType

func (unit *Unit) GetRangedAttackDamageType() Damage

func (*Unit) GetRangedAttackPower

func (unit *Unit) GetRangedAttackPower() int

func (*Unit) GetResistance

func (unit *Unit) GetResistance() int

func (*Unit) GetUpkeepFood

func (unit *Unit) GetUpkeepFood() int

func (*Unit) GetUpkeepGold

func (unit *Unit) GetUpkeepGold() int

func (*Unit) GetUpkeepMana

func (unit *Unit) GetUpkeepMana() int

func (*Unit) HasAbility

func (unit *Unit) HasAbility(ability data.AbilityType) bool

func (*Unit) IsNone

func (unit *Unit) IsNone() bool

func (*Unit) IsSettlers

func (unit *Unit) IsSettlers() bool

func (*Unit) String

func (unit *Unit) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL