Player (36)
Joined: 9/11/2004
Posts: 2623
Update: Killed Duma. T = 47:55 I skipped the Force Sword, it's only +20 to the Magic Sword, and the power ring is +30 by itself. I probably could've finished Duma 200 frames faster with it, but it's over 1,000 frames off path, plus the 150 or so it takes to equip it. EDIT: Same URL, Different File
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Editor, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
OmnipotentEntity wrote:
File Here
I don't know this game, but it looks ok so far.
Player (36)
Joined: 9/11/2004
Posts: 2623
Through the next two bosses, Thimale and Ella. T = 53:56 I'm pretty confident that I have this part close to optimized. It's short and the boss fights went quickly. You know the file.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Editor, Reviewer, Experienced player (969)
Joined: 4/17/2004
Posts: 3107
Location: Sweden
This game is... slow. I was glued to the frameskip button for the whole video and I still didn't really miss anything from what I can tell. Walking trough straight corridors, waiting for sluggish npcs, beating all the bosses in the same way, get new item...
Former player
Joined: 4/16/2004
Posts: 1276
Location: Uppsala, Sweden
Even though it's slow it's hard! It took me a long time to get through this game, mostly because of the huge labyrinths but I remember some bosses to be really hard aswell. I really hope you finish this one because I would love to see it beaten this way ;)
/Walker Boh
Player (36)
Joined: 9/11/2004
Posts: 2623
Finished and submitted.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Joined: 11/28/2004
Posts: 138
Nicely done OmnipotentEntity:)
The best time you have is the time you share with other people.
Player (36)
Joined: 9/11/2004
Posts: 2623
I'm going to begin working on a second version in a few days. And I was wondering if there was an easy way to make maps for this? Other than the obvious use-a-shitton-of-screenshots method.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Joined: 11/28/2004
Posts: 138
Maps over every dungeon can be found here http://www.gamefaqs.com/console/snes/game/9101.html
The best time you have is the time you share with other people.
Player (36)
Joined: 9/11/2004
Posts: 2623
I used those last run. They are inaccurate in places, and just plain wrong in others. No disrespect to the person who made them, I would never have the motivation to do them all hand drawing. But I can't use them to plan another speedrun. They make me sad.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Player (36)
Joined: 9/11/2004
Posts: 2623
So, my run is showing its age, and it wasn't all that amazing to begin with. So I've begun doing some research on the internals of this game to figure out how much attack is needed for which bosses and how many swings are saved if X. If Nasir Attack < floor(Enemy Def/2) Damage = 2 Else Damage = floor((Nasir Attack - floor(Enemy Def/2))/2.5) There may be a few other factors, but that seems about right. 0490 - HP regen counter Resets >8->0 while outdoors Resets >1->0 while indoors 0491 - MP regen counter Resets >17->0 while outdoors Resets >3->0 while indoors 0540 - beginning of NPC Table. Nasir's starts at 500, uses mostly the same setup. 0540 - a bitfield of some sort. 0 = invisible (dead?) 1 = unknown 2 = unknown 4 = unknown 8 = Enabled (can hurt, can move around) 10 = unknown 20 = unknown 40 = Visible (cannot hurt or move if not visible) (is unset when monster dies.) 80 = Visible (cannot hurt or move if not visible) Both 40 and 80 need to be enabled. Odd. 0541 - more bitfield 0542 - lower bit for X coordinate 0543 - upper bit for X coordinate 0544 - lower bit for Y coordinate 0545 - upper bit for Y coordinate 0546-054B - ??? seems to have something to do with the direction the enemy is facing. 054C-054F - enemy position relative to the camera, unless both 4D and 4F are 0 the baddie's center is off screen. 0550-0551 - animation loop. 0552 - push back counter/invincibility counter (counts up to 6) 0553 - when he hits you it's 1, when you push him it's 2, 0554-0557 - ????? (enemy specific actions Samson's jump sets this?) 0558 - Enemy type 0559 - direction enemy is facing. (pointer to monster table entry.) 0560 - enemy HP location 0562 - MP (Nasir only) 0564 - enemy attack 0566 - enemy defense 0568 - Gold bonus 056A - Exp bonus 056C - Enemy flag (turns to 1 when Samson's helmet comes off. etc. Nasir's current level) 0570-0573 - Enemy starting position 0580 - beginning of 2nd NPC entry. 0D04 - Following person's coordinates relative to the screen. (Works on Thor, and the Gimp Kid you have to rescue at the beginning of the Game.) Bosses Samson 96 HP, 65 Def - Target Attack <32 or >37 - 96/2 = 48 swings = 576 frames - 96/3 = 32 swings = 384 frames (required level 6) (required exp: 590) Natela 100 HP, 98 def Eardon 150 HP, 266 def Doma 240 HP, 210 def Thimale 256 HP, 226 def Thimale Wards 40 HP, 226 def Ella 256 HP, 482 def (?!) Battler 256 HP, 558 def (?!!) Boss rush Evil Spirit (Shell) 1280 HP (?!!!), 270 Def Evil Spirit (Green) 256 HP, 454 Def Zerah 500 HP, 384 Def Thor (1st form) 256 HP, 214 Def Thor (2nd form) 256 HP, 550 Def Evil Spirit (Red) 256 HP, 560 Def
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Player (36)
Joined: 9/11/2004
Posts: 2623
Interesting Programming Oversight in the Damage Calculation formula that the game uses, If your Attack is 1 or 2 greater than half of the enemy's Defense you do no damage per attack, and if it's 3 or 4 greater you do only 1. http://dehacked.2y.net/microstorage.php/info/75297050/LagoonDamageBug.smv In this video you can see Zerah's HP in memory location 7E05A0 stay exactly the same. My Attack 194, his defense 384.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Player (215)
Joined: 2/12/2006
Posts: 373
Location: Oregon
How long did it take you to figure out something so obscure?! I'm always amazed when people notice stuff like that. I'm not sure I'd want to be a game tester :).
Player (36)
Joined: 9/11/2004
Posts: 2623
I made a spreadsheet. :) Also there seems to be a random element in the damage that doesn't show up until the damage done gets to a certain amount. It seems to be about Damage + rand(0,floor(log(Damage)) Where rand(a,b) generates a random integer number between a and b.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Ambassador, Experienced player (697)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Very interesting. Did you look at the assembly code that calculates damage or just run lots of tests and put the data in a spreadsheet? You could probably figure out all the oddities if you look at the code. I highly recommend using lua to draw hitboxes. It will take some work but should be extremely valuable in this type of game.
Player (36)
Joined: 9/11/2004
Posts: 2623
If anyone can help me find the memory addresses for the hitboxes I will write the the Lua script. :D
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Player (36)
Joined: 9/11/2004
Posts: 2623
I've located the hitboxes in the ROM but I haven't been able to find them in memory, Moreover, I don't have a good way of pulling them directly from the ROM because I haven't found a way to programmatically determine which hitbox to use. Grey Monster hit box origin X (implicit negative): ROM $F8B1 Grey Monster hit box origin Y (implicit negative): ROM $F8B3 Grey Monster hit box positive X (2-bit): ROM $F8B5 (value 34) Grey Monster hit box positive y (2-bit): ROM $F8B7 (value 20) The grey monster in the first dungeon seems to be the first monster, the next is the blue slime. Any assistance would be appreciated. :X
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Player (215)
Joined: 2/12/2006
Posts: 373
Location: Oregon
Maybe I'm misunderstanding, but could you use Geiger's SNES9x Debugger and set watches to see when those values are loaded and where they eventually end up in memory?
Joined: 11/28/2004
Posts: 138
Don't know if you still need it, but I came across some maps for Lagoon. http://secretplace.freehostia.com/maps.php
The best time you have is the time you share with other people.
Player (36)
Joined: 9/11/2004
Posts: 2623
Seen those. :) Actually, that's what I made maps with in the first place. Status. Writing LUA script. @zidanax: As far as I can tell, because the hit boxes don't seem to be very variable, they aren't put into anything except temporary memory.
$01/A3B8 DA          PHX                     A:0000 X:0000 Y:0680 P:envMxdIZc
$01/A3B9 B9 1B 05    LDA $051B,y[$01:0B9B]   A:0000 X:0000 Y:0680 P:envMxdIZc
$01/A3BC C2 20       REP #$20                A:0000 X:0000 Y:0680 P:envMxdIZc
$01/A3BE 0A          ASL A                   A:0000 X:0000 Y:0680 P:envmxdIZc
$01/A3BF 0A          ASL A                   A:0000 X:0000 Y:0680 P:envmxdIZc
$01/A3C0 0A          ASL A                   A:0000 X:0000 Y:0680 P:envmxdIZc
$01/A3C1 AA          TAX                     A:0000 X:0000 Y:0680 P:envmxdIZc
$01/A3C2 BD B1 F6    LDA $F6B1,x[$01:F6B1]   A:0000 X:0000 Y:0680 P:envmxdIZc
$01/A3C5 85 40       STA $40    [$00:0040]   A:0000 X:0000 Y:0680 P:envmxdIZc
$01/A3C7 BD B3 F6    LDA $F6B3,x[$01:F6B3]   A:0000 X:0000 Y:0680 P:envmxdIZc
$01/A3CA 85 42       STA $42    [$00:0042]   A:0000 X:0000 Y:0680 P:envmxdIZc
$01/A3CC BD B5 F6    LDA $F6B5,x[$01:F6B5]   A:0000 X:0000 Y:0680 P:envmxdIZc
$01/A3CF 85 44       STA $44    [$00:0044]   A:0000 X:0000 Y:0680 P:envmxdIZc
$01/A3D1 BD B7 F6    LDA $F6B7,x[$01:F6B7]   A:0000 X:0000 Y:0680 P:envmxdIZc
$01/A3D4 85 46       STA $46    [$00:0046]   A:0000 X:0000 Y:0680 P:envmxdIZc
$01/A3D6 29 FF 00    AND #$00FF              A:0000 X:0000 Y:0680 P:envmxdIZc
$01/A3D9 E2 20       SEP #$20                A:0000 X:0000 Y:0680 P:envmxdIZc
$01/A3DB FA          PLX                     A:0000 X:0000 Y:0680 P:envMxdIZc
$01/A3DC 4C 93 A4    JMP $A493  [$01:A493]   A:0000 X:0000 Y:0680 P:envMxdIZc
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Ambassador, Experienced player (697)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Although the hitboxes themselves are only in temporary memory, at some point they must be derived from more persistent data. Figure out how the hitboxes are generated from this data. Then put that logic in your script. For Crystalis, I look at enemy location and type data in RAM and then pull the hitbox offsets from the ROM. This gives me the info I need to generate hitboxes. It's probably similar for other games.
Joined: 3/3/2010
Posts: 87
I already posted this in the topic for the currently published movie, but it was suggested that I post it here as well. The currently published movie shows the character going to Poper before entering Siegfried Castle. Having played through the game several times myself, I know it's not necessary to enter the town before going to the castle for the Mint. By going to the castle first, you can save at least 1:10 off the current route. Also, here's a little showing-off trick that I've done before. It's not a time saver by any stretch of the imagination, but it is pretty cool to do. In the basement of Siegfried Castle, it is possible to get all the mouse-armored soldiers onto the screen at once. It is a time consuming task, but after the first 8-10 creatures the game will start to glitch visually, with the system lagging and parts of the creatures (or Nasir himself) getting skipped in the drawing process. Eventually, nearly all of the creatures/Nasir will start to disappear altogether, about the time you get back to where you started. At that point, you can either fire off a pair of Wind Tornadoes or (if you've beaten Duma already) a couple Water Rushes to clear them out again. Hope the first part helps any future runs.
Player (36)
Joined: 9/11/2004
Posts: 2623
A little bit of an update, I've been crunching numbers, but because of generally apathy, I haven't actually hunkered down and wrote a working lua script. Some interesting things from testing. Being hit pushes you 6 frames worth pixels faster than regular walking. There's three ways to gain back health: a) Every screen transition you're assumed to be resting for one frame, which means if the value of 7E0490 and 491 are in the correct range, you gain 1 HP and/or 1MP. b) Waste two frames stuttering every 18 frames. You gain 1 HP AND 1 MP per 2 frames c) Allow the boss to refill your health after battle, wastes two frames per HP and two frames per MP. So damage is only worth it if (Damage) - (Screen Transitions) < 3 MP usage is only beneficial if it saves you at least 2 frames per MP, OR you need to regain HP anyway because you took damage to save time. On which level and final equipment should be selected: The Moon Blade @ level 21: 10964 frames estimated The Moon Blade @ level 22: 10640 frames estimated The Moon Blade @ level 23: 10544 frames estimated The Moon Blade @ level 24: 10472 frames estimated The Force Blade @ level 21: 12284 frames estimated The Force Blade @ level 22: 11576 frames estimated The Force Blade @ level 23: 10976 frames estimated The Force Blade @ level 24: 10796 frames estimated The Magic Blade @ level 21: 13424 frames estimated The Magic Blade @ level 22: 12488 frames estimated The Magic Blade @ level 23: 12296 frames estimated The Magic Blade @ level 24: #DIV/0! (Green Evil Spirit is not defeatable because of damage bug) Moon blade is 5443 frames off path, so we can immediately see that it's not worth it. It doesn't start becoming worth it until nearly level 27 (at level 25, it's impossible to beat Thor's second form. At level 26 Nasir does 3 HP damage instead of 2.) For reference, I finished the last run at nearly level 21. Force Sword is also off path, but far less, only about 1000 frames estimated, I haven't yet made tests. If I take it, I'll skip the Magic Sword, because the only boss affected is Eardon, and I am already under the attack limit for his very high defense. It will also make Duma and Thimale faster, depending on my level. Ella and Battler have such high defense that it won't matter which sword I take. So the Force Sword seems like a slam dunk for this one. Kinda funny how the only optional sword I didn't get last run becomes the only optional sword I DO get this run. :P EDIT: I might wind up having to grab the Magic Sword as well specifically for Duma, rather than grabbing the Force Sword before Duma and backtracking. But the backtracking is only one hallway's worth, which is probably less than (Chest Time) + (Equip Time) + (Duma killed with Magic Sword) - (Duma killed with Force Sword) I'm also skipping the Power Ring this run. Because of the amount of MP drain it's never worth it.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Player (36)
Joined: 9/11/2004
Posts: 2623
http://dehacked.2y.net/microstorage.php/info/511348197/lagoon-tasv2-omnipotententity-1.43-2.smv First WIP, 165 frames saved in little over 4 minutes. 65 from better play before the cave. 100 from lag reduction because I kill more enemies. Will probably redo, needs less lag, more damage boost, possibly can kill an additional skeleton.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Joined: 3/3/2010
Posts: 87
Just got around to watching the WIP, looking good so far. I see you left out the Shiny Stone this time. ;) One thing I always wondered, how much faster is it to buy the Healing Pot rather than grabbing one of the two in the cave? I know it saves the time required for the Item Fanfare, but how much time does the path itself save? I do remember that the first floor pot is well out of the way, but what about the second floor pot?