Split The code is public; the app answers only to the crew.

README's *What is real and what is not* is one 84-line paragraph: give it the structure the rest of the file has #243

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

scout/cs:scout/176-readme-s-what-is-real-and-what-is-not-is → main 1 commit fork

  • Merged. scout/176-readme-s-what-is-real-and-what-is-not-is was merged into main as 1db908e.

Review

Sign in to review this change.
1 file changed +111 −101
README.md +111 −101
@@ -43,28 +43,29 @@ wants one, but the running server never reads it.
4343
4444 ## What is real and what is not
4545
46 - **Real.** The game: WebGL2 written by hand, a fixed 64 Hz simulation, Source-style
47 movement (ground friction, air acceleration, an 18-unit step, strafe jumping,
48 and the **crouch-jump**: a jump peaks at 57 units, 7 short of the 64-unit
49 crates both maps are full of, but duck in the air and the legs tuck up under
50 a head that stays put, so the feet clear 75 and you land on top — jump
51 without ducking and the crate is still in your way. The jump itself is no
52 higher; standing back up in the air is refused while the legs have nowhere
53 to go, the same way it is under a low ceiling. **The bots do not jump**, so
54 a crate top is a place a bot will not follow you to: one sent after
55 something up there, the bomb included, walks to the foot of the crate and
56 waits),
57 CS damage with range falloff, armour and hitgroups, a knife that pays for a flank
58 — 55 in the chest, 180 in the back, where "the back" is CS's own test of standing
59 within 61.65° of straight behind someone and armour stops the same share either
60 way, so one stab from behind ends a full-health player with a vest on —
61 deterministic spray patterns, a draw on every weapon — 0.4 s on the knife up
62 to 1.25 s on the AWP, before which the trigger and the scope do nothing,
63 which is what makes the three carry speeds a choice —
64 a 1:55 round with a 40-second bomb, plant and defuse timers, kill rewards and
65 loss bonuses. Cover is not all equal: a bullet goes **through a crate** if
66 the round is strong enough for the thickness it meets. Crates are the only
67 penetrable material — walls, floors, the site plates and metal stop
46 - **Real.**
47
48 **The guns and penetration.** The game: WebGL2 written by hand, a fixed 64 Hz
49 simulation, Source-style movement (ground friction, air acceleration, an
50 18-unit step, strafe jumping, and the **crouch-jump**: a jump peaks at 57
51 units, 7 short of the 64-unit crates both maps are full of, but duck in the
52 air and the legs tuck up under a head that stays put, so the feet clear 75
53 and you land on top — jump without ducking and the crate is still in your
54 way. The jump itself is no higher; standing back up in the air is refused
55 while the legs have nowhere to go, the same way it is under a low ceiling.
56 **The bots do not jump**, so a crate top is a place a bot will not follow you
57 to: one sent after something up there, the bomb included, walks to the foot
58 of the crate and waits), CS damage with range falloff, armour and hitgroups,
59 a knife that pays for a flank — 55 in the chest, 180 in the back, where "the
60 back" is CS's own test of standing within 61.65° of straight behind someone
61 and armour stops the same share either way, so one stab from behind ends a
62 full-health player with a vest on — deterministic spray patterns, a draw on
63 every weapon — 0.4 s on the knife up to 1.25 s on the AWP, before which the
64 trigger and the scope do nothing, which is what makes the three carry speeds
65 a choice — a 1:55 round with a 40-second bomb, plant and defuse timers, kill
66 rewards and loss bonuses. Cover is not all equal: a bullet goes **through a
67 crate** if the round is strong enough for the thickness it meets. Crates are
68 the only penetrable material — walls, floors, the site plates and metal stop
6869 everything — and every crate on either map is 128 units across, so the AWP
6970 (230 units), AK-47 (175), M4A4 (165) and Desert Eagle (150) punch one
7071 face-on while the Glock (48), USP (55) and MP9 (60) manage nothing but a
@@ -76,52 +77,59 @@ wants one, but the running server never reads it.
7677 surely as a wall, and the far side of a punched crate is marked where the
7778 bullet went in as well as where it stopped. The bots do not know any of
7879 this: their sight is still blocked by a crate, so shooting one off a box
79 they think is cover is yours to use. The economy has CS's loop: weapons drop. A player killed leaves
80 the gun they were holding on the floor with whatever was left in the magazine
81 — a knife never drops, and someone killed holding one leaves their primary —
82 and it can be picked up. With no primary you take it by walking over it; with
83 one already, <kbd>E</kbd> swaps, and the gun you were holding lands at your
84 feet. There is no team rule: a CT who finds an AK-47 keeps it. The floor is
85 swept at the start of the next round, and whatever you are carrying then comes
86 back with a full magazine. There is one piece of utility: an **HE grenade**,
87 $300 in the buy menu, one in a pocket at a time. <kbd>4</kbd> puts it in your
88 hand and fire throws it — out of your eye, a little above where you are
89 looking, carrying whatever speed you were already running at. It falls under
90 the same 800 u/s² the rest of the game does, bounces off walls and crates
91 keeping 45% of the speed it hit them with, and goes off **1.6 seconds** after
92 it left your hand wherever it is by then. The blast is **98 damage at its
93 centre, falling linearly to nothing at 350 units**, halved by armour (which
94 takes half of what it stops), and it does nothing at all through a wall — the
95 same sight line a bot sees you with, its centre to your eye. It cannot hurt
96 your own side, and it can very much kill you. A grenade thrown is gone; one
97 kept is still yours next round, the same rule the guns follow. The bots do not
98 buy or throw one: their fight was learned in an arena that has no grenades in
99 it, and they keep buying guns. Hit feedback runs both ways: a hit marker and a beep when you hit
100 someone — four ticks around the crosshair, red for a headshot, and for the hit
101 that **finished** them a heavier mark, held twice as long, closed into an X
102 through the middle, so the fifth bullet does not look like the four before it;
103 your own grenade confirms the same way, once for each enemy the blast caught;
104 a round a **teammate** stops sparks on their body, marks a plus in your side's
105 colour with no beep, and says "Blocked by <name>" once a burst — still no
106 friendly fire —
107 and when you are hit a view punch away from the shot, a wedge around
108 the crosshair pointing at whoever fired, a vignette that reddens as your health
109 falls and a pain sound. A hit also **tags**, for everyone the same way:
110 each point of damage takes 1% of the victim's ground speed, never more
111 than half of it however many land, and it runs back at the full 100% a
112 second — 30 in the chest holds a runner to 175 u/s and is gone in 0.3 s —
113 while a player in the air is not tagged at all, and a new round starts
114 everyone untagged. A **fall** costs health the way CS's does: nothing
115 landing under 580 u/s, then 0.0888 a point for every u/s past it, rounded to
116 whole points, on the one tick the fall ends — armour is no help, the ledger
117 and the round report put it down to *a fall*, a death to one reads as a fall
118 in the kill feed and pays nobody, and you feel it as the same flinch,
119 vignette and pain sound a hit gives, with no wedge because it came from
120 straight below. The honest part: nothing on `de_forge` or `de_cinder` is
121 tall enough to reach it. The highest floor anyone can stand on is a crate
122 top at 128 units, which lands at about 452 u/s; a drop needs roughly 210
123 units before it costs anything (320 costs 12). The rule is here so the
124 simulation is whole, and so taller geometry gets it for free. The gun says what it is doing, too. Every shot lights
80 they think is cover is yours to use.
81
82 **The drop economy.** The economy has CS's loop: weapons drop. A player
83 killed leaves the gun they were holding on the floor with whatever was left
84 in the magazine — a knife never drops, and someone killed holding one leaves
85 their primary — and it can be picked up. With no primary you take it by
86 walking over it; with one already, <kbd>E</kbd> swaps, and the gun you were
87 holding lands at your feet. There is no team rule: a CT who finds an AK-47
88 keeps it. The floor is swept at the start of the next round, and whatever
89 you are carrying then comes back with a full magazine.
90
91 **Utility.** There is one piece of utility: an **HE grenade**, $300 in the
92 buy menu, one in a pocket at a time. <kbd>4</kbd> puts it in your hand and
93 fire throws it — out of your eye, a little above where you are looking,
94 carrying whatever speed you were already running at. It falls under the
95 same 800 u/s² the rest of the game does, bounces off walls and crates
96 keeping 45% of the speed it hit them with, and goes off **1.6 seconds**
97 after it left your hand wherever it is by then. The blast is **98 damage at
98 its centre, falling linearly to nothing at 350 units**, halved by armour
99 (which takes half of what it stops), and it does nothing at all through a
100 wall — the same sight line a bot sees you with, its centre to your eye. It
101 cannot hurt your own side, and it can very much kill you. A grenade thrown
102 is gone; one kept is still yours next round, the same rule the guns follow.
103 The bots do not buy or throw one: their fight was learned in an arena that
104 has no grenades in it, and they keep buying guns.
105
106 **Feedback.** Hit feedback runs both ways: a hit marker and a beep when you
107 hit someone — four ticks around the crosshair, red for a headshot, and for
108 the hit that **finished** them a heavier mark, held twice as long, closed
109 into an X through the middle, so the fifth bullet does not look like the
110 four before it; your own grenade confirms the same way, once for each enemy
111 the blast caught; a round a **teammate** stops sparks on their body, marks a
112 plus in your side's colour with no beep, and says "Blocked by <name>" once a
113 burst — still no friendly fire — and when you are hit a view punch away from
114 the shot, a wedge around the crosshair pointing at whoever fired, a vignette
115 that reddens as your health falls and a pain sound. A hit also **tags**, for
116 everyone the same way: each point of damage takes 1% of the victim's ground
117 speed, never more than half of it however many land, and it runs back at
118 the full 100% a second — 30 in the chest holds a runner to 175 u/s and is
119 gone in 0.3 s — while a player in the air is not tagged at all, and a new
120 round starts everyone untagged. A **fall** costs health the way CS's does:
121 nothing landing under 580 u/s, then 0.0888 a point for every u/s past it,
122 rounded to whole points, on the one tick the fall ends — armour is no help,
123 the ledger and the round report put it down to *a fall*, a death to one
124 reads as a fall in the kill feed and pays nobody, and you feel it as the
125 same flinch, vignette and pain sound a hit gives, with no wedge because it
126 came from straight below. The honest part: nothing on `de_forge` or
127 `de_cinder` is tall enough to reach it. The highest floor anyone can stand
128 on is a crate top at 128 units, which lands at about 452 u/s; a drop needs
129 roughly 210 units before it costs anything (320 costs 12). The rule is here
130 so the simulation is whole, and so taller geometry gets it for free.
131
132 **Sound and bodies.** The gun says what it is doing, too. Every shot lights
125133 a **muzzle flash** — a star of additive light at the end of the barrel, sized
126134 by the weapon and gone in three frames — on the gun in your hands and on
127135 every other gun on the map, so a firefight across the site reads as people
@@ -139,39 +147,41 @@ wants one, but the running server never reads it.
139147 nothing. Both of those are animation and nothing else — the switch itself is
140148 still instantaneous, as it always was, so a gun still on its way up fires the
141149 moment the simulation says it may, and no bot, no `observe.ts` input and no
142 rule of the round can tell the difference. Every world sound is panned around the listener's
143 view and fades with distance — a shot or a footstep to your left plays from
144 the left channel, to your right the right — and a running player who is not
145 walking, ducking or airborne leaves footsteps this way too, so someone
146 closing in from behind is something you hear before you see. **Legs swing on
147 that same stride**: the ground a player has covered is the phase the other
148 nine bodies are posed from, so an enemy crossing a doorway reads as someone
149 running and a player at a dead stop is still. One stride of ground is one
150 *step* — a cycle of legs is two of them, right foot then left — so the legs
151 alternate at exactly the cadence you hear and the swing is widest at the
152 footfall. It is one draw each, hinged in the vertex shader, and the
153 simulation neither sets it nor reads it — a walker's legs move on a stride
154 nobody hears. The gun rides the upper body, so a running player's muzzle
155 flash comes off the end of the barrel their lean has moved rather than where
156 the gun was modelled. The pose is a picture and nothing else: hitboxes are
157 axis-aligned on a player's position and know nothing about it, so a sprinting
158 enemy's swung foot is drawn further out than the box a bullet finds it in.
159 The head is the exception, because the head is the shot worth taking — it is
160 left out of the lean, so what you aim at and what you hit are the same box.
161 A planted bomb
162 beeps: about once a second right after the plant, quickening to a few a
163 second — and rising in pitch — as the fuse runs out, so a CT can walk to the
164 site by ear with no map open. The plant, the defuse, the detonation and a
165 trigger pulled on an empty magazine each have their own sound too. Going off
166 is the same blast rule the HE uses — falling linearly from full at the
167 centre to nothing at **900 units**, halved by armour — with its own, much
168 larger, centre damage: close enough in it kills through full kevlar, far
169 enough out you end the round alive and hurt. A wall does nothing to stop
170 it — the bomb ignores cover in CS, and this does too — and nobody is
171 credited for the kill, the way blowing yourself up with your own grenade
172 never is.
173 A footstep only carries so far, but the bomb's beep and the blast that ends it
174 carry across the whole map. The leaderboard is a real SQLite table under
150 rule of the round can tell the difference. Every world sound is panned
151 around the listener's view and fades with distance — a shot or a footstep to
152 your left plays from the left channel, to your right the right — and a
153 running player who is not walking, ducking or airborne leaves footsteps this
154 way too, so someone closing in from behind is something you hear before you
155 see. **Legs swing on that same stride**: the ground a player has covered is
156 the phase the other nine bodies are posed from, so an enemy crossing a
157 doorway reads as someone running and a player at a dead stop is still. One
158 stride of ground is one *step* — a cycle of legs is two of them, right foot
159 then left — so the legs alternate at exactly the cadence you hear and the
160 swing is widest at the footfall. It is one draw each, hinged in the vertex
161 shader, and the simulation neither sets it nor reads it — a walker's legs
162 move on a stride nobody hears. The gun rides the upper body, so a running
163 player's muzzle flash comes off the end of the barrel their lean has moved
164 rather than where the gun was modelled. The pose is a picture and nothing
165 else: hitboxes are axis-aligned on a player's position and know nothing
166 about it, so a sprinting enemy's swung foot is drawn further out than the
167 box a bullet finds it in. The head is the exception, because the head is the
168 shot worth taking — it is left out of the lean, so what you aim at and what
169 you hit are the same box.
170
171 **The bomb.** A planted bomb beeps: about once a second right after the
172 plant, quickening to a few a second — and rising in pitch — as the fuse runs
173 out, so a CT can walk to the site by ear with no map open. The plant, the
174 defuse, the detonation and a trigger pulled on an empty magazine each have
175 their own sound too. Going off is the same blast rule the HE uses — falling
176 linearly from full at the centre to nothing at **900 units**, halved by
177 armour — with its own, much larger, centre damage: close enough in it kills
178 through full kevlar, far enough out you end the round alive and hurt. A wall
179 does nothing to stop it — the bomb ignores cover in CS, and this does too —
180 and nobody is credited for the kill, the way blowing yourself up with your
181 own grenade never is. A footstep only carries so far, but the bomb's beep
182 and the blast that ends it carry across the whole map.
183
184 **The leaderboard.** The leaderboard is a real SQLite table under
175185 `FORGE_APP_DATA`, also served as plain JSON from `GET /api/leaderboard` for
176186 the terminal or any other client — with a `guest` flag per row instead of the
177187 identity it comes from, because a guest's identity is the session cookie that

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs