टिप्पणियां
Shauing1 year ago

All good Akuma; now that I have a better recording equipment, I should do a better run. Then again, it's been so long since I've done runs...Also, need to put in use that autosplitter for 100% to do a better run there...

Shauing1 year ago

Ah, thank you for letting me know. Right now the Discord is called ''Nesdraug's Crypt of Games & Romhacking'', but it has a channel for this Pepperland hack. I'll update the link with a 30 day time limit expire date because the server is not a community one, otherwise we could put permanent links. https://discord.gg/GAFKQRv9k

Shauing1 year ago

Congrats on sub-15!

Shauing1 year ago

Congrats on your first ever speedrun! Hope there's lots of improvements along the way!

Shauing1 year ago

Congrats on the first sub-30!

cheekychunk इसे पसंद करता है
Shauing2 years ago

David came up with something for the guards. He points out a caveat: A guard may die in a room different from where he starts the level. This can be a problem if you need to know which guards died. If you only need the number of guards who died on a level, then you can increase a counter every time a guard dies, then check its value when the level ends.

He also originally found an issue with the skeleton on Level 3 as ''Guard_alive stays -1 even when the skeleton is crushed'', but did manage to find a fix for that and that's what's posted here.

Now it's just a matter I believe for someone like GMP to use the previous post of mine and this one to put all this into the autosplitter for snes9x-1.60-win32-x64.

Here's what David found:

