Mechanic · health & lives
Hit points
A value or count that damage depletes before an entity is defeated.
On this page
Hit points track an entity’s remaining capacity to take damage. In Star Control II, a ship’s crew count fills that role: damage reduces crew, and the ship leaves play when crew reaches 01.
- Crew as hit pointsStar Control II (1992). The crew is the hit points: a ship is lost when its crew reaches 0.1
Toys for Bob released the 3DO source under the GNU General Public License in 2002, and The Ur-Quan Masters project imported it2.
Games
| Game | Year | How | Note |
|---|---|---|---|
| Super Mario Bros. 2 | 1988 | a life meter of two to four marks; a hit takes one | |
| Factorio | 2016 | biters, spawners, walls, and the character have health, and spawners grow tougher with evolution | |
| Star Control II | 1992 | Crew as hit points | the crew is the hit points: a ship is lost when its crew reaches 0 |
Every claim about this mechanic, by game (5)
References
- ^ abA ship's crew is its hit points: element.h defines
hit_pointsascrew_level, anddo_damagetakes damage to a player's ship from its crew throughDeltaCrew, which reports failure when the crew would reach 0 or less; the ship's life span is then set to 0 and it becomes nonsolid.DeltaCrewchanges nothing for the enemy in the last battle (its comment: "Samatra can't be crew-modified"). The Earthling Cruiser's table entry gives 18 crew, at its maximum of 18 (MAX_CREW); in encounters and the last battle a ship takes its crew from the fleet instead, up to that maximum.CodeThe Ur-Quan Masters (2002 import)How we know
127#define hit_points crew_levelsc2/src/sc2code/element.h line 127 at 2f5b2c3 · upstream ↗ 195do_damage (ELEMENTPTR ElementPtr, SIZE damage) ⋮ 197 if (ElementPtr->state_flags & PLAYER_SHIP) ⋮ 199 if (!DeltaCrew (ElementPtr, -damage)) ⋮ 201 ElementPtr->life_span = 0; 202 ElementPtr->state_flags |= NONSOLID;
sc2/src/sc2code/misc.c lines 195–203 at 2f5b2c3 · upstream ↗ 300DeltaCrew (ELEMENTPTR ElementPtr, SIZE crew_delta) ⋮ 307 return (TRUE); /* Samatra can't be crew-modified */ ⋮ 321 ElementPtr->crew_level = ⋮ 325 else if (crew_delta < 0) ⋮ 327 if (ElementPtr->crew_level > (BYTE)-crew_delta) 328 ElementPtr->crew_level += (BYTE)crew_delta; 329 else ⋮ 331 crew_delta = -(SIZE)ElementPtr->crew_level; 332 ElementPtr->crew_level = 0; 333 retval = FALSE;
sc2/src/sc2code/status.c lines 300–334 at 2f5b2c3 · upstream ↗ 23#define MAX_CREW 18sc2/src/sc2code/ships/human/human.c line 23 at 2f5b2c3 · upstream ↗ 47 MAX_CREW, MAX_CREW,sc2/src/sc2code/ships/human/human.c line 47 at 2f5b2c3 · upstream ↗ 92 BYTE crew_level, max_crew;sc2/src/sc2code/races.h line 92 at 2f5b2c3 · upstream ↗ 380 if (LOBYTE (GLOBAL (CurrentActivity)) == IN_ENCOUNTER 381 || LOBYTE (GLOBAL (CurrentActivity)) == IN_LAST_BATTLE) ⋮ 383 if ((RDPtr->ship_info.crew_level = StarShipPtr->special_counter) > 384 RDPtr->ship_info.max_crew) 385 RDPtr->ship_info.crew_level = RDPtr->ship_info.max_crew;
sc2/src/sc2code/ship.c lines 380–385 at 2f5b2c3 · upstream ↗ 145 if (!(ElementPtr->state_flags & APPEARING)) ⋮ 150 ElementPtr->crew_level = 151 (BYTE)RDPtr->ship_info.crew_level;
sc2/src/sc2code/ship.c lines 145–151 at 2f5b2c3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-22.
Checked by a second AI model, 2026-10-22.
- ^In the 3DO source as The Ur-Quan Masters first imported it (2002), each pass of the battle loop sleeps until 5 ticks (
BATTLE_FRAME_RATE) after the previous pass woke, on a clock of 120 ticks a second (ONE_SECOND), so battle runs at most 24 frames a second (computed: 120 / 5). The sleep is the port'sSleepTask, in its SDL wrapper. Whennth_frameis set, which encount.c does only while the cyborg option flies the player's ships in an encounter, the loop only yields (TaskSwitch) and does not wait. The atlas calls one pass a frame.CodeThe Ur-Quan Masters (2002 import)How we know
22#define BATTLE_FRAME_RATE 5sc2/src/sc2code/element.h line 22 at 2f5b2c3 · upstream ↗ 24#define ONE_SECOND 120sc2/src/sc2code/libs/timlib.h line 24 at 2f5b2c3 · upstream ↗ 229 if (nth_frame) 230 TaskSwitch (); 231 else 232 NextTime = SleepTask (NextTime + BATTLE_FRAME_RATE);
sc2/src/sc2code/battle.c lines 229–232 at 2f5b2c3 · upstream ↗ 1315SleepTask (DWORD wake_time) ⋮ 1320 if (wake_time <= t) 1321 SDL_Delay (0); 1322 else 1323 SDL_Delay ((wake_time - t) * 1000 / ONE_SECOND); ⋮ 1325 return (GetTimeCounter ());
sc2/src/SDL_wrapper.c lines 1315–1325 at 2f5b2c3 · upstream ↗ 745 if (GLOBAL (glob_flags) & CYBORG_ENABLED) ⋮ 757 nth_frame = MAKE_WORD (1, cur_speed); 758 PlayerControl[0] = CYBORG_CONTROL | AWESOME_RATING;
sc2/src/sc2code/encount.c lines 745–758 at 2f5b2c3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-22.
Checked by a second AI model, 2026-10-22.
Sources
Code
- Reiche, Paul, Fred Ford, and The Ur-Quan Masters project. 2002. “The Ur-Quan Masters: Star Control II's 3DO source, the project's initial import.” Commit 2f5b2c3. sc2/uqm @ 2f5b2c3 · licence, all uses