2019-03-17 14:40:57 +02:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
< html >
< head >
2020-04-14 19:56:54 +03:00
< title > The Player< / title >
2020-05-03 03:01:21 +03:00
< link href = "Breadcrumbs.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-03-19 02:11:25 +02:00
< meta name = "viewport" content = "width=device-width initial-scale=1" >
2019-03-17 14:40:57 +02:00
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" >
< meta http-equiv = "Content-Language" content = "en-gb" >
2020-05-03 03:01:21 +03:00
< link href = "Contents.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "Progress.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "Navigation.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "Fonts.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "Base.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< script >
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
< / script >
< link href = "Popups.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "Colours.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-04-14 19:56:54 +03:00
2019-03-17 14:40:57 +02:00
< / head >
2020-05-03 03:01:21 +03:00
< body class = "commentary-font" >
2020-03-19 02:11:25 +02:00
< nav role = "navigation" >
2020-04-14 19:56:54 +03:00
< h1 > < a href = "../index.html" >
< img src = "../docs-src/Figures/Inform.png" height = 72" >
< / a > < / h1 >
< ul > < li > < a href = "../compiler.html" > compiler tools< / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../other.html" > other tools< / a > < / li >
< li > < a href = "../extensions.html" > extensions and kits< / a > < / li >
< li > < a href = "../units.html" > unit test tools< / a > < / li >
2020-04-14 19:56:54 +03:00
< / ul > < h2 > Compiler Webs< / h2 > < ul >
2020-03-19 02:11:25 +02:00
< li > < a href = "../inbuild/index.html" > inbuild< / a > < / li >
< li > < a href = "../inform7/index.html" > inform7< / a > < / li >
< li > < a href = "../inter/index.html" > inter< / a > < / li >
2020-04-14 19:56:54 +03:00
< / ul > < h2 > Inbuild Modules< / h2 > < ul >
< li > < a href = "../supervisor-module/index.html" > supervisor< / a > < / li >
< / ul > < h2 > Inform7 Modules< / h2 > < ul >
2020-03-19 02:11:25 +02:00
< li > < a href = "../core-module/index.html" > core< / a > < / li >
< li > < a href = "../inflections-module/index.html" > inflections< / a > < / li >
< li > < a href = "../linguistics-module/index.html" > linguistics< / a > < / li >
< li > < a href = "../kinds-module/index.html" > kinds< / a > < / li >
2020-04-14 19:56:54 +03:00
< li > < a href = "index.html" > < span class = "selectedlink" > if< / span > < / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../multimedia-module/index.html" > multimedia< / a > < / li >
2020-04-14 19:56:54 +03:00
< li > < a href = "../problems-module/index.html" > problems< / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../index-module/index.html" > index< / a > < / li >
2020-04-14 19:56:54 +03:00
< / ul > < h2 > Inter Modules< / h2 > < ul >
< li > < a href = "../bytecode-module/index.html" > bytecode< / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../building-module/index.html" > building< / a > < / li >
< li > < a href = "../codegen-module/index.html" > codegen< / a > < / li >
2020-04-14 19:56:54 +03:00
< / ul > < h2 > Shared Modules< / h2 > < ul >
< li > < a href = "../arch-module/index.html" > arch< / a > < / li >
< li > < a href = "../syntax-module/index.html" > syntax< / a > < / li >
< li > < a href = "../words-module/index.html" > words< / a > < / li >
< li > < a href = "../html-module/index.html" > html< / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../../../inweb/docs/foundation-module/index.html" > foundation< / a > < / li >
2020-04-14 19:56:54 +03:00
< / ul >
2020-03-19 02:11:25 +02:00
< / nav >
< main role = "main" >
2020-05-03 03:01:21 +03:00
<!-- Weave of 'The Player' generated by Inweb -->
< div class = "breadcrumbs" >
< ul class = "crumbs" > < li > < a href = "../index.html" > Home< / a > < / li > < li > < a href = "../compiler.html" > Inform7 Modules< / a > < / li > < li > < a href = "index.html" > if< / a > < / li > < li > < a href = "index.html#3" > Chapter 3: Space and Time< / a > < / li > < li > < b > The Player< / b > < / li > < / ul > < / div >
< p class = "purpose" > A plugin to give a special role to the player object.< / p >
2019-03-17 14:40:57 +02:00
2020-04-16 01:49:59 +03:00
< ul class = "toc" > < li > < a href = "3-tp.html#SP1" > § 1. Definitions< / a > < / li > < li > < a href = "3-tp.html#SP4" > § 4. Initialisation< / a > < / li > < li > < a href = "3-tp.html#SP5" > § 5. Special objects< / a > < / li > < li > < a href = "3-tp.html#SP6_1" > § 6.1. Special variables< / a > < / li > < li > < a href = "3-tp.html#SP6_3" > § 6.3. Aliasing and bodysnatching< / a > < / li > < li > < a href = "3-tp.html#SP9" > § 9. Linguistic variations< / a > < / li > < li > < a href = "3-tp.html#SP12" > § 12. Model completion< / a > < / li > < li > < a href = "3-tp.html#SP13" > § 13. Initial time and place< / a > < / li > < li > < a href = "3-tp.html#SP14" > § 14. World Index details< / a > < / li > < / ul > < hr class = "tocbar" >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP1" > < / a > < b > § 1. Definitions. < / b > < / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP2" > < / a > < b > § 2. < / b > Altogether we keep track of four objects, though the first pair often coincide,
and so do the second pair. (< span class = "extract" > < span class = "extract-syntax" > I_yourself< / span > < / span > is constant once set, like < span class = "extract" > < span class = "extract-syntax" > K_room< / span > < / span > and
2019-03-17 14:40:57 +02:00
other such "constants" in the Inform source code.)
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "identifier-syntax" > instance< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > room in which play begins: e.g., Barber's Shop< / span >
< span class = "identifier-syntax" > instance< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > start_object< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > object in which play begins: e.g., a barber's chair< / span >
< span class = "identifier-syntax" > instance< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > the player character object used in this run< / span >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< span class = "identifier-syntax" > instance< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > the default player character object, < / span > < span class = "extract" > < span class = "extract-syntax" > selfobj< / span > < / span > < span class = "comment-syntax" > in I6< / span >
2020-01-26 01:42:42 +02:00
2020-05-03 03:01:21 +03:00
< span class = "identifier-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > P_saved_short_name< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP3" > < / a > < b > § 3. < / b > Two variables are also special. The time of day might not look as if it belongs
2019-03-17 14:40:57 +02:00
to this plugin, but the idea is to position the player in both space and time.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "identifier-syntax" > nonlocal_variable< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > player_VAR< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > initially < / span > < span class = "extract" > < span class = "extract-syntax" > player_character_object< / span > < / span > < span class = "comment-syntax" > and often always < / span > < span class = "extract" > < span class = "extract-syntax" > I_yourself< / span > < / span >
< span class = "identifier-syntax" > nonlocal_variable< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > time_of_day_VAR< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
< span class = "identifier-syntax" > nonlocal_variable< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > score_VAR< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4" > < / a > < b > § 4. Initialisation. < / b > < / p >
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > PL::Player::start< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PLUGIN_REGISTER< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PLUGIN_NEW_VARIABLE_NOTIFY< / span > < span class = "plain-syntax" > , < / span > < a href = "3-tp.html#SP6_2" class = "function-link" > < span class = "function-syntax" > PL::Player::player_new_quantity_notify< / span > < / a > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PLUGIN_REGISTER< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PLUGIN_VARIABLE_SET_WARNING< / span > < span class = "plain-syntax" > , < / span > < a href = "3-tp.html#SP7" class = "function-link" > < span class = "function-syntax" > PL::Player::player_variable_set_warning< / span > < / a > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PLUGIN_REGISTER< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PLUGIN_NEW_INSTANCE_NOTIFY< / span > < span class = "plain-syntax" > , < / span > < a href = "3-tp.html#SP6" class = "function-link" > < span class = "function-syntax" > PL::Player::player_new_instance_notify< / span > < / a > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PLUGIN_REGISTER< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PLUGIN_IRREGULAR_GENITIVE< / span > < span class = "plain-syntax" > , < / span > < a href = "3-tp.html#SP9" class = "function-link" > < span class = "function-syntax" > PL::Player::player_irregular_genitive< / span > < / a > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PLUGIN_REGISTER< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PLUGIN_COMPLETE_MODEL< / span > < span class = "plain-syntax" > , < / span > < a href = "3-tp.html#SP12" class = "function-link" > < span class = "function-syntax" > PL::Player::player_complete_model< / span > < / a > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PLUGIN_REGISTER< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PLUGIN_REFINE_IMPLICIT_NOUN< / span > < span class = "plain-syntax" > , < / span > < a href = "3-tp.html#SP11" class = "function-link" > < span class = "function-syntax" > PL::Player::player_refine_implicit_noun< / span > < / a > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PLUGIN_REGISTER< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PLUGIN_DETECT_BODYSNATCHING< / span > < span class = "plain-syntax" > , < / span > < a href = "3-tp.html#SP8" class = "function-link" > < span class = "function-syntax" > PL::Player::player_detect_bodysnatching< / span > < / a > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PLUGIN_REGISTER< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PLUGIN_ANNOTATE_IN_WORLD_INDEX< / span > < span class = "plain-syntax" > , < / span > < a href = "3-tp.html#SP14" class = "function-link" > < span class = "function-syntax" > PL::Player::player_annotate_in_World_index< / span > < / a > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP5" > < / a > < b > § 5. Special objects. < / b > The "yourself" object is special in being tied, or "aliased", to the
2019-03-17 14:40:57 +02:00
"player" variable, so Inform needs to recognise it. (No need to translate; it
is created in English.)
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < < / span > < span class = "identifier-syntax" > notable< / span > < span class = "plain-syntax" > -< / span > < span class = "identifier-syntax" > player< / span > < span class = "plain-syntax" > -< / span > < span class = "identifier-syntax" > instances< / span > < span class = "plain-syntax" > > ::=< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > yourself< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP6" > < / a > < b > § 6. < / b > < / p >
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > PL::Player::player_new_instance_notify< / span > < button class = "popup" onclick = "togglePopup('usagePopup1')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup1" > Usage of < span class = "code-font" > < span class = "function-syntax" > PL::Player::player_new_instance_notify< / span > < / span > :< br / > < a href = "3-tp.html#SP4" > § 4< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > instance< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > inst< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wording< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > IW< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Instances::get_name< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inst< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< < / span > < span class = "identifier-syntax" > notable< / span > < span class = "plain-syntax" > -< / span > < span class = "identifier-syntax" > player< / span > < span class = "plain-syntax" > -< / span > < span class = "identifier-syntax" > instances< / span > < span class = "plain-syntax" > > (< / span > < span class = "identifier-syntax" > IW< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > inst< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_VAR< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "3-tp.html#SP6_3" class = "named-paragraph-link" > < span class = "named-paragraph" > Alias the player variable to the yourself object< / span > < span class = "named-paragraph-number" > 6.3< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "identifier-syntax" > instance< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > PL::Player::get_start_room< / span > < button class = "popup" onclick = "togglePopup('usagePopup2')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup2" > Usage of < span class = "code-font" > < span class = "function-syntax" > PL::Player::get_start_room< / span > < / span > :< br / > < a href = "3-tp.html#SP14" > § 14< / a > < br / > Spatial Map - < a href = "3-sm2.html#SP8_15" > § 8.15< / a > , < a href = "3-sm2.html#SP43_2" > § 43.2< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP6_1" > < / a > < b > § 6.1. Special variables. < / b > "Time of day" is a perfectly normal variable and we only note down its
2019-03-17 14:40:57 +02:00
identity in order to find out the initial time of day intended by the
source text.
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > "Player", on the other hand, is unusual in two respects. First, it's aliased
2019-03-17 14:40:57 +02:00
to an object; second, it's set in an unusual way. That is, Inform does not
compile
< / p >
< blockquote >
< p > now the player is Mr Chasuble;< / p >
< / blockquote >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > to something like < span class = "extract" > < span class = "extract-syntax" > player = O31_mr_chasuble< / span > < / span > , as it would do for a typical
2019-03-17 14:40:57 +02:00
variable. It's very important that code compiled by Inform 7 doesn't do
this, because if executed it would break the invariants for the various I6
variables about the current situation. The correct thing is always to call
2020-05-03 03:01:21 +03:00
the template routine < span class = "extract" > < span class = "extract-syntax" > ChangePlayer< / span > < / span > . We ensure that by supplying an I6
2019-03-17 14:40:57 +02:00
schema which overrides the standard one for setting global variables:
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > As usual, no need to translate these; they are created in English.
2019-03-17 14:40:57 +02:00
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < < / span > < span class = "identifier-syntax" > notable< / span > < span class = "plain-syntax" > -< / span > < span class = "identifier-syntax" > player< / span > < span class = "plain-syntax" > -< / span > < span class = "identifier-syntax" > variables< / span > < span class = "plain-syntax" > > ::=< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > player< / span > < span class = "plain-syntax" > |< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > score< / span > < span class = "plain-syntax" > |< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > time< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > of< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > day< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP6_2" > < / a > < b > § 6.2. < / b > < / p >
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > PL::Player::player_new_quantity_notify< / span > < button class = "popup" onclick = "togglePopup('usagePopup3')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup3" > Usage of < span class = "code-font" > < span class = "function-syntax" > PL::Player::player_new_quantity_notify< / span > < / span > :< br / > < a href = "3-tp.html#SP4" > § 4< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > nonlocal_variable< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > nlv< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< < / span > < span class = "identifier-syntax" > notable< / span > < span class = "plain-syntax" > -< / span > < span class = "identifier-syntax" > player< / span > < span class = "plain-syntax" > -< / span > < span class = "identifier-syntax" > variables< / span > < span class = "plain-syntax" > > (< / span > < span class = "identifier-syntax" > nlv< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > name< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > switch< / span > < span class = "plain-syntax" > (< < < / span > < span class = "identifier-syntax" > r< / span > < span class = "plain-syntax" > > > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > case< / span > < span class = "plain-syntax" > < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > :< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > player_VAR< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > nlv< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > ) < / span > < span class = "named-paragraph-container code-font" > < a href = "3-tp.html#SP6_3" class = "named-paragraph-link" > < span class = "named-paragraph" > Alias the player variable to the yourself object< / span > < span class = "named-paragraph-number" > 6.3< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > NonlocalVariables::set_write_schema< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > nlv< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "ChangePlayer(*2)"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > break< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > case< / span > < span class = "plain-syntax" > < / span > < span class = "constant-syntax" > 1< / span > < span class = "plain-syntax" > :< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > score_VAR< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > nlv< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > NonlocalVariables::make_initalisable< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > score_VAR< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > break< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > case< / span > < span class = "plain-syntax" > < / span > < span class = "constant-syntax" > 2< / span > < span class = "plain-syntax" > :< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > time_of_day_VAR< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > nlv< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > NonlocalVariables::make_initalisable< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > time_of_day_VAR< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > break< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP6_3" > < / a > < b > § 6.3. Aliasing and bodysnatching. < / b > As can be seen, as soon as both "yourself" (object) and "player" (variable)
2019-03-17 14:40:57 +02:00
have been created, they are aliased together. This is a form of tacit pointer
dereferencing, though authors probably don't think of it that way. A normal
object variable is like a pointer to an object, rather than an object itself,
and so the following doesn't make sense:
< / p >
< blockquote >
< p > The top prize is an object that varies. The top prize is in the desk drawer.< / p >
< / blockquote >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > Clearly something goes in the desk drawer, but it's quite ambiguous what: the
2019-03-17 14:40:57 +02:00
problem is that "top prize" describes some object, but it's not clear which.
(Inform generally disallows this even if the source text explicitly gives a
value for top prize.) But "player" is unusual because Inform authors are
encouraged always to describe the player object that way, and often don't
realise that it's a variable at all — and most of the time it never changes
its value, of course, but simply remains equal to "yourself" throughout play.
So we want to allow this sort of thing:
< / p >
< blockquote >
< p > The player is in the Cage.< / p >
< / blockquote >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > even though it has exactly the same problem as the top prize. We get around
2019-03-17 14:40:57 +02:00
this by treating "player", in assertions, as if it were its own initial
value ("yourself") — in effect, we silently dereference it. This is
aliasing.
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Alias the player variable to the yourself object< / span > < span class = "named-paragraph-number" > 6.3< / span > < / span > < span class = "comment-syntax" > =< / span >
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > inference_subject< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > subj< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Instances::as_subject< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > InferenceSubjects::alias_to_nonlocal_variable< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > subj< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > player_VAR< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > NonlocalVariables::set_alias< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_VAR< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > subj< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "3-tp.html#SP6" > § 6< / a > , < a href = "3-tp.html#SP6_2" > § 6.2< / a > .< / li > < / ul >
< p class = "commentary firstcommentary" > < a id = "SP7" > < / a > < b > § 7. < / b > We also, though, want to look out for this sort of thing:
2019-03-17 14:40:57 +02:00
< / p >
< blockquote >
< p > The player is Lord Collingwood.< / p >
< / blockquote >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > because an assertion like this causes < span class = "extract" > < span class = "extract-syntax" > player_character_object< / span > < / span > to diverge from < span class = "extract" > < span class = "extract-syntax" > I_yourself< / span > < / span > ;
2019-03-17 14:40:57 +02:00
here of course it becomes the Lord Collingwood object.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > PL::Player::player_variable_set_warning< / span > < button class = "popup" onclick = "togglePopup('usagePopup4')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup4" > Usage of < span class = "code-font" > < span class = "function-syntax" > PL::Player::player_variable_set_warning< / span > < / span > :< br / > < a href = "3-tp.html#SP4" > § 4< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > nonlocal_variable< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > nlv< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > val< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > nlv< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > player_VAR< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > instance< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > npc< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Rvalues::to_object_instance< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > val< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > npc< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > npc< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP8" > < / a > < b > § 8. < / b > But it gets worse: as well as aliasing, there is bodysnatching. Our problem
2019-03-17 14:40:57 +02:00
is that once the author has written "The player is Lord Collingwood.", it's
clear that the "yourself" object shouldn't appear anywhere. But there are
two problems with that: one, the I6 template code needs it to exist, even if
it isn't in the model world; and two, we've just aliased "player" to it.
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > Bodysnatching allows one object (the "snatcher") to take over the life of
2019-03-17 14:40:57 +02:00
another (the "victim"), so that inferences made about the victim are diverted
to the snatcher. Thus if the source text reads:
< / p >
< blockquote >
< p > The player is Lord Collingwood. The player carries a spyglass.< / p >
< / blockquote >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > the second sentence goes through two transformations: first, because of
2019-03-17 14:40:57 +02:00
aliasing, Inform decides to draw an inference about "yourself", rather
than complaining that "player" is indefinite; and second, because of
bodysnatching, the Collingwood object (snatcher) takes over the inference
from the yourself object (victim). So Collingwood gets the spyglass, as
the source text clearly intended.
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > Bodysnatching is used only when < span class = "extract" > < span class = "extract-syntax" > player_character_object< / span > < / span > differs from < span class = "extract" > < span class = "extract-syntax" > I_yourself< / span > < / span > ,
2019-03-17 14:40:57 +02:00
that is, when the source text explicitly sets a value for "player".
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > PL::Player::player_detect_bodysnatching< / span > < button class = "popup" onclick = "togglePopup('usagePopup5')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup5" > Usage of < span class = "code-font" > < span class = "function-syntax" > PL::Player::player_detect_bodysnatching< / span > < / span > :< br / > < a href = "3-tp.html#SP4" > § 4< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inference_subject< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > body< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > snatcher< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > inference_subject< / span > < span class = "plain-syntax" > **< / span > < span class = "identifier-syntax" > counterpart< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > ) ||< / span >
< span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) || (< / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > kind< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > KP< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Instances::to_kind< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > kind< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > KY< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Instances::to_kind< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Kinds::Compare::lt< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > KP< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > KY< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > body< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > Instances::as_subject< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > snatcher< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ; *< / span > < span class = "identifier-syntax" > counterpart< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Instances::as_subject< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > ); < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ; }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > body< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > Instances::as_subject< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > snatcher< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ; *< / span > < span class = "identifier-syntax" > counterpart< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Instances::as_subject< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > ); < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ; }< / span >
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > body< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > Instances::as_subject< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > snatcher< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ; *< / span > < span class = "identifier-syntax" > counterpart< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Instances::as_subject< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > ); < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ; }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > body< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > Instances::as_subject< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > snatcher< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ; *< / span > < span class = "identifier-syntax" > counterpart< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Instances::as_subject< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > ); < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ; }< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP9" > < / a > < b > § 9. Linguistic variations. < / b > Thankfully everything else is straightforward. The following is used to
2019-03-17 14:40:57 +02:00
ensure that assemblies such as "A nose is part of every person" produces
"your nose" rather than "yourself's nose":
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > PL::Player::player_irregular_genitive< / span > < button class = "popup" onclick = "togglePopup('usagePopup6')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup6" > Usage of < span class = "code-font" > < span class = "function-syntax" > PL::Player::player_irregular_genitive< / span > < / span > :< br / > < a href = "3-tp.html#SP4" > § 4< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inference_subject< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > owner< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > text_stream< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > genitive< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > propriety< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > owner< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > Instances::as_subject< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE_TO< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > genitive< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "your "< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > propriety< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > ) & & < / span >
< span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > != < / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > ) & & < / span >
< span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > owner< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > Instances::as_subject< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > ))) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE_TO< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > genitive< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "your "< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > propriety< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP10" > < / a > < b > § 10. < / b > The adjectives "worn" and "carried" — as in, "The nautical chart is
2019-03-17 14:40:57 +02:00
carried." — implicitly refer to the player as the unstated term in the
relationship; that makes them our business here. "Initially carried" is
now deprecated, but is provided as synonymous with "carried" because it
was once an either/or property in the clumsier early stages of Inform 7,
and people still sometimes type it.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < < / span > < span class = "identifier-syntax" > implicit< / span > < span class = "plain-syntax" > -< / span > < span class = "identifier-syntax" > player< / span > < span class = "plain-syntax" > -< / span > < span class = "identifier-syntax" > relationship< / span > < span class = "plain-syntax" > > ::=< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > worn< / span > < span class = "plain-syntax" > |< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > carried< / span > < span class = "plain-syntax" > |< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > initially< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > carried< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP11" > < / a > < b > § 11. < / b > < / p >
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > PL::Player::player_refine_implicit_noun< / span > < button class = "popup" onclick = "togglePopup('usagePopup7')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup7" > Usage of < span class = "code-font" > < span class = "function-syntax" > PL::Player::player_refine_implicit_noun< / span > < / span > :< br / > < a href = "3-tp.html#SP4" > § 4< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< < / span > < span class = "identifier-syntax" > implicit< / span > < span class = "plain-syntax" > -< / span > < span class = "identifier-syntax" > player< / span > < span class = "plain-syntax" > -< / span > < span class = "identifier-syntax" > relationship< / span > < span class = "plain-syntax" > > (< / span > < span class = "identifier-syntax" > ParseTree::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > ))) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Assertions::Refiner::noun_from_infs< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > Instances::as_subject< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > ));< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP12" > < / a > < b > § 12. Model completion. < / b > At stage III, we add a property to make things work out nicely in the event
2020-01-26 01:42:42 +02:00
of a change of player.
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > Otherwise we take no interest until stage IV, a point at which kinds of
2020-01-26 01:42:42 +02:00
objects and the spatial model for them are both completely worked out. We
won't change anything: all we will do is calculate the start object and the
start room by looking at where the player sits in the spatial model.
2019-03-17 14:40:57 +02:00
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > Very often, the source text doesn't specify where the player is, and then
2019-03-17 14:40:57 +02:00
we assume he is freestanding in the earliest defined room.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > PL::Player::player_complete_model< / span > < button class = "popup" onclick = "togglePopup('usagePopup8')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup8" > Usage of < span class = "code-font" > < span class = "function-syntax" > PL::Player::player_complete_model< / span > < / span > :< br / > < a href = "3-tp.html#SP4" > § 4< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > stage< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > stage< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > 3< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > P_saved_short_name< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Properties::Valued::new_nameless< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I< / span > < span class = "string-syntax" > "saved_short_name"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > K_text< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Properties::Valued::assert< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > P_saved_short_name< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > Instances::as_subject< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > ),< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Rvalues::from_unescaped_wording< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Feeds::feed_stream< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I< / span > < span class = "string-syntax" > "yourself"< / span > < span class = "plain-syntax" > )), < / span > < span class = "identifier-syntax" > CERTAIN_CE< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > stage< / span > < span class = "plain-syntax" > == < / span > < span class = "constant-syntax" > 4< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "3-tp.html#SP12_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Set the start room to the earliest room defined in the source text< / span > < span class = "named-paragraph-number" > 12.1< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "3-tp.html#SP12_2" class = "named-paragraph-link" > < span class = "named-paragraph" > If the start room is still null, there's no room, so issue a problem< / span > < span class = "named-paragraph-number" > 12.2< / span > < / a > < / span > < span class = "character-syntax" > ;< / span >
< span class = "character-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "3-tp.html#SP12_3" class = "named-paragraph-link" > < span class = "named-paragraph" > Otherwise see if the player has explicitly been placed in the model world< / span > < span class = "named-paragraph-number" > 12.3< / span > < / a > < / span > < span class = "character-syntax" > ;< / span >
< span class = "character-syntax" > }< / span >
< span class = "character-syntax" > return FALSE;< / span >
< span class = "character-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP12_1" > < / a > < b > § 12.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Set the start room to the earliest room defined in the source text< / span > < span class = "named-paragraph-number" > 12.1< / span > < / span > < span class = "comment-syntax" > =< / span >
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > instance< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > I< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOOP_OVER_OBJECT_INSTANCES< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < a href = "3-sm.html#SP15" class = "function-link" > < span class = "function-syntax" > PL::Spatial::object_is_a_room< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I< / span > < span class = "plain-syntax" > )) & & (< / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > & & (< / span > < span class = "identifier-syntax" > Projects::draws_from_source_file< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::project< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > Instances::get_creating_file< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I< / span > < span class = "plain-syntax" > ))))< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > I< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOOP_OVER_OBJECT_INSTANCES< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < a href = "3-sm.html#SP15" class = "function-link" > < span class = "function-syntax" > PL::Spatial::object_is_a_room< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I< / span > < span class = "plain-syntax" > )) & & (< / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ))< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > I< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > start_object< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "3-tp.html#SP12" > § 12< / a > .< / li > < / ul >
< p class = "commentary firstcommentary" > < a id = "SP12_2" > < / a > < b > § 12.2. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > If the start room is still null, there's no room, so issue a problem< / span > < span class = "named-paragraph-number" > 12.2< / span > < / span > < span class = "comment-syntax" > =< / span >
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > Task::wraps_existing_storyfile< / span > < span class = "plain-syntax" > () == < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::Issue::unlocated_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_NoStartRoom< / span > < span class = "plain-syntax" > ),< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "There doesn't seem to be any location in this story, so there's "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "nowhere for the player to begin. This may be because I have "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "misunderstood what was meant to be a room and what wasn't: I "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "only know something is a room if you tell me explicitly ('The "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "Observatory is a room') or if you imply it by giving map "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "directions ('East of the Observatory is the Planetarium')."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "3-tp.html#SP12" > § 12< / a > .< / li > < / ul >
< p class = "commentary firstcommentary" > < a id = "SP12_3" > < / a > < b > § 12.3. < / b > If the source text said nothing about the player's location, then the
2019-03-17 14:40:57 +02:00
player object will be a disconnected node in the containment tree: it will,
in fact, have no progenitor. In that event, the start room already calculated
will do. But otherwise:
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Otherwise see if the player has explicitly been placed in the model world< / span > < span class = "named-paragraph-number" > 12.3< / span > < / span > < span class = "comment-syntax" > =< / span >
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > start_object< / span > < span class = "plain-syntax" > = < / span > < a href = "3-sm.html#SP30" class = "function-link" > < span class = "function-syntax" > PL::Spatial::progenitor< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > start_object< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > start_object< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > while< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > ) & & (< / span > < a href = "3-sm.html#SP30" class = "function-link" > < span class = "function-syntax" > PL::Spatial::progenitor< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > )))< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > = < / span > < a href = "3-sm.html#SP30" class = "function-link" > < span class = "function-syntax" > PL::Spatial::progenitor< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > ) & & (< / span > < a href = "3-sm.html#SP15" class = "function-link" > < span class = "function-syntax" > PL::Spatial::object_is_a_room< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > ) == < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::Issue::object_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_StartsOutsideRooms< / span > < span class = "plain-syntax" > ),< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > start_object< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "seems to be where the player is supposed to begin"< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "but (so far as I know) it is not a room, nor is it ultimately "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "contained inside a room."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > inference< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > inf< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > POSITIVE_KNOWLEDGE_LOOP< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inf< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Instances::as_subject< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_character_object< / span > < span class = "plain-syntax" > ), < / span > < span class = "constant-syntax" > PART_OF_INF< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::Issue::object_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PM_PlayerIsPart< / span > < span class = "plain-syntax" > ),< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > start_object< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "seems to have the player attached as a component part"< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "which is not allowed. The player can be in a room, or "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "inside a container, or on a supporter, but can't be part "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "of something."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "3-tp.html#SP12" > § 12< / a > .< / li > < / ul >
< p class = "commentary firstcommentary" > < a id = "SP13" > < / a > < b > § 13. Initial time and place. < / b > Well: the point of tracking all of those variables was solely to be able to
2019-03-17 14:40:57 +02:00
compile this little array, which provides enough details for the I6 template
code to set things up correctly at run-time.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > PL::Player::InitialSituation_define< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > id< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > val< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > inter_name< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > iname< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Hierarchy::find< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > id< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Emit::named_array_begin< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > iname< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > K_value< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Emit::named_numeric_constant< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > iname< / span > < span class = "plain-syntax" > , (< / span > < span class = "identifier-syntax" > inter_t< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > val< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Hierarchy::make_available< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > iname< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > PL::Player::InitialSituation< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Plugins::Manage::plugged_in< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_plugin< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > < / span > < a href = "3-tp.html#SP13" class = "function-link" > < span class = "function-syntax" > PL::Player::InitialSituation_define< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PLAYER_OBJECT_INIS_HL< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < a href = "3-tp.html#SP13" class = "function-link" > < span class = "function-syntax" > PL::Player::InitialSituation_define< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > START_OBJECT_INIS_HL< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > 1< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < a href = "3-tp.html#SP13" class = "function-link" > < span class = "function-syntax" > PL::Player::InitialSituation_define< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > START_ROOM_INIS_HL< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > 2< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < a href = "3-tp.html#SP13" class = "function-link" > < span class = "function-syntax" > PL::Player::InitialSituation_define< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > START_TIME_INIS_HL< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > 3< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < a href = "3-tp.html#SP13" class = "function-link" > < span class = "function-syntax" > PL::Player::InitialSituation_define< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > DONE_INIS_HL< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > 4< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > inter_name< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > iname< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Hierarchy::find< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > INITIALSITUATION_HL< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > packaging_state< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > save< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Emit::named_array_begin< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > iname< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > K_value< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > NonlocalVariables::emit_initial_value< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > player_VAR< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > start_object< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > Emit::array_numeric_entry< / span > < span class = "plain-syntax" > (0);< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Emit::array_iname_entry< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Instances::iname< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > start_object< / span > < span class = "plain-syntax" > ));< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > Emit::array_numeric_entry< / span > < span class = "plain-syntax" > (0);< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Emit::array_iname_entry< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Instances::iname< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > ));< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > NonlocalVariables::emit_initial_value< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > time_of_day_VAR< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Emit::array_numeric_entry< / span > < span class = "plain-syntax" > (0);< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Emit::array_end< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > save< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Hierarchy::make_available< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Emit::tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > iname< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< p class = "commentary firstcommentary" > < a id = "SP14" > < / a > < b > § 14. World Index details. < / b > We explicitly mention the player in the World index, since otherwise it won't
2019-03-17 14:40:57 +02:00
usually appear anywhere.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > PL::Player::index_object_further< / span > < button class = "popup" onclick = "togglePopup('usagePopup9')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup9" > Usage of < span class = "code-font" > < span class = "function-syntax" > PL::Player::index_object_further< / span > < / span > :< br / > Spatial Model - < a href = "3-sm.html#SP44" > § 44< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > OUTPUT_STREAM< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > instance< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > I< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > depth< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > details< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > I< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > start_room< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > ) & & < / span >
< span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Instances::indexed_yet< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > ) == < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ))< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Data::Objects::index< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > OUT< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > I_yourself< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > depth< / span > < span class = "plain-syntax" > +1, < / span > < span class = "identifier-syntax" > details< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > PL::Player::player_annotate_in_World_index< / span > < button class = "popup" onclick = "togglePopup('usagePopup10')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup10" > Usage of < span class = "code-font" > < span class = "function-syntax" > PL::Player::player_annotate_in_World_index< / span > < / span > :< br / > < a href = "3-tp.html#SP4" > § 4< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > OUTPUT_STREAM< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > instance< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > I< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > I< / span > < span class = "plain-syntax" > == < / span > < a href = "3-tp.html#SP6" class = "function-link" > < span class = "function-syntax" > PL::Player::get_start_room< / span > < / a > < span class = "plain-syntax" > ()) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > " - < i> room where play begins< /i> "< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Index::DocReferences::link< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > OUT< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > I< / span > < span class = "string-syntax" > "ROOMPLAYBEGINS"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< nav role = "progress" > < div class = "progresscontainer" >
< ul class = "progressbar" > < li class = "progressprev" > < a href = "3-prs.html" > ❮ < / a > < / li > < li class = "progresschapter" > < a href = "1-im.html" > 1< / a > < / li > < li class = "progresschapter" > < a href = "2-ifi.html" > 2< / a > < / li > < li class = "progresscurrentchapter" > 3< / li > < li class = "progresssection" > < a href = "3-tnt.html" > tnt< / a > < / li > < li class = "progresssection" > < a href = "3-sm.html" > sm< / a > < / li > < li class = "progresssection" > < a href = "3-sr.html" > sr< / a > < / li > < li class = "progresssection" > < a href = "3-prs.html" > prs< / a > < / li > < li class = "progresscurrent" > tp< / li > < li class = "progresssection" > < a href = "3-dvc.html" > dvc< / a > < / li > < li class = "progresssection" > < a href = "3-bck.html" > bck< / a > < / li > < li class = "progresssection" > < a href = "3-rgn.html" > rgn< / a > < / li > < li class = "progresssection" > < a href = "3-tm.html" > tm< / a > < / li > < li class = "progresssection" > < a href = "3-mcr.html" > mcr< / a > < / li > < li class = "progresssection" > < a href = "3-sg.html" > sg< / a > < / li > < li class = "progresssection" > < a href = "3-sm2.html" > sm2< / a > < / li > < li class = "progresssection" > < a href = "3-hm.html" > hm< / a > < / li > < li class = "progresssection" > < a href = "3-em.html" > em< / a > < / li > < li class = "progresssection" > < a href = "3-sc.html" > sc< / a > < / li > < li class = "progresssection" > < a href = "3-scn.html" > scn< / a > < / li > < li class = "progresssection" > < a href = "3-tm2.html" > tm2< / a > < / li > < li class = "progresssection" > < a href = "3-ts.html" > ts< / a > < / li > < li class = "progresschapter" > < a href = "4-act.html" > 4< / a > < / li > < li class = "progresschapter" > < a href = "5-itg.html" > 5< / a > < / li > < li class = "progressnext" > < a href = "3-dvc.html" > ❯ < / a > < / li > < / ul > < / div >
< / nav > <!-- End of weave -->
2019-03-17 14:40:57 +02:00
2020-03-19 02:11:25 +02:00
< / main >
2019-03-17 14:40:57 +02:00
< / body >
< / html >