Skilled player (1738)
Joined: 9/17/2009
Posts: 4980
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
xy2_ wrote:
jlun2 wrote:
xy2_ wrote:
Reset, manually change firmware time, continue. As far as I'm aware, there's no way to record the changing itself in the movie file.
Alright. I'll wait for some update before I TAS this category seriously.
Now that you mentionned it here, it is possible to record the changing of firmware time, and testing, it does work perfectly on 9.9. Apologies for the misinformation.
Does changing the system time during a movie using the system menu work for you? I can get it to proceed with a restart, but I can't seem to get it to register the change. Edit: The prequel takes 54 minutes. 3 of the cartridges based on time takes place at 0:00, 1:00 and 2:00 during day 5. The 3:00 one takes place at day 6. Under normal circumstances, the 100% must play through the game twice, because day 3 paths both contain a part needed for day 8 to unlock. Even if that takes 2 hours, I'm not sure how I would reach day 5 with 0:xx hour, then reach day 6 the 2nd time 2.5 hours later without standing there for at least 30 minutes. I'll see how long it takes with a test run I guess. Edit2: I forgot to take something important into account. Day 2's first path doesn't have a chest to unlock; the only thing I need appears to be the 2 minigames there both located near the very end. However, the good thing is that I don't need to even end the day to get them; encounter both minigames then quickly suspend the game and reload the save of the first day's end and proceed to chose path 2. This would only work however, if the chests are carried over between suspends and reload like the cartridges since if it doesn't I still need to complete this game twice then.
Skilled player (1738)
Joined: 9/17/2009
Posts: 4980
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
They changed the way Up/Down buttons work in the sequel; they now strafe left/right instead of turning. On one hand, that means less things to test for turning corners. On the other, I need to test moving a angles as well as the method I use to turn on the WIP (turn 90 degrees, move straight then strafe/turn at the next corner). Also the former makes it such that to check for example moving close to a wall at an angle, I have to do this: make savestate1 hold down 1 frame make savestate2 advance to some point record x/y at said point load savestate1 again advance to said point compare x/y with previous if better, load savestate and advance 1 frame. then save over state 1. repeat else load state2, then save over state 1. repeat I think I might make a script for these parts.
Skilled player (1738)
Joined: 9/17/2009
Posts: 4980
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
This is the entire map of the 31st platforming stage. It is composed of 160x84 16x16 tiles. You start at tiles (1,55) and the real exit is at (152, 10). This is zero indexed. In comparison, for almost all of the previous platformers they span about 2 screens worth 32x24 tiles. I'm unable to TAS the 100% due to limitations on DS recording, but at least here's a map for this part. Here's a google drive folder for the other maps: https://drive.google.com/folderview?id=0B-2O13fpsnI4ZmpjSWFDa3MwaEU&usp=sharing Edit: Turns out these platformer stages are not as straightforward in terms of optimizing; the positions are 4 byte unsigned fixed point 20.12 format, and at the very first stage, it appears there's ways to briefly "boost" if you jump just before a block falls.
Skilled player (1738)
Joined: 9/17/2009
Posts: 4980
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
Kinda late, but since I got stuck in Telefang 2, I decided to check which day 2 route is faster. I made an unoptimized playthrough and got: ~09:38.33 (34700 frames) to reach end using house path ~07:11.67 (25900 frames) to reach end using subway path The reason for the time saved is due to the sequence break with the guard regret. I will upload a vid of what I meant. I can check which day 3 (hotel/karaoke club) path is faster later. ~08:41.67 (31300 frames) to reach end using hotel path ~ 06:51.67 (24700 frames) to reach end using karaoke club Last branch: ~07:43.17 (27790 frames) to reach end using Kenta's grave path. ~08:54.83 (32090 frames) to reach end using Naoki's grave path. Edit: https://www.youtube.com/watch?v=tv9U654d9Rk Edit2: I found out that the hotel level's basement has 3 regrets possible. Since a bunch of X/Y positions are hard for me (and probably others) to visualize, I made a script that tries to display where the enemies are, along with their direction, relative to the player being center: Download namelessdisplay.lua
Language: lua

