टिप्पणियां
धागा: Haven Park
United StatesLRFLEW4 months ago

I've been discussing the rules and definition of the "Glitchless" category with ripWSB in the OSC discord. I want to quickly summarize here what we talked about, and bring up the ideas for category clarifications and changes we mentioned in there.

The conversation started when we figured out a way of approaching Pilgrim's Peak from the north, and ripWSB mentioned that it could allow for skipping the crown quest in Glitchless. I mentioned that I feel like allowing runs to skip the cable car and crown quests is against the spirit of the category, and wondered if it should be against the category rules. The rules simply say that "glitches are not allowed", which doesn't really clarify what is and isn't allowed. I also realized that ripWSB already submitted a Glitchless run that skipped the cable car quest, which would be affected by whether skipping these quests is allowed or not.

My take on this is that "talking with Grandma in a location before she's moved to that location" qualifies as a glitch. Grandma's behavior is actually pretty straightforward. If the crown quest has been completed, she will be in Pilgrim's Peak (disabled if the player has already talked to her there). If the crown quest has not completed, but the cable car quest has, then she will be in Turtle Rock. Lastly, if neither quest has been completed, she will be in the starting area. If we define talking to grandma somewhere she isn't a glitch, then Glitchless would require completing the cable car quest before the turtle rock cutscene and completing the crown quest before the pilgrim's peak cutscene.

There's also a case to be made that Glitchless should allow this kind of sequence breaking, and instead a new category should be made for not sequence breaking. Based on our current game knowledge, it seems like the glitches that this kind of Glitchless category would ban are super jumps, clipping through walls, and OoB upwarps. A new category could be made then to cover runs that don't use sequence breaks. Personally, I prefer making category rules based on what runners must do rather than what runners cannot do. In this way, the new category would be defined something like "you must do the cable car quest, second grandma conversation, crown quest, and third grandma conversation, in that order." Whether this new category allows glitches would also need to be figured out, as allowing the OoB upwarp glitch would likely affect the route.

ripWSB इसे पसंद करता है
धागा: Haven Park
United StatesLRFLEW4 months ago

Also, with a free demo of the game being available on Steam, it might be nice to add a few demo categories, such as Demo Any% and Demo Glitchless. It is possible to reach the credits in the demo with exploits, but that run isn't really distinct enough from regular Any% to warrant a category. I already performed a run of Demo Any%, so if that category is made, there will be at least one run on there.

धागा: Haven Park
United StatesLRFLEW4 months ago

The way I've usually seen PC vs Console runs split up on other leaderboards is to made them subcategories of the main categories. So instead of PC being a main category, with Any%, Glitchless, etc. be subcategories on that, you'd instead just have the one Any%, Glitchless, etc and each of those categories would each have a Switch and PC subcategory. It makes it easier to find PC runs, especially since PC Any% won't be relegated to a "miscellaneous" category. (Personally, I think PC should get priority over Switch, but I only say that because I use the PC version. I do think PC runs should be at least equal to the Switch runs, and not hidden under misc categories, though.)

धागा: Haven Park
United StatesLRFLEW4 months ago

Found a way to clip out of bounds and up-warp to the top of the Stronghold side of the canyon (tested on PC v1.2.3), and a way to jump from there to the other side of the canyon. Unfortunately, you can't just skip the second Grandma conversation, so you do need to backtrack there and talk to her before going back to the Stronghold side.

That being said, this means that a Low% run can now complete the game with zero items. Instead of repairing the bridge, you just perform the clip (again) to up-warp to the other side.

धागा: Haven Park
United StatesLRFLEW4 months ago

What about a category for recovering the heart of the mountain? I think it would be a neat category to run.

ripWSB इसे पसंद करता है
धागा: The Site
United StatesLRFLEW1 year ago

I was in a discussion today with the leaderboard moderator for Melatonin today, and ended up left with an interesting question. There are two categories for that game that are relevant here: All Levels and All Stars and Rings. The first category is just Any% with the requirement to also complete all the levels, and the second category is like All Levels, but also requires completing the "hard mode" variants of each level (in addition to the normal mode), and get the highest (non-perfect) score in all of them.

The discussion was about what would be between them. You could make a category that needs all stars, which excludes the hard modes, or make a category to also do all the hard modes, but not necessarily get the highest score in them. Right now, there's nobody pining to run those categories, but the discussion was over how to handle it if they do get run. The moderator was saying to just make them additional categories (most likely misc. categories), but I had another thought.

