Posts for Warp


Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Does this finally remove the last excuse not to make an updated tasvideos-legal TAS of this game?
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
I think one problem with the tasbot segment is that because of all the past demonstrations people are expecting something surprising and awesome, doing something with the console that seems impossible, or utterly breaking the game and run custom code, or whatever. In other words, essentially, many viewers expect the tasbot segment to be a glitch exhibition, tool-assisted version, rather than just a "normal" speedrun. When a TAS shown on stream seems just like a normal speedrun (perhaps just more perfectly played than human speedruns), I'm sure many of them expect some kind of surprise to pop up at any moment. For the "normal-looking" gameplay to actually hide behind itself the console being hacked and some custom payload to be prepared to be shown at any moment. And then, when it doesn't happen... they are disappointed. The expectations were not met. I have noted in past years how ironic it is that 99.9% of TASes are "regular" straightforward speedruns (just played as perfectly as possible), yet at GDQ it's expected for TASes to do gimmicks, not "normal" speedruns. (And, moreover, it's expected for the next tasbot demonstration to surpass the previous ones in innovation and entertainment.) The console hacks via the controller port are absolutely incredible and show an amazing amount of technical knowledge, skill and work. However, in the long run they have kind of "ruined" the tasbot segment at GDQ, in that they have pretty much defined what TASing is, in the mind of the majority of viewers. They are expecting something that TASes are actually not.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
I have absolutely no idea what you are talking about, but I don't think this is the appropriate place for this. I hate to mini-mod, but I would remove this as completely out of place.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
r57shell wrote:
Alright. Now we can divide arbitrary long number by single word. What if divisor is also arbitrary long? Well... reduce to simpler task: to division by single word again. What if we neglect all words (limbs) except most significant? Lets say D is original divisor, and D' is D with all zero words except most significant:
DDDDD = D
D0000 = D'
Then D > D', and X / D < X / D' (the higher the divisor, the lower the result). Now, idea is similar. Lets divide X by D':
 XXXXXXX
-ZZ
We need to find such y that y*D' = ZZ is less than XX and remainder XX - ZZ is less than D'. You can do that by simple division of two words by one. Now, instead of simple subtraction from X. We'll calculate y*D - multiplication of 'guessed' y by real D - with neglected words (limbs) turned back. This is single word times arbitrary long number multiplication. 1xM multiplication in terms of gmp (where M = number of words (limbs) of D). Now, because X / D < X / D' result of y * D may be larger than we need. In this case we need to reduce y by one. And instead of additional multiplication, we just subtract D because: (y-1) * D = y * D - D. Taking into account that we want to subtract result from X, you could subtract y * D and if it turned into negative, you could add D back. This is what is described in quote:
Such a quotient is sometimes one too big, requiring an addback of the divisor, but that happens rarely.
Now, you know highest word (limb) of quotient. And current X has current remainder. Repeat this process until X is less than D, and you're done.
I really hate to sound so rude, but after reading this approximately 20 times, I still can't make head or tails of it... I don't even understand what this means:
Lets divide X by D':
 XXXXXXX
-ZZ
We need to find such y that y*D' = ZZ is less than XX and remainder XX - ZZ is less than D'.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
akdsjfakldsf wrote:
Only if you delete my things. That's my last demand.
You are free to ask, and mods will often grant such requests. However, you can't demand because you submitted the files under a CC license, and that cannot be revoked once granted. You should have read that license, and if you didn't agree with it, not submit anything.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
adelikat wrote:
Spent all day working on a difficult section and finally got to the end. Found out I wasn’t even recording.
Well, there's another idea: Perhaps some kind of "always record" persistent setting, which keeps some kind of buffer of the last hour or so of recording (configurable, of course). A bit like how the PS4 is always recording your gameplay, and keeps the last 10 minutes of so. Thus if something particular happens you can save those last 10 minutes of video capture. (Nvidia, and probably AMD, also support this kind of thing on the PC side.)
Post subject: Re: Stupid things that happened to most of us while tasing?
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Cyorter wrote:
I just remembered those times when I was trying to do something really hard, loading and loading state, and when I finally did it, I loaded state instead of saving. XD
I wonder if emulators could have some kind of automatic backup system for precisely this kind of thing. In other words, it remembers the last n seconds/minutes of input no matter what, and offers a way to retrieve that input in case of accidental savestate loading.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
r57shell wrote:
Easier problem is when you want to divide number N words (limbs in terms of gmp) by 1 word (limb). It's easy. It's reduced to division of 2 word by 1 in succession.
Yes, the so-called "short division" method. It's actually fascinatingly simple to do in x86 asm, since the div instruction seems to have been designed precisely for this purpose. It can be described in pseudocode as:
    1. index = 0 2. R = 0 3. A = dividend[index] 4. Divide the double-word value RA by the (one-word) divisor and put the quotient in result[index] and remainder in R. 5. Increment index and if it's less than the size of the dividend, jump to step 3. 6. When this finishes, the remainder of the entire division will be in R.