player = {x = 0x21347FC, y = 0x2134804, camx = 0x2134820, camy = 0x2134822} --camx in terms of upright view; same for camy. so camx looks up/down regret = 0x2133828 local centerx = 127 local centery = 96 local abs = math.abs --[[ These are not needed, since they are all offset by each other. Here for reference: regret1 = {x = 0x2133828, y = 0x2133830, destx = 0x21338B8, desty = 0x21338C0, angle = 0x213384C} regret2 = {x = 0x2133AD8, y = 0x2133AE0, destx = 0x2133B68, desty = 0x2133B70, angle = 0x2133AFC} regret3= {x = 0x2133D88, y = 0x2133D90, angle = 0x2133DAC} regret4= {x = 0x2134038, y = 0x2134040, angle = 0x213405C} --the following when moving forward --camy = 12.000 x decreases --camy = 4.000 x increases; 0 degrees? --camy = 8.000 y decreases --camy = 0.000 y increases (this is same as 16); so this means 270 degrees ]]-- --Declarations here --[[ GetStats by FatRatKnight http://tasvideos.org/forum/viewtopic.php?p=458672#458672 ]]-- local function GetStats(addr,o) o = o or {} --Construct a table if we didn't get one o.X = memory.readlongsigned(addr)/4096.0 o.Y = memory.readlongsigned(addr+0x8)/4096.0 o.destX = memory.readlongsigned(addr+0x90)/4096.0 o.destY = memory.readlongsigned(addr+0x98)/4096.0 o.Angle = memory.readlongsigned(addr+0x24)/4096.0 --... And so on return o end function to_Radian(cam) local short = 65535/4096.0 --short to 20.12 format local radian = short/math.rad(360) --Divide this to convert to radians return (cam/radian)-math.rad(90) --Apparently to make "0" point up end --function to return coords based on their position function return_coords_x(player_x, enemy_x, enemy_diffx) if player_x == enemy_x then return centerx end if player_x <enemy_x> enemy_x then --Enemy is to the left of player return centerx - enemy_diffx end end function return_coords_y(player_y, enemy_y, enemy_diffy) if player_y == enemy_y then return centery end if player_y <enemy_y> enemy_y then --Enemy is "below" player (lower y == higher up in screen) return centery + enemy_diffy end end --returns difference depending on conditions function difference(num1, num2) if num1 <0>= 0 then return abs(num1 - num2) elseif num1 >= 0 and num2 < 0 then return abs(num2 - num1) else return abs(abs(num1) - abs(num2)) end end function display() local Enemy = {} local playerx = memory.readlongsigned(player.x)/4096.0 local playery = memory.readlongsigned(player.y)/4096.0 local playercamx = memory.readshort(player.camx)/4096.0 local playercamy = memory.readshort(player.camy)/4096.0 local regret_difx local regret_dify --for their target destination coords local regret_difx_dest local regret_dify_dest local directionx = 20*math.cos(to_Radian(playercamy))+centerx local directiony = 20*math.sin(to_Radian(playercamy))+centery local regret_color = "white" for i= 1, 3 do Enemy[i] = GetStats(regret + (i-1)*0x2B0) --i-1 for 1 offset array with 0 offset addresses. Horrifying, I know. --if end --For reference gui.drawtext(0,0,"Player: ("..string.format('%.6f',playerx)..","..string.format('%.6f',playery)..")") gui.drawtext(0,10,"Camera: ("..string.format('%.6f',playercamx)..","..string.format('%.6f',playercamy)..")") gui.drawtext(0,20,"Regret 1: ("..string.format('%.6f',Enemy[1].X)..","..string.format('%.6f',Enemy[1].Y)..")"..string.format('%.6f',Enemy[1].Angle)) gui.drawtext(0,30,"Regret 2: ("..string.format('%.6f',Enemy[2].X)..","..string.format('%.6f',Enemy[2].Y)..")"..string.format('%.6f',Enemy[2].Angle)) gui.drawtext(0,40,"Regret 3: ("..string.format('%.6f',Enemy[3].X)..","..string.format('%.6f',Enemy[3].Y)..")"..string.format('%.6f',Enemy[3].Angle)) --Drawing for player gui.line(centerx-5,centery-5,centerx+5,centery+5,"white") gui.line(centerx-5,centery+5,centerx+5,centery-5,"white") gui.line(centerx,centery,directionx,directiony,"white") --My direction --Display location of regrets relative to you, at the center for i = 1, 3 do --Shitty heurestic to determine if present if (Enemy[i].X ~= 0) and (Enemy[i].Y ~= 0) then regret_difx = difference(playerx,Enemy[i].X) regret_dify = difference(playery,Enemy[i].Y) regret_difx_dest = difference(playerx,Enemy[i].destX) regret_dify_dest = difference(playery,Enemy[i].destY) --Placement relative to player --Placement relative to player regret_difx = return_coords_x(playerx, Enemy[i].X, regret_difx) regret_dify = return_coords_y(playery, Enemy[i].Y, regret_dify) regret_difx_dest = return_coords_x(playerx, Enemy[i].destX, regret_difx_dest) regret_dify_dest = return_coords_y(playery, Enemy[i].destY, regret_dify_dest) --Destination if (Enemy[i].X ~= Enemy[i].destX) or (Enemy[i].Y ~= Enemy[i].destY) then regret_color = "red" gui.line(regret_difx,regret_dify, regret_difx_dest, regret_dify_dest,regret_color) else regret_color = "white" end regret_dirx = 20*math.cos(to_Radian(Enemy[i].Angle)) + regret_difx regret_diry = 20*math.sin(to_Radian(Enemy[i].Angle)) + regret_dify gui.drawtext(math.floor(regret_difx), math.floor(regret_dify),"R"..i,regret_color) gui.drawtext(math.floor(regret_difx_dest), math.floor(regret_dify_dest),"D"..i,regret_color) gui.line(regret_difx,regret_dify,regret_dirx,regret_diry,regret_color) end end end gui.register(display)
The other places with 3 regrets are the school, and the grave paths. Edit3: At the school location, it doesn't appear possible to sequence break sadly. Either the regrets were too close to the doors, or said doors were locked. Also it took ~13:29.17 (~48,550 frames) to beat the school stage. Edit4: Choose Subway, then Karaoke club, then finally Kenta's grave for optimal any%. Edit 5: Things attempted, but failed to skip at the hospital: -Attempting to reach the curtain in the first room and skipping the red girl (doesnt work; curtain non-interactable) -Attempting to skip the red girl in the first cursed game section (stairs not interactable) -Attempting to skip the part where the 3 red girls gang up on you in the cursed game (stairs not interactable) -Can skip the cursed platformer section if you can somehow cross the gap -Attempting to skip the detour to the surgery room after the nursery fails, since the hallway doors would be locked until you entered and interacted with the white girl. Also the Hospital takes ~09:49.27 (35356 frames) to get through.