1 2 3 4 5 6 7
DrD2k9
He/Him
Editor, Judge, Expert player (2210)
Joined: 8/21/2016
Posts: 1086
Location: US
Radiant wrote:
DrD2k9 wrote:
These are hilarious. Unfortunately not all can be used due to time constraints, but any that I can get on the screen for any length of time I will!
Great, happy to help :) I suppose that the now-cancelled run can give me an idea of where these time constraints are for commands in later parts of the game?
Yes, I don't believe there will be any changes to game actions after the slots with a new run. As a note on RNG...I've figured out that firing the phaser while on the Deltaur changes the seed resulting in guards appearance in latter rooms.
DrD2k9
He/Him
Editor, Judge, Expert player (2210)
Joined: 8/21/2016
Posts: 1086
Location: US
So.... If c-square is able to Lua control the skimmer sequence for a specific number of random calls, then we can theoretically calculate an initial RTC time that will yield a good range of RNG seeds for the slots when we arrive there. Then we can use the spreadsheet of return-values to destroy the slots as fast as possible. Firing the phaser at nothing can help with Sarien guards after losing Roger's helmet. Correct? Are we concerned with also trying to set the initial RTC time to avoid guards on the Arcada? There's only a couple screens where it should impact. Are we worried about the spider droid?
Player (26)
Joined: 8/29/2011
Posts: 1206
Location: Amsterdam
DrD2k9 wrote:
If c-square is able to Lua control the skimmer sequence for a specific number of random calls, then we can theoretically calculate an initial RTC time that will yield a good range of RNG seeds for the slots when we arrive there. Then we can use the spreadsheet of return-values to destroy the slots as fast as possible. Firing the phaser at nothing can help with Sarien guards after losing Roger's helmet.
Yes, that is correct. Firing the phaser is possibly slower than typing <N> <enter> though.
Are we concerned with also trying to set the initial RTC time to avoid guards on the Arcada? There's only a couple screens where it should impact.
I think we should be. The relevant guard has a 50% chance to show up, so that's straightforward to manipulate.
Are we worried about the spider droid?
Yes, because his movement is random. While he is on screen, he will generate calls to the random() function. Question: if you take an existing run and alter the RTC time, does it still sync? I would expect it may desync at the guard in logic 7 (50% of the time), or at the skimmer sequence (obviously) but not at other spots; is that correct?
DrD2k9
He/Him
Editor, Judge, Expert player (2210)
Joined: 8/21/2016
Posts: 1086
Location: US
Radiant wrote:
Firing the phaser is possibly slower than typing <N> <enter> though.
I think the phaser would be faster. It's only a 2-3 frame delay. Typing 'N' would require the 4-5 frames of clearing the resulting text response. I'll double check this though.
Are we concerned with also trying to set the initial RTC time to avoid guards on the Arcada? There's only a couple screens where it should impact.
I think we should be. The relevant guard has a 50% chance to show up, so that's straightforward to manipulate.[/quote] I think guards can show up in the room with the destroyed door to the lab, but I'd need confirmation of that. So we might have to watch that room too. The room following, we can make the elevator before a guard shows up if one is called. Guards can show up in the rooms on either side of the control room. (Elevator room and Keycard Slot room). We'd have to watch both of these.
Are we worried about the spider droid?
Yes, because his movement is random. While he is on screen, he will generate calls to the random() function.
So delaying its arrival as long as possible may be beneficial
Question: if you take an existing run and alter the RTC time, does it still sync? I would expect it may desync at the guard in logic 7 (50% of the time), or at the skimmer sequence (obviously) but not at other spots; is that correct?
Correct. It will for sure de-sync where I waited for the guard at the bottom of the elevator. The rest seems mostly intact. I briefly played around with manually editing the savestate files. By changing the Initial RTC time and the timing of button presses in the savestate, I was able to alter guard RNG actions. I think we may be able to get around redoing everything again with this method. I'll look more deeply into this tonight.
Player (26)
Joined: 8/29/2011
Posts: 1206
Location: Amsterdam
One of my earlier posts has a list of where exactly guards can appear, I think you're safe in the room with the broken door. And yes, having the spider for a shorter time makes manipulation easier. The timer is determined at random when you first leave the pod to room 30.
Player (26)
Joined: 8/29/2011
Posts: 1206
Location: Amsterdam
And let's get some more commands. Kerona surface (1) Toss at that little sir, for you can! (2) Pick another, for you part at first. (3) To turn you on a little, dial me now! Kerona underground (1) Get up please, rock me now! (2) Fill the old boulder to steam it off (3) A second set of glass is light for me. (4) You put these on to please that hunk. (5) Stand up, the bike is a little off now. ('turn key' probably needs to be quick?) Oh yeah, let's not forget the acid drops are randomized, and can be manipulated.
Player (26)
Joined: 8/29/2011
Posts: 1206
Location: Amsterdam
Ulence Flats. Note that there's only a 34% chance when you leave the room that your skimmer gets stolen, so taking the key out isn't necessary. (1) Get out into sand, skimmer is with you (2) That is for you now, sir I.A.N. (3) Little is up with you, I guess, yes? Since you're waiting for the alien to die, it may be possible to stand at the right-hand side of the bar, and when the bartender gets to you he'll give you more cash gambling if you type #4. This may need luck manipulation. (4) At present, little is under the coupon (5) I give up, this old coupon is over now ('buy droid' probably has to be short again) (6) I buy you out. Craft another for me. (7) The old scale is through inside ladder. (8) Some of that is the third load now. (9) HH
DrD2k9
He/Him
Editor, Judge, Expert player (2210)
Joined: 8/21/2016
Posts: 1086
Location: US
Ok for the spider droid timer... There's a set number of random calls before he arrives correct? If so (and if my calculations are correct) the earliest random call based on the default initial random seed (46218 milliseconds after midnight) which yields 250 into variable v93 when exiting the escape pod is 120 seeds into the game. Specifically a seed of 42421 will yield 250 into v93. Can someone confirm my math for me? So if we exit the escape pod before the 120th random call, we could simply adjust our initial time based on this, correct? Additionally the 234th, 246th, 295th, 576th all will yield 250 for the spider droid logic (again, assuming my math is correct) EDIT: My math was wrong. EDIT#2: No I think it's correct.
DrD2k9
He/Him
Editor, Judge, Expert player (2210)
Joined: 8/21/2016
Posts: 1086
Location: US
On the note of random calls....If a guard is triggered on the Arcada, the guard logic (logic.103) also calls random. Yielding 2 total random calls.
DrD2k9
He/Him
Editor, Judge, Expert player (2210)
Joined: 8/21/2016
Posts: 1086
Location: US
I'm probably going to need Radiant's help with this... Here's the sequence of rooms from beginning in Room 2 until exiting the crashed escape pod. 2 - Janitor Closet (Starting Room) - RANDOM CALLED 1x 1 - Data Archive - no random calls 4 - Hallway w damaged door - RANDOM CALLED 1-2x 3 - Keycard Body - no random calls 4 - Hallway w damaged door - RANDOM CALLED 1-2x 2 - Janitor Closet bottom floor - RANDOM CALLED 1-2x 5 - Bottom of elevator - RANDOM CALLED 1-2x 6 - Control room - no random calls 7 - Keycard Slot - RANDOM CALLED 1-2x 9 - Prep Room - no random calls 8 - Shuttle Bay - no random calls 10 - Inside Escape Pod - no random calls 8 - Shuttle Bay (briefly as escape pod launches) - no random calls 12 - Escaping Arcada - No random calls 10 - Inside Escape Pod - no random calls 104 - AutoNav Status Screen - no random calls 13 - Kerona Approach animation - no random calls 30 - Crash Site - RANDOM CALLED 1 or more times (maybe) 14 - Inside Crashed Escape Pod - no random calls 30 - Crash Site - RANDOM CALLED 1 or more times Any room where a guard can attack, calls logic.103 which has a random call in it. (timer for the attack?) The key question is, does the spider droid random call happen when the crash site room is shown DURING the crash or does the counter not start until AFTER exiting escape pod into room 30? It looks like we may be able to manipulate the initial RTC timer to have as few as 6 random calls before entering room 30 where the spider droid counter is set. Unfortunately room 30 itself is complicated (to me). It calls logic.110 which itself has 6 random calls in it. So the actual number of random seeds before the spider droid counter may be more. Can you confirm/clarify this theory?
DrD2k9
He/Him
Editor, Judge, Expert player (2210)
Joined: 8/21/2016
Posts: 1086
Location: US
OK the above is for sure incorrect. If I understand Logic.000 correctly, Getting something increases the random seed. looking at something increases the random seed. entering something increases the random seed. specifically typing "use" something increases the random seed also, if flag f2 is set AND flag f4 is not set, random is called. I have no idea what these two flags are. So...the following is probably more accurate, but may still be incorrect due to the f2 & f4 flags 2 - Janitor Closet (Starting Room) - RANDOM CALLED 1x 1 - Data Archive - no random calls 4 - Hallway w damaged door - RANDOM CALLED 1-2x 3 - Keycard Body - RANDOM CALLED 1x by getting keycard. 4 - Hallway w damaged door - RANDOM CALLED 1-2x 2 - Janitor Closet bottom floor - RANDOM CALLED 1-2x 5 - Bottom of elevator - RANDOM CALLED 1-2x 6 - Control room - no random calls 7 - Keycard Slot - RANDOM CALLED 1-2x 9 - Prep Room - RANDOM CALLED 2x for getting suit and for getting translator 8 - Shuttle Bay - RANDOM CALLED 1x for entering pod 10 - Inside Escape Pod - no random calls 8 - Shuttle Bay (briefly as escape pod launches) - no random calls 12 - Escaping Arcada - No random calls 10 - Inside Escape Pod - no random calls 104 - AutoNav Status Screen - no random calls 13 - Kerona Approach animation - no random calls 30 - Crash Site - RANDOM CALLED 1 or more times (maybe) 14 - Inside Crashed Escape Pod - no random calls 30 - Crash Site - RANDOM CALLED 1 or more times So it looks like the minimum is 10 calls before the spider droid timer is set. Again, this DOESN'T include random calls by the f2 & f4 flags.
DrD2k9
He/Him
Editor, Judge, Expert player (2210)
Joined: 8/21/2016
Posts: 1086
Location: US
If I understand Logic.000 correctly, Getting something increases the random seed. looking at something increases the random seed. entering something increases the random seed. specifically typing "use" something increases the random seed
Or maybe these only increase random if the 'something' is a non-recognized object in the game. Radiant, can you clarify/confirm?
Active player (377)
Joined: 9/25/2011
Posts: 652
I ran through your run up to the slots and had JPC-rr dump the number of changes per room. Here's what I got (in csv format): Room-Visit,Seed Changes,Total 2-1,0,0 1-1,0,0 4-1,1,1 3-1,0,1 4-2,1,2 2-2,3,5 5-1,3,8 6-1,0,8 7-1,1,9 9-1,0,9 8-1,0,9 10-1,0,9 8-2,0,9 12-1,0,9 10-2,0,9 13-1,0,9 30-1,0,9 14-1,0,9 30-2,2,11 21-1,1,12 22-1,1,13 23-1,1,14 20-1,1,15 24-1,0,15 20-2,1,16 23-2,1,17 20-3,2,19 19-1,5,24 18-1,2,26 15-1,0,26 16-1,9,35 17-1,9,44 32-1,0,44 25-1,0,44 26-1,0,44 27-1,52,96 28-1,0,96 27-2,22,118 26-2,0,118 29-1,6,124 31-1,7,131 78-1,0,131 33-1,444,575 35-1,0,575 34-1,0,575 35-2,0,575 70-1,11,586
DrD2k9
He/Him
Editor, Judge, Expert player (2210)
Joined: 8/21/2016
Posts: 1086
Location: US
OK so that confirms that the random call for setting the spider droid timer doesn't happen until AFTER exiting the crashed escape pod. So was the initial seed value set at room 2, or at room 4? It looks like my original thought was correct of 5-6 being the minimum possible before the spider droid timer is set. It looks like the acid drips and skimmer sequence are going to have a much greater impact on where we are seed wise when we get to the slots. I'd say that definitely suggests that we try to maximize the timer for the spider droid. If I start a run and do a savestate after the first room , could you get me the initial seed value? I think I could then use that information to edit the initial RTC in the save state file to achieve the longest Spider Droid timer. Make sense?
Active player (377)
Joined: 9/25/2011
Posts: 652
DrD2k9 wrote:
So was the initial seed value set at room 2, or at room 4?
The initial seed value is set after name input but before any room appears on the screen. It could be in the initialization code of room 2.
DrD2k9
He/Him
Editor, Judge, Expert player (2210)
Joined: 8/21/2016
Posts: 1086
Location: US
If I start a run and do a savestate after the first room , could you get me the initial seed value? I think I could then use that information to edit the initial RTC in the save state file to achieve the longest Spider Droid timer. Make sense? EDIT: This save for example.
Active player (377)
Joined: 9/25/2011
Posts: 652
Here, let me give you something so you can do it yourself
roomAddr=240153
seedAddr = 246039
oldSeed=jpcrr.read_word(seedAddr)
oldTick = -1
slotRNG = {}
for i=0,65536 do
	slotRNG[i] = (i*31821+1)%65536;
