The player keyword is a global accessor providing access to all player-specific state. It is not a datatype — it’s a special accessor that lives at the root of script lookups. Modders use player.X constantly: player.ship, player.galaxy, player.entity, player.money, player.headquarters, etc.
Type: keyword (not datatype) in scriptproperties.xml:2405. This distinguishes it from typed datatypes — player is the universal root accessor.
The player keyword has ~90 properties. Organised by concern.
Property Type Description .existsbool Player exists .namestring Player name .rawnamestring Raw text entry reference .agetime Current game time .systemtime.{format}string System time (strftime format) .moneymoney Player account balance .influenceint Player influence (Tides of Avarice)
Property Type Description .entityentity Player as an entity (NPC perspective) .controlledobject Currently controlled object (or null) .containercontainer Player’s container context (ship or station) .shipship Player ship context (may be null when landed) .stationstation Player station context (may be null in space) .occupiedshipship Ship player is piloting (sitting in pilot seat) .spacesuitspacesuit The spacesuit, if EVA .platformdockingbay Landing platform player stands on .roomroom Player room .zone / .sector / .cluster / .galaxyvarious Spatial context .computerentity Player’s on-board computer (Betty) .headquartersstation Player HQ (null before quest unlock)
Property Type Description .targetobject Currently targeted object .autopilottargetobject Autopilot target .activityactivity Current player activity
Property Type Description .conversationstring Current conversation ID .isinconversationbool A conversation is active .conversationactorentity Other actor in conversation
Property Type Description .diplomatslist Faction diplomats to player .agents.listlist Player’s diplomacy agents .agents.max / .capacity / .freeint Agent slot counts .agents.research.{numeric}ware Research needed to unlock N agent slots .diplomacygiftknown.{faction}.{ware}bool Player knows gift effectiveness
Property Type Description .hasactivemissionbool Has active mission .activemissiontypemissiontype Mission type .activemissionwaypointcomponent Waypoint to next sector .hasacceptedonlinemissionbool Online mission accepted
Property Type Description .hascommission.{container or faction}bool Player has commission .hascommission.{X}.{id}bool Specific commission .hasdiscount.{container or faction}bool Player has discount .hasdiscount.{X}.{id}bool Specific discount
Property Type Description .canteleportto.{controllable}bool Can teleport to (respects restrictions) .canforceteleportto.{controllable}bool Can teleport ignoring restrictions
Property Type Description .hasscannerbool Has scanner software .scanlevelint Current scan level .maxscanlevelint Max scan level .longrangebool Has long-range scanner
Property Type Description .encyclopedia.<libtype>.{id}.existsbool Has encyclopedia entry .encyclopedia.<libtype>.{id}.namestring Entry name .encyclopedia.<libtype>.{id}.descriptionstring Description (and more) various Image, video, voice, date, group
Property Type Description .blueprints.{ware}.any.existsbool Has any blueprint for ware .blueprints.{ware}.any.cycle.timetime Cycle time of first blueprint .blueprints.{ware}.<method>.existsbool Specific production method (and many more) various Full blueprint introspection
Property Type Description .isincontrolpositionbool Sitting or standing in control .ismessageunread.{id}bool Has unread message .debugbool Debug options available
< do_if value = " @player.occupiedship " >
<!-- player is piloting a ship -->
< do_elseif value = " @player.station " >
<!-- player is on a station -->
< do_elseif value = " @player.spacesuit " >
<!-- player is in EVA -->
< do_if value = " player.money ge 50000Cr " >
< do_if value = " player.blueprints.{ware.shieldgenerator_arg_l_standard_01_mk2}.any.exists " >
text = " 'Player can build this shield' " />
< find_station_by_true_owner name = " $Stations "
player.galaxy is the canonical “the galaxy” reference for space= parameters.
⚠ player is a keyword, NOT a datatype. Don’t try typeof player == datatype.X. It’s the root accessor only.
⚠ .ship vs .occupiedship vs .controlled. .ship is the player’s last ship context (may persist when landed). .occupiedship is what the player is actually piloting . .controlled is the currently controlled object (could be a ship, a turret, etc.).
⚠ .sector can be NULL. When in a super-highway, the player has a cluster but no sector. Always null-check.
⚠ .headquarters is null before quest unlock. Pre-HQ-quest, this is null. Story-aware mods gate on @player.headquarters.
⚠ .entity is the canonical player NPC reference. Use this when adding inventory wares, sending signals, etc.
⚠ .galaxy is universally accessible. Doesn’t go null. Safe to use without null-check.
⚠ .money is in 1/100-credit internal units. Same as faction money — divide by 100 only for display.
< cue name = " GreetPlayer " instantiate = " true " >
< event_player_signalled />
< do_if value = " @player.occupiedship " >
+ player.occupiedship.knownname " />
< do_elseif value = " @player.station " >
+ player.station.knownname " />
< write_to_logbook text = " 'Player in unknown context' " />
wares = " [ware.module_gen_storage_solid_l_01] " />
ware = " ware.inv_spaceflycaviar "
< do_if value = " player.canteleportto.{$TargetStation} " >
<!-- player has access — show teleport button -->
The player keyword is engine-side. Implemented in the script engine; not modifiable.
player.entity vs faction.player. The entity is the NPC; the faction is the political entity. Both exist; serve different purposes.
NPC — player.entity IS-A NPC.
Galaxy — player.galaxy is THE galaxy.
Faction — faction.player is the political faction.
Headquarters — player.headquarters accessor.
Ship — player.ship / player.occupiedship.
Pattern — root accessor keyword
player is the only universal root keyword exposed to MD. It’s not a datatype — it’s the universe of player-specific accessors. Treat it as “the universe of the player”.