Posts for FatRatKnight

Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
A script for simple frame comparisons, if you care. Can't go faster than faster you going.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
ThunderAxe31 wrote:
[...] reach the credits with a movie that ends input as early as possible, [...]
That's what I thought. We've based our finisher input on that rule, so it's good to know we don't have to change things all of a sudden. I prefer the other way, myself, since I believe null input is still input, but ending input early is easier to compare.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
There's a good chance a number of teams haven't submitted yet, and plan to use these final days to do touch-ups. There's probably a few that did submit just in case they don't come up with something better before the deadline. Though, 3 months is a lot of time to work on a single game. Curious if the margins will end up razor thin.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
Collaborating does sound good. I may know a lot of things, both in TASing (I have a few published runs here), and in this game from my casual play-throughs, but it's always helpful to have another point of view. It's definitely a good motivator when you come back and see some things were done, and having ideas to give someone and have them look it over directly can be fun. I am still in the Dream Team Contest, which will go on for another month (I really should be putting more time into it again). Once that's over, I should have more time I can put here. The main reason I already did stuff here is to have a change of pace to deal with recent life stresses that came up. Oh, and I also did the front 9 holes of Palms already. My TASing methods involved trying to find something that works with a really low 1W shot, then taking the first thing that worked. There may be other sorts of things that will work, and it's likely there may be faster things than what I did. Once you have a movie from someone else, you can get some understanding of techniques they used, and have a comparison point when trying to improve things yourself. It should feel pretty good that, even if it looks unbeatable, you experiment a bit and get something better.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
One thing I do recommend trying sometimes is missing the Impact Zone entirely. In casual play, I would use a right-handed Neil (and let Height go up to maximum) with Risky clubs, aim a bit off to the right, then time the impact late. The loss from completely missing the Impact Zone is curiously small, enough that switching to Super POW and hitting normally isn't really much better. But then, we're using Ella, whose Height goes down with levels, and timing the impact late will practically bury our ball. Something to experiment with, perhaps. If it turns out we need the options provided by a passable Impact & Control, we can likely go back to the last level-up and change our stats around. This is a TAS, and we can go back to change things we don't like. In any case, we have 4096 possible aiming directions. The Impact timing doesn't change to another one of the other 4095, but further tweaks the direction, compounding the possibilities. We also have the 25 positions for low/high and fade/draw to our shots, and the 5 possible spins. We have the power to our shot, club selection, the spot our ball landed in, and the RNG involving weather and our shot power randomization. Overall, a lot of possibilities. We just need to find the right ones.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
Apparently, I'm unable to run the new BizHawk. Windows 10 complained about the .exe, and going past the warning, any attempt at running it afterward just silently ends the process. No error, no BizHawk, nothing. I'm finding it confusing. The one I still have is running smooth as before, at least. I am warming up to the mouse controls, in any case. Still would like keyboard controls to toggle some of the controls. I just have this personal resistance to BizHawk in general that, in deeper inspection, I'm finding this resistance is not really something that belongs. Something unfamiliar, and I felt like it was trying to do too much. Carried that impression a bit too far with me, and it's probably a good time to get past that.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
Been over a month. Anything to report? I did feel like trying something myself. Here's what I have now. I'll share any thoughts I can think of from the TASing sessions. Precision aims do require some odd inputs at times. There are 4096 distinct angles you can aim in, and the game frequently has you skipping in 2s, 3s, and more. If you keep Left or Right held from before the shot is ready to be tweaked with, the adjustment gets a high skip. With a blank frame, it slows down. The skips also depend on the distance of the simulation, with longer distances reducing the skip. As much as it would be nice to have the ball quickly roll in, the terrain isn't a nice, consistent surface on the way to the hole. Land a yard further, and the ball lands on the Green and rolls straight off. A yard back, and I get the Rough and the ball doesn't roll much. Let's not forget things like hills, trees, the fact the ball might bounce, and all those problems with tweaking the shot just right. Early, I choose to send the ball on Semi-rough or other not-Fairway terrain, rather than deal with the Best Drive message. At least, not until Hole 7. The bad terrain has a few effects that make it not so bad, and if I'm still able to reach the hole in the same number of shots, it's just another spot to hit from. For the level up stats, I pick purely Drive. Height needs to go low, Ella's does so naturally, and points here is counter-productive. Shot is freaking expensive. I'd rather get the extra distance. Impact & Control is about that Impact Zone. TAS-precision should let me ignore it. Spin is a really weak stat in MG:AT for some reason. In general, I'm hoping I can just shoot lower if I have well more than enough distance, and the high Drive means the ball travels faster at the start of each shot. I'm out of generic thoughts now. If there's any details you want to ask about, I'll be around to delve into whatever is needed.
Post subject: Re: 4 suggestions.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
feos wrote:
You want it to let you instantly toggle input on the blue frame without advancing/rewinding, right?
Basically, I would like to tap the related control binding to toggle it on the current frame. Anything that's analog might need to be handled differently, though what, I'm not sure.
feos wrote:
Set markers to main parts and jump to there instantly. Notepad++ has the document map feature, but it'd be hard to implement. So use markers as chapters.
This idea didn't look simple when I was thinking it, and your response confirms its difficulty. Markers don't actually reduce the scroll steps, but perhaps get me close enough to where I need to look.
feos wrote:
Disabling "Follow Cursor" is not enough?
Locate the control for me. I can't find it. EDIT: Oh, checkboxes. I see them now. I was looking at menus.
feos wrote:
"Auto-restore last position" is not enough?
Locate the control for me. I can't find it. EDIT: Checkboxes. I see them. I'll take a look at the latest build soon if it's not in the 1.12.0 release.
feos wrote:
So does the build I posted fix your autosave timer bug?
I have yet to put in the time as of this moment. When I can, I'll look at the new build.
Post subject: 4 suggestions.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
feos wrote:
Also, what's your overall impression about tastudio? Any suggestions/requests maybe?
It preserves the input list, and allows precision modification to it. The greenzone lets us rewind well enough. My impressions are pretty weak for now, but I prefer it over classic TASing. As for suggestions... Do point out any that are already existing: Some way for button control to toggle the immediate frame's inputs * The Recording mode removes existing input, denying precision control; not a solution I seek * Mimic the behavior of this script running under FCEUX when TASEditor is engaged Segmented scrolling of the input list * So you have a 1.6M frame movie. Moving the scroll bar can potentially jump thousands of frames per pixel * Suggestion is to restrict that range to within segments defined by user * I don't have a clear design, and this will likely take some thinking. Some way to simply not follow cursor when emulation is running * Behavior is to always scroll in some way relative to cursor upon frame advance * Does the cursor have to remain visible at all times on a frame advance? * I want to be able to click the target frame I want to stop at without telling the emulator to hold still while I find it * Modifying past input is rather jumpy at times * To work with the next point beautifully A mode to engage emulation automatically to a specific frame after changing input * Current behavior is always to go to the earliest frame of changes applied, if in the past * I want to see results of what happens out to a particular frame upon changing input * Envisioned behavior is to try to seek to the frame we were just at after changes in the past; inserts and deletes should optionally adjust seek frame * Will not be so convenient if the cursor is always followed Someone else already mentioned lua functions.
Post subject: Autosave timer persists after closing TAStudio
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
* Open BizHawk * Open TAStudio, and set an autosave tmer you'll notice, like 60 seconds or less, but not so fast you expect immediate saves * Close and re-open TAStudio a few times, without closing BizHawk * Open a sizeable project in TAStudio, something you'll notice a delay when saving * Do random TAS stuff for a few minutes When engaging TAStudio, it apparently begins an autosave timer. When closing it, the timer persists and remains active, and will trigger a save with its own timing when TAStudio is engaged again without first closing BizHawk. This timer will attempt a save without announcing it on the status bar in TAStudio, but all the appearances of an auto-save, including the delay from the save itself, the asterisk being removed from the title bar, and the omitted yes-no-cancel question when closing TAStudio, are still in place. The save did actually take place, and re-opening the project later will show the latest changes. These timers will stack up with multiple closures and openings of TAStudio, and will only go away when BizHawk closes. I have the autosave set on a 20 minute timer, as each save takes several seconds to complete, and things are generally unresponsive while I wait. I am noticing it when I get freezes in quick succession despite the long timer when I have closed and re-opened TAStudio for one reason or another. That is what I have noticed, and my diagnosis of the problem as well.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
ThunderAxe31 wrote:
Amaraticando wrote:
I'm still wondering what's the purpose of some body upgrades...
Me too lol. I suppose the only way to discover that is by reading the game code... Too bad mGBA doesn't support trace logging. But maybe there are still other ways...
I'm pretty sure the effects include: * Increasing the number of questions of what the equipment does * Decreasing the number of seconds available for analyzing other mechanics in the game * Changes distribution of discussions to include the effects of equipment with greater frequency I'd say the effects are pretty varied. I did not know this game could attach such an intricate effect on anything in it.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
I'm bad with making videos. I would love a comparison between my VBA run and JCBoorgo's BizHawk run. I do have a few criticisms though, considering my prior TASing experience. Ball's flight time is usually vastly longer than any adjustments in aim or changing clubs. Adjusting aim to get the ball closer to the pin on your next shot should generally be faster, as that would be that much less distance to travel when you swing once more. In a few cases, I think the hole can be cleared in one fewer shot (7, 11, and 18 are ones to look at). I saw, at one point, a Sw used, which hits at a particularly high arc, as compared to, say, 3I. Is the input time to switch to the 3I or some other club longer than the change in flight time of the ball? Anyway, those thoughts stick out at me.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
I got together some of my older files and uploaded them. A script, converted for BizHawk. A few holes I did with Neil on VBA. Through Marion using Ella on VBA. Hopefully, these will prove useful in some fashion. These aren't doing anyone any favors if they exist only on my backups. As for your resync, yep it works now. You've got support from a few of us already, so keep going! I'm hoping flag shots aren't too difficult to make with a script telling you the distance to the pin as the ball moves. One more thing to experiment with is to try missing the perfect impact timing. Maybe even completely miss the Impact Zone entirely. This affects the flight path of the ball, and might occasionally give a desirable outcome. One more tool to think about in your quest to win those tournaments in less than an hour. As for whether we should skip holes by giving up, there's a detail about how much EXP you get based on your score. A TAS can Give Up more holes than RTA, but a higher level gives higher Drive. Hard to be certain what is optimal, though, since even selecting which holes to Give Up in is itself in need of route planning. Risky clubs only show up basically after you beat the game. Probably not helpful for our speedrun.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
Well, in a speedrun I linked earlier: https://youtu.be/2PTSr8QpsTM Skip a few minutes (go to 4:47). When the speedrunner gains control of Ella (his choice of character), look at which options he takes. Save & Quit Save current data? No Return to the main menu? Yes After that, selecting Story Mode will not ask you if you wish to continue from where you left off (though you can say no to that as well to get around it), instead it offers a few other choices. This is where the menu tournament selection is. Figuring out how things work even in menus can sometimes be unexpected. Don't be afraid to explore every option. Actually, there is even another menu option to look at. Once in the tournament, the pause menu has other options. The 3-D Shot Screen can be turned off, and the transitions slow you down every shot if you leave it on. It takes a bit of practice to know how to really explore the game. Sometimes even the options have stuff in them that's critical in speeding things up.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
This is strictly console verified, as it's the PS4 that's accepting your commands. Right? One thing I am curious about is whether inputs can be recorded and played back using something like this. You know, pull out that controller, do some actions, then reset the game back to a known state and see if whatever program you had recording the controller can play it back flawlessly. If it helps, this project is interesting to me. At least, a string of commands from a consistent starting point is giving relatively consistent results, so there may be hope for, at the least, small TASed segments. We probably won't ever get consistent loading times, so I suppose one step is to somehow read the output of the game (video/audio) and time our inputs based on some clear cues. Even then, input lag and inconsistent internal timing might be a problem.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
Welcome! It's always nice to get more people coming here. I have done some TASing of this game myself, but most of it was on VBA rather than BizHawk. I want to give as much information I can. I know a few things about this game, and want to give you the best chance I can. I'm not sure if it's the fault of my settings or whatever, but I'm getting a desync at the first hole when viewing your run. Anyway... The introduction. You can save and quit the instant you gain control over your character. This lets you skip a bunch of dialogue. In addition, this might also be a good time to set fast text speed. Lastly, the golf tournaments are available from the main menu, rather than having to walk there yourself. You can clear the game any% just fine with Singles alone. If your goal is to get to some sort of ending, this would likely be acceptable. Luck manipulation: Wind, rain, and shot variance depends on RNG. As you should be getting Eagles or better, there will be confetti in the animation. This confetti has the power to call winds and summon rainstorms, by delaying some frames at that screen. If you need to tweak the wind, that would be the way to do it. A list of luck manipulation methods I know of: * Delay at confetti screen * Delay during rain * Switch to Green close-up view * Delay long enough to hear a chirping bird If your goal is speed, you'll want to get to your next shot as quickly as possible. If your ball is traveling slowly, it's spending those seconds being slow rather than dealing with your next shot. And if you can reach the hole with the next shot without that extra distance of a Topspin, it might be a good idea to use a Backspin instead. Don't be afraid of rough terrain. In fact, if you can still reach the hole from there, going into a Rough is actually an advantage. With reduced maximum power, you can confirm your shot sooner. Additionally, rough terrain lowers the height of your next shot, meaning the ball spends less time in the air. I'll have to find some of my things. I do have a fun side TAS (.vbm, for VBA, not BizHawk) where I make a variety of shots in a contest. Once I'm better organized, I'll track down some of my older things and let you take a look at those. I'll be giving my support in hopes you can create a good TAS. I am aware of one speedrun you can watch, if you need ideas. https://youtu.be/hH7Gz2wJFTY EDIT: Oh, this guy beat his older run I linked up there. https://youtu.be/2PTSr8QpsTM
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
pirate_sephiroth wrote:
The winning team is obviously the one I'm in, if I decide to join.
Excellent! Then that team is the one I shall join! I agree to pair up, if pirate_sephiroth does join. This time, no sarcasm.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
Sorcerer's Maze was indeed released IN Japan, but under a different title: "Prism Land Story", or "プリズム・ランド・ストーリー".
Someone mentioned this in YouTube, in the comments section of the published video. We might have a description to update.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
On the 18th, I recommend assigning teams randomly, as a preliminary, so that we have a chance to say hi to each other and all that. And to give us a chance to reassign before the proper start. And all those nice things about having teams ahead of time. Put anyone who hasn't made any input about which team in italics. If you can, put me in the winning team. If you're having trouble, it means the team that gets 1st place in a few months. All you need to do is have information travel backward through time by a bit over 3 months, don't even have to send physical particles back through time. I'm sure whatever algorithm you come up with to put me in the winning team will be satisfactory. EDIT: Of course, I mean that second paragraph as a joke. But just in case, I'm letting you know that in small text. Sarcasm detection isn't perfect.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
I'll bite. Surely a champion of two DTCs might stand some small chance. I know a thing or two about using lua and analyzing games. I've got a bunch of things I need to set up on this new laptop, though. Now would be a good time to suggest online chatting programs.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
Library-free splitting, if I understand modulo right:
Language: lua

