Posts for AdituV


Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
My script is only for US right now, so yes. It would be pretty easy to adapt it for JP though, just needs a few memory addresses (gTextPrinters, gMain, maybe something else I forgot)
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
Quick lua script prototype, toggled by pressing K: https://gist.github.com/adituv/c45b80bb74dbe4815f737def015ff4fb This script handles automatically advancing text from the main printer, both in and out of battle. In-battle it has a few unnecessary inputs but I do not think they lose time; this is because of auto-advancing textboxes. This should be easy to fix once we locate gTextFlags. I tried to make it able to handle loading savestates gracefully, but this doesn't work well with seeking from savestate in Tastudio, so be careful with it.
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
Is it possible to set Bizhawk to have the RTC clock fail like on a real console without using cheats? I've heard that it's a net benefit to have that as it reduces (or removes?) random calls on your Pokenav. I made the following cheat to emulate it in the US version in the meantime, but I'd rather set it up legitimately if possible. 03000DB8:0021 - set sErrorStatus (rtc.c) to (RTC_ERR_POWER_FAILURE | RTC_INIT_ERROR) I've also found a couple of things to do with text printing when exploring the game's memory, that could make TASing a bit easier. All addresses are for the US version.
  • Two main TextPrinters used, as far as I looked: one for shops and one for most other things.
  • The main TextPrinter used is at 0x020201B0
  • The shop TextPrinter used is at 0x02020264
  • Out of battle, there's a two-frame delay between the main TextPrinter becoming active, and being able to speed up text printing
  • If the state (at offset +0x1C) is 2 or 3, an A press will advance text.
I haven't found a reliable condition for when to press A to close a textbox yet. Once you have this, it should be pretty easy to write an automatic text-advance lua script and speed up TASing significantly.
Post subject: Skies of Arcadia Legends
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
Yet another super-long RPG to TAS. There's loads of dialog so it probably wouldn't be the best to watch but routing it seems interesting as we can abuse RNG manip to pull off strategies that would never work or be too risky for RTA. There are some speedrun notes for RTA here I'm looking at as a starting point: https://www.dropbox.com/s/3nvsq816rkztmhv/SoAL%20Notes_V5_ArcadiaLegend.doc?dl=0 An example potential rng-based improvement (as noted in the notes) could be to guarantee one or two electri boxes from the opening battle, and use them against Antonio. Each one does about 20% more damage than Aika casting Pyri, and can be stacked on the same turn as they don't use MP. However, spell casting animations seem to take longer than normal attack animations, so forcing crits with Vyse may be overall faster still. I have partially reverse engineered the RNG as it applies to random drops:
  • The roll for whether to drop an item starts at 8002bad8, and is called as an enemy dies, before the animation of them taking fatal damage occurs.
  • If the drop chance is greater than 100, this isn't called, and the item drops immediately instead.
  • The PRNG used is free of side-effects such as cpu time dependence, and does not appear to be affected by controller inputs while animations are playing in battle.
  • With a breakpoint at 8002badc, the random number rolled is in r3; the percentage chance to get the drop is in r27.
  • If (r3 % 100) < r27 the item drops
  • The PRNG value does not advance at all by waiting on the battle menu, and advances by 1 when you choose attack.
