Posts for TaoTao

1 2 3 4 5 6 7
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
I updated the bot script. With the bot, I found a solution for 1-9. For now, I have found hole-in-one solutions for all holes except for 4-2. For 4-2, I think there is not likely a solution, but just in case, I will try attacking it with the bot.
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
For 1-9, I still can not achieve hole-in-one, but I could reproduce the wallzipping trick. I put the movie: http://dehacked.2y.net/microstorage.php/info/1678356289/1-9.fm2
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
Weather ($0545) seems to affect the friction. The friction parameter is probably $83-$86. I think we have no reason to choose weathers other than "fine". Probably it is possible to manipulate weather by adjusting timing to proceed to next hole. Except for weather, the parameters determining ball movement are: * Power ($054E) * Point of contact ($054D) * Cursor ($9B-$9C, $9D-$9E)
Post subject: Mini Putt
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
I am interested in this game, and sometimes I research it. Previously a movie was submitted, but it was rejected: http://tasvideos.org/5083S.html This movie plays only "traditional" course, and it gives up hole-in-one for 1-5, 1-9. As far as I know, it is still not known whether you can achieve hole-in-one for every holes. So, I will share my knowledge as possible. I wrote a quick-and-dirty bot to find solutions: http://pastebin.com/5XRDLFvB (This contains Japanese comments. sorry) For 1-5, I found a solution: http://dehacked.2y.net/microstorage.php/info/1866639337/1-5.fm2 For 1-9, if I remember correctly, you can zip through the wall by hitting the ball to the space between the wall and the gate. I still can not reproduce it, but I will try it using lua bot. I found a post about lua scripting in this game, so I put it for reference. http://tasvideos.org/forum/viewtopic.php?p=318541#318541 It seems that you can hit the ball faster when you hit the edge of the ball.
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
I tried to tas this game long ago, and I gave up because I could not achieve hole in one in 1-5 and 1-9. Anyway, I'm glad other people is trying tasing this game. In 1-5, I could reach very near the hole, but I could not achieve hole in one. And in 1-9, if I remember correctly, I could zip through the wall by hitting the ball to the space between the wall and the gate in a casual play. But I still can't reproduce it. This movie plays only "traditional" course? I want to see all courses.
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
feos wrote:
Since there's no stable to reproduce it, we can't tell what needs to be fixed in the code, but you can fix the file by disabling Adjust input according to lag (and enabling it back when you advance there). Somehow lag flag is broken for that last frame, and it crashes on vector manipulation, but not during input adjustment - it happens while doing the hotchanges stuff. Again, I can't know what exactly is wrong without reproducing it. Maybe you saved the bookmark while it was unpaused or something. Or it was trying to adjust nothing, as it was the last frame of the movie.
Thank you! I loaded the .fm3 and temporarily disabled "Auto-adjust Input according to lag" option, then FCEUX didn't crash. I saved the .fm3 and it seems to work well. TAS Editor saves me from a lot of routine. It's cool :)
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
On FCEUX interim build 3028 on Windows 7 x64, TAS Editor crashed and it crashes every time I reload the .fm3 which remained when it crashed first time. I don't remember exactly what I did when the crash happened, but I overwritten an existing bookmark just before the crash. I put the .fm3 causing the crash. The game is "Heisei Tensai Bakabon (J)" (md5 of headerless ROM: b1b94bbfddea3e2a40834919183c302d) http://www.mediafire.com/download/nd1f1nw60pobwf0/Bakabon-testrun.zip When I load the .fm3 and do a frame-advance, FCEUX crashes. "Save Compact" and "Export to FM2" work, so I tried saving a compact .fm3 including input/markers/bookmarks and reloading the compact .fm3, but FCEUX crashes again when I do a frame-advance. "Export to FM2" seems to export a valid .fm2.
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
FYI: I made a testrun long time ago. movie: http://dehacked.2y.net/microstorage.php/info/247852381/Sasa-17934F-Done.fm2 encode: http://www.nicovideo.jp/watch/sm8082772 info (memory, lua, ...): http://www6.atpages.jp/appsouko/work/TAS/game/AstroRoboSasa_FC/ Probably you can improve stage 10 with single-wallthrough glitch.
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
@zeromus Thank you for explaining about "pa=0|1" and setting svn:executable! I checked out the r1820, and I could build it without manipulating permission. For unofficial opcodes, I found a Puzznic run desyncs on BizHawk r1820. This game uses an unofficial NOP (0x89). BizHawk implements unofficial NOPs, but it seems to forget to increment the program counter. So I tried this patch:
Language: diff