local FourBytes= 0x87654321 local Byte1= FourBytes%0x100 local Byte2= (FourBytes/0x100)%0x100 Byte2= Byte2 - (Byte2%1) local Byte3= (FourBytes/0x10000)%0x100 Byte3= Byte3 - (Byte3%1) local Byte4= (FourBytes/0x1000000)%0x100 Byte4= Byte4 - (Byte4%1)
Then again, this assumes library function calls are worse than operator calls by a rather significant amount. You can probably skip the subtraction by comparing >= 1 as opposed to ~= 0. Haven't had much in the way of further ideas, so I've been pretty quiet. That, and other projects have been distracting me, and a few errands as well.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
Well, if you're going to keep a cache of the current screen, you will have no fewer than (320/16) * (224/16), or 280 elements. Slightly more, as the screen moves and shows parts of some lines at the edges. If you allow the display to scale out, a 0.5x zoom has this at 1120, provided the zoom stays entirely within map bounds. Reducing this number doesn't look feasible to me. Any particular reason for clearing the screen edges you're leaving from? I don't know the internals that lua goes through to locate table elements, but I'm hoping the search is fast enough to not care too much how many things are in that table. I'm also looking at GetBlock to see if there's any speed-ups I can do relating to it.
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
I don't mind optimizations based on apparent skill or techniques. Everything after Rupturefarms are all fine, as we need to kill stuff ourselves. Time is still a good criteria for obsolescence, and having a lower time is often better, no argument there. The point of contest is Rupturefarms itself, though (as I perceive it). Do we allow a maximum casualties run to use a checkpoint to skip the kills?
Editor, Experienced Forum User, Published Author, Skilled player (1197)
Joined: 9/27/2008
Posts: 1085
Been a while since I last did any lua scripting. Had water damage to my previous laptop, and haven't set this new one up with TAS tools.
Language: lua

