Someone recently asked me about how world map encounters work in GH1. I wrote the following explanation, which hopefully makes sense of some of the spaghetti in ADV_FederatedTerritories.txt. Read on if you dare.
It all starts with the line:
- TM1 <IfG d100 97 V= 1 d50 V+ 1 SkRoll 11 TRIGGER LOCAL MAPTILE PCX PCY>
which is called every time a model on team 1 moves (ie the player character, the only model ever on team 1). If a d100 roll is greater than 97, a d50 roll is stored in variable 1. Then an Awareness (skill 11) roll is added to v1. Then a local trigger is generated with the value LOCAL[the terrain value of the tile the PC is standing in].
Beneath this line there are a series of cases which catch the local trigger- LOCAL1, LOCAL2, etc. All of these just goto the GoStandardEncounter script. I guess the purpose of this bit is to filter out terrain types where I didn’t want encounters to happen, such as over water.
- GoStandardEncounter <ifG V1 70 else GoConvoy ifNoObjections ENC 3 ifYesNo 51 52 53 ifG d4 1 else GoRaiders Print 55 CashPrize 25000>
This first procedure checks the d50+Awareness roll in V1. If it’s less than or equal to 70, the script jumps to line GoConvoy. It then checks to see if there are any objections to a level 3 encounter. Any plot can intercept the ENC3 trigger and run its own encounter instead of this one; if that happens control passes to the plot and the rest of this line is not executed. If there are no objections, a yesno menu pops up that asks if the PC wants to check out anomalous sensor readings. There’s a 1 in 4 chance this will lead to an encounter with raiders. Otherwise the PC gets 25000.
- GoConvoy <ifG V1 55 else GoCheckRaiders ifNoObjections ENC 2 ifYesNo 21 22 23 SavePos Staged .convoy Threat PCRep 6 85 SetMapType MapTile PCX PCY>
- .convoy <TS_Scene_Convoy*.txt>
If the d50+Awareness roll in V1 is less than or equal to 55, the script jumps to GoCheckRaiders. An objection check is performed for a level 2 encounter, and if there is no objection the PC is asked if they want to approach the convoy. Saying yes saves the PC’s position on the world map and starts a staged encounter of the form TS_Scene_Convoy*.txt. Actually there’s only one convoy encounter, but in theory there could be lots. The encounter will be at the PC’s renown value (reputation 6), 85% strength, and will use the map generator based on the tile where the PC is standing right now.
- GoCheckRaiders <ifNoObjections ENC 1 ifG V1 40 else GoRaiders ifYesNo 31 32 33 Goto GoRealRaiders>
- GoRaiders <ifG PCScale 0 else GoSmallAttack print 1 Goto GoRealRaiders>
- GoRealRaiders <SavePos V= 2 10 V+ 2 d65 V= 3 PCRep 6 V+ 3 -d15 Dynamic 2 Threat V3 V2 FrzNU1 FrzNU2 Encounter 3 1 .encdata SetMapType MapTile PCX PCY>
- FrzNU1 <if= T1 0 Exit 1>
- FrzNU2 <if= T2 0 Salvage>
- .encdata <ArchEnemy +PCRA +ECRA>
GoCheckRaiders first checks for objections to a level 1 encounter. If the Awareness + d50 roll in V1 is greater than 40, the PC spots the raiders in the distance and is offered a choice of whether to approach or not.
GoRaiders checks the PC’s scale. If the PC is in a mecha (greater than SF:0), the GoRealRaiders script is called. Otherwise, the GoSmallAttack script is called.
GoRealRaiders starts the raider encounter. The PC’s position on the world map is saved. A value of 10 is assigned to variable 2, then d65 is added to that. The PC’s renown is stored in variable 3, then d15 is subtracted from that. A dynamic encounter is then constructed at SF2, with threat based on the modified renown score in V3 and strength equal to V2, with ending conditions FrzNU1 and FrzNU1 for the player and enemy team checks respectively. The “Encounter” command may add an NPC to the scene; there’s a 3% chance of an enemy being added and a 1% chance of an ally being added. The ally is chosen totally at random, while the enemy is chosen based on the .encdata data. In this case, the enemy must be an ArchEnemy of the PC. The +PCRA and +ECRA tags in .encdata mean that the PC can run away from the encounter and the enemy can also run away. Finally, the map type of the new encounter is set to the terrain value of the tile the PC is currently standing in.
- GoSmallAttack <Print 41 SavePos MDynamic 0 PCRep 6 .monstertype FrzMU1 FrzMU2 SetMapType MapTile PCX PCY>
- .monstertype <Animal Plains Forest>
If the PC doesn’t have a mecha, this personal scale encounter will be called. Note that the monsters will always be of the “Animal Plains Forest” variety no matter what the actual terrain of the encounter is.