The random number rolled is unfortunately never in memory (though the LCG state is, and it could still theoretically be calculated from that) so it's hard to put a watch on it. The memory address of the item's drop rate depends on which enemy is dying so watching registers at a breakpoint is unfortunately the most sensible way to do this. The rng function is found at 8025ECC4, with state at 803469A8. It is a standard LCG with parameters: multiplier 1103515245, increment 12345. As the rng does not advance at all in battles, it looks like you have to set up the rng state before entering the battle at all, which is going to be an absolute pain... Update: it looks like the rng is reseeded from the CPU clock (low 32 bits of the timebase register) on entering a battle; this happens at 8000a1d4. The timebase register increments multiple times every frame, and not always the same number of times, so as far as I can tell this restricts RNG manipulation to pure trial and error, as well as making battle rng dependent on system time...
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
Success!... ish I got a very fast quiz but I couldn't get all the questions I wanted to come up with the answers I needed to give to get Quirky, so I had to compromise on question selection slightly. This quiz loses I think ~4 frames but possibly up to 8 frames over one where we could get whatever categories we wanted to come up at any time. http://tasvideos.org/userfiles/info/43741669832139165
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
I'm looking at doing a theory TAS of the current any% (meowth) route. I did a quick test up to the end of Thunderwave Cave but no point sharing it since I'm redoing the quiz now to be frame-perfect. I think this is the fastest quirky (Meowth) quiz:
Do you like pranks (1) Do you often yawn? (1) Do you tend to laugh a lot? (2) Are you a cheerful personality? (2) Can you go into a haunted house? (1) On vacation outings, you want to... (1) Can you focus on something you like? (1) Do you fall asleep without noticing? (1)
I'm still trying to get these questions to be the ones that come up, though ---- Edit: My planning was based on Bulbapedia, choosing the fastest options in each category, and changing the answers just slightly to get quirky. Working spreadsheet: https://docs.google.com/spreadsheets/d/1VlJZpUCGAlDtCx3bmnGTMm7tMmlXWLnsT1ocK63aY3A/edit?usp=sharing ---- Edit 2: updated quiz options
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
I'd love to see a good TAS of GS2, so I really hope this goes well! One thing though: for GS2, do you really want to name Felix a 1-character name? The time spent for Felix's name to be written out in textboxes before you gain control is really negligible, and you can change it to I think 1 frame per word on Fast speed as soon as you gain control in the intro. In addition, in RTA strats the name is normally set to a specific value for "RNG" manipulation, in particular the Great Gabomba puzzle configuration, which saves far more time than the few frames in the intro.
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
I started on these memory watching resources a while back but never got around to finishing them: https://docs.google.com/spreadsheets/d/1q9eNkOBX3dRtC2A5Dh3CHBt_HV92VsytqS5JKxZrdL8/edit#gid=714475538 I also made a little tool to show your current bonus calculation information. https://github.com/adituv/FFCC-Helper (Download precompiled executable)
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
I started working on Final Fantasy: Crystal Chronicles a while back. I'm currently busy on other projects right now but if anyone wants to use this as a starting point: https://docs.google.com/spreadsheets/d/1q9eNkOBX3dRtC2A5Dh3CHBt_HV92VsytqS5JKxZrdL8/edit?usp=sharing
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
Since no-one else has mentioned it yet: there is a new(ish?) glitch called the Hazard Respawn Glitch. Whenever you touch the ground (maybe after a jump only?) while having control of Mario, the game updates where Mario should respawn if he falls into a hazard. If you jump frame-perfectly upon landing each jump, this doesn't happen, instead respawning Mario in the center of each room. This so far has three known useful applications (two in all versions; one not useful in JP): Prologue: Blooper skip {video 1} {video 2} (2 frame-perfect inputs onto boat panel, where the respawn position also doesn't update. RTA viable) Chapter 1: Bridge skip {video} (~10 frame-perfect inputs into river; 1 frame perfect-input on respawn) Non-JP: Ms Mowz skip {video} Other applications include a faster/easier West Rogueport Early (as in Ms Mowz skip, just go straight past both rooms), and TTYD room early (same, but Goombella buffer out of bounds and walk on the seam to the Pit pipe)
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
What have you done about the randomised spawn positions of the monsters who hold the keys? I don't know all the spawn positions but it seems like you have to go relatively out of your way at times Otherwise mostly great! I'm really impressed with what I see. Interesting that Yuke is fastest, since that's the only one that no-one has completed an RTA speedrun with (thought RTA does have access to the infinite gil glitch to get awesome physical weapons immediately) One other question: do you know what the probability of getting the cure ring from that chest in Selepation Cave is? I did a few runs to that chest on PAL (about 20) and only found two different armour designs so I'm wondering whether that's a version difference
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
Warp wrote:
AdituV wrote:
I find it problematic in context as it erases and invalidates the experiences of a marginalised group at this specific point in time.
Could we please leave the feminist rhetoric out of this? It tends to turn things nasty. (I have seen what it does to other communities. Please no.)
Quite simply no. There is a time and place for "feminist rhetoric" and responding to something like that is indeed that time. And sure, I could have said it in other language at about 5-10 times longer and I just don't have the energy to translate from "feminist rhetoric" at the moment. Actually, I take that back. I think I just won't contribute as the only reply I've got (bar one nice pm) is complaining about this "feminist rhetoric". Clearly people want to hear their own opinion expressed by other people more than to listen to a dissenting experience.
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
Lex wrote:
moozooh wrote:
It's simpler to an unrelated outsider, but imagine if this is something that your best friend, or a close relative, have to go through. Wouldn't it shock you even a little if your mother decided a male body would fit her better? For you, the notion of their entire person becomes challenged and you have to scrap and rework a very important piece of your personal reality. For them, there is the fear of showing the changes to you and your potential disapproval. A lot of things can go wrong here because for you the change is mostly destructive—you have to come to grips with a significant part of your worldview being instantly invalidated; for them, it is mostly constructive because it's ultimately worth the sacrifice of silent convenience of "don't ask, don't tell". It's not the sex we're celebrating; it's the courage.
No, wtf. My "worldview" about this person wouldn't have changed at all. There is no "destruction". I, personally, treat male and female gamers equally. I also treat male and female close friends equally. If my mom were to decide she was a man, so be it. I'd consider her the same person, since she would be. I have no interest in sex with my mom, so there's exactly zero difference to me. I wouldn't have to scrap and rework any important piece of my personal reality and it's ridiculous to imagine that I would. Can't you guys see that this all affects ONLY sexuality? Someone being male or female doesn't matter except in sex unless people are fucked up and treat males and females arbitrarily differently. The whole pronoun thing is stupid and I would prefer a language that just doesn't refer to people by their sexes since it doesn't matter, but I'm stuck with English for convenience. If every person on tasvideos was male, I would consider the site in the exact same way as if every person on tasvideos was female. There's absolutely no difference. It shouldn't require any "courage" to decide you have a different gender because nobody should care either way. People who care about it are short-sighted and sexually biased.
There's a difference between what the two of you are saying. Lex, you seem to be talking about an ideal world, in terms of what it should be. In that case, yes I agree that gender should make no difference. However, in practice it does. And people do change after coming out to themselves. Take it from me, everyone treats me differently since I came out, including me. Like #alllivesmatter, the eventual aim you're talking about is admirable, but I find it problematic in context as it erases and invalidates the experiences of a marginalised group at this specific point in time.
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
Invariel wrote:
Remaining silent is nice, it sends the message, "Oh, trans-issues are less of a thing and people are more accepting of one another as humans and less as binary choices that have to be filled out."
Interestingly, there's a talk/debate/discussion combo thing on at my university soon as part of trans* awareness month: The Pros and Cons of Visibility. Would you or anyone else be interested in notes on that?
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
Lex wrote:
The only people who should be interested in someone's sex are people interested in having sex with that person. I am not interested in sex with this person and this community isn't meant for that anyway, so this is all of no consequence to me. The same should go for everyone else uninterested in sex with this person. Those who are interested should keep it between themselves and that person or in some other community with that topic, like xhamster or pornhub or whatever. This is a video game community, so it has nothing to do with that.
It isn't a sex thing. At least, it doesn't have to be. It's really hard to describe a priori, but it's more like a "No, that isn't who I am! I'm this other person who I haven't really shown you yet". Unlike LGB stuff, it matters in your day-to-day life with how you're treated and how you're perceived. Being transgender does not mean having genital reassignment surgery; it's just who you are. I like what Moozooh said - I think it sums it up quite well - "the world wants old 'me', even though the current 'me' is the real one". This is one reason why this is important: supporting and acknowledging, rather than disparaging her announcement. Less important in this specific place is encouragement. However, transitioning is a very difficult and long process, with societal and medical structures that constantly make you question yourself, with strong feelings and implications of being an imposter. And that's why I want to post such encouragement on here as well as on twitter, on the offchance that she may see it when she needs it. Similar things really helped me too.
Invariel wrote:
There's still a stigma around gender issues, particularly trans-issues, and it takes a lot of courage to stand up in the face of all of that and say, "No, seriously, the physical of my body and the makeup of my mind disagree, and we can change the body medically now."
While I mostly agree with what you're saying, there is one strong misconception I want to point out, and in fact have pointed out above. GRS is not a requisite of being transgender, nor for many people the goal of coming out, and in fact unless you're a Jenner-or-similar, basically impossible to get near-immediately. I probably have about 2 years of therapy and other treatments before making the waiting list for GRS if I choose to go down that route. The mental and social aspects are generally far more significant than the genitalia.
Post subject: Re: OoT runner Cosmo Wright goes transgender (split from OoT)
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
Synx wrote:
Previous WR holder for this game in the any% category Cosmo Wright has announced he is Transgender and will now be known as Narcissa Wright. Source: https://twitter.com/narcissawright It has been a long time since he was actively running OoT, but I will always remember his amazing run when he set the world record the last time. I know he reads these forums so I would just like to take this opportunity to wish him good luck with his personal stuff and I hope to see him back in OoT at some point either as Cosmo or Narcissa
First things first, please use the right pronouns! Though I can't see whether Narcissa has specified them anywhere, it's normally a safe bet that the right ones won't be "he" :) Anyway... SDFDSF SO HAPPY UNBRIDLED JOY! I'm a transwoman myself and seeing other trans* people start to really find themselves and confidence in themselves just fills me with huge amounts of vicarious happiness I might explode! :) :) :) Side note: could a mod please change the title? "goes transgender" is... ugh, not an accurate or nice way to say it at all. "Comes out as" or "announces that she is" are much more preferable alternatives :)
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
geniusmind wrote:
I am using it for a N64 emulator and the ROM is Majora's Mask. I don't really know if is a gameshark code or codebreaker i got it from this website http://geckocodes.org/?c=NARE the code i am trying to use from the website is Remove Main Music Track 0519B848 00000000 0519B938 00000000 Thanks for the reply BTW.
I think that website gives Gecko codes for the Wii Virtual Console, which won't be compatible with other N64 emulation. I don't know how the VC handles memory, but if you can find a base address where the emulated console's memory starts, you might be able to convert these codes. Assuming it is indeed a Gecko code, this code does the following. Relative to the VC memory, rather than emulated memory:
  • Set the DWORD (4 bytes) at 0x119B848 to 0
  • Set the DWORD (4 bytes) at 0x119B938 to 0
