On this page
  1. Related
  2. Games
  3. References
  4. Sources

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

GameYearHowNote
Super Mario Bros. 21988a life meter of two to four marks; a hit takes one
Factorio2016biters, spawners, walls, and the character have health, and spawners grow tougher with evolution
Star Control II1992Crew as hit pointsthe crew is the hit points: a ship is lost when its crew reaches 0
Every claim about this mechanic, by game (5)
Super Mario Bros. 2 1988Both games start the life meter at two marks and let it grow to four. Doki Doki Panic's manual says so, as does Super Mario Bros. 2's, whose code sets health from a table of three values, two to four marks, by the number of extra marks found, and sets two marks again when a level ends, on a game over, and on a warp.Manual
Super Mario Bros. 2 shrinks a character whose life meter is down to one mark. Chris Kohler's report on Kensuke Tanabe's talk says it was added because growing and shrinking was one of Mario's best-known traits. SMB2's cartridge keeps a full-size and a small tile bank for each character; Doki Doki Panic's disk has one tile file for each of its four, IMAJIN-C, LINA-C, MAMA-C, and PAPA-C, of 832 bytes.Interview
Star Control II 1992A ship's crew is its hit points: element.h defines hit_points as crew_level, and do_damage takes damage to a player's ship from its crew through DeltaCrew, 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. DeltaCrew changes 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.Code
Factorio 2016Biters have 15, 75, 375 and 3000 health (small, medium, big, behemoth) and spitters 10, 50, 200 and 1500; a spawner starts at 350, and its health grows with evolution up to tenfold.Code
A stone wall segment and a gate each have 350 health; a gate has an activation distance of 3 tiles.Code

References

  1. ^ abA ship's crew is its hit points: element.h defines hit_points as crew_level, and do_damage takes damage to a player's ship from its crew through DeltaCrew, 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. DeltaCrew changes 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_level
    
    sc2/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 18
    
    sc2/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 claim ledger

  2. ^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's SleepTask, in its SDL wrapper. When nth_frame is 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 5
    
    sc2/src/sc2code/element.h line 22 at 2f5b2c3 · upstream ↗
    24#define ONE_SECOND 120
    
    sc2/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.

    In the claim ledger

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