Posts for FatRatKnight

Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
"Hardest difficulty" in this case means picking a different cartridge (U vs. J). Indeed, the faster JPN texts are certainly helping the flow. As for comments on the run itself... It is possible to trigger the lair button while at 0 HP. However, if you were restoring part of a town, you recover some back and do not deathwarp right away, yet for whatever reason, your GEM count is still set to zero. Regardless, you would have fewer HP to die with when the screen transitions back. 2 less EXP, since you must leave a slime ball alive to die when clearing the lair, and again just before the actual deathwarp when you no longer have any GEMs to use, but it seems you have plenty of EXP to spare at the time, since you stopped at exactly 99 with clear intent. The effect on the RNG and magician soul position might be important, however. My route involved getting lots of EXP early, and yours got the level up once in the painting. Yours means the next deathwarps require less HP to lose, but may be lacking in attack power for just a few enemies around later level ups in comparison. Considering the faster strategy before the first deathwarp, it seems doubtful you can get the "lots of EXP" like I did, and your choice is probably the optimal one to go with. When passing by a chest, facing north will automatically open it. I feel like this would save a frame in the painting, holding L/R since the last time you had to move north, but I'm honestly not positive about it. ... Hmm, since the blocks in the painting had a bad magician soul position, would it be possible to fit a few extra fireballs before the fated moment? Each one freezes the magician soul in place for a short time, and you did have a bad position then. Outside of that, this looks to be an improvement over what I was planning. Love the walks, the timesaver before the first deathwarp is great, and the GEM manipulation is beyond what I thought was feasible, even with my scripts. I'm impressed, and very happy someone else is picking up where I left off and even found some things I missed.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
You know, I still don't have particular plans to finish this TAS. It's just something that holds my interest in my spare time. In any case, it is interesting that I'm able to hold a rather large lead over the CPU cars. Those cars are going 91 MPH at course 8, but only 82 in course 9. It's not because of a more awesome car, but because the CPU slowed down instead. The reason blue was lagging far behind in course 7 was because the other cars were going at 89, above the 88 MPH threshold, while blue was merely at 86. The 8 MPH plateaus do have a pretty significant effect, so I'm careful to try to maintain it, or at least recover quickly if the turn doesn't allow for me to keep it.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Ah, so this pause trick can break GP mode. I was previously under the impression that you keep your rank in the race. Seems you are placed ahead of any CPU that is still loaded when you cut laps. If the pause run is to be made, it seems pointless to first unlock Master with a verification movie for it. The run itself is apparently low effort, using an obsolete emulator as well, but we have a pretty good starting point. Think this can be optimized using lsnes or BizHawk? In any case, now I know a little more about this trick.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Various comments and replies. Nice to know how helpful my subtitles were. The improvements are difficult to spot without carefully going through both runs, even for me. Thank you for the temporary encode! I was hoping for some in my prior submissions, but alas. And thanks some more for the time to add my subtitles in there. I'm guessing clearing all the clue rooms (including picking up the clue before leaving) would add a minute or two. Then again, even a realtime run can correctly "guess" the vault combination, whatever one of 32 is randomly selected, by looking at their password. The problem, though, is that the clue we get won't be readily visible, due to the fact the related screen will be cleared in a frame or two. On the other hand, we'd have the perfect excuse to pick up 10 potions. Before, I saw my run ended with 10 Health. That's no good, that's far too high. Now, how to reduce it? Oh, I also noticed some of these endgame enemies were doing precisely 9 damage per hit. It then became my goal to intentionally take one more hit in order to end with 1 HP, and sure enough, I can do so without losing time. I'm starting to think this TAS will hit Moons.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Submitted my Gauntlet TAS. The moment you can knock one more off your list is fast approaching! I may consider another TAS from this list. I'll think about it.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
IRC had also given plenty of encouragement, so I'll continue working on the subtitles some more. With any luck, expect a submission soon.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
I'm starting to doubt myself on the value of subtitles for this game. I realize this is probably a bad thing to be doubting myself on. So, I'll ask for opinions before making a decision. So, uh... Any opinions? I don't know what specific thing to ask. If it helps, this is my listing in progress:
subtitle 30 Gauntlet TAS, any%. This run aims for fastest time.
subtitle 330 I delay at character select for best vault combo.
subtitle 630 FODA worked out vault combos. I'm just following it.
subtitle 930 Elf has highest speed. A lot of running is needed.
subtitle 1230 Weak shots (1 damage out of 3), decent magic.
subtitle 1530 Surprisingly good Health gains from treasure.
subtitle 1830 Since most is running to exit, speed is king.
subtitle 2160 This game has a bunch of secret walls to shoot.
subtitle 2460 These walls can contain almost anything.
subtitle 2760 I've worked out internal RAM for these secrets.
subtitle 3060 Naturally, for TAS, I produce scripts to show RAM.
subtitle 3360 Among other things, there's not a secret I don't see.
subtitle 3660 Just show a number where an object is.
subtitle 3960 Secret walls count as an object. Thus, I see them.
subtitle 4260 I spot a few secrets the last TAS didn't get.
subtitle 4600 This game gets a lot of lag. Slows things down.
subtitle 4900 Lag happens when the game has a lot to process.
subtitle 5200 Look at those monsters. That's a lot to process.
subtitle 5500 Time spent killing can be made up with less lag.
subtitle 5800 A potion can clear an entire screen of enemies.
subtitle 6100 As such, potions can greatly assist lag problems.
subtitle 6400 A screen clear can be worth a few seconds alone!
subtitle 6700 A potion just a few steps away is worth it.

