<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://manicpop.org/gewiki/index.php?action=history&amp;feed=atom&amp;title=Scantab</id>
	<title>Scantab - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://manicpop.org/gewiki/index.php?action=history&amp;feed=atom&amp;title=Scantab"/>
	<link rel="alternate" type="text/html" href="https://manicpop.org/gewiki/index.php?title=Scantab&amp;action=history"/>
	<updated>2026-10-20T14:43:10Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://manicpop.org/gewiki/index.php?title=Scantab&amp;diff=2205&amp;oldid=prev</id>
		<title>Manicpop at 22:04, 18 October 2026</title>
		<link rel="alternate" type="text/html" href="https://manicpop.org/gewiki/index.php?title=Scantab&amp;diff=2205&amp;oldid=prev"/>
		<updated>2026-10-18T22:04:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The &amp;#039;&amp;#039;&amp;#039;scantab&amp;#039;&amp;#039;&amp;#039; (short for &amp;#039;&amp;#039;scan table&amp;#039;&amp;#039;) is the game&amp;#039;s working list of ships detected by one player&amp;#039;s scanners. It connects the letters shown on a scan map, usually &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;O&amp;lt;/code&amp;gt;, to internal [[Ship slot|ship slots]]. A letter is meaningful only to the player whose table assigned it: &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; on one player&amp;#039;s screen can be an entirely different ship from &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; on another&amp;#039;s. The table is not a permanent ship registry, a list of planets, or a record of every ship in the galaxy.&lt;br /&gt;
