(Link to video)
the logical step to take now is working out how to bypass wall collisions
Yeah... but what if you could just walk through a wall and end skip the entire game...
So I was browsing speedrun.com out of boredom for the millionth time the other day and decided to check out the Kubo leaderboard to see if there had been any change after the TAS had been published. Unfortunately there had not been a new WR or something like that but the board had been split up into 'No OoB' and 'OoB' which instantly got me interested and made me start wondering if someone had found a solution to getting Kubo out the wall after screen warping to the gem room. But no, what had actually been discovered was something much more exciting.
Turns out there's a dodgy spot in the bottom wall of the first room that warps Kubo straight to the gem room, skipping the entire game. Perhaps this was just a way for the devs to test the end screen easily but it'd surely make more sense to just start the test run in the gem room or even on the end screen (idk I haven't used NESMaker before). Either way, it's just miraculous this gap in the wall even exists in the first place but also warps straight to the end of the game. Kubo just seems to be the game that keeps on giving.
To my frustration, the only spot that seems to exist in the first room is to the bottom right of Kubo, which attentive readers will know is the side Kubo can't diagonally walk to the right OR down so not only is time lost not being able to shave a corner but the glitch I've spent way too much time playing with can't even be included.
My only concern regarding the TAS is that it seems to tie the RTA wr('s) so there isn't much in the way of distinguishing this from a run anyone could do. Even if this never does get published for that (or other reasons), I can at least be glad this crazy skip was showcased on this site somewhere.

Samsara: Claiming for judging.
Samsara: As discussed in the submission thread, this is being accepted as the any% category (not GEG as originally submitted, as it is an intended warp with intended game completion), with the currently published run being re-branched to "warpless". Big thanks to feos for looking into the warp and ThunderAxe31 for providing a sensible solution.
feos: Adding the "warps" branch to match how warp usage is traditionally reflected, since it's an explicit in-game option (even if it's kinda hidden).

despoa: Processing...

TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 14875
Location: 127.0.0.1
This topic is for the purpose of discussing #7843: Cephla's NES KUBO "warps" in 00:02.50
Player (50)
Joined: 4/1/2016
Posts: 285
Location: Cornelia Castle
By looking at Speedrun.com, this seems to beat the RTA record by like a second or so.
DJ Incendration Believe in Michael Girard and every speedrunner and TASer!
Skilled player (1082)
Joined: 8/7/2021
Posts: 92
Location: Southern England
src ends on the 'Bravo' screen which takes 56 frames from the final input to appear and that doesn't include the 12 frames between booting up the game and pressing start, initiating the black screen, which the rta run starts from. By rta standards this is a 3.233 too
Skilled player (1082)
Joined: 8/7/2021
Posts: 92
Location: Southern England
huh this isn't necessarily related to the submission nor does it help speed-wise but I kinda found a way to play as an enemy correction: enemies lmao correction 2: and the chest correction 3: and a projectile
LoganTheTASer
He/They
Banned User, Experienced player (754)
Joined: 7/3/2022
Posts: 458
Location: Berkshire, UK
Samsara
She/They
Senior Judge, Site Admin, Expert player (2121)
Joined: 11/13/2006
Posts: 2793
Location: Northern California
I'm not quite sure this is a GEG. GEG tends to be quite literal in its name: The run uses a glitch that ends the game, calling it in an unnatural way compared to how the game intended players to reach it. This run still triggers the ending in the intended way by collecting the diamond, it just cuts out a couple dozen seconds of walking. This qualifies more as a major skip to me, and given the published run already uses OoB movement to skip screens, that puts both runs in an interesting spot where they're closer to competing with each other in the major skip branch than being considered separate. Classic case of "I could watch the TAS thousands of times over in the time it takes to figure out what to do with it".
TASvideos Admin and acting Senior Judge 💙 | Cohost
warmCabin wrote:
You shouldn't need a degree in computer science to get into this hobby.
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
The difference I was able to formulate is that the published run uses screen-warp to get to the other side of the screen, which makes the character appear in the next room, because the previous room's exit has been hit by screen-warping. But it doesn't have teleportation across different rooms like in this movie. I'll check what's happening in the code here...
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
It's a warp. It's a part of the level layout, and only appears in the first room, as a block with ID of 4. The game explicitly checks if you're touching it, and if you do, it sends you directly to the last room.
Language: asm6502

collision: A:04 X:00 Y:00 S:F9 P:nvUbdIzc $1F:E5AF: 48 PHA A:04 X:00 Y:00 S:F8 P:nvUbdIzc $1F:E5B0: A5 D6 LDA $D6 = #$1C A:1C X:00 Y:00 S:F8 P:nvUbdIzc $1F:E5B2: 85 D7 STA $D7 = #$1C A:1C X:00 Y:00 S:F8 P:nvUbdIzc $1F:E5B4: A0 14 LDY #$14 A:1C X:00 Y:14 S:F8 P:nvUbdIzc $1F:E5B6: 20 19 C6 JSR $C619 A:1C X:00 Y:14 S:F6 P:nvUbdIzc $1F:C619: 84 D6 STY $D6 = #$1C A:1C X:00 Y:14 S:F6 P:nvUbdIzc $1F:C61B: A5 D6 LDA $D6 = #$14 A:14 X:00 Y:14 S:F6 P:nvUbdIzc $1F:C61D: 29 1F AND #$1F A:14 X:00 Y:14 S:F6 P:nvUbdIzc $1F:C61F: 05 DE ORA $DE = #$00 A:14 X:00 Y:14 S:F6 P:nvUbdIzc $1F:C621: 8D 00 C0 STA $C000 = #$78 A:14 X:00 Y:14 S:F6 P:nvUbdIzc $1F:C624: 60 RTS (from $C619) ---------------------------- A:14 X:00 Y:14 S:F8 P:nvUbdIzc $1F:E5B9: 8A TXA A:00 X:00 Y:14 S:F8 P:nvUbdIZc $1F:E5BA: 8D 8F 06 STA $068F = #$00 A:00 X:00 Y:14 S:F8 P:nvUbdIZc $1F:E5BD: 68 PLA A:04 X:00 Y:14 S:F9 P:nvUbdIzc $1F:E5BE: A8 TAY A:04 X:00 Y:04 S:F9 P:nvUbdIzc $1F:E5BF: B9 64 82 LDA $8264 colPtrTableHigh,Y @ $8268 = #$D0 A:D0 X:00 Y:04 S:F9 P:NvUbdIzc $1F:E5C2: 85 4A STA $4A collision routine = #$B0 A:D0 X:00 Y:04 S:F9 P:NvUbdIzc $1F:E5C4: B9 74 82 LDA $8274 colPtrTableLow,Y @ $8278 = #$81 A:81 X:00 Y:04 S:F9 P:NvUbdIzc $1F:E5C7: 85 4B STA $4B = #$8B A:81 X:00 Y:04 S:F9 P:NvUbdIzc $1F:E5C9: 20 CF E5 JSR $E5CF Breakpoint 2 Hit at $E5CF: $E5CF:EC--X- Condition:K==#1F A:81 X:00 Y:04 S:F7 P:NvUbdIzc $1F:E5CF: 6C 4A 00 JMP ($004A collision routine) = $81D0 warp warp: A:81 X:00 Y:04 S:F7 P:NvUbdIzc $14:81D0: E4 6A CPX $6A = #$00 A:81 X:00 Y:04 S:F7 P:nvUbdIZC $14:81D2: D0 2C BNE $8200 rts A:81 X:00 Y:04 S:F7 P:nvUbdIZC $14:81D4: A9 C0 LDA #$C0 A:C0 X:00 Y:04 S:F7 P:NvUbdIzC $14:81D6: 09 01 ORA #$01 A:C1 X:00 Y:04 S:F7 P:NvUbdIzC $14:81D8: 09 40 ORA #$40 A:C1 X:00 Y:04 S:F7 P:NvUbdIzC $14:81DA: 8D 07 06 STA $0607 = #$00 A:C1 X:00 Y:04 S:F7 P:NvUbdIzC $14:81DD: A9 01 LDA #$01 A:01 X:00 Y:04 S:F7 P:nvUbdIzC $14:81DF: 8D 08 06 STA $0608 = #$01 A:01 X:00 Y:04 S:F7 P:nvUbdIzC $14:81E2: AD 95 06 LDA $0695 warp? = #$25 A:25 X:00 Y:04 S:F7 P:nvUbdIzC $14:81E5: 8D B9 06 STA $06B9 room1 = #$32 A:25 X:00 Y:04 S:F7 P:nvUbdIzC $14:81E8: 8D BA 06 STA $06BA room2 = #$32
Download KuboBG.lua
Language: lua

while true do -- local x = memory.readbyte(0x0420) -- local y = memory.readbyte(0x0440) -- gui.text(x,y,"O") local base = 0x0320 for x=0,15 do for y=0,12 do local typ = memory.readbyte(base+y*16+x) if typ ~= 0 then local color if typ == 1 then color = 0xffffffff end -- wall if typ == 3 then color = 0xffff00ff end -- end trigger if typ == 4 then color = 0xffff0000 end -- warp if typ == 5 then color = 0xffff8800 end -- chest gui.drawBox(x*16,y*16+24,x*16+15,y*16+24+15,color) gui.pixelText(x*16+2,y*16+24+2,typ,color) end end end emu.frameadvance() end
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Skilled player (1082)
Joined: 8/7/2021
Posts: 92
Location: Southern England
That does just make it look even more like it was intentionally placed there and it wasn't just mistakenly turned into a warp block that coincidentally warped Kubo to the gem room, unfortunately, and I'm becoming more certain it is just a debug feature after all (and an odd one at that). I don't know, I'll see what others have to say.
Judge, Skilled player (1288)
Joined: 9/12/2016
Posts: 1645
Location: Italy
More like an easter egg. I guess we just have to change the label to "warps" and give to the published movie "warpless".
my personal page - my YouTube channel - my GitHub - my Discord: thunderaxe31 <Masterjun> if you look at the "NES" in a weird angle, it actually clearly says "GBA"
Player (50)
Joined: 4/1/2016
Posts: 285
Location: Cornelia Castle
Honestly, I'd just leave this as any%.
DJ Incendration Believe in Michael Girard and every speedrunner and TASer!
Samsara
She/They
Senior Judge, Site Admin, Expert player (2121)
Joined: 11/13/2006
Posts: 2793
Location: Northern California
ThunderAxe31 wrote:
I guess we just have to change the label to "warps" and give to the published movie "warpless".
Looking back at the published run and re-understanding what it does, this option makes sense. This is a clear warp, and the published run's screen transitions are all "in order" despite some of them being triggered from the opposite side of the screen.
TASvideos Admin and acting Senior Judge 💙 | Cohost
warmCabin wrote:
You shouldn't need a degree in computer science to get into this hobby.
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 14875
Location: 127.0.0.1
This movie has been published. The posts before this message apply to the submission, and posts after this message apply to the published movie. ---- [5001] NES KUBO "warps" by Cephla in 00:02.50