state("snes9x-x64") { sbyte Guard_alive : "snes9x-x64.exe", 0x008D8C38, 0x0486; // 7E:0486 byte Guard_room : "snes9x-x64.exe", 0x008D8C38, 0x0482; // 7E:0482 byte Guard_direction : "snes9x-x64.exe", 0x008D8C38, 0x047A; // 7E:047A byte Guard_hp : "snes9x-x64.exe", 0x008D8C38, 0x050B; // 7E:050B byte Guard_frame : "snes9x-x64.exe", 0x008D8C38, 0x0477; // 7E:0477 }

update { //print("Guard_direction = " + current.Guard_direction); // 0x00=right, 0x80=left, 0x7F=no guard if (current.Guard_direction != 0x7F) // if there is an active guard { //print("Guard_alive = " + current.Guard_alive); // -1 (0xFF) if alive, 0 if dead //print("Guard_room = " + current.Guard_room); //print("Guard_hp = " + current.Guard_hp); //print("Guard_frame = " + current.Guard_frame); // 184 = crushed if ((current.Guard_alive == 0 || current.Guard_frame == 184) && (old.Guard_alive == -1 && old.Guard_frame != 184)) { print("A guard died in room " + current.Guard_room + " of level " + (current.CurrentLevel+1)); } } }

VelCheran इसे पसंद करता है
Shauing2 years ago

I asked David at the princed forum if inside the code there was something that would kept track of the potions and guards. And this is what he had to say:

''These are kept track only for the current level, so a potion you've already drunk won't reappear and such. They are reset when you restart the level.

The level objects (including potions) are stored starting from RAM address 7F:E170, on 24*30 bytes (one byte for each tile of each room). When the player drinks a potion, the corresponding byte changes to zero.

For example, consider the first potion on level 1, under the green guard. It's in room 8, at tile 27 (row 2, column 7), so its RAM address is 0x7FE170 + 8*30+27 == 0x7FE27B. (This calculation assumes that rooms, rows, and columns are all counted from 0, as in Pr1SnesLevEd.) When that byte changes to 0 (from 0x12), you know the player picked up this potion.

In an AutoSplit file, that offset translates into this:

byte Potion_1_8_27 : "snes9x-x64.exe", 0x008D8C38, 0x1E27B; // 7F:E27B

(Assuming you are using snes9x-1.60-win32-x64.)

The final offset is calculated as: 0x7FE27B - 0x7E0000 = 0x1E27B.

Now of course you need to check if the current level is level 1 before checking any potions on level 1.

Here is the AutoSplit offset for the current level:

byte CurrentLevel  : "snes9x-x64.exe", 0x008D8C38, 0x0579; // 7E:0579

He will try to find something related to the guards.

uvq3tsa और VelCheran इसे पसंद करें
Shauing2 years ago

Yes, kill potion respawns if you die (just like every other potion), so if we go by that logic, we should skip it. That being said, if the objective includes to drink every single potion at least once, then probably this one should be included as well.

I really think there's no solution for a deathless Level 11 besides that gate glitch Akuma suggests, but that is considered a major glitch. I tried to route a complete Level 11 solution, but the closest one is this one where all guards are killed and all but that heal potion can be taken. https://cdn.discordapp.com/attachments/933055235071549441/1040537914955812864/SNESPoP-Level11-100-AlmostCompleteOneLifeRoute.png

Shauing2 years ago

I do agree on that GMP; even on the run I did and submitted here almost a week ago (which I'm bumping again here so the category is created), I retook everything whenever I died unintentionally. The only issue this 100% has is that two deaths will have to be intentional; the first of them because we cannot grab one of the heal potions without redoing the level, and the second one because it's a kill potion (this one is after the checkpoint and one cannot go back).

Shauing2 years ago

Sadly no, the game doesn't keep track anywhere of the stuff you grab except for the life potions after each level (and checkpoints too, though each level that has checkpoint makes sure you cannot go back, probably to prevent grabbing infinite life potions). Unless we make a sort of external image checklist, we might have to abide by getting them without dying (except for levels 11 and 18).

Shauing2 years ago

I was considering that possibility given that we have to allow at least two intentional deaths for the 100% to be possible. I was under assumption that PoP1 DOS had this rule of retaking everything if a death happen but it seems that it's not there. It would certainly make it easier and have more possible runs submitted, and maybe some strats can be developed by dying/using game end. I'll leave it to the moderators to decide this, but I'm fine either way.

Shauing2 years ago

Well, after a sort of first full test run, here's my first submission so the 100% category is created. Everywhere I unintenionally died, I re-grabbed every potion and re-killed every guard. The only intentional deaths were on Level 11 (after killing the second red guard) and the Kill Potion on Level 18. With no unintentional deaths and less sloppiness, sub-1 hour is doable, but barely (at least within my skills). I'll keep improving it until I get a 'no unintentional deaths' run and see how close I can get there.

Skinomarsh, GMP, और uvq3tsa इसे पसंद करें
Shauing2 years ago

Well, I have been routing both categories to soon submit runs for them, and while All Life Potions has pretty much no issues in completing it, the 100% on the other hand has a couple of levels that makes a deathless 100% impossible.

The levels in question are 11 and 18. I explained and proposed a solution for 18 in a previous post here, so I'll focus on the only other level that also has a similar issue.

Level 11 has a heal potion that can only be accessed and grabbed from the top side, and if taken, it makes at least two red guards and another heal potion impossible to grab as the gates to access them are closed.

Here I enclosed the problematic heal potion: https://cdn.discordapp.com/attachments/933055235071549441/1032117386117140510/SNESPoP-Level11-100DeathlessImpossible.png

My proposed solution is a similar one to Level 18's Kill Potion, in that we drink that potion once, get killed, and kill/take the remaining guards/potions.

Perhaps for this category, we could allow that as long you have killed/defeated every guard and have taken every potion once, it counts.

Shauing2 years ago

Oh true, I was counting that extra one by mistake, but you technically get it when merging with the shadow. But yeah, 20 All Life Potions should be a category; and an extra sub-category where we allow kill button for 21.

And 100%, will have to be to kill all the guards (knock the immortals once at least) and drink every single potion in the game (Life, upside-down, healing, poison, warp and kill potion - once at least for this last one so that it counts). We could also have a sub-category with kill button so it allows killing those immortal skeletons.

All in all, we might have to do two separate categories like the DOS version, one with major glitches/kill button allowed and another with No Major Glitches (NMG).

Deathless might be an optional one, because optimally, in the NMG one you wouldn't want to die anyway.

Shauing2 years ago

I might consider to take it back if there's more new strats/tricks to implement (no warps of course, that's a different category); there were a few guard jumps and tricks from that 33:31 TAS that I had to do differently because the timing was quite tight (not frame perfect I believe, but still really tough).

Shauing2 years ago

For a few months now I have been tinkering on the possibility of maybe having these two categories on the leaderboards.

The All 21 Big Life Potions seems like a good enough category to try, given that in the optimal Any% run, you might not even grab a single potion, so going out of your way to take them all will certainly add a different spin and routing speedrun-wise.

100% category, I feel would be very interesting and challenging to try, because, in my mind (and based on the existing 100% PoP1 DOS category), 100% would be to kill all the guards, defeat at least once the ones that are immortal and cannot be knocked off-screen/killed by a trap and drink all the potions in the game (including the warp and kill one, the latter only needed to be drank once). It's quite a lengthy challenge, but one that I think might be fun and worthy to do runs.

There is some interest by at least a few runners for both categories, so maybe we could consider add those categories to the leaderboard after completing a run for each.

VelCheran इसे पसंद करता है
Shauing2 years ago

When I got the WR in March of this year, I had watched the 33:31 TAS and the current 3rd-5th place runs to take what I could from them, but I couldn't do them all, so I developed some slower but safer strats for some guard skips/shortcuts. So maybe this runner didn't know how to do certain strats or failed them during the run and went for others/improvise on the fly. That happened to me in Level 19, I failed one of the jumps because of the nerves of being in WR pace. I should also point out that this runner is also playing in the japanese version of the game, where the jingle skip is not optimal as there's no Konami jingle, and the shortest jingle available is a bit far away. It is still optimal for level 19 skip tho. I agree with GMP that any info of this port, speedrun or not (like development for this port), it's hard to come across even by searching. I didn't know about the speedrun community until last year and I was doing mods for this SNES game for almost three years.

VelCheran इसे पसंद करता है
Shauing2 years ago

Recently I did an All Bosses Classic run for FDS Metroid in which I got 29:28.934, which is a bit faster than the cyberpod3's run of 29:29. But I observed that in cyberpod's run, it's running the Nintendo GameCube Japanese port of the game, where the loading times are much more shorter.

I did comparisons between it and the NESTopia UE 1.51 emulation where I run the game with, and discovered that in each of the seven areas where there's loading times (Entering Norfair, Entering Ridley's Area, Exiting Ridley's Area, Exiting Norfair, Entering Kraid, Exiting Kraid and Entering Tourian), from the first frame Samus disappears on the elevator to the first frame the next area is drawn, The NGC Japanese version takes between 2.817 and 3.000 seconds (with most areas clocking at 2.817 seconds), while on the emulator it takes between a whopping 23.941-24.191 seconds (with 24.066 being the most consistent clocking between areas).

By the end of the game, going with the most common clocking, the total time of loading adds up to around 19.719 seconds for NGC and 168.462 seconds for NESTopia (2 minutes 48.162 seconds).

Because of the big discrepancy of loading times between versions, I would suggest for future runs to maybe utilize the time NGC takes to load between areas, so that the timer between the different versions is as small as possible.

cyberpod3 इसे पसंद करता है
Shauing के बारे में
सामिल हुए
3 years ago
ऑनलाइन
1 day ago
दौड़
135
चलाए गए गेम्स
Metroid (NES)
Metroid (NES)
अंतिम रन 9 months ago
29
दौड़
Clock Tower (SNES)
Clock Tower (SNES)
अंतिम रन 4 months ago
22
दौड़
Prince of Persia
Prince of Persia
अंतिम रन 1 year ago
15
दौड़
Metroid Category Extensions (NES)
Metroid Category Extensions (NES)
अंतिम रन 9 months ago
14
दौड़
Super Mario Bros. 2
Super Mario Bros. 2
अंतिम रन 1 year ago
7
दौड़
Batman: The Video Game (NES)
Batman: The Video Game (NES)
अंतिम रन 1 year ago
7
दौड़
Prince of Persia (SNES)
Prince of Persia (SNES)
अंतिम रन 7 months ago
7
दौड़
Junkoid
Junkoid
अंतिम रन 10 months ago
7
दौड़
फ़ॉलो किए गए गेम्स
BULB!
BULB!
अंतिम यात्रा 10 months ago
4
यात्राएँ
Clock Tower Rewind
Clock Tower Rewind
अंतिम यात्रा 1 day ago
7
यात्राएँ
Prince of Persia
Prince of Persia
अंतिम यात्रा 1 month ago
309
यात्राएँ
The Beatles Adventures in Pepperland
The Beatles Adventures in Pepperland
अंतिम यात्रा 1 month ago
324
यात्राएँ
मॉडरेटेड गेम्स
The Beatles Adventures in Pepperland
The Beatles Adventures in Pepperland
अंतिम क्रिया 1 year ago
46
क्रियाएँ
Junkoid
Junkoid
अंतिम क्रिया 10 months ago
7
क्रियाएँ