&lt;br /&gt;
== What an entry contains ==&lt;br /&gt;
&lt;br /&gt;
Each player has a separate table with 15 entries (&amp;lt;code&amp;gt;NOSCANTAB&amp;lt;/code&amp;gt;). An occupied entry records a ship slot, a letter, its distance from the observer, relative [[Bearing|bearing]], relative heading, speed, and a state flag. The distance and motion figures are a snapshot taken when the table was rebuilt. The ship slot is an internal position that can eventually be reused; it is not a permanent identity belonging to a commander. The observing ship is excluded from its own table and appears as &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; on maps instead.&lt;br /&gt;
&lt;br /&gt;
The entries are sorted nearest first. Their &amp;#039;&amp;#039;positions in the table&amp;#039;&amp;#039; and their &amp;#039;&amp;#039;letters&amp;#039;&amp;#039; are different things. A ship can move from the first entry to the third as distances change and still keep its letter. The table has only 15 entries even though the letter-assignment routine has an A-through-Z alphabet available. In normal play, a fresh table with 15 new contacts assigns A through O.&lt;br /&gt;
&lt;br /&gt;
== How the table is built ==&lt;br /&gt;
&lt;br /&gt;
When a scan-table rebuild occurs, the game saves the letters of ships already in that player&amp;#039;s table, then examines active ships other than the observer. It measures each candidate&amp;#039;s distance, applies scanner-range and visibility rules, sorts qualifying contacts by distance, and keeps the nearest 15. Surviving contacts retain their old letters where possible; newly included contacts receive unused letters. Empty entries do not represent ships.&lt;br /&gt;
&lt;br /&gt;
For example, suppose a scan assigns &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; to a nearby frigate and &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt; to a more distant destroyer. If the destroyer moves closer, the next rebuild may put it first in the distance-sorted table, but it can remain &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt; while the frigate remains &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;. If the frigate leaves range and later returns, its old assignment need not survive: &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; might meanwhile have been given to another ship. This is why a scan letter is a convenient local reference, not an enduring name or a reliable measure of current distance.&lt;br /&gt;
&lt;br /&gt;
Only the nearest 15 qualifying ships fit. A sixteenth ship can be inside scanner range and still receive no letter in that observer&amp;#039;s table. A smaller-scale [[Scan command|&amp;lt;code&amp;gt;SCAN RANGE&amp;lt;/code&amp;gt;]] map can show fewer ships than the table holds: both classic GE and ge-next build the table using the ship&amp;#039;s full effective scanner range, while the selected scale limits the map. Their accompanying lists differ. In classic GE, &amp;lt;code&amp;gt;SCANFULL&amp;lt;/code&amp;gt; can list ships from the full table even when they lie beyond the displayed map scale. ge-next filters its range-scan contact list to the selected scale, so those farther contacts are not listed. &amp;lt;code&amp;gt;SCAN LONG&amp;lt;/code&amp;gt; uses broad neutron-distortion detection rather than this lettered contact list. Planet and wormhole numbers come from separate sector data, not the scantab. See [[Scan command]] for the different scan displays.&lt;br /&gt;
&lt;br /&gt;
== How letters are used ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SCAN SHIP A&amp;lt;/code&amp;gt;, [[Lock command|&amp;lt;code&amp;gt;LOCK A&amp;lt;/code&amp;gt;]], [[Torpedo command|&amp;lt;code&amp;gt;TORPEDO A&amp;lt;/code&amp;gt;]], and [[Missile command|&amp;lt;code&amp;gt;MISSILE A&amp;lt;/code&amp;gt;]] use a scan letter to select the ship that the player&amp;#039;s table associates with it. The command must still pass its own conditions: an identified ship may be outside weapon range, cloaked, or otherwise unavailable. A [[Locks|lock]] stores a ship slot rather than a letter; &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt; refers to that stored target even if its scan letter later changes. Neither a letter nor a lock makes a hidden or out-of-range target automatically attackable.&lt;br /&gt;
&lt;br /&gt;
Some messages about other ships also need a letter from the &amp;#039;&amp;#039;recipient&amp;#039;s&amp;#039;&amp;#039; point of view. The game uses &amp;lt;code&amp;gt;shpltr()&amp;lt;/code&amp;gt; to translate a ship slot through that recipient&amp;#039;s table. If the ship cannot be identified there, the usual fallback is &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt;. That may mean the source is genuinely outside range, concealed, or beyond the 15-contact limit; in classic GE it can also mean the recipient has not scanned recently. See [[Classic bug: Stale scantab and lock state]] for the distinct causes of question marks and stale references.&lt;br /&gt;
&lt;br /&gt;
== How this changed in classic GE ==&lt;br /&gt;
&lt;br /&gt;
Before version 3.0, a ship&amp;#039;s displayed letter corresponded to its BBS channel. Version [[GEREADME.DOC#07/15/92_Release_3.0a_(BETA_RELEASE)|3.0a]] (July 15, 1992) introduced virtual ship channels and proximity-based letters: the nearest visible ship was A, the next B, and so on. Letters could therefore change as relative positions changed. The same release introduced &amp;lt;code&amp;gt;LOCK&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt; so a player could continue targeting a particular ship without repeatedly finding its current letter.&lt;br /&gt;
&lt;br /&gt;
Version [[GEREADME.DOC#7/4/93_Release_3.1b|3.1b]] (July 4, 1993) changed letter assignment again. Its release notes say a ship keeps its letter while it remains within the player&amp;#039;s scanner range. The final classic 3.2e implementation preserves a continuing contact&amp;#039;s letter while rebuilding the distance-sorted table. The table is still local and temporary: disappearing from it, including by falling outside the closest 15, can free a letter for reuse.&lt;br /&gt;
&lt;br /&gt;
In classic 3.2e, &amp;lt;code&amp;gt;SCAN RANGE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SCAN SECTOR&amp;lt;/code&amp;gt; rebuild the table. Other paths can consult the last table without refreshing it first. Thus a newly arrived ship may be detectable now but not yet have a letter in a player&amp;#039;s stored view; conversely, an old letter can still refer to a ship that has since moved away. Classic&amp;#039;s shared target lookup checks whether the selected ship is active and satisfies the requested same-sector or visibility condition, but an old table entry is not itself a fresh detection. This distinction matters when reading a delayed event message or targeting after ships have moved.&lt;br /&gt;
&lt;br /&gt;
== ge-next behavior ==&lt;br /&gt;
&lt;br /&gt;
ge-next retains the per-player, 15-entry, distance-sorted table and persistent letters for continuing contacts. The effective range can be changed by a scan-range upgrade. Its rebuild also applies [[Nebulas|nebula]] visibility: ordinary detection cannot cross a nebula boundary, and two ships inside a nebula can ordinarily detect each other only within 1,200 distance units. A fully cloaked ship is likewise excluded from ordinary visible contacts. A target already locked when it becomes hidden by cloak or nebula conditions can remain briefly as an unidentified tracking contact; that does not make it available for detailed scanning or weapon fire. [[Jamming]] can scramble or omit information in scan output without making the table a permanent record.&lt;br /&gt;
&lt;br /&gt;
ge-next refreshes the table before resolving a new ship-letter target in the shared command lookup. It also refreshes on demand when a message needs a letter for a ship absent from the recipient&amp;#039;s existing table. Consequently, an ordinary letter-based command uses a more current view, and an event does not display &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; merely because the recipient has not issued another scan. A fresh table still cannot identify a ship that is truly out of range, concealed, or excluded by the 15-contact limit. Empty entries and preserved letters are validated more carefully than in classic GE.&lt;br /&gt;
&lt;br /&gt;
The scantab is still working state, not a durable identity system. Ship slots can be vacated and reused, and a display letter can be reassigned. For targeting and lock lifetime, see [[Locks]]; for the historical overflow and stale-table faults, see [[Classic bug: Stale scantab and lock state]].&lt;br /&gt;
&lt;br /&gt;
== Ship selection also borrows the table ==&lt;br /&gt;
&lt;br /&gt;
In classic GE and ge-next, the ship-selection screen borrows the player&amp;#039;s scantab as temporary storage for persistent ship numbers. These entries represent ships the player owns and can choose to board, not nearby sensor contacts. In classic, &amp;lt;code&amp;gt;findships()&amp;lt;/code&amp;gt; writes one entry for every owned ship without checking the table&amp;#039;s 15-entry limit. A player with more than 15 ships can overwrite another player&amp;#039;s scantab or memory beyond the allocated tables. ge-next retains the shared workspace but lists ships in bounded pages of at most 15 and validates the selection. See [[Classic bug: Ship-selection output overflow]] for the failure and its correction.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Scan command]]&lt;br /&gt;
* [[Scan command#Sector scan|Sector scan]]&lt;br /&gt;
* [[Scan command#Range scan|Range scan]]&lt;br /&gt;
* [[Locks]]&lt;br /&gt;
* [[Ship slot]]&lt;br /&gt;
* [[Classic bug: Stale scantab and lock state]]&lt;br /&gt;
* [[Classic bug: Ship-selection output overflow]]&lt;br /&gt;
&lt;br /&gt;
{{GE navigation}}&lt;br /&gt;
[[Category:Navigation]]&lt;br /&gt;
[[Category:Scanning]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Manicpop</name></author>
	</entry>
</feed>