(It actually took me some time to figure out the simplicity of it, because basically every single description of "short division" out there is needlessly complicated. Distilling the algorithm into its simplest, and most efficient, form required a bit of thinking about it.)
And... why don't you just use gmp for example? Or other package that is made for things like that? :o
Hobbies are not always done for practicality, but because of personal interest and learning. (In fact, I have learned quite a lot of interesting and even useful things during this project.) That being said, it's not out of the realm of possibility that this project might end up being a viable alternative to what already exists out there. Looking at multi-precision libraries out there, the vast majority of them can be roughly divided into two types: The absolutely massive ones that support and do everything between the heaven and the earth (and which consist of millions of source files, often held hostage by a unix-only configure script, making it extremely hard to use in other environments, or for targets not supported by that script), and the very simplistic and inefficient ones that seem to have been done with the principle of "as long as it works" (and "efficiency is not even the goal here, if you want something efficient, use GMP"). From what I see, there seems to be a gap in the "market" that offers the best of both worlds: A very simple and straightforward-to-use library (consisting of just a couple of files that require no configuration) that still offers very decent and competitive efficiency. I'm not saying my project will fill this gap, but hey, who knows. I will have to study your description to see if I can understand how the algorithm works.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
OmnipotentEntity wrote:
The most popular and mature bignum library has this documentation about their integer division algorithms: https://gmplib.org/manual/Division-Algorithms.html
This: https://gmplib.org/manual/Basecase-Division.html alludes to a long division algorithm that can be done one "digit" (or hardware word) at a time, but the description is a bit too vague to fully understand. I wonder if there would be a more detailed explanation somewhere.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
r57shell wrote:
      100001
     *999999
------------
 99900000999 = z2,z0