In my view, separating categories by the scores you get doesn't make much sense as, assuming perfect skill at the game, it doesn't take longer to get a better score. An all stars run could trivially obsolete a normal all levels run. My idea, then, was to use a variable to indicate the score the run got, and let users filter by that. The problem I see is handling run obsolescence. An all stars run could obsolete an all levels run, but an all levels run that doesn't get all the stars can't obsolete an all stars run. From what I can tell, variables can only be set such that all values obsolete each other or none do, so they can't be used for this ordered relationship.

Is there a way to do this with variables? If not, is there a better way to handle this kind of relationship between runs? Would adding this functionality to variables as a feature to the site be helpful for other games' leaderboards? Additionally, for filtering by these "ordered" variables, it would be nice to have an easy way to say "filter by this value or better" instead of having to select all the values individually to get that.

धागा: 007: NightFire (GBA)
United StatesLRFLEW2 years ago

So I went through all the levels with an emulator and looked at the game's total enemies count during the score screen. There's a decent chance that I made a mistake somewhere here, but this should all be accurate.

Mission 1: 31 Enemies Mission 2: 35 Enemies Mission 3: 27 Enemies Mission 4: 33 Enemies Mission 5: 21 Enemies Mission 6: 52 Enemies Mission 7: 70 Enemies Mission 8: 71 Enemies Mission 9: 9 Enemies

Just to note, what counts as an enemy seems to be kind of weird. The helicopter at the end of the first mission, as well as every boss I checked, do count as an enemy. However, the infinitely respawning enemies at the end of Mission 4 do NOT count.

While I was at it, I also collected all the par times for each mission. These are visible in-game, so this isn't new information, but I figured I'd aggregate it here for future reference.

Mission 1: 300 Seconds Mission 2: 360 Seconds Mission 3: 510 Seconds Mission 4: 540 Seconds Mission 5: 300 Seconds Mission 6: 630 Seconds Mission 7: 690 Seconds Mission 8: 960 Seconds Mission 9: 180 Seconds

EDIT: This was all done on Normal difficulty, though my basic testing suggests this shouldn't change for Hard difficulty.

venditta और TwoFoxSix इसे पसंद करें
धागा: 007: NightFire (GBA)
United StatesLRFLEW2 years ago

I posted a message about this in the OSC Discord, but I'll reiterate and expand upon it here for easier access.

The game essentially calculates a percentage value (from 0% to 100%, other than time) for each of the five categories, then multiplies each by 250 to get a score value, other than Dispatched, which is multiplied by 2000 (and time, which works differently). The percentage (other than the Bond bonus) is calculated by dividing two numbers to get a ratio, multiplying by 100, and rounding down. This can be described as the function Percent(Num, Den) = floor(Num * 100 / Den). There are some quirks with how the division is calculated, which I'll mention at the end, but for any case you're likely to run into, this is how it works.

The Bond bonus percentage is the simplest. If ANY emblem is collected, then this is 100%. Otherwise, it's 0%. If there's any possibility of collecting more than one emblem in a level, then there is no benefit to collecting more than one. The number of emblems collected is stored as a 16-bit value at 0x0200073C.

The Dispatched \ Subdued percentage is calculated by keeping a tally of both the number of enemies loaded and enemies taken out, and calculating Percent(Enemies_Disp, Enemies_Total). These counts are stored as 16-bit values, with the dispatched count at 0x02000740 and the total count at 0x02000742. The total count appears to be updated with each map load, so in theory it might be possible to influence this number if a significant sequence break is found. However, for the time being, we can treat this as a constant value for each level. I'll add another message here once I get totals for each mission.

The Accuracy percentage is calculated by keeping a tally of both the number of shots the player has made and how many shots hit something important, and calculating Percent(Shots_Hit, Shots_Fired). It doesn't appear that they have to hit an enemy specifically, as shooting the window in the first mission still counts as a hit. It is not clear at this point how the game counts shots that hit multiple enemies (if possible), but there is a check to make sure the percentage doesn't go above 100%. These counts are stored as 32-bit values, with the hits count at 0x02000734 and the shots count at 0x02000730.

The Health percentage is calculated by taking the number of health chunks still lit up (from 0 to 8 ), and calculating Percent(Health + 1, 9). This only takes into account the health that you complete the level with, so collecting a full armor right at the end of the level is enough to get full points for this category. The health value is stored as a 16-bit value at 0x0200074A.