for i = PosToIndex(basex-32,basey-32), PosToIndex((camx+boundx+32),(camy+boundy+32)) do
Let me see if I'm reading that right... Start: PosToIndex(basex-32,basey-32) End: PosToIndex((camx+boundx+32),(camy+boundy+32)) Step: 1 (implied) So this loop iterates from the index of the top-left corner to the index of the bottom-right corner. However wide the map is, this will also catch every tile to the right and left of our target region, except for the top row off the left and the bottom row off the right. I think I see why the checks for in-bounds, which do add a bit more processing.
Language: lua

local x1, x2= math.floor(camx/16), math.floor((camx+319)/16) local y1, y2= math.floor(camy/16), math.floor((camy+223)/16) for yTile= y1, y2 do for xTile= x1, x2 do local i= xTile + yTile*xblock
One quick thought here. You have your index, and which tile by x and y. You're also only looking at in-bounds tiles, so we shouldn't need checks for out of bounds. Well, aside from strange cases where the camera shouldn't be. I don't happen to know whether the for loop would call the ending parameter multiple times. The PosToIndex((camx+boundx+32),(camy+boundy+32)) part. I set a variable above the loop and use that rather than the call to be sure it fetches the value and not make function calls every loop. Again, a habit of mine to be sure.
Language: lua