*** Execute.cs.orig 2012-03-08 06:11:44.000000000 +0900 --- Execute.cs 2012-03-08 06:12:47.782625000 +0900 *************** *** 692,697 **** --- 692,698 ---- PendingCycles -= 2; TotalExecutedCycles += 2; break; case 0x89: // NOP #nn + ++PC; PendingCycles -= 2; TotalExecutedCycles += 2; break; case 0x8A: // TXA
With this patch, the Puzznic run syncs. Of course, other unofficial NOPs need to be fixed in the same way. (Strictly speaking, other unofficial NOPs may have to read memory operand, even though they are named "NOP")
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
zeromus wrote:
Thanks for teaching me that. I didn't ever think of it. I fixed it just now; itll be supported going forward.
I compiled r1808 and confirmed it verifies NES "Galaxian (J)" correctly. Thanks!
zeromus wrote:
How do you like the dump status report and rom quality icon? We wanted to make it easy to understand how things are getting detected and loaded.
I think the dump status report is easy to understand, if the reader has some knowledge about NES. But: * I think the strings "mir=0" and "pa=0|1" are not so easy to understand. At least, I want some documentation about them. * It would be nice if it also prints a MD5 hash for "PRG (8KB) + CHR" entry. For the icons, I like them and I think they have no problem :) ---- Some other reports: 1) In this post,
adelikat wrote:
THe DMA Cycle bug in FCEUX is not present in Bizhawk
But is the bug really fixed? I tested it with NES "Mahjong (J) (Rev B)", and I got the same hand as I got on FCEUX (about this issue, please refer to my post). Indeed, Exec_OAMDma() in Core.cs is as follows:
cpu.PendingCycles -= 512;
And I tried fixing the value to 513 from 512, then I got the same hand as I got on real console. 2) BizHawk does not seem to verify NES "Mahjong (J) (Rev B)" correctly. I guess the reason is written as the comment in BoardSystem.cs:
//notes: there can be multiple each of prg,chr,wram,vram
//we arent tracking the individual hashes yet.
It would be nice if this issue is fixed in the future :) 3) Could you set svn:executable property for *.exe, *.bat, *.dll files? I am using svn on Cygwin to checkout the source tree, and I have to set execute permission to these files to build successfully. 4) For now, it seems that BizHawk's 6502 core does not implement unofficial opcodes and some double read/write behavior. Do you have a plan to implement them in the future? Most of NES games don't use any unofficial opcodes, but some games do. And, if you use some memory-corruption glitch, some double read/write behavior may issue. Indeed, in my Double Moon Densetsu run, PPU registers are accessed via indirect-indexed addressing mode and some double read occur (about the double read, please refer to GetIYRD() macro of FCEUX).
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
BizHawk does not verify NES "Galaxian (J)" ROM correctly. It says "Inferred from iNES header; potentially wrong" for a good dump. In dump status report, it says:
headerless rom hash: sha1:4180276C50DF9958DEDD6C6D19C9E7AEBB75A89F headerless rom hash: md5:015E59CDE3752FC54A7B9D586721247E Could not locate game in nescartdb
But the hash value is not correct. This ROM has only 8KB PRG, but the .nes file contains 16KB mirrored PRG due to the limitation of iNES format. So, you should treat this PRG as 8KB to verify this ROM correctly.
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
Nice improvement. Just in case, I converted the movie to fm2 and confirmed that it syncs on FCEUX 2.1.5. So I voted yes. But I have some anxiety to accept FM2/TAS movies simultaneously. I glanced at the code of BizHawk and found that its CPU emulation is not identical to FCEUX. For example, BizHawk does not emulate the RMWW (read-modify-write-write) behavior of RMW (read-modify-write) operations. In some tases, the difference of emulation may cause desyncs. (And indeed, my Double Moon Densetsu tas desyncs on BizHawk 1.0, although I don't know the cause)
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
Well, I played this movie on BizHawk 1.0 as a test, and it desyncs at about 20200 frame. (To load the ROM of this game on BizHawk, you have to add an entry to NesCartDB XML. I put the edited DB (the entry is not complete, but it is sufficient to load the ROM)) I don't know the cause of the desync, but anyway this movie syncs only on FCEUX.
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
So we can now tas SG-1000 games? Nice :D
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
c-square wrote:
3) The route isn't even optimal. In the last dungeon, the player doesn't even take the shortest distance to the stairs, but wastes time going the long way around.
I should have mentioned about this in my submission (even if probably you have already guessed the reason:). There are some chutes on the first floor in the final dungeon, and that's why I do not go straight to the stairs. I added a note to my submission. Thanks!
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
Dacicus wrote:
I did notice that sometimes you bought the item that costs 5 money pieces from the shop and sometimes the one that costs 200. Were those specific items necessary for the memory manipulation you did?
Yes. Antidote (5 gold, id:0x3F) is cheap and useful to fill up item-repository, but I need some expensive items to manipulate memory. Here is the list: * Source of Magic (1000 gold, id:0x5D) - I need this to write 0x5D as the character id of 4th. * Spellbook of Outcold (400 gold, id:0x70) - I need this to write 0x70 as the character id of 4th. * Spellbook of Outflame (400 gold, id:0x71) - I need this to write 0x71 as ship position x. * Healing Herb (200 gold, id:0x3C) - I need this to write 0x3B as item-count. Besides, I buy 32 Antidote to fill up item-repository. So I need 2160 gold (1000+400+400+200+5*32). When I return to Saicon, I have only 866 gold, so I sell these items to make money: * Scimitar (500 gold) * Earring (500 gold) * Spellbook of Multiheal (300 gold)
Post subject: Emulation problem - Mahjong (J)
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
I might find a cause of the emulation problem of "Mahjong (J)" (please refer to my previous post). I examined FCEUX source code again, and I found that FCEUX takes only 512 CPU clocks to execute a sprite DMA. But NesDevWiki says:
This takes 513 cycles to copy 256 bytes from this memory into $2004
So, I patched FCEUX r2194 to take 513 CPU clocks to execute a sprite DMA. Then, on "Mahjong (J)", I got the same hand as I got on real console. Though I'm not a expert of hardware and I don't know exactly if this patch is right, might it be thought that the cause of this problem is here? I put the patch and binary: * fceux-r2194-dma513.patch.bz2 * fceux-r2194-dma513.7z Of course, this patch can cause desyncs on other games. I tested for some movies on r2194-dma513. And I confirmed these movie sync: * Super Mario Bros http://tasvideos.org/2964S.html http://tasvideos.org/2384S.html http://tasvideos.org/2354S.html * Super Mario Bros 2 http://tasvideos.org/2981S.html http://tasvideos.org/3015S.html * Super Mario Bros 3 http://tasvideos.org/2765S.html * Gradius http://tasvideos.org/1324S.html * Mega Man 2 http://tasvideos.org/2881S.html * Tetris http://tasvideos.org/2786S.html And these movie desync: * Mega Man 1 http://tasvideos.org/2921S.html * Wizardry PG http://tasvideos.org/2128S.html * Wizardry KOD http://tasvideos.org/2499S.html * Mahjong (This movie achieves tenho/chiho/renho on r2052) http://dehacked.2y.net/microstorage.php/info/1127703226/Mahjong-tenho.fm2 Generally speaking, clock-dependent movies tend to desync. On Mega Man 1, highly clock-dependent glitches are used. On Wizardry series and Mahjong, random number is clock-dependent. As I guess clock-dependent random number is used on fairly many games, you might find more desync cases. If really sprite DMA is not implemented correctly, it would need some argument to treat the issue. But I hope the truth is disclosed first. Would you please inspect the problem?
Post subject: Emulation problem - Mahjong (J)
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
Last year I reported an emulation problem of "Mahjong (J)", but still it haven't been fixed and I don't know how to do about it (About this problem, please refer to the post I have linked to). So, I patched VirtuaNES 0.97 to generate trace logs (it logs only program counter), and I compared the log with FCEUX trace log (VirtuaNES seems to emulate "Mahjong (J)" correctly). After all, I couldn't find the cause of this problem, but I uploaded the logs. I hope someone could find a solution. There may be different versions of this game. I used "Rev B" (md5: 38abeee1b7148a5ff13f8f2ef6ab22e9). And I used emulators below: * FCEUX r2194, old/new PPU * FCEUX r2194mod, old PPU (I mention about r2194mod later) * VirtuaNES 0.97trace (applyed the patch aforementioned) And, in the all logs, I held <START+A> from power-on. Dealing routine is $D2BF (I call it deal()), so I truncated the logs until the execution of deal(). I also attached a full trace log of FCEUX, and it is logged until 194F (deal() is executed at the frame). I think the problem is the execution count of the routine which updates random number. The routine is at $FCC2 (I call it rand_update()). On FCEUX, rand_update() is called 8186 times until deal() is executed. On VirtuaNES, 8185 times. FCEUX updates random number in surplus by 1. This game continues to call rand_update() while it is waiting NMI ($CE4C). So I guess there may be something wrong with the implementation of PPU. I noticed that FCEUX waits the first VBLANK for a long time. It takes 59683 CPU clocks. On the other hand, VirtuaNES waits only for 27409 CPU clocks. I think the cause is "ppudead" logic (in ppu.cpp) of FCEUX. According to NesDevWiki:
The VBL flag ($2002 bit 7) is usually clear at power, and unchanged by reset. It is next set around 27384, then around 57165.
So, VirtuaNES seems right at this point. Thus I tried patching the old PPU code of FCEUX (this is r2194mod) to wait the first VBLANK as long as VirtuaNES, but it didn't affected the hand dealt. I don't know exactly which is right, but anyway this likely has nothing to do with the first problem. But, I also noticed that even the FCEUX r2194mod executes about 140 more operations until deal() is executed, than VirtuaNES does. On average, FCEUX appears to execute slightly more operations at one frame than VirtuaNES does.
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
klmz wrote:
There were moments in this movie when the awesomeness of TAS powers were displayed, but the game seemed to suffer from overly low difficulty and simplistic level design.
I agree with you. I think this game has good idea, but it looks like a rush job. I tried bringing out the goodness of the idea.
What in this movie do you think were the most attractive to you?
I mostly like the levitation of 1-4, and I like the vine boost of 2-1, 2-BOSS fighting, and breaking blocks of 2-4.
Post subject: Fairy of area 12
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
There is a fairy at the beginning of area 12 (I knew this by ZANAC MANIAX). With the fairy, you can destroy the first form the fortress instantly (I made a movie). So I think it will help to improve this run.
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
I put some lua scripts. Checking savedata:
Language: lua

