-- Written by Forge/AuthorCompile.singe. Edit by hand or in the editor; either is fine. return { types = { camera = { behaviours = { { kind = "camera", mode = "rail", track = "rail" } }, look = { kind = "none" }, vars = {} }, floor = { behaviours = { { kind = "solid" } }, look = { b = 90, d = 60, g = 75, h = 0.2, kind = "mesh", r = 70, shape = "box", w = 40 }, vars = {} }, gun = { behaviours = { { ammo = 6, kind = "gun", player = 1, reload = "offscreen" } }, look = { kind = "none" }, vars = { ammo = 6 } }, painting = { behaviours = {}, look = { b = 255, d = 0.2, g = 255, h = 16, kind = "mesh", r = 255, shape = "box", texture = "Forge/kit/yard.png", unlit = true, w = 24 }, vars = {} }, pillar = { behaviours = {}, look = { d = 1.2, h = 8, kind = "mesh", occluder = true, shape = "box", w = 1.2 }, vars = {} }, readout = { look = { b = 245, g = 235, kind = "text", r = 235, text = "score 0" } }, zombie = { behaviours = { { kind = "health", linger = 2, max = 2, ragdoll = true }, { kind = "seek", speed = 1.6, stopAt = 2.2, target = "camera" }, { attack = "Run", idle = "Survey", kind = "animator", walk = "Walk" }, { kind = "target" }, { after = 1.5, kind = "timer", name = "bite", start = false } }, look = { d = 1.4, file = "Forge/kit/fox.glb", h = 0.9, kind = "model", scale = 0.01, w = 0.8 }, vars = { health = 2 } } }, layers = { { fov = 60, kind = "scene3d" }, { kind = "overlay" } }, rooms = { { entities = { { id = "readout", type = "readout", x = 12, y = 12 }, { id = "floor", type = "floor", x = 0.0, y = -0.1, z = -20.0 }, { id = "painting", type = "painting", x = 0.0, y = 6.0, z = -30.0 }, { id = "pillar", type = "pillar", x = 0.0, y = 4.0, z = -22.0 }, { id = "camera", type = "camera", x = 0.0, y = 1.6, z = 0.0 }, { id = "gun", type = "gun", x = 0.0, y = 0.0, z = 0.0 } }, name = "start", tracks = { { key = "time", name = "rail", points = { { at = 0, look = { 0, 1.2, -10 }, stop = "nil", x = 0, y = 1.6, z = 0 }, { at = 4, look = { 0, 1.2, -16 }, stop = "gate", x = 0, y = 1.6, z = -6 }, { at = 10, look = { 2, 1.2, -24 }, stop = "pillar", x = 2, y = 1.6, z = -14 }, { at = 14, look = { 2, 1.2, -28 }, stop = "nil", x = 2, y = 1.6, z = -18 } } } } } }, rules = { { act = { { "setText", entity = "readout", text = "\"score \" .. score .. \" health \" .. health .. \" ammo \" .. gun.ammo" } }, note = "The readout, every frame", on = "frame" }, { act = { { "spawn", type = "zombie", x = -2, y = 0, z = -14 }, { "spawn", type = "zombie", x = 2, y = 0, z = -15 } }, name = "gate", note = "The gate: two come out of the dark", on = "stopped", when = {} }, { act = { { "spawn", type = "zombie", x = -1, y = 0, z = -23 }, { "spawn", type = "zombie", x = 0, y = 0, z = -26 }, { "spawn", type = "zombie", x = 4, y = 0, z = -24 } }, name = "pillar", note = "The pillar: three more, one from behind it", on = "stopped", when = {} }, { act = { { "setState", entity = "self", state = "walk" } }, type = "zombie", note = "A zombie walks the moment it is made", on = "spawn", when = {} }, { act = { { "damage", amount = 1, entity = "self" }, { "addScore", amount = 100 }, { "playSound", file = "Forge/kit/hit.wav" } }, type = "zombie", note = "A shot lands", on = "hit", when = {} }, { act = { { "setState", entity = "self", state = "attack" }, { "timerStart", after = 1.5, entity = "self", name = "bite" } }, type = "zombie", note = "It reaches the camera and rears up", on = "arrived", when = {} }, { act = { { "addVar", amount = -1, name = "health" }, { "flash", b = 40, g = 40, r = 255, seconds = 0.3 }, { "shake", amount = 0.3, seconds = 0.4 }, { "timerStart", after = 1.5, entity = "self", name = "bite" } }, type = "zombie", name = "bite", note = "The bite lands unless it was killed in time", on = "timer", when = { { "inState", entity = "self", state = "attack" } } }, { act = { { "pathNext", entity = "camera" } }, note = "The stop is clear: move on", on = "frame", when = { { "waiting", entity = "camera" }, { "test", expr = "count(\"zombie\") == 0" } } }, { act = { { "say", seconds = 2, text = "\"YOU ARE DEAD\"" }, { "gameOver" } }, note = "Out of health", on = "frame", when = { { "test", expr = "health <= 0" }, { "once", scope = "game", tag = "over" } } }, { act = { { "say", seconds = 2, text = "\"STAGE CLEAR\"" } }, note = "The end of the rail", on = "railEnd", when = {} } }, title = "The Dead Yard", vars = { health = 3, score = 0 } }