if unit == nil or workinglast>0 then if (unit == nil) or (workinglast>0) then
I have bad memories about the order of operations involving compare and logical operations. From now on, I bracket the compares I want done in parentheses, just in case. I don't know how well my bad memories apply here, but I use parentheses readily for my own sanity. As for your cache, every time the working variable resets to zero (working == 0 ; workinglast ~= 0), assign an empty table to cache. Don't even bother trying to blank out the individual elements, let the garbage collector kill the older table. I'm assuming the map doesn't modify itself as long as working remains zero.
Language: lua

cache[i]= cache[i] or GetBlock(x,y) if cache[i] then
The or logical operation will have a value equal to the left parameter if it is not false or nil, and won't even run the second parameter in that case. If the left parameter turns out to be false or nil, then it will use the second parameter, making the function calls if any exist there. It's a nifty shortcut to remember.
Language: lua

if val>0 then if val==0x80 then -- WALL col = 0x00ffffff -- white line(x1,y1,x1,y2,col+op) -- left line(x2,y1,x2,y2,col+op) -- right elseif val==0x81 then -- CEILING col = 0x00ffffff -- white line(x1,y2,x2,y2,col+op) -- bottom --And so on
I don't like a chain of elseifs in my code. I do whatever I can to turn it into a table instead:
Language: lua

local white = 0x00ffffff local orange= 0x00ff8800 local opout = 0x33000000 -- outer opacity local opin = 0x66000000 -- inner opacity local op = 0xff000000 local DrawTile= { [0]= function() end, --do nothing if zero [0x80]= function(x1,y1,x2,y2) line(x1,y1,x1,y2,white+op) -- left line(x2,y1,x2,y2,white+op) -- right end, --and so on } local function DefaultDrawTile(x1,y1,x2,y2) box(x1,y1,x2,y2,col+opin,col+opout) end --Pretend we're in your function now local Fn= DrawTile[i] or DefaultDrawTile Fn(x1,y1,x2,y2)
I've got just these thoughts to start. If it's still not fast enough, I can see if I can reduce the code further. These are all the points that strike out at me right now.