+  100899
------------
100000899999
Indeed. Using this pattern, if I make the multiplicand be all zeros except for the first and last "digits", which are set to 1, and the multiplier to be the maximum value (ie. all bits set), then it indeed gives the wrong result if I don't do the "add zeros with carry" step. The tests pass if I do that step. This is a great addition to my testbed. Thank you! (This is also great information for a documentation I have been writing about these types of "bignum" calculations.)
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
I asked this on physicsforums.com (which has a math section), but gotten no answers so far, so I'll ask here as well. It's a bit long, so bear with me. The Karatsuba multiplication algorithm is a faster-than-O(n2) (approximately O(n1.58)) multiplication method of two large numbers. I have been working on a small project where I have implemented it (among other things), and I noticed something curious about it that I'm uncertain how to prove or disprove. In order to present the question, I first need to explain how the algorithm works (because the question pertains to one particular part of it). Let's represent the "digits" of a number (in whatever base we are using) with capital letters. Let's assume that we want to multiply, for example, two 10-digit numbers, let's call them AAAAABBBBB and CCCCCDDDDD. In order to calculate the result, we first calculate these partial results:
z0 = DDDDD * BBBBB = EEEEEEEEEE
z2 = CCCCC * AAAAA = GGGGGGGGGG
z1 = (AAAAA+BBBBB) * (CCCCC+DDDDD) - z2 - z0 = FFFFFFFFFFFF
(Those three multiplications can be calculated by calling this algorithm recursively, which is the idea with it, and where the time saving comes from, as the normal four multiplications that would be required with a normal long multiplication algorithm are reduced to three.) Note that z1 above is 2 digits longer than the others (this is always so regardless of the sizes of the input values). This is because the result of the two additions are 6 digits long (the most-significant digit may be 1) and thus the result of the multiplication is 12 digits long. (I believe, although I'm not certain, those two most-significant digits of the result are always zero after the two subtractions. However, I'm leaving them there because they are relevant to my actual question.) In order to get the final result we have to add those three partial results, using an offset of 5 digits as needed (ie. in practice "multiplied by the base to the power of 5). This can be most clearly visualized like this:
            AAAAABBBBB
          * CCCCCDDDDD
  --------------------
            EEEEEEEEEE = z0
+    FFFFFFFFFFFF      = z1
+ GGGGGGGGGG           = z2
  --------------------
  RRRRRRRRRRRRRRRRRRRR = result
From a programming implementation point of view a slight space optimization can be done by noting that z0 and z2 do not overlap in the result. This means that they can be calculated directly into the result (thus removing the need for one temporary object, which may be quite large, to hold the value of z2). In other words, the operation can be done like this:
            AAAAABBBBB
          * CCCCCDDDDD
  --------------------
  GGGGGGGGGGEEEEEEEEEE = z2,z0
+ 000FFFFFFFFFFFF      = z1
  --------------------
  RRRRRRRRRRRRRRRRRRRR = result
The zeros at the beginning of that z1 summand are there to indicate that, from a programmatical implementation point of view, when z1 is added to the result in this manner, after adding its most-significant digit, if there is any carry left, it needs to be added to the result (in practice with an "add zero with carry" operation). In other words, as long as there is a carry, it needs to be added to the next digit of the result, and so on, until there is no carry left. Except, and this is where my question comes in... if I leave out those "add zero with carry" operations completely, the result still seems to be correct. In other words, there never seems to be a carry left after adding the last (ie. most-significant) digit of z1. Note that since z1 is two digits longer than necessary, it's in practice already doing two "add zero with carry" operations. And, in fact, if I leave the most-significant digit of z1 out, it still gives the correct result. (If I leave the two most-significant digits out, then it sometimes gives an incorrect result, so at least one carry needs to be added.) I have tested with tens of millions of random input values to multiply, and it always gives the correct result, without those extra "add zero with carry" operations. However, I have the hunch that this is just coincidence. I have the hunch that it's simply the case that the situations where more than one "add zero with carry" is needed are extraordinarily rare, but they exist, and that if you don't do it, then you would get an incorrect result in those cases. I have tried to come up with input values that would cause an erroneous result, but I can't come up with anything. But it may just be my lack of figuring out how this works precisely. So I would like to present a conjecture: When z1 above (of a size that's two digits larger than z0 and z2) is added to the result, no more carries are left, with any input values. I don't know how to prove that. Disproving the conjecture would be relatively simple, though: Two values that multiplied in this manner give the wrong result, if those "add zero with carry" operations are not done. (I would be very grateful if someone could provide me with such numbers. Even better, a pattern of such numbers, so that I can generate them for any sizes. This would be a great addition to my testing code.)
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Mlandry wrote:
As I spent so much time on the internet when I was younger I've essentially left time capsules for myself to revisit, unintentionally of course.
The first time I ever got access to the Internet (in the mid-90's) I was already an adult. Which means I spent my entire childhood in the pre-internet era world. (Well, if we get really technical, the internet in its modern form was developed in the mid-80's, but it did not become mainstream until the late 90's. Prior to that the world at large was essentially "pre-internet".) Yet, today people who have been born in the internet era are already adults. Which means that they have spent their entire lives in the internet era. They don't have personal experience of the pre-internet world. For some reason I have hard time imagining how that is like. Not having experienced the world before widespread internet, before cellphones, before easy and dirt-cheap worldwide communication access, where you can communicate in real time with someone on the other side of the world (other than by phone, costing outrageous sums of money).
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
GJTASer2018 wrote:
Remember the cardinal rule of what a good submission is:
The game-play needs to standout from non-assisted play, and must not be seen as trivial.
My question that I would still like to ask in relation to that is: Why? To this day I cannot understand why we need such a silly rule. For what reason? If the run is otherwise within the rules and requirements of tasvideos, why should it be rejected because it doesn't "stand out from non-assisted play"? If nothing else, seeing how close the unassisted run is to the tool-assisted run is interesting. It may either show the absolutely incredible skill of real-time speedrunners, or if nothing else, it tells something about the game itself. Making a comparison between unassisted and tool-assisted runs can be interesting information. And who exactly decides what is and is not "standing out from non-assisted play" enough? The current unassisted world record of Super Mario Bros is 4:55.75, while the TAS (using the same timing system) is 4:54.03. These times are within 0.6% of each other. The contents of the runs is very, very similar. Who exactly has declared that 0.6% difference in time "stands out" enough to warrant publication and does not breach that rule, and why? It seems to me that the rule is being applied a bit arbitrarily, and things like the game's notoriety (and fame among the speedrunning community) are affecting that decision. In my opinion we don't need that rule at all. Even if the TAS is 100% identical to the unassisted run, it still warrants publication. If for nothing else, because that's an interesting thing to know.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Masterjun wrote:
When it says "compute the greatest multiple of 98765432 that's less than or equal to 123456789", it actually means an integer multiple. In other words, the division is turned into multiple integer divisions, which are easy because they compute the result digit by digit, thus only allowing for 1 of 10 possible digits per step. With big divisors, it makes sense to write down the first 9 multiples
I suppose that works well enough for base 10. It doesn't work as well for larger bases (say, base 264). I wouldn't really need the theoretically fastest known division algorithm, just an algorithm that's decently efficient (more efficient than repeated subtraction until the dividend becomes smaller than the divisor). The only division algorithm I can find after extensive googling is the base-2 "long division" that's based on going through the dividend one bit at a time and subtracting the dividend from the remainder when it gets larger than it. It appears that unlike multiplication, there isn't any simple division algorithm that would deal with more than one bit at a time (not even if you have available short division, ie. dividing a number of any size by a single digit). I can only conclude that all those bignum libraries do division either by the base-2 method, or by magic. I find no other methods in existence (at least ones that are actually explained).
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Is there a method for dividing two large numbers (and also getting the remainder) using only division (of a number of any size) by a single-digit value, as well as additions/subtractions/multiplications as needed? (And obviously I mean something faster than a mere "subtract the divisor from the dividend until the result is smaller than the divisor", which could require trillions of subtractions for a large enough dividend and small enough divisor.)
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Nach wrote:
Therefore when rating, I don't care about what effort was put in, I care about the results seen. I look for qualifications within the movie itself that show technicalities, such as complicated routing (which is not present in many run right games), get exactly enough powerups to complete the level as fast as possible, nothing unnecessary (which is not present in games without powerups), and so on.
I think Arc gave the perfect counter-argument to this:
Arc wrote:
[4032] NES Super Mario Bros. 3 "game end glitch" by Masterjun & ais523 in 00:00.78 is the most extreme example of low entertainment and high tech. The technical rating allows the rater to express that although this movie is not enjoyable to watch, the rater respects the diligence of the author to produce a movie that demonstrates expert-level knowledge of the game
Ok, perhaps "counter-argument" is too strong of a word, but I couldn't think of a better one. I must admit I'm perhaps a bit biased in this entire subject because it was actually me who originally came up with the two rating categories (and contributed to the implementation of the backend rating system). I was actually inspired by the rating system of the (now long-defunct) Internet Raytracing Competition, which had three ratings for people to vote on submissions: Artistic, technical, and "concept, originality, interpretation of the theme". (No need to wonder where I got that word, "technical", from.) (In fact, back in the day IRTC saw quite similar problems with this rating system, the main one being cross-contamination of categories: An impressive-looking image would generally tend to get high ratings on all three categories regardless of whether it actually deserved it or not. Likewise a bad-looking image would often get low scores on all categories even if it was undeserving on some of them, although the cross-contamination problem was not as bad with these images than with the impressive-looking ones.) I'm also the one to fully blame for the 100-value rating system. In retrospect I was perhaps being too eager to give users so much needless nuance in their votes. I would definitely drop the decimal value if I were to go back in time and redo the thing. While I understand perfectly, and I'm completely sympathetic to the idea of dropping the two different voting categories and merging them into one, a much simpler one, and I think that it's technically speaking (hah!) a good idea, I can't help but be bothered a bit by the possibility of distinguishing between the two being removed. As Arc puts it, when we get an absolute extreme case like the 0.78-second SMB3 TAS, how are people supposed to vote on it? Perhaps a bit ironically, with a unified singular voting system people would actually be voting almost solely on the technical merits of the run. But perhaps that's ok. Perhaps it's ok to interpret the singular rating differently depending on the TAS, rather than try to force a universal set-in-stone meaning to it. This is, after all, very subjective, and that's just fine.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
I'm trying to understand long division (for a project), and it's extremely puzzling. The last time I did long division was a really long time ago, so I don't remember anything about it, so I'm trying to find out once again how it's done. What puzzles me to no end is that long division seems to be a circular method. Not as in being recursive, but as in being self-contradictory: In order to divide two large numbers you need to... be able to divide two large numbers. It requires what it's trying to accomplish. Which makes no sense to me. For example, suppose you wanted to calculate the quotient and remainder of something like 123456789/98765432. The instructions say: Take digits from the dividend until you get a number that's larger than the divisor. In this case that would be the entirety of 123456789. Now the next step is... "compute the greatest multiple of 98765432 that's less than or equal to 123456789". Which is the very definition of division. In other words, in order to know what 123456789/98765432 is, I need to know what 123456789/98765432 is. Well, duh! So in order to do division you need... division. What a beautifully circular method.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
DrD2k9 wrote:
If you are standing stationary in the moving elevator (thus moving at the same vertical speed as the elevator) you'd feel your normal weight. It's only when you try to move within the elevator (thereby changing the position of your body's center of mass in relation to the earth) that you feel a different weight. The perceived weight change is only a perception based on the amount of effort required to move your center of mass in relation to the earth's surface.
I asked this same question at physicsforums.com, and so far from the 6 people who have answered, not a single one of them believes that there's a difference felt inside the elevator regardless of whether it's moving or not, when climbing a ladder (or standing up from a seated position). My question is about understanding the mechanics behind it, but I cannot even demonstrate that the phenomenon happens in the first place... When I posted the question, I marked it as a "basic" question. Apparently it isn't as "basic" as I thought it would be. Nor am I apparently the only one who is confused about this.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Amaraticando wrote:
If the elevator movement is "rigid" within the building, e.g. it doesn't slowdown/shake if you jump inside it, then you'll effectively be unable to tell if the elevator is still or moving in the first place. It's Einstein's equivalence principle!
If the elevator is going down at a great speed, even if it's at constant velocity, it will be much easier to jump, requiring significantly less effort. If the elevator is going up at a great speed, it will be harder to jump, requiring more effort. But what explains that? It's hard to wrap one's head around it. A related question: If you drop a ball inside the elevator, does it acceleration towards the floor depend on the vertical speed of the elevator? (If the answer is no, then it's even more puzzling.)
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Something that Bisqwit asked me made me think of something that I just can't figure out. If you are in a lift that's going up at a constant speed, you'll feel heavier (and it will be harder for you to eg. climb a ladder). If the lift is going down at a constant speed, you'll feel lighter. Or do you? How does this work? If the lift is going down at a constant speed, you'll never be in free fall (because that would require an accelerating speed), no matter how fast the lift is going... but you still feel lighter? I can't figure this out.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Nach wrote:
Warp wrote:
I believe that the best option is to choose "I want to review this setting for every video", and then on each published video set the setting according to the game's own official age rating. I think that would make the most sense.
The setting itself has little to do with the game's rating.
I don't understand this answer. All I'm saying is that if the game being speedrun has an age rating making it suitable for all ages, mark the video as suitable for all ages, else mark it as not suitable. I don't really understand what's the problem here.
A video may not include the objectionable parts of a game. The video itself may make parts of a fine game objectionable by the text entered into it, stuff drawn, or commentary added.
So? If a published video has any additional material added to it that might not be suitable, just mark it as not suitable. I don't see the problem. I find your objection incomprehensible.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
I hope this is an off-season april fools joke.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
I believe that the best option is to choose "I want to review this setting for every video", and then on each published video set the setting according to the game's own official age rating. I think that would make the most sense.
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
Banned User, Former player
Joined: 3/10/2004
Posts: 7698
Location: Finland
InfamousKnight wrote:
She only has 20 dollar bills in a safe. She counts them like this: 4 20s according to her makes 100. As she counts this way, it ends up being 2180.
Is this some kind of trick question? If 4 bills are worth 100, it's impossible to arrive at a sum that's not a multiple of 25, which 2180 clearly is not. The only way to end up, after counting to 2100, with that final $80, is to count $20 four times. But this would mean that she has now changed the meaning of 4 bills to mean $80 rather than $100. If this problem has a "logical" solution, it's probably a trick question that misleads the reader by not stating things clearly enough.