subtitle 7150 Extra Shot - My arrows do more damage (1->2)
subtitle 7450 Later, I must shoot out 300 HP. x2 damage helps.
subtitle 7750 That Extra Shot took about 4.5 seconds.
subtitle 8050 300 -> 150 shots is far more than 5 seconds.
subtitle 8350 I say getting Extra Shot is worth it.

subtitle 8720 Extra Fight - Ramming enemies more effective.
subtitle 9020 Running into enemies do random damage.
subtitle 9320 Supposedly, Extra Fight helps in "melee" damage.
subtitle 9620 At base level, I could already kill 3 HP foes.
subtitle 9920 Though, randomly, I could do 1 or 2 damage.
subtitle 10220 Hard to say how much Extra Fight helps, really.
subtitle 10520 Still, Extra Fight was directly in the way.
subtitle 10820 Not getting it means I spend time shooting it.
subtitle 11160 Treasure rooms are helpful, but RTA hates 'em.
subtitle 11460 When you find the exit, you recover fully!
subtitle 11760 Alas, the exit is randomly located.
subtitle 12060 In TAS, manipulate the closest exit, of course!
subtitle 12360 RTA (Real-Time Attack) can only hope.
subtitle 12660 
subtitle 12960 
subtitle 13260
subtitle 13560
subtitle 13860
subtitle 14160
subtitle 14460

14980 Extra Speed - Run faster (3->4; 2->3 diagonal)

20560 Extra Magic - Potions more likely to slay stuff
I figure lag reduction makes up for picking this.
Extra Armor is another power-up. I never get it.