Time is more complicated to compute, and is also rather strange because the score is not linear with respect to the time taken. The game takes the time taken, rounded down to the nearest whole second, and the par time for the mission, and calculates Percent(Par_Time, Time_Taken). Note that having the actual time taken as the denominator means that the score has an inverse relationship to the time score. From here, the game multiplies the percentage by 1000, and then checks the resulting value X. If X ≥ 125,000, then the time score is set to 25,000. If X < 50,000, then the time score is set to -100,000. Otherwise (if 50,000 ≤ X < 125,000), the time score is X - 100,000. This has the effect that taking exactly twice the par time results in a time score of -50,000, but taking exactly one second longer results in a time score of -100,000. I suspect that this was a mistake in the code, due to the -100,000 matching the subtracted value in the middle case. If we assume that it was meant to be -50,000 instead, then we can rewrite this equation as being 1000 * clamp(Percent(Par_Time, Time_Taken) - 100, -50, 25). The time taken is stored as a 32-bit value of the count of vertical interupts (i.e. 1/60th seconds) at 0x02000738. The level's par time in seconds is stored as a 16-bit value at 0x02000748, which in turn comes from an array of 16-bit values starting at 0x0801EE74 (stored in mission order). Here's a desmos graph of the resulting time score using the first mission's par time: https://www.desmos.com/calculator/jyi4vyumug

The final score is taken by adding together all five component scores, resulting in a score between -100,000 and 300,000 inclusive. For all of the missions, Bronze requires 190,000 points, Silver requires 245,000 points, and Gold requires 270,000 points. This is pretty much all there is to the scoring system.

Now, here's some information about how the game performs division. The GBA's CPU lacks any instructions to perform division, so it has to use some tricks to make it work. Starting at 0x08021400, there is an array of 16,384 32-bit values, where the X indexed value (starting at X=0) is equal to 2^32 / X (The exceptions being at X=0, X=1, and X=2, which are all equal to 2^31 - 1). Using this array I'll call DivTable, the game performs division by calculating Div(Num, Den) = floor((Num * DivTable[Den]) / 2^32) (with the floor of the division by a power of two in these equations being implemented using a bit shift). There are a few special cases to this, though. The first special case is that it short circuits if Den < 2, which means that Div(Num, 0) = Div(Num, 1) = Num. This has some interesting effects, most notably that never firing a weapon counts as 0% Accuracy. The next special case is when Den = 2, where it simply performs a bit shift to perform the division. This is because the value for DivTable[2] isn't accurate (nor is there a valid signed value it could use). The last case is when DivTable[Den] doesn't exist, which happens when Den ≥ 16,384. When this happens, the game approximates the value using Div(Num, Den) = Div(floor(Num / 2), floor(Den / 2)). This could produce some interesting rounding issues if it ever comes up, but it would have to be a pretty exceptional case for it to come up at all.

EDIT: Also, using Hard difficulty appears to add a flat 10,000 points to your score. The bonus is added before the ranking (bronze, silver, gold) is determined, so you need slightly less for bronze on hard mode.

EDIT 2: Coming back to this game, and spending more time reverse-engineering this, I realized there's a type of edge case that should also be mentioned. You see, DivTable[X] isn't quite 2^32 / X, but instead is floor(2^32 / X). This adds an additional rounding step to the division which can result in incorrect values in some edge cases. While these edge cases are unlikely to come up in practice, it's worth keeping in mind that the percentage that the game shows can be rounded down by more than a whole percent in a worst-case scenario.

TwoFoxSix इसे पसंद करता है
धागा: Perfect Park
United StatesLRFLEW3 years ago

BTW superjack126:

The full-game categories have now been added. I also see that you're in the Discord, but haven't accepted the rules, so you can't see the chat rooms. If you want to participate in the server, you need to click the checkmark underneath the rules in the rules channel.

धागा: Perfect Park
United StatesLRFLEW3 years ago

You got to bringing this up before I could. I see you're in the Discord (but not in #general because you haven't accepted the rules? I didn't setup the server, so I'm not 100% how it works). I planned on bringing up the issue of a full-game run in there at some point. I'm working on a Livesplit plugin that works similarly to my IL tool because I like autosplitters, and the autosplitter might help define how timing should work (eg. real-time vs sum of track times). Once that's at a relatively-stable point, I will bring up the topic in general to get feedback on how the category should work. Currently the biggest question I have about making the category is whether to have the run use the RACE or SPDRUN mode (basically what catalina said).

So to anybody wondering about this: Adding a full-game category is planned. Come join the Discord to follow and provide input.

धागा: Perfect Park
United StatesLRFLEW3 years ago

The (current) decision is to allow online runs in empty lobbies. This was decided after talking to the developer and taking a brief look at the decompilation of the game's C# code and determining that the logic for physics and the race timer occur locally (enough) in online play to not be significantly different from offline play. It's still recommended that you play offline when specifically grinding for times to avoid people hopping in and invalidating the run, but runs won't be rejected simply for being played online.

धागा: Perfect Park
United StatesLRFLEW3 years ago

To get ahead of the debate, I'm making this thread here to discuss the game-wide rule that all runs must be made in the "Offline" mode. My rationale for this rule was that the instability of adding an internet connection could influence the results of the game. However, I can understand this being a contentious rule, as most people will play online the majority of the time (especially if they're playing it casually).