end

while true do
	a, b = jpcrr.wait_event();
	if a == "lock" then
		nowTick = jpcrr.clock_time()
		if nowTick ~= oldTick then
			seed = jpcrr.read_word(seedAddr)
			if oldSeed ~= seed then
				if nowTick > oldTick then
					changes=0
					while oldSeed ~= seed do 
						oldSeed = slotRNG[oldSeed]
						changes = changes+1
					end
				else
					changes = "Reload!"
				end
				room = jpcrr.read_byte(roomAddr)
				print("Time: " .. nowTick .. " Room: " .. room .. " Seed: " .. seed .. " Number of Changes: " .. changes)
				oldSeed = seed
			end
			oldTick=nowTick
		end
		jpcrr.release_vga();
	end
end
Throw this in a text file in the JPC-rr lua directory, and use the Lua window to run that file. Note, the addresses are the ones from the movie file you sent me that got up to the slots. If your save is starting from scratch, it's possible the addresses will differ depending on when you started the actual game. Give it a shot and let me know if it works! EDIT: If you want to try a more direct route of playing with the spider droid's timer, you can poke seed values with the following:
seedAddr1 = 246039
seedAddr2 = 1294615
jpcrr.write_word(seedAddr1, [value to poke])
jpcrr.write_word(seedAddr2, [value to poke])
Note there are two addresses that hold the seed value. Again, you need to put that in a file to run it.
Editor, Expert player (2071)
Joined: 6/15/2005
Posts: 3282
DrD2k9 wrote:
If I understand Logic.000 correctly, Getting something increases the random seed. looking at something increases the random seed. entering something increases the random seed. specifically typing "use" something increases the random seed
Or maybe these only increase random if the 'something' is a non-recognized object in the game. Radiant, can you clarify/confirm?
I assume you are referring to:
if ((said("check out","anyword") ||
    said("check out","anyword","anyword"))) {
  random(70,72,v64);
  print.v(v64);
}
("check out" is the same as "look") The code above is default code that is only executed if no other said() option is provided by the current room's logic. Ex: In the room you start in (room 2), "look hall" and "look wall" both have said() options, so those parts of the code are executed. On the other hand, "look waterfall" does not, so in this case the default code is executed and random() is called. In fact, any command that consists of dictionary words but is not understood at all, i.e. no said() option exists in either logic.0 or current logic, happens to call random() as well. That is why entering "y" advances the RNG. By the way, the AGI documentation may be of help when trying to understand the code. Edit: Initial seed value appears to occur at the beginning of logic.2. There is a random() at the top which initializes RNG, even though the random() call is useless because f86 is not set until later in the code (and thus no guard can appear at the beginning).
Player (26)
Joined: 8/29/2011
Posts: 1206
Location: Amsterdam
DrD2k9 wrote:
Ok for the spider droid timer... There's a set number of random calls before he arrives correct?
There's one random call, that initializes the countdown as you specified. There are no other random calls caused by the countdown.
DrD2k9 wrote:
On the note of random calls....If a guard is triggered on the Arcada, the guard logic (logic.103) also calls random. Yielding 2 total random calls.
Correct. The second one is the delay (50 - 100 ticks) until the guard appears. This may matter because you can ignore a guard spawn if you can make it into an elevator quickly enough. Your overview is mostly correct, but note that logic 4 doesn't call the second random() if you enter it on the top floor (which in this run you always do).
DrD2k9 wrote:
The key question is, does the spider droid random call happen when the crash site room is shown DURING the crash or does the counter not start until AFTER exiting escape pod into room 30?
The latter: when you leave the pod.
Unfortunately room 30 itself is complicated (to me). It calls logic.110 which itself has 6 random calls in it. So the actual number of random seeds before the spider droid counter may be more.
Logic 110 regulates the spider. It calls random() once when initializing the room; the other calls only occur when the spider is already there. One is for when it appears (after landing, it waits 8-26 ticks before it starts chasing you). All the others are for its recurring sound effect.
DrD2k9 wrote:
If I understand Logic.000 correctly, Getting something increases the random seed. looking at something increases the random seed. entering something increases the random seed. specifically typing "use" something increases the random seed
Not exactly. Trying to get, look at, enter, or use something that is not otherwise scripted calls the random seed to give one of several synonyms for "you cannot do that". The f2/f4 combo is a similar message for input that is completely not understood. It does not affect this run.
Player (26)
Joined: 8/29/2011
Posts: 1206
Location: Amsterdam
DrD2k9 wrote:
So was the initial seed value set at room 2, or at room 4?
Room 2: the first time random() is called.
It looks like the acid drips and skimmer sequence are going to have a much greater impact on where we are seed wise when we get to the slots.
Yep. The acid drop room calls random() three times when entered, to set a timer for the upper three acid drops. There are actually FOUR acid drops (the fourth being in the pool below) but the fourth doesn't randomize its timer. When their respective animation finishes, each of the four drops calls random() again to get a new timer. Initial timers are 9-71 ticks (left drop), or 1-71 ticks (middle and right drops). Later timers are 17-53 (bottom drop), or 26-44 (all three top drops). Of course you do enter this room twice.
I'd say that definitely suggests that we try to maximize the timer for the spider droid.
Yes, that makes things easier. Note that when you leave the pod, you can check this timer by pressing alt-D (to enable debug mode), then type SHOW VAR <enter> 93 <enter>. You'll need to reload to undo this, of course; can't have a run with debug mode. v93 is intially between 130 and 250 and decrements each tick. It turns out that blowing up Orat with the Spider can only be done AFTER visiting the alien visage, making this method much slower in any run.
Player (26)
Joined: 8/29/2011
Posts: 1206
Location: Amsterdam
Final set of commands. Deltaur outside (1) first in!put: on the jet, pack it all (2) exit pod (3) turn off now, I will handle it for you The robot may reposition you, but will never place you closer to the door so that doesn't help. Deltaur inside (1) open up from inside the chest (note, leave two spaces after 'open') (2) enter <F3> (3) open <space> <F3> (4) open second cartridge retrieval unit (note, leave two spaces after 'open') (5) enter <F3> (6) open <space> <F3> (7) look for the space suit inside of me Final conflict (1) redeem it in I: id is in it, is in I (2) grab the first, second, third bombs (3) Is the cast off? The grenade is inside (4) explore with me for a second, dude (5) the press is off; switch it on now (6) this is view control, panel is inside (7) you stand out from every vessel push switch Note, you can briefly type something on the second screen where you fly away; type something like "That's all, folks!" without pressing Enter.
Player (26)
Joined: 8/29/2011
Posts: 1206
Location: Amsterdam
On the first screen, enter this command before doing anything else (not necessary, but fitting for a speedrun) First, please clock me in, sir.
DrD2k9
He/Him
Editor, Judge, Expert player (2210)
Joined: 8/21/2016
Posts: 1086
Location: US
Radiant wrote:
On the first screen, enter this command before doing anything else (not necessary, but fitting for a speedrun) First, please clock me in, sir.
What does that do, and will it cause a text box that will add frames to the run? It is possible to change the game-speed at the beginning using the 'fastest' command even before the visual of room 2 is completely loaded. This enables Roger to exit the room before the intro text shows up, thus saving a few frames of time.
c-square wrote:
Here, let me give you something so you can do it ... Give it a shot and let me know if it works!
Thanks I'll check into it asap.
Editor, Expert player (2071)
Joined: 6/15/2005
Posts: 3282
Radiant wrote:
The f2/f4 combo is a similar message for input that is completely not understood. It does not affect this run.
No, this is well understood. The code is:
if (isset(f2) &&
    !isset(f4)) {
  random(89,91,v64);
  print.v(v64);
  reset(f2);
}
f2 means "the player has issued a command line", f4 means "said() command has accepted the user input". This code is executed if all words are dictionary words but no specific said() command is defined for it.
FractalFusion wrote:
In fact, any command that consists of dictionary words but is not understood at all, i.e. no said() option exists in either logic.0 or current logic, happens to call random() as well. That is why entering "y" advances the RNG.
Player (26)
Joined: 8/29/2011
Posts: 1206
Location: Amsterdam
FractalFusion wrote:
No, this is well understood.
The input from the player is not understood by the game :D
1 2 3 4 5 6 7