To enter room 100, you need the vault combo.
An unassisted run can "guess" the vault combo.
They merely need to look at their password.
The first character of the password determines combo.
Have a list of 32 combos handy. "Guessing" is easy.
In TAS, manipulate the fastest combo, of course!
This combo needed manipulation from the beginning.
Ah, this dragon. Each head has 100 HP. Total 300 HP!
If a head is breathing fire, it's immune to damage.
So, "activate" all three heads at different times.
When one is breathing fire, I can shoot another!
By the way... What TAS doesn't play with death?
Do enjoy my rather low HP. And the ending, too.
This was FatRatKnight, TASer and subtitler.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Lua HUD I've made some analysis in this game, so I may as well not waste it. The game sets a nominal speed for your car, where your current speed goes to when you keep the accelerator held. The way the game adjusts your speed for curves is to reduce this nominal speed when your facing and momentum are far apart. If the difference is 3 units or less, you keep maximum speed. So "driving sideways" after a curve harms your speed. Straighten yourself out. Your momentum very slowly changes to match your facing. It doesn't matter how much you turn, within a limit, as the rate your momentum shifts doesn't care how far you turn. So if relying on the slow momentum shift, don't turn hard. Note, that "within a limit" means that if you try to turn past that, the game instantly moves your momentum to keep within a certain angle of your new facings. If you need to turn hard, commit to it all the way, then straighten after the turn. The limit increases with speed. There are 256 possible facings, but affects your position in granularity of 4 units. Turning for a frame changes your facing by 2 or 4, depending on whether it's an even or odd frame. I have not gotten an exact measure of how momentum affects your position. (EDIT: not facing, silly me. Momentum itself never affects facing, your D-pad affects facing!) Speed is another thing that has something unexpected. You may think that 79 MPH is well faster than 72 MPH, but the truth is that both speeds affect your position identically. Speed works in granularity of 8 MPH, so if you can maintain a multiple of 8, or regain it quickly, you're in good shape. This wasn't considered in my TAS. Anyway, I don't have particular plans to continue the TAS (sorry Dimon12321), mostly just that the game caught my attention for a moment. I may be curious what the limits are, but I don't have a strong desire to look for myself. I enjoy analysis more than TASing, and the small TAS was there mainly to help my analysis. If someone else wants to look into TASing this (note that this is an endless game, so define a good stopping point), I will support it.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
My Rad Racer TAS is published now. We can knock one off that list now. EDIT: Seems you got it already. Gauntlet has a complete WIP, only awaiting time needed for me to do some write-ups. I will skip them if it takes me to next month to finish, submitting whatever I've got. On subject of "not actually the first 500 but close" would be #535 Soul Blazer. I've started on improvements a while back, but haven't actually stuck with it. The thread, in case you want to find it. Thought I'd mention it since this topic is about obsoleting rather old movies.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
I'm not sure why the "ingame time" tag -- If I did care about that timer, there would be a lot more pausing involved. And even if not, I brake before hitting the finish line on every course rather than hitting it at top speed for the extended distance, which affects the ingame timer, and the brakes are certainly better for real time. As for the music, the .fm2 has plenty of subtitles that explain a few things (let me know when someone manages to work out YouTube subtitles; This is affecting my runs). Basically, you can change music by pressing down, and I chose to have no music for the start of Course 4. My choice was largely because I already went through the three available songs in the game, and to give you a sample of what it's like without music.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
User movie #22781190872746344 I have myself a completed run. I hope the potion management was done better, and the dragon was slain much quicker by attacking all three heads right away instead of one at a time, due to the fact a head currently breathing fire is immune to damage. Haven't started on subtitles yet, but I'll try to come up with something. I may set myself a deadline so that waiting on my TAS a whole year doesn't happen again. And if not, perhaps I should offer open permission once more. In any case, do expect a submission in no more than a few weeks. Hopefully when I can think straight, I'll get to my usual writing.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Derakon wrote:
Is Gauntlet 1 actually completable? I know Gauntlet II just loops forever; way back in the day I left my NES running for days and had a warrior with 99 carrying capacity, run speed something like three times faster than the elf, tons of extra shot power/armor, etc. from all the dragon boosts. Still sucked at using magic though. :D
[392] NES Gauntlet by nesrocks in 12:24.65 The first Gauntlet game can be completed. There are 101 rooms, if you count the demo as a separate room. This game needs you to find the eight clue rooms (to learn the password, something that can be known ahead of time) in order to enter room 100, and find the orb to win the game. solarplex: Thanks for the second encode!
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
If it helps anyone, lsnes can record .lsmv as a pile of text files in a zip. If opened as a zip file, there is a subtitles file in there (no extension), where the first two numbers in each line indicates which frame the subtitle starts and how many frames it lasts. May as well answer with what I am aware of, I'm hoping this information makes it easier to convert it. EDIT: Of note, the .lsmv I've submitted is itself in a zip. This will require that you first extract the .lsmv, then extract the subtitles from the extracted .lsmv file.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Just a note: The encode uses the 20% done file rather than the 60% done file I've recently uploaded and linked to in my prior post. Still, thanks for the fast encode. Mistakes or not, it's more than what I can say for myself.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
I'm improving something. Roughly 60% done. While you are free to talk about my run (this is a TAS site, after all), I'm mostly posting for help with aesthetics of this script. In particular, I want to generate ASCII maps of the various rooms, but I'm not sure which character to put to each object. Would be nice to generate a guide or something. There are exits, various monsters, treasures & other items, doors, chests, secret walls, breakable walls, switch walls & switch panels, stun panels, and possibly a few things I'm missing. I've identified 69 distinct objects (including empty), which makes finding unique ASCII characters for each of them rather more difficult while keeping some level of intuition. Open the script if you want to see the detailed list of things I've identified. A sample map I've generated:
+r01-----------------------------+ 1 - You start here (x09 y05)
|################################|   - Empty floor
|# $          #g      #          | # - Wall
|#            #       +g     #   | + -  3:Door
|#            #       +g #  g   X|
|#                    #    #g #  | K -  3: Key
|#        1           #          | P -  1: Potion, durable
|#            #       # #     #g | F -  1: Food bowl (durable)
|# K          #       #    #     | $ - 15: Treasure
|#            #g      #G         |
|#######################  ###  ##| g - Ghost
|#           F#h    #     #      | h - Grunt
|#      e     #h    #     #      |
|#          ###h    +     #      | G - Ghost generator
|#          #$$     +     #     #|
|#          #$$     +     #     G| X - Secret wall (shoot it!)
|#          #$$h    #     #      |     This one contains EXIT->r05
|#          #$$h    #K    #      |
|###  #######$$     #########++##| e - Normal exit (to r02)
|#          ###K    #     #  gg  |
|#            #######            |
|#     #      #              gg  |
|#    G#      #           #      |
|########  ####      ########  ##|
|#     G g    #g#   #$$# G#      |
|#       g    #     #     #      |
|#            # ### #            |
|#                # #  #         |
|#           #  G # #$$# P#      |
+--------------------------------+
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
This is an excellent project. Going console -> emulator should be just as sync stable as emulator -> console. Whatever you do on console should be accurately reflected in an emulator, if that emulator is any good to begin with. One thought that comes to mind is console -> console. I know, you just played it on console, but this would be a good test to see how stable the input log itself may be when played back on the console again.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
It would be nice to know where it desyncs on the verification. FCEU to FCEUX certainly fails, so it appears Rad Racer is sensitive to any change in emulation. Which puts it in a rather difficult spot for any successful verification. Actually, the first three courses do appear pretty stable so far. The later five is our minefield of desyncs. I'm surprised NESHawk manages to remain synced past course 4, though it still fails after that.
Post subject: Ah, bullet lists. One more under "Insufficient CPU cars".
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
hegyak wrote:
Why do you go off road? That kills a little bit of the speed.
I go off-road because: * Curve is too strong to beat it at full speed. * There aren't sufficient CPU cars to bounce off of. * No obstacles in the way that would put the run to a screeching halt. * Braking to stay on the road is far, far more costly than running into the dirt. Curve too strong: * Curves can move me as much as 7 18/32 pixels per frame at 255 kph. * Steering at 255 kph is a mere 2 26/32 pixels per frame. * There's a difference of 4 24/32 pixels per frame. I'm going off, no question. * Slowing down does reduce this difference, but... Uh, I'm slowing down. * And trust me, that's a curve I'm in. I'm not off the road because I feel like it. Insufficient CPU cars: * As seen, CPU cars are wonderful springboards. * However, manipulation of them is extremely stiff. * There are spots where they have extremely long timers or low speeds. * Even using the backs of some CPU cars I can survive is slower than dirt. Braking is worse: * To stay on the tougher curves, I need to slow down significantly (180 kph). * The dirt only slows me down by 1 kph per 4 frames. * Acceleration offsets the slowing rather well. * As the game sets limits on your X position, this is "free steering" for me. Lesser reasons include: * Had to get around a CPU car, as I was unable to get more inside the road. * To stop at the goal faster.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
A physical game that can be played on, say, a coffee table, qualifies as a board game in most cases. There are also some other real world games, such as sports or game shows. I forget any examples of how they were received as "fastest time" TASes of video games that try to replicate them. In any case, Tetris is not an example of a board game, due to the fact it never existed as a physical game you can play on your coffee table or at some other place. If you know such an example, feel free to show me, so I may retract this statement. I do believe that Vault has some room for this sort of game, due to the fact there is a clear progression from "stage" to "stage", rather than some arbitrary moves that lead to one player winning in only a single game. But that's a discussion best reserved to the topic already linked.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Well, I'm not sure what the second player rolls are at combat start, but I do know that it's apparently a secondary check needed to have Hide work at all. A d20 roll of at least 6 will enable the third roll to succeed at Hide, at least for the first combat. I may be decent at lua scripting, but I'm bad at simulations. I know the ideal target situation, and I know how the RNG works, but I can't work out a structure to simulate what I need. In any case, the ideal first combat: * Walk forward to battle * All party members hidden * A Kobold acts; No available targets mean turn ends instantly * A party member terminates a Kobold (either Magic Missile or physical hit) (4 left) * * Note this must not trigger attack of opportunity; Melee range Magic Missile next to the active Kobold would trigger it. * A Kobold acts, does nothing (Kobold #5, preferably, as that's the corner one) * Fodder party member terminates a Kobold, then moves to trigger two AoO, the first one hits (second is thus guaranteed kill) (3 left) * Remaining two party members kill Kobolds, including the first one to act (1 left) * Fast party member terminates remaining Kobold, the second one to act This gives two turns to the Kobolds, one of which is a fast one thanks to Hide. At the same time, I kill a fodder. Later combats are not as critical to manipulate to such a crazy degree since I'll just throw Sleep and Turn Undead for justice, and later snowball swarms and fireballs. I can probably fetch information necessary for the simulation, but I won't be able to construct the simulation myself as I am unable to imagine the process appropriately. In absence of this simulation, I'll just complete the TAS as it stands so far and point out the first combat is in dire need of improvements on submission, which I have no plans to improve myself as I lack the mental tools to do so. Anyway, there are two degrees of freedom for the RNG from the title menu: 1) By selecting a file (including backing out of character creation and going back into the file) R1 is always reset to a default value (0x1F123BB5), and R2 is set to a specific value depending on a frame counter (0x000002C2 is the earliest after my character creation, increments of 1 per frame). 2) Walking two steps (whether actual movement or just turning) will roll the RNG to determine environmental noises; If the d20 roll is a 1, an additional RNG call is made to determine what noise, so occasionally, an RNG is skipped, and it's basically impossible to use the skipped RNG. Note that a d20 roll of 2 also generates a noise, but no RNG call is made as it's always the same "walking steps" noise. Both methods can be considered equally fast. One's on a frame timer, and the other lends itself to rapid-fire on all four directions on the D-pad. Now, initiative bonus of these Kobolds appear to be +2, so they need to roll somewhat poorly. We can select Improved Initiative for our fodder, and also try to manipulate a different Dexterity to also adjust Initiative. Hide needs success for this ideal plan to work, too. Being small gives +4 bonus (default characters Garon and Wobby are both small). Dexterity also adjusts this, too. Finally, the Hide skill itself can have ranks to improve success, which we can put on the fodder. A roll of 20, after applying bonuses, is needed to hide. It is critical that our fodder dies. The first attack of opportunity isn't guaranteed to hit, but if our fodder is KO'd by the first hit, the second attack will always hit and kill. AC is adjusted yet again by our friend, the Dexterity score. Selecting a Wizard starts with no armor, so there isn't really anything more we can do, and the Wizard HP is almost certainly what's needed to die so quick. Kobold Swordsman can deal 1d6 damage, as far as I know. I'm not certain if critical hits are implemented correctly. Kobolds aren't the easiest to hit. These ones have an estimated 15 AC. If a Wizard dagger has trouble, Magic Missile can be substituted. Slings have almost no chance to hit, and besides, you have Magic Missile anyway. Garon's 10 Strength doesn't help matters much, but that mace obviously must hit something. Anyway, before I work out more specifics, it would help to know whether there's anyone willing to take up the simulation or manipulation themselves. I'm not particularly willing to work it out by hand, and I don't know how to code a proper simulation to work this stuff for me, so I'd like to know if I should give up on the first battle or start looking deeper into the internals.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
FCEUX script. However, due to emulation issues, I recommend BizHawk, so the script should be converted. Fastest time would use one player mode. Highest score would use two player cooperative mode. * The number of lines to clear is increased in two player mode. * 16 sprite slots; One for each player cursor, and one for each held object. * * This means max of 14 simultaneous incoming objects in one player, but 12 for two player. This means that one player mode can clear the first level with just nine pieces, to clear four 3-in-a-row lines at once (if we manipulate all the same), but two player needs to clear six lines, and that's a minimum of fourteen pieces, where twelve is the most we can have incoming at once. At least, in Hard mode. Highest score has some oddities. (FCEUX sample) * Clear the biggest line you can, one at a time. * If you can clear multiple equally big lines at once, do so. * Try to fill the field as much as possible before the timer starts. * Empty the timer as quickly as possible. * Clear 10-in-a-row while the tally is not point-rich (to be determined what the boundary is). * Rapidly pickup/drop objects to re-trigger the tally at that square. * Clear lines slowly to maximize the time the tally remains. * Leave exactly one object for both players to share in pickup/drop. * The cooperative score is seen, but P1 score is what's actually saved in the high scores. Hmm... Which is the proper checksum? 16f78d8561429fc75f38d726edc57e23 - goofydylan8's checksum 728c53be1c3987b28c81113543a8c88f - The one I'm using
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
I, uh... Completely missed that post. third party lua extensions seem like an interesting possibility. Does get the workload off of the devs while still getting something somewhat close. Your sample is appreciated, as well. ... I don't have much specifics to really say, since I still haven't explore the links you've shown, as I was off doing other things, but once I get the time to look at what you did, I may have more to say. I believe a reply now should give comfort of acknowledgement, at least.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
I don't know enough details about PictureBox, but as far as I know, it takes an image rather than something that can be drawn on. I'm probably incorrect here, so I'll request the details you may know of how one should deal with PictureBox. It's not a hard requirement that it must be an object, but as long as its possible to have an external canvas of some sort, and a usable interface to work with it, my only complaint would be I'm using a handle number rather than an object, which is small compared to having no access to an external drawing surface. I'm suggesting what is ideal for me, which isn't necessarily something that must absolutely be this, so I'd like to know if there are some details that are very difficult to implement. Keep in mind I'm requesting a set of functions that can draw on it like the main window already has, and differentiating between a handle number or a position number to overload the current gui functions is unwieldy, to say the least. A copy of gui functions would also add to the difficulty of maintaining them later.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
Then I am mistaken, again. The number limitation of older lua versions would be news to me. I have no actual bugs to report as of this time. I see there isn't a need to redesign the lua at this time, as there are other issues to work on, and the lua does work. I may be upset about some things myself, but the lua can still display information. I do get frustrated with it, then pass time elsewhere until my frustrations go away, which slows down the rate I code things up for TASing purposes. Perhaps I became rather vocal about it due to this process, but I need to focus more on workarounds I have available. I'm happy to continue any discussion with anyone, though. Any information worked out can still be referenced in the future.
Editor, Experienced Forum User, Published Author, Skilled player (1174)
Joined: 9/27/2008
Posts: 1085
zeromus: I said "it's a mess" specifically because I do not wish to get into details right now. If you prefer, I can post my full write-up for gui.drawText, and that does get into specific issues I crash into, or I can further explain the details of one of the three questions I fired off (which I'm already doing now for one of them, later in this post). After that, we can come to a discussion on the specific points and ask whether anyone else has similar feelings.
FractalFusion wrote:
FatRatKnight wrote:
Why the distinction of signed/unsigned memory writes?
Out of pragmatism, most likely. I just want to point out that the important part of coding is how things are understood and used, as long as our understanding of them is correct. And as far as I tested, the memory.write functions all work the way we understand them.
The existence of separate signed/unsigned memory.write functions was enough to confuse me as to their meaning. In fact, my initial belief would be that they would throw a lua error should you go out of range, in order to give a proper distinction between the two sets of functions. I now see this initial belief has me off track. If there is no difference between the two sets, other than name, then by splitting off two sets, an unintended meaning gets injected into something that can already handle the full scope of possible numbers. Without explicitly stating signed or unsigned, and simply having a merged name that indicates neither, this would be more likely to pass the message that this function can handle numbers of any range. I don't know how correct I am in this line of thinking, but I do know I was mislead myself, and am curious how others may have reacted to the "trap" I came across.
FractalFusion wrote:
For example, numbers above 0xFFFFFFFF can never be represented in Lua using 0x notation; Lua will without fail set it back to 0xFFFFFFFF. [...]
lsnes lua is capable of going higher. It's less of a limitation of lua as a language, and more down to implementation. I will note that 0xFFFFFFFF is the limit that most emu lua implementations have, but 0x100000000 should work as intended in lsnes. I'm aware of double-precision floating point limitations, as well. I have crashed into them trying to calculate RNG values, and decided the solution was to split up the 32-bit*32-bit calculations into a pair of 16-bit*32-bit calculations. I've also noted in several instances where bit functions like bit.band would return 0x80000000 as a negative value. In praise of BizHawk, I must state, I'm getting back a positive value with such a large value, so no complaints in that instance. In one case I recall (VBA?), memory.readdword would actually return a signed value, something advertised as something only memory.readdwordsigned should do. In fact, memory.readdwordunsigned still returned a signed value. That lua just refused to have functions that dealt with anything other than 32-bit signed values. The straight math operators still treated those numbers as double-precision floating point just fine, but once a function was involved, 32-bit signed was your limit.