emu = emu or FCEU local SAV_BASE = 0x6300 local SAV_SIZE = 0x0300 function sav_chk(n) local base = SAV_BASE + SAV_SIZE*n local sum = 0 for addr = base, base+SAV_SIZE-1 do sum = sum + memory.readbyte(addr) end sum = bit.band(sum, 0xFF) local chk = memory.readbyte(base+SAV_SIZE-2) return sum, chk end function draw() for i = 0, 3 do local sum, chk = sav_chk(i) local chk_str = "OK" if chk ~= 0x5A then chk_str = "NG" end gui.text(64*i, 0, string.format( "%d:%02X(%s)", i, sum, chk_str )) end end gui.register(draw)
Watching stack pointer:
Language: lua

emu = emu or FCEU local VIEW_SIZE = 8 local GUI_ALPHA = 0.8 local DRAW_SP_X = 0 local DRAW_SP_Y = 0 function draw() gui.opacity(GUI_ALPHA) local sp = 0x0100 + memory.getregister("s") local view = {} for i = 1, VIEW_SIZE do view[i] = memory.readbyte(sp+i) end gui.text(DRAW_SP_X, DRAW_SP_Y, string.format( "stack $%04X: %02X %02X %02X %02X %02X %02X %02X %02X", sp, view[1], view[2], view[3], view[4], view[5], view[6], view[7], view[8] )) end gui.register(draw)
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
If we can modify $6012 or $6312, we will be able to achieve a great improvement. If you modify $6012 to 0xD5 (or 0x01, ...) by cheat, Jade Portal appears. And, savedata is almost a copy of $6000-$62FF. So, If we can modify $6012 or $6312, we can skip most event. But we can't modify $6312 by spellbook glitch, so I don't know whether it is possible. If you can manage to let the 4th character equip the item 0xFE (かめん), you can modify $6312 using spellbook glitch. But this is originally a keyword, not an item. So we can't get this as an item usually. And, we can't equip it (even as an item) via the menu. Or, it's possible that you can modify $6312 with 45-floor bug. But I don't know even the probability of it.
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
I will mention about another glitch called "45-floor bug" (FF3j also has this bug). If you go up/down stairs in a kind of dungeon, the stack of CPU continues to grow, and finally, you can't go up/down stairs. If you do a "heavy" process in this condition, the stack overflows and the game will be freezed. I think it would be difficult to predict the effect of this glitch (the NMI address of this game is $0100). 45-floor bug is inspected by Fazz (Japanese), and he says we can cause 45-floor bug in dungeons such as: * we can enter by events (eg. Arena of Palamecia, Base of Altair, Phin Castle) * has multiple entrance (eg. Cave of Bofsk) I tested for Base of Altair and Cave of Bofsk, and confirmed the bug occurs. I think we need to encounter an enemy to make the stack overflow. I couldn't cause stack overflow in Altair. Here is the movie performing this glitch (in Cave of Bofsk): http://dehacked.2y.net/microstorage.php/info/350006923/Floor45.fm2 This movie causes a reset on old PPU, a freeze on new PPU. I don't know the detail of PPU, sorry.
Post subject: Re: now with video
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
Dada wrote:
Actually, this looks great. Just the fact that attacking with certain tomes does absurd damage at low levels will be a great help. Nice find! Here's a video for those who are curious: http://www.youtube.com/watch?v=edH3qCkEUKw
Thank you for encoding! Well, spellbook of Fire is very strong, but it often misses after mid-game. If you use it, you may need to train Strength. And, it refers an insane address as skill-level, so you may need to consider about it.
Experienced Forum User, Published Author, Skilled player (1019)
Joined: 9/18/2008
Posts: 159
Location: Japan
I found a glitch to corrupt (first) savedata, but this probably wouldn't lead to drastic improvement. Anyway, I will write what I know for reference. First, spellbooks can also be used as two-handed weapons. To do so, equip a spellbook as an item, encounter an enemy, and exchange your weapon for the spellbook. The effects of spellbooks vary, and some of them make the game freeze after chacacters attack with them. But spellbook of Fire is very strong (it works like Blood Sword). And, if a character fights using a kind of spellbooks, the skill of another character (after him) is trained. So, if the 2nd-4th character does it, the memory out of range will be changed. By the way, savedata ($6300-) exists right after skill data ($6200-). So we can corrupt savedata using spellbooks. Here is the table of spellbooks to corrupt savedata:
# Spell Skill                                   TargetAddress
Fire    magic[0] of next character              $6310
Stun    magic[0] of next character              $6310
Minimum magic resistance of next character      $6332             # freeze
Blink   ? of next character                     $633A
Esna    axe of next next character              $630C,$634C
Forg    spear of next next next character       $6308,$6348,$6388 # freeze
Wall    spear of next next next character       $6308,$6348,$6388 # freeze
Clouda  spear of next next next character       $6308,$6348,$6388 # freeze
Toad    spear of next next next character       $6308,$6348,$6388 # freeze
Haste   spear of next next next character       $6308,$6348,$6388 # freeze
With these books above, we can modify the addresses below:
$6308   Chokobo state (1:exist, 2:riding, 3:permanent)
$6309   Chokobo x
$630C   passenger ship state (2 or above:can be taken, even:route1 odd:route2)
$630D   passenger ship x
$6310   player x in the overworld
$6311   player y in the overworld
$6332   chest flags
$6333   chest flags
$633A   chest flags
$633B   chest flags
$6348   event flags
$6349   event flags
$634C   event flags
$634D   event flags
$6388   keyword
$6389   keyword
But, this game checks the sum of savedata on reset. So, we need to adjust the sum, modifying multiple values. savedata is considered valid when: * sav[0x02FE] == 0x5A (this condition is fulfilled when you do save once) * sum(sav) == 0xFF To adjust the sum, attack/cancel trick will be useful. Well, we can indeed modify savedata, but the values are treated as skill levels, so the format of value is limited. For x/y in the overworld, I think we can modify only y in practice. Permanent Chokobo may be useful, but it doesn't disable encounters. We can use passenger ship as usual ship. To do so, modify the ship state, and simultaneously push <start> when you take the ship. This is well-known as "menu glitch". We can modify some event flags, but I think they are not so useful. We can get some keywords, but I think it is not so useful. By the way, if you write an item-id to keyword area and "ask" about it, it looks like the "keyword" works as "item". But in fact, the "keyword" doesn't change any event flag, so it's useless. Overall, I think this glitch is not so useful for now. We can go to Dist by passenger ship, but it seems that we need to finish all events after all. Here is the movie performing this glitch (modifying y in the overworld): http://dehacked.2y.net/microstorage.php/info/1142883529/SaveGlitch.fm2
1 2 3 4 5 6 7