ludic/packages/ludic.wildlife/animal.ludic
Orkuncakilkaya 0e2d2a6fab fix(ludic.wildlife): a newcomer takes the record of one of its species removed for good - its row, its key and so the game's drawing, every other field as new
Each morning's repopulation made a new WildAnimal (and the game a new drawing, actor and skeleton,
keyed by an ever-rising key) for every animal that had gone. A legend's record is never taken, nor
one still in a crowd. reuse_test: a hundred removes and makes are one record.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 16:08:23 +03:00

74 lines
3.2 KiB
Text

# animal.ludic - one animal: where it is and where it lives, what it is doing, what it wants, and
# what it makes of the players. The game draws it from these and keeps its own drawing by `key`.
export const WILD_IDLE: int = 0
export const WILD_WANDER: int = 1
export const WILD_FLEE: int = 2
export const WILD_APPROACH: int = 3 # walking to food, a lure or a snare
export const WILD_EAT: int = 4
export const WILD_TRAPPED: int = 5
export const WILD_CHARGE: int = 6
export const WILD_FLY: int = 7
export const WILD_PERCH: int = 8
export const WILD_GO_DRINK: int = 9
export const WILD_GO_FEED: int = 10
export const WILD_DRINK: int = 11 # drinking or grazing at its spot
export const WILD_ALERT: int = 12 # head up, turned at what it noticed
export const WILD_WARY: int = 13 # turned away, a step or two of distance taken
export const WILD_LAND: int = 14 # a bird gliding down to a spot
export property WildAnimal {
key: int = 0 # unique among the living; a reused record keeps it, and the game its drawing
nid: int = 0 # its id across machines (the port's next_id)
sp: int = 0
legend: bool = false
variant: int = 0 # 0..11: which coat, the game's to read
scale: float = 1.0
alive: bool = true
shown: bool = true # about, and to be drawn
pinned: bool = false # the AI leaves it where it stands
x: float = 0.0
y: float = 0.0
z: float = 0.0
yaw: float = 0.0
speed: float = 0.0
phase: float = 0.0 # the gait, 0..2 pi, from the ground covered
fly_h: float = 0.0
bank: float = 0.0
state: int = 0
timer: float = 0.0
rg: int = -1 # the range it belongs to
home_x: float = 0.0
home_z: float = 0.0
tx: float = 0.0
tz: float = 0.0
wx: float = 0.0 # the corner of its way it is walking to now (WildlifeWorld.way)
wz: float = 0.0
way_t: float = 0.0 # seconds until it asks the way again; 0 asks at once
crowd: bool = false # walked by the world's crowd (phase 18): it decides, the crowd moves it
crowd_id: int = -1 # its walker in that crowd, the world's number for it
goal_x: float = 0.0 # where it walks this tick and how fast: what a crowd is handed
goal_z: float = 0.0
goal_speed: float = 0.0
thirst: float = 0.0 # 0..100: over 60 it goes looking for water
hunger: float = 0.0
scat_t: float = 0.0 # game minutes until it might leave sign
track_d: float = 0.0
spot: int = 0 # the uid of the water or forage it walks to, 0 none
spot_x: float = 0.0
spot_z: float = 0.0
spot_water: bool = false
lure: int = 0 # the uid of the food, lure or snare it walks to, 0 none
lure_kind: int = 0
lure_x: float = 0.0
lure_z: float = 0.0
lure_owner: int = -1
calm: float = 0.0 # game minutes of tolerating you, after being fed
fed: int = 0
alert: float = 0.0 # 0..100: what it makes of you
sus_x: float = 0.0 # where it thinks the trouble is
sus_z: float = 0.0
spook: float = 0.0 # game minutes of extra wariness after being flushed
seen: float = 0.0 # the alert it has already reacted to
ent: int = -1 # its handle in the table
tab: Table<WildAnimal> = null # the table holding it, so a verb on the animal alone keeps the indexes
}