ludic/packages/ludic.wildlife/tests/pin/index.ludic
Orkuncakilkaya 67d477af77 ludic.wildlife: pin every transition of the 15 WILD_* states and the dice each draws (phase 27.2a)
Sixteen test programs under tests/*_pins_test.ludic, on today's code, each one tick from a set
state through the public step (wildlife_tick_ground / _bird / wildlife_tick, wildlife_release,
wildlife_new): the state it goes to, its timer, and how many of the package's rolls it took and
which (the next roll is read off a newborn's yaw, compared with a stream of the same seed). IDLE,
WANDER, ALERT, WARY, FLEE, CHARGE, GO_DRINK, GO_FEED, DRINK, APPROACH, EAT, TRAPPED, FLY, LAND,
PERCH; the droppings' roll before them; the newborn's seven (eight for a bird); what the step
leaves alone. tests/pin/ holds the shared step, the dice reader and two species of its own (a tame
horse, a crow that never lands on its own). Compiled, not run here: 27.2 holds to them unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 16:57:15 +03:00

60 lines
2.1 KiB
Text

# pin - what the transition pins share (phase 27.2a): one step at a fixed rate, an animal set in a
# state, a spot and a teaching switch of the test's own, and two species the fake has not
numbers float
import "dice.ludic"
export state WildPinState {
pn_no_spot: bool = false # the world offers no water or forage
pn_taught: bool = false # feeding is being taught
}
function pn_spot(wild_pin_st: WildPinState, a: WildAnimal, water: bool, s: WildSpot) -> bool {
if wild_pin_st.pn_no_spot { return false }
s.uid = 900
s.x = a.x + 30.0
s.z = a.z
s.water = water
return true
}
function pn_taught(wild_pin_st: WildPinState) -> bool { return wild_pin_st.pn_taught }
# after fk_setup: 4 a horse (tame), 5 a crow (flies, never comes down on its own)
function pn_species(wildlife_st: WildlifeState) -> void {
let h = new WildSpecies
h.key = "horse"
h.tame = true
h.size = 2
h.diet = WILD_HAY
wildlife_species_add(wildlife_st, h)
let c = new WildSpecies
c.key = "crow"
c.flies = true
c.walk = 4.0
c.flee = 8.0
c.land_shy = 0.0
c.land_chance = 0.0
wildlife_species_add(wildlife_st, c)
}
# one of species sp at (x, z), in `state` with `timer` left; no droppings due for a long while
function pn_at(wildlife_st: mut WildlifeState, sp: int, x: float, z: float, state: int, timer: float) -> WildAnimal {
let a = wildlife_make(wildlife_st, sp, x, z, false, 0.0, 0, 1.0, 1)
a.state = state
a.timer = timer
a.scat_t = 100000.0
return a
}
# one tick of 50 ms, a walker's and a bird's
function pn_step(wildlife_st: mut WildlifeState, a: WildAnimal) -> void { wildlife_tick_ground(wildlife_st, a, 0.05, 0.05 / 60.0) }
function pn_fly(wildlife_st: mut WildlifeState, a: WildAnimal) -> void { wildlife_tick_bird(wildlife_st, a, 0.05) }
function pn_setup(wildlife_st: mut WildlifeState, wildlife_tests_fake_st: mut WildlifeTestsFakeState) -> void {
fk_setup(wildlife_st, wildlife_tests_fake_st)
pn_species(wildlife_st)
}
function pn_player(wildlife_tests_fake_st: mut WildlifeTestsFakeState, x: float, z: float) -> void {
wildlife_tests_fake_st.fk_px[0] = x
wildlife_tests_fake_st.fk_pz[0] = z
}