Put your thoughts and opinions on this rule in this thread. I'll look over the arguments and try to make a decision that will make most of the community happy.

I've also created a strawpoll over the options as I see it. If you have an opinion on this, please respond to the poll (in addition to any comments you make here), so I can see what the general opinion is. https://www.strawpoll.me/20687530

ghostshockrival इसे पसंद करता है
धागा: The Site
United StatesLRFLEW3 years ago

I thought I had tried and it conflicted. I guess I just assumed it did. I changed it, and it worked. I feel like an idiot now. Thanks. :)

Zanum इसे पसंद करता है
धागा: The Site
United StatesLRFLEW3 years ago

I think I already know the answer, but I figure it's doesn't hurt to ask and see if there is any sort of protocol in place.

I am the moderator on the leaderboard for Empathy: Path of Whispers. The game's name is very often shortened to Empathy, to the point where that's what it's still referred to on Twitch. (That comes in large part due to the subtitle being added very close to launch, and the GiantBomb database not being updated until I asked them to myself.) I would want to use speedrun.com/Empathy for the game, but that is currently taken by a user by that name. The account appears, to me at least, to be inactive/abandoned. The info page says they were last online 3 years ago (close to the age of the account) with 0 posts or runs.

I know that currently, with my game having no runners other than me, there's not going to be any sort of special case for me, so I'm wondering if there is a protocol for this kind of thing. Is there an "abandoned account" system? This isn't a huge issue for me, as I did recently change the permalink to one I am relatively happy with (as apposed to the old one, which was the game's full name), and if it were, I could always message the user on their linked accounts to see if they'd willingly change their permalink. I'm just curious if there's rules or systems already in place about this.

Zanum इसे पसंद करता है
धागा: The Site
United StatesLRFLEW3 years ago

I have a game request currently pending for a game I want to get a speedrunning community started for. In the section for "Additional notes by the user", I made a speculation/observation about part of the game. Today, the developer made a comment that very much confirmed my speculation. I was wondering if I could (or should) update my request to include this specific quote to better clarify the submission.

LRFLEW के बारे में
सामिल हुए
8 years ago
ऑनलाइन
today
दौड़
33
चलाए गए गेम्स
Perfect Park
Perfect Park
अंतिम रन 3 years ago
20
दौड़
Empathy: Path of Whispers
Empathy: Path of Whispers
अंतिम रन 1 year ago
3
दौड़
Kitty May Cry
Kitty May Cry
अंतिम रन 20 days ago
2
दौड़
Midnight Club II
Midnight Club II
अंतिम रन 5 years ago
1
दौड़
007: NightFire (GBA)
007: NightFire (GBA)
अंतिम रन 2 years ago
1
दौड़
Super Mario Odyssey
Super Mario Odyssey
अंतिम रन 6 years ago
1
दौड़
Sushi Cat
Sushi Cat
अंतिम रन today
1
दौड़
Haven Park
Haven Park
अंतिम रन 4 months ago
1
दौड़
फ़ॉलो किए गए गेम्स
Haven Park
Haven Park
अंतिम यात्रा 4 months ago
1
यात्रा
Pilfer: Story of Light
Pilfer: Story of Light
अंतिम यात्रा 9 months ago
2
यात्राएँ
Empathy: Path of Whispers
Empathy: Path of Whispers
अंतिम यात्रा 8 months ago
706
यात्राएँ
Midnight Club II
Midnight Club II
अंतिम यात्रा 9 months ago
253
यात्राएँ
My Teacher Is an Alien
My Teacher Is an Alien
अंतिम यात्रा 8 months ago
116
यात्राएँ
Perfect Park
Perfect Park
अंतिम यात्रा 8 months ago
2,407
यात्राएँ
Here Comes Niko!
Here Comes Niko!
अंतिम यात्रा 8 months ago
67
यात्राएँ
007: NightFire (GBA)
007: NightFire (GBA)
अंतिम यात्रा 11 months ago
158
यात्राएँ
मॉडरेटेड गेम्स
Perfect Park
Perfect Park
अंतिम क्रिया 1 year ago
90
क्रियाएँ
Haven Park
Haven Park
अंतिम क्रिया 24 days ago
12
क्रियाएँ
Melatonin
Melatonin
अंतिम क्रिया 2 months ago
7
क्रियाएँ
Empathy: Path of Whispers
Empathy: Path of Whispers
अंतिम क्रिया 13 days ago
5
क्रियाएँ
Midnight Club II
Midnight Club II
अंतिम क्रिया 2 years ago
4
क्रियाएँ