Posts for OmnipotentEntity

Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
ruadath wrote:
So after extensive discussion on IRC, and some testing with a physical console, it turns out that even putting aside RAM initialization issues, the game is not being emulated correctly. There are apparently some issues (among other things) with the sound effects in this game that bsnes cannot emulate properly
I wasn't aware of this. Do you have a reference?
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Post subject: Re: Unitialized RAM values and games that use them
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
ruadath wrote:
There was some discussion on the irc today about certain SNES JRPGs (like Tales of Phantasia) having different initial RNG configurations based on whether BizHawk or lsnes was used. After doing some digging, it turned out that the source of the discrepancy was that the game seeds its initial RNG state with values of the RAM prior to initialization. lsnes sets its uninitialized RAM to all 0x55s, while BizHawk apparently uses some fixed pseudorandomly generated RAM state. This brings up the question of what counts as a "proper," "valid," or "acceptable" initial WRAM configuration. I could not find any documentation on this topic so I thought that I would make a thread for people to discuss their philosophy with regard to this issue and perhaps even some actual data (if anyone has it)! After some contemplation, I justified the "legitimacy" of my BizHawk run to myself by arguing that since the random number generation only depends on two bytes, the entropy is low enough (65536 states) that it is possible for a snes to power on with the RNG seed that BizHawk generates for it. But that begs the question, why is it the case that adjusting the initial RAM values is not allowed by site rules? Why is the particular set of random values generated by BizHawk (which more likely than not do not correspond in any way to the values that a physical console would produce) preferred over some customized starting configuration? Just wondering what people's thoughts are on this matter.
Some bits are correlated, some are anti-correlated. This might be true of groups as well. We don't know enough to demonstrate which power on states are valid and which are not. In order to get sufficient statistical power, as much as a few hundred or few thousands cold power-ons can be be required. Once this work is complete, the plausibility and possibility of various power on states can be evaluated. Until then, taking the conservative route is prudent.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
0^0 is an indeterminate form...
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
r57shell, You've agreed that there is a velocity along the radius. If there is a velocity along the radius then the radius must change. Because the velocity is monotonic constant and in the negative direction it must constantly decrease. But in order to arrive at the next corner, it must attain the original radius. So therefore it cannot.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
eternaljwh wrote:
A program for dumping ROM through PCM already exists: TapeDump. A modifier to make it RAM instead would not be all that hard, though I'm not sure if he's released source. I suggest running your cart-variables that aren't in registers through on-cart RAM. Don't forget: no interrupts nor subroutine calls until you've dumped stackpage.
Sweet! Thanks for the resource.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Post subject: Re: This run is awesome. Please let it stand on its own.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
dwangoAC wrote:
The only reasonable case to reject this run is that it does not use pure controller input but I think this limitation is unwise in this case as the expansion port is a valid port exposed to the end user. Therefore, this gets a Yes vote from me.
Disclaimer: I don't necessarily disagree, but I would like to play Devil's Advocate for a short period of time, because I think this is worth fleshing out. The major difference between the two types of ports is that controllers are designed to be used by a human, whereas the expansion port is designed to be used by a piece of hardware. From the perspective of the SNES, user input is user input, and there's very little distinction. But from the perspective of a human player, one is an input they can use, and the other requires specialized hardware. While we are not ruled by the standards set by the speedrunning community, there is significant overlap between the communities of authors and viewers, and we do take cues back and forth. Most speed records disallow the usage of custom hardware. This rule was adopted to prevent usage of autofire and other controller features, but custom hardware to insert a ACE payload would be similar if not more egregious. Personally, I like to think of a TAS as sort of an ideal. If I were infinitely good at a video game, and I sat down, how fast could I play it? Movies like this challenge this idea, because no matter how good I am, I don't have a method of interacting normally with the expansion port. Again, I'm fence sitting, and I don't have a strong opinion either way. But this, at least for me, brings up the questions of what a TAS is, and what a TAS should be, and I think that these questions should at least be explored.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
This is known as the "curve of pursuit." Also known as the "mice problem." I don't know the solution to the curve, but it should be rather easy to set up the parametric differential equations. I'll leave that to someone else though. Here's some fun reading though: https://overlordoftheuberferal.wordpress.com/at-the-mountains-of-mathness/persecution-complexified/
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
It's happened, we've detected an extraterrestrial signal: https://youtu.be/G03NclAi_qs?t=5024
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
Warp wrote:
Mothrayas wrote:
what makes it not a playaround, or not comparable to a playaround?
It doesn't actually play the game, but for a few seconds only. The rest is purely a demo.
Would you agree that the author "plays around" while demonstrating and making the demos?
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
TheBirdOfPrey wrote:
Your suggestion of having the devs push a patch to the game is not so simple, they would have to deal with publishers, verifying the build stability, there is many more steps and bureaucracy to that process than is immediately obvious.
... Thank you for that lesson on the complexities of indie development and publishing of which I was entirely unaware. I'm not suggesting that they're going to drop everything and do it, but it's entirely possible to get them to roll it into a maintenance patch, presuming they're still touching the game, or at the very least sign off on it as being closer to the ideal of the game than they published, which will make it an easier sell to the site staff.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
BrotherMojo wrote:
...that said, I understand that's not exactly a decision made in the interest of "being faithful to the original release." The mod is developed for Dustforce players as a whole, it has quite a few great features for TASing but some of the decisions have also been made with the RTA player-base in mind. In that case, the decision was made so that determinism would be preserved on an individual-level basis, so if you miss a critical attack on a group of enemies, that means you positioned yourself incorrectly, or mistimed it, or some other mistake on your part as a player, rather than having gotten bad RNG.
Well, the good news is that if msg555 has the source code from the dustforce team, and they actually intended there to be no RNG, it shouldn't be difficult to convince them to pull your patch and release it in the base game assuming it was done cleanly.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
TheBirdOfPrey wrote:
My previous comment still stands, I believe we need to talk with a Site Admin and/or Senior Judge in order to verify that our submission would be within the guidelines of the site.
I'm neither, but I can tell you that the method you describe is not be within the guidelines of the site, unless you can demonstrate that if you fed the keystrokes into an unmodified version of the game it would function in the same way (and then only maybe, it will be slightly contentious).
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
feos wrote:
Does anyone have a screenshot suggestion?
The frame labeled 25:20:20 on Fractal Fusion's encode.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
Nach wrote:
Probability of each bit is the wrong question. You need to know the relationship of each bit. Some may be mutually exclusive at the power on state.
Interesting. I'll also look for interbit correlation as well then. The fact that it's more interesting than a simple heatmap means it's more likely that I can convince my advisor that it's a worthwhile problem.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
creaothceann wrote:
https://wiki.nesdev.com/w/index.php/CPU_ALL#Power_up_state byuu did read out the SNES WRAM content iirc. There are some patterns that can be observed, but nothing definite. It varies with SNES model, temperature, if the SNES was turned on before (and how long ago) etc.
Right, but the point isn't to get a pattern. It's to get a frequency probability for each bit, from a sample of a few thousand power-ons across several systems, so we can determine the probability of a specific power on state. And also allow emulators to generate a weighted random power-on state (or a single, most probable state) that more accurately represents a typical power on state than straight random fill with a seed, or a pattern fill. It'd take a lot of boring, time-consuming work, but I have a Computer Engineering senior design project coming up soon, and this might be something that's applicable to that.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Post subject: Hardware Uninitialized Memory
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
A thought occurred to me, and I wanted to know how feasible it would be. Because an NES cart is mapped to memory directly, loading a ROM does not take any RAM necessarily. Is is possible for a very small program, to read the uninitialized RAM and then stream it to the sound channel PCM (with ECC data), which then can be read in through a microphone in and analyzed? If several different consoles are tested several times, it would be possible to create a heat map to give the appropriate probabilities that a specific byte would be set or unset. This data would allow a realistic initial RAM condition to be generated randomly, and would allow a given initial RAM condition to be evaluated to see if it's possible or likely. This would probably work for the NES and SNES and would allow movies such as the FF6 rejected movie to be evaluated in a more "fair" manner.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
If the fox simply seeks to the point on the circle that the duck is closest to, rather than trying to follow the direction the duck is going, then the contradiction goes away.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
The problem with the duck swimming in a straight line from the point where the fox's theta and the duck's theta are equivalent, is the fox can also head directly to that point and does not have to go the long way around. The duck needs to lead the fox the long way around initially until the fox is committed.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
I do not know the best strategy for the duck, but here's one that comes to mind. The duck will always flee the fox. And the fox will always seek to be in the closest location on the circle to the duck's position. So essentially, we can model the location of the fox and the duck as a system of differential equations in polar coordinates with the following variables: Fox's speed v_f, duck's speed v_d, and radius of the pond R. Assuming we clamp the θ of the duck and the fox to (-pi, pi] rather than allowing it to take any value, the fox's position can be given as: dθ_f = v_f/R * Re{(-1)^(H(dθ_f - dθ_d))} dr_f = 0 θ(t = 0) = 0 r(t = 0) = R (Where H(x) is the Heaviside step function, and Re{z} denotes the real part of z.) The duck's position is a bit more complicated: First, we need to find the direction in which the duck is heading. For this polar coordinates are a bit of a hindrance, so we have to pop back into Cartesian for a bit. If the duck's position is a vector given by P_d = (r_d cosθ_d * i + r_d sinθ_d * j) and the fox's is P_f = (R cosθ_f * i + R sinθ_f * j) then the angle between the two is given by: arccos(P_d·(P_f-P_d)/(||P_d||||(P_f-P_dr)||)) which simplifies down to: arccos((r_d - R cos(θ_d - θ_f))/sqrt(R^2 + r_d^2 - 2*R*r_d*cos(θ_d - θ_f))) So dr_d = v_d*(r_d - R cos(θ_d - θ_f))/sqrt(R^2 + r_d^2 - 2*R*r_d*cos(θ_d - θ_f)) dθ_d = v_d*sqrt((R^2*sin^2(θ_d - θ_f))/(R^2+r_d^2-2*R*r_d*cos(θ_d - θ_f)))/r_d r_d(t = 0) = 0 θ_d(t = 0) = 0 Now we can solve this system of equations. But I doubt they have an explicit solution. I have mathematica chewing on it right now. pd = {rd[t] Cos[thetad[t]], rd[t] Sin[thetad[t]]} pf = {r Cos[thetaf[t]], r Sin[thetaf[t]]} thetadir = FullSimplify[ArcCos[pd.(pf - pd)/(Norm[pd]*Norm[pf - pd])]] DSolve[{ rd'[t] == vd*Sin[thetadir], thetad'[t] == vd*Cos[thetadir], thetaf'[t] == vf/r, rd[0] == 10^-5, thetad[0] == Pi, thetaf[0] == 0 }, {rd, thetad, thetaf}, t, Assumptions -> { t \[Element] Reals, t >= 0, r \[Element] Reals, r > 1, vd \[Element] Reals, vd > 0, vf \[Element] Reals, vf > vd, rd[t] \[Element] Reals, thetaf[t] \[Element] Reals, thetad[t] \[Element] Reals }] EDIT: Screwed up in calculating the angle of the duck direction. Revised. EDIT2: Fixed mathematica stuff.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
In Dust Man's stage, with the room where all of the blocks fly in slowly, I was under the possibly mistaken impression that it was both possible and faster to make the blocks fly into and block off the extreme right side of the screen.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
evknucklehead wrote:
Invariel wrote:
Though, I must admit a certain level of frustration with Giles. Not looking forward to leading Thor around by the nose either.
At least Thor doesn't need to be led very long. Just from his spot in Voloh to the exit, then from where he stops on the field back to Voloh's entrance. It's the main reason for getting the tablet outside Phillips Castle before entering Voloh, otherwise you need to lead Thor to the castle grounds as well.
Thor paths by himself for the first bit as well.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
This might be potentially related to this? Chrono Trigger SRAM Glitch But this uses midframe resets, and I don't know if hitting a single instruction in a reset is... plausible. I also don't know if the bridge is a valid destination from his last save point and this one.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
You can't use just a uniform distribution. (ie, Ceil(U((0, y]))) If we check on the given 2.5 sided die this will give E = 1.8 vs 1.75 ideal. This feels qualitatively like it's going to require something similar to a Fourier transform, which means that likely you're going to be unable to limit the rolls to just 1, 2, and 3. But in fact any integer value will be able to be rolled, just some much less than others. If you really must have the E and also the Variance and skew. I'm not 100% sure it's even possible. But looking into similarities between this and Fourier transforms would be my first port of call.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
An easier argument I came up with while discussing this problem with a few other people. We can construct a sphere that intersects a face of the icosahedron at all of the points where the triforce self-intersects. Then we can simply use an argument that as the triforce is extruded it scales linearly. It's a much shorter argument and gives the same answer as my other approach. So that's good! b = 0.546533... c = 0.618034... Raw Mathematica Dump: Chord[r_, theta_] := 2*r*Sin[theta/2] a = Simplify[Csc[2*Pi/5]] theta1 = Simplify[ArcSin[a/2]] b = Simplify[Chord[1, theta1]] c = Simplify[(a/2)/(1 - Sqrt[b^2 - (a/2)^2])] a = 2 Sqrt[2/(5 + Sqrt[5])] theta1 = ArcSin[Sqrt[2/(5 + Sqrt[5])]] b = 2 Sin[1/2 ArcSin[Sqrt[2/(5 + Sqrt[5])]]] c = Sqrt[2/(5 + Sqrt[5])]/(1 - Sqrt[-(2/(5 + Sqrt[5])) + 4 Sin[1/2 ArcSin[Sqrt[2/(5 + Sqrt[5])]]]^2])
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Experienced Forum User, Published Author, Player (36)
Joined: 9/11/2004
Posts: 2624
Wobmiar wrote:
If I understand well, then, if PURELY THEORICALLY I find someone's TAS and find a 1 frame improvement, this frame being a good frame save (when you talk about improvement in gameplay, let's assume this frame is an improvement), but everything else is the same... It's ok? Not that I want to do that or that I accuse any work here to be that.
Yes. If it contains an improvement that turns a 10000 frame movie into a 9999 frame movie, provided the quality of the gameplay is similar, then that improvement should be accepted. For instance, SMB1. This movie contains 17840 frames. This movie contains 17839 frames. If the input is mostly the same, list the other user as a co-author. If you want to be a good guy, just let him/her know about the improvement. He/She might already know about it and might be saving it for a bigger improvement.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.