Using the infinite health code as an anchor, this MIGHT work, but there are no guarantees:
8127E768 0000
8127E76A 0000

8127E858 0000
8127E85A 0000
What would be better is for you to find the memory address where your health is stored and use that to calculate your offset; I've done this just from codes I've found on the internet, and can't verify the correctness of any of them, or version differences. My working is below:
Health in VC: 110C786
Health in GS: 1EF6A6
Offset: F1D0E0

DWORD 1: 119B848 - F1D0E0 = 27E768
DWORD 2: 119B938 - F1D0E0 = 27E858

(N64 gameshark can only write 16bit at a time, so split each DWORD)
---- Details on how each code type works:
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
Which console? And is it actually gameshark, or action replay, or codebreaker, or...? Can't easily help without knowing that first
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
Pokota wrote:
which fails because table.getn(keysArray) returns 0. Is there another way to check table length that I've overlooked, or is the table library not implemented or am I just being a dumb?
`getn` returns the length of the listy part of the table: the number of positive integer indices. As far as I know, there's no built-in way to count the number of keys total. Instead, as you seem to be only using one button press each frame, you could use something like reservoir sampling? That would look something like this (untested):
Language: lua

local keys = joypad.get(1); local count = 1; chosen = nil; for k,v in pairs(keys) do if math.random(count) == 1 then chosen = k; end count = count + 1; end keys[chosen] = true;
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
asianking wrote:
the reason I rather do the tool than the math is because not everybody would put an effort into a project. I'm just here making everything easy for everyone and yet a good experience in programming. About the source, it's the excel sheet...
We were talking about the source code of the GUI tool. Even what you say is a false positive is worrying as we have no way of verifying whether it is a false positive or not.
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
So basically...
gs = ce + 0x7F574960
That's it. Why the separate tool and not just the information? I was bored, so here. Have an open source javascript webpage implementation: http://jsbin.com/xudahuhola/1/edit?html,js,output I haven't tested this against the emulator with cheat engine, and support nothing. This is just a javascript reimplementation of the excel spreadsheet by 'ChaosLady' linked in the first post.
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
Overall, my point is that at the level you're doing things, small cost increases don't matter. Sure, it's slightly slower, but the win in being easier to read is way more valuable, at least to me. The expensive bits are going to be cross-language calls, and big calculations, e.g. with nested for loops (quadratic time complexity, etc)
MUGG wrote:
The first code in my previous post is part of function GuiLoadSettings() and it occurs only once when you load the script. Doing expensive operations on a one time instance is ok. But the 2nd/3rd code runs every frame. And since you said doing a["string"] is slower, I will not go for it.
Alright, I'll change my argument: drawBrosPath() is going to be much slower than the difference between a["var"] and var, so much that the latter change will be negligible.
MUGG wrote:
The only way I see how I can do it is to change all the variables into numbers, so BoolBrosPath becomes value in a table for key "1", BoolNotifications becomes "2" etc. But then the code becomes highly confusing. So not going for that either. I think...
Doing this has the same (or very similar) cost, as it still is a level of indirection on a table, but is harder to read. I'd really recommend not doing that.
MUGG wrote:
local SettingsTable={
[1]=false, -- BoolBrosPath
[2]=false, -- BoolNotifications
...}
^ Is that what you meant parsing it into a setting table? Thanks for the help so far
For the settings table, yes, but I meant still with string keys - as I said above, the cost of string key to integer key is comparable. Once again, I'd like to emphasise: you don't need to worry about microoptimisations in performance like this. Write it the way that is easy to read, understandable, and in a way that expresses your intention, then if it's too slow THEN worry about optimising. And even then, you should be looking at inner loops, etc, before getting all the way down to an extra indirection level for a few variable accesses.
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
It will be slower, but only by a constant factor, and that should be a small factor at that. I can't imagine Lua taking more than a couple of indirections to access a table value, so it should still be fine in terms of performance*. Plus, you're already doing a suboptimal (but definitely good enough) string.find which is way more costly than swapping variables to table values. I personally think parsing the entire text into a settings table would be better, but up to you of course! * As always, you never know exactly how it will perform until you actually test performance yourself.
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
Samtastic wrote:
Is there a way you could create a resync workflow between Bizhawk and PCSX? Every time a desync ocours in bizhawk, PCSX sends the right snapshot over to PSXHawk.
Theoretically possible, but no way I'm doing this. It's a lot of work for something not very useful. And with emulation bugs, etc, there's no guarantee that an effect observed in PCSX will happen in PSXHawk, so it may not always be possible to resync a movie, particularly if it uses something that the original console and BizHawk don't do.
Experienced Forum User, Published Author, Player (74)
Joined: 8/26/2015
Posts: 70
ReyVGM wrote:
RagnorokX wrote:
I really don't have permission to download anything major, and Norton was my default. So fuck off.
So you can't download jack, but you can say fuck? What kind of norton-installing parents do you have that allow you to have that fetid mouth?
Oh shush. My parents were like that - very liberal (not in the US sense) generally, but a bit controlling about technology because they knew just enough to be paranoid. I actually appreciate that, as it means I have to do so much less "grandma"-style tech support. I had to use Norton until I was old enough to convince them I knew what I was doing and Norton was no good. Not that Norton's too bad any more, just it has plenty of broken things, like refusing to allow signature exclusions for WS.Reputation.1, and more importantly (for programmers), the current version won't let me set an exclusion for programs I WROTE and am trying to debug. Yes, they have code included that allows other processes to hook into them... it's called debugging -.- (The set exclusion dialog exists, but does nothing). I don't know whether they've fixed it, but it was such a pita at the time.