Run and skate timed laps at Isovalen #67

Open
opened 2026-10-19 21:41:38 +00:00 by sermuns · 3 comments
Owner

Isovalen is a mapped 400 m oval:

  relation 7889442  name=Isovalen
    leisure=track  length=400 m  lanes=8  lit=yes  surface=tartan
    piste:type=ice_skate
    sport=ice_skating;running;athletics
    operator=Linköpings kommun, Kultur- och fritidsnämnden

Next to it is Friidrottsarenan (leisure=stadium, sport=multi). The
relation's outer way is untagged and its inner way is the only leisure=track
the area filter sees, so today the oval is dropped as a relation and the infield
reads as one AREA_PITCH decal.

Proposal: a timed lap on the oval.

  • Draw the oval with its lanes and a start/finish line. That is the track half of
    #32, which already wants surfaces and markings per sport.
  • Stand on the line and press a key to start; the HUD shows the current lap and
    the personal best. Crossing the line in the right direction stops the lap.
  • A small server-side leaderboard makes it a shared thing; the project already
    treats vehicles and day/night as server-authoritative, and a lap is the same
    kind of shared score. It does not need anti-cheat — players are
    client-authoritative by design — it needs a place to put the number.
  • In winter the same oval is piste:type=ice_skate. When #47/#48 say it is cold
    enough, the surface becomes ice and the movement becomes skating: less
    friction, longer glide, a different feel on the same geometry.

This is a small, complete game on a real piece of campus, and it gives running —
currently only a way to get somewhere — a reason to be good at something.


Related

  • #32 track lanes and colours
  • #43 the indoor halls and the sports data
  • #48 the ice
  • #28 the server-authoritative precedent
  • #39 the lit oval
  • #11 the other scored activity
Isovalen is a mapped 400 m oval: ``` relation 7889442 name=Isovalen leisure=track length=400 m lanes=8 lit=yes surface=tartan piste:type=ice_skate sport=ice_skating;running;athletics operator=Linköpings kommun, Kultur- och fritidsnämnden ``` Next to it is `Friidrottsarenan` (`leisure=stadium`, `sport=multi`). The relation's outer way is untagged and its inner way is the only `leisure=track` the area filter sees, so today the oval is dropped as a relation and the infield reads as one `AREA_PITCH` decal. Proposal: a timed lap on the oval. - Draw the oval with its lanes and a start/finish line. That is the track half of #32, which already wants surfaces and markings per sport. - Stand on the line and press a key to start; the HUD shows the current lap and the personal best. Crossing the line in the right direction stops the lap. - A small server-side leaderboard makes it a shared thing; the project already treats vehicles and day/night as server-authoritative, and a lap is the same kind of shared score. It does not need anti-cheat — players are client-authoritative by design — it needs a place to put the number. - In winter the same oval is `piste:type=ice_skate`. When #47/#48 say it is cold enough, the surface becomes ice and the movement becomes skating: less friction, longer glide, a different feel on the same geometry. This is a small, complete game on a real piece of campus, and it gives running — currently only a way to get somewhere — a reason to be good at something. --- **Related** - #32 track lanes and colours - #43 the indoor halls and the sports data - #48 the ice - #28 the server-authoritative precedent - #39 the lit oval - #11 the other scored activity
sermuns added this to the Play milestone 2026-10-19 22:18:54 +00:00
Author
Owner

The track geometry and lane markings belong in #32; do that. The timer is fine as a client-side personal best. The server leaderboard is where I'd push back: the project deliberately makes players client-authoritative and says cheating is out of scope for co-op, so a shared lap board with no validation is just a list of numbers anyone can write. Either make the server validate from poses (a much bigger change) or keep it local. The ice-skating variant is #48/#66 scope, not this issue.

The track geometry and lane markings belong in #32; do that. The timer is fine as a client-side personal best. The server leaderboard is where I'd push back: the project deliberately makes players client-authoritative and says cheating is out of scope for co-op, so a shared lap board with no validation is just a list of numbers anyone can write. Either make the server validate from poses (a much bigger change) or keep it local. The ice-skating variant is #48/#66 scope, not this issue.
Author
Owner

Ice is where a physics engine is cheapest, because ice is a friction
coefficient and nothing else.

"the surface becomes ice and the movement becomes skating: less friction,
longer glide, a different feel on the same geometry" is a per-surface
material. The oval is leisure=track surface=tartan, and the winter wants
piste:type=ice_skate on the same relation, so one piece of geometry has
two materials and skating is the icy one. The bake buckets the oval as a
pitch area today rather than reading surface=, so the exact material is the
pitches work's job; the collision layer can carry the coarse bucket first and
the exact tag once it exists.

The point of doing it as a material rather than as a movement mode is that
the same coefficient then applies to everything else on the ice. With
#112's thrown body and #111's vehicles, a skate that glides on ice and a
boule that stops dead on gravel are the same mechanism with two numbers
rather than two code paths. A player who switches from the oval to the road
mid-lap feels the difference, which is the point.

The lap itself needs nothing from physics: a line, a crossing and a timer.

Related: #110 the physics engine, #111 the vehicles, #112 the thrown bodies.

Ice is where a physics engine is cheapest, because ice is a friction coefficient and nothing else. "the surface becomes ice and the movement becomes skating: less friction, longer glide, a different feel on the same geometry" is a per-surface material. The oval is `leisure=track surface=tartan`, and the winter wants `piste:type=ice_skate` on the same relation, so one piece of geometry has two materials and skating is the icy one. The bake buckets the oval as a pitch area today rather than reading `surface=`, so the exact material is the pitches work's job; the collision layer can carry the coarse bucket first and the exact tag once it exists. The point of doing it as a material rather than as a movement mode is that the same coefficient then applies to everything else on the ice. With #112's thrown body and #111's vehicles, a skate that glides on ice and a boule that stops dead on gravel are the same mechanism with two numbers rather than two code paths. A player who switches from the oval to the road mid-lap feels the difference, which is the point. The lap itself needs nothing from physics: a line, a crossing and a timer. Related: #110 the physics engine, #111 the vehicles, #112 the thrown bodies.
Author
Owner

The oval is an ice surface now. The lap is not.

The Isovalen bakes as its own area kind, AREA_TRACK, with the pale ice albedo and a hole for the infield, and is_track also matches piste:type=ice_skate and surface=tartan|cinder. Sleds are spawned on it and the ice is a surface class of its own (see #66), so the oval is a place you can do something on rather than a ring on a map.

What is missing is the lap itself: no start and finish line, no crossing test, no timer, no personal best, no lanes. The earlier note still stands on the leaderboard: the project keeps players client-authoritative and says cheating is out of scope, so a shared board with no validation is a list of numbers anyone can write. Keep the lap local unless the server validates it from poses.

The oval is an ice surface now. The lap is not. The Isovalen bakes as its own area kind, `AREA_TRACK`, with the pale ice albedo and a hole for the infield, and `is_track` also matches `piste:type=ice_skate` and `surface=tartan|cinder`. Sleds are spawned on it and the ice is a surface class of its own (see #66), so the oval is a place you can do something on rather than a ring on a map. What is missing is the lap itself: no start and finish line, no crossing test, no timer, no personal best, no lanes. The earlier note still stands on the leaderboard: the project keeps players client-authoritative and says cheating is out of scope, so a shared board with no validation is a list of numbers anyone can write. Keep the lap local unless the server validates it from poses.
Sign in to join this conversation.
No description provided.