Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
zedprime
Jun 9, 2007

yospos

Zereth posted:

I'm guessing it's not getting rid of the dropped soda cans while you're looking at them.
Soda debris wouldn't be persistent in the save to crash him on the way back in. But who knows.

I'd throw my hat in for fat overflow.

Adbot
ADBOT LOVES YOU

zedprime
Jun 9, 2007

yospos
I think Pools of Radiance went one step further than Myth 2 in it's routine to delete all folder contents. Where Myth 2 was content to delete everything in the root the main exe was, due to a mixed up reference I think PoR went one file path upward and then did the same thing. So like best case you lose all your installed games if you were well organized, or else fairly commonly you lost your entire C drive.

zedprime
Jun 9, 2007

yospos
Level select as a crash handler makes extra sense as the least new effort. They will have a level select utility for testing the game, and a tester who just crashed the game probably wants to use it to reproduce or move on to another step. No reason to turn that off, cert or not.

zedprime
Jun 9, 2007

yospos

zedprime
Jun 9, 2007

yospos
There's a ton of little ways someone would have heard it and brought it up and through the sheer power of some-elses-problem that keeps these projects moving it would have been dismissed because "well a voice director signed off on the read and the mix, must be something weird the historians slipped in."

Thinking about it the same attitude probably includes why a voice director would sign off. Frowning Jesus, these projects can be a mess.

zedprime
Jun 9, 2007

yospos
Sounds like a new flavor of an existing bug for the PR.

It makes sense in that it's just evaluating during combat if everyone is dead so if a script manages to avoid, skip, or ignore that for the moment there's the ability to get back to the map with everyone dead and the game won't bother to check until you're back in combat again.

zedprime
Jun 9, 2007

yospos
My favorite MGS4 hour long cutscene is Snake smoking a cigarette incredibly satisfyingly and staring me down while the game installed.

zedprime
Jun 9, 2007

yospos

Pile Of Garbage posted:

I remember back in the day playing pirated games that didn't have any cutscenes where they were supposed to because they got stripped out to reduce the download size.

Also cutscenes are always gonna be a divisive topic but one thing we can all agree on is giving players the option to skip them if they so choose.
Reminding me of the famous Deus Ex warez glitch. The level change script to get off tutorial island required a successful play of a sound effect. They stripped the sound effect out for size and their trial run before uploading didn't bother finishing the first level unleashing a wave of confused people confusing other people asking why they can't leave Liberty Island.

zedprime
Jun 9, 2007

yospos

Megillah Gorilla posted:

Yeah, I was going to bang something up in photoshop, but just having these would make a world of difference:




I mean, not those controls specifically, but how is it we're in 2022 and can't loving pause a cutscene? Let alone fast forward the dumb ones or rewind if you want to hear something again.
In engine cut scenes are usually barely working in the forward direction.

Pausing and holding correct state is a miracle on its own and you want it to run backwards or faster on demand? Where am I supposed to Google such a scripting implementation, it doesn't exist.

zedprime
Jun 9, 2007

yospos
Modern code: oh lawd that memory is protected. Go straight to code jail for this illegal operation.

Pokemon assembly: yeah, the name is in the encounter pointer. So what?

The former is the right way given all the overhead on processing power and memory we have 30 years later but Pokemon is impressive in it's resilience to just complete garbage being passed around and it's beautiful.

zedprime
Jun 9, 2007

yospos

Croccers posted:

Scribblenauts in general can be a trip.
Scribblenauts Unlimited has a level where you have sacrifice objects into a volcano to appease it. One of those things has to be a Monetary sacrifice. The game allows you to throw a Banker into it.
When a Scribblenauts arrives, everyone gets what they ask for. Everyone gets what they deserve.

zedprime
Jun 9, 2007

yospos
So you're telling me the bee was a regression bug.

zedprime
Jun 9, 2007

yospos
Star Citizen is going well, I see

zedprime
Jun 9, 2007

yospos
I want to joke like "now that's the Arkane I remember from release Arx Fatalis and Dark Messiah" but I can't remember far back enough to know if Redfall is as janky or surpassed them.

zedprime
Jun 9, 2007

yospos

PurpleXVI posted:

https://twitter.com/TafferKing451/status/1661658366941487108

A short story about finding a glitch from the Gloomwood developer. I thought it was funny.
Tale as old as time.

Quoted cause it's a gigantic indexed blog: https://joesiegler.blog/2014/12/happy-20th-rise-of-the-triad/

quote:

The last story is one called “I’m Free”. This is a reference to a map error in Rise of the Triad. Things that moved around the map were essentially stupid. You defined them as moving, and they’d take off and move. And would continue to move until they hit a map marker to tell them to change direction. So basically it was up to the mapper to come up with a proper working maze of arrows in the editor for all the moving walls to follow. If you didn’t, and made a mistake, the moving wall (or whatever) would just keep going until it got off the side of the map grid. That was bad, because anything that attempted to exist outside of the map grid would crash the game. (Think dividing by zero kind of issue). During map design, we would frequently make mistakes, and send pushwalls off the side of the map grid. It was annoying, because you then had to go back into Ted and follow your own path. I know I had one map path that was really weird as I had about a dozen walls all moving around 2-3 paths in a room, and it was hard to follow my own work at times. The pushwall error happened enough that one time Joe Selinske had experienced it, and just shouted “I’m Free!”. Tom being Tom drew the now famous “I’m Free” image which is a representation of the pushwall having escaped off the side of the map grid. We thought it was hilarious, I scanned in his drawing, and a trap was put in for the crash that would be generated by this error, and displayed the image. It of course was the intended behavior for two warp only levels, the aptly named “This Causes An Error!” and “This Causes an Error Too!”. The image made us laugh so hard, we created dummy levels just to show it! Haha.

Your escaped physics object garbage collection needs to be really thorough (but still performant, curse you collision overhead) because you're going to at worst crash. Although interesting middleware interaction that Unity can use a coordinate system that physics eventually gives up if you pass even one out of range entity. Itd be nice if middleware with less coordinate space than the engine would have an "I'm free" type exception to crash or catch and handle as a final garbage collection trigger.

zedprime
Jun 9, 2007

yospos

Kyte posted:

The real mistake is designing the command such that executing it twice in a row yields different results. Imagine there's some "player is stuck vibrating in place" kinda bug and you have the player tripping the trigger volume every frame or whatever. Now you've got a much bigger problem.
If they'd made it "go to level X" instead of "go to next level" the problem would've been moot.
This is the correct architecture and various schemes can be googled that achieve being able to level pointer +1 without incrementing on nuisance calls while still being able to centrally maintain the level list/tech IDs. It's basically how any internet store or banking works, but also shows up in things like efficient UI design to transition through screens in a consistent and safe way. There's safe ways to progress through a list so I'd just leave it as an ounce of prevention saves a pound of bug fixes.

If your PC is oscillating coordinates you're going to have a degraded collision detection throughout everything everywhere and you'll probably fix it before it vibrates in and out of the level because you're having issues going through tight spots and interacting with things.

zedprime
Jun 9, 2007

yospos

TooMuchAbstraction posted:

I assume they made a "go to next level" trigger because that way they could just copy-paste it from one level to the next and it'd keep working. I can just about guarantee that if they'd had it be "go to level X" instead, then they would've shipped with a bug where sometimes when you hit the end-of-level trigger, you'd end up at the wrong level afterwards.

The correct solution would probably be to stop processing events as soon as the load-level trigger is hit...but depending on how exactly loading is implemented, that might not be feasible. For example, if an in-engine cutscene needs to play, that might require the level to remain "active" in a way that makes processing events still necessary.

Game dev sucks sometimes :negative:
I don't know how exposed it is in something like Unity but my understanding is you want to collect your collision events if not during collision detection routine for process-after-collision step, then in a scripting process-after-collision routine. If you do so, you can get a stack of scripts or routines triggered by collisions, and can post process them for example to remove duplicate "level +1" calls before they happen.


Carthag Tuek posted:

if the levels are always in order, you could make them a linked list and use goto(currLvl->next) or just plain objects like currLvl->transitionToNext(), etc. plenty of solutions available that aren't basically currLvl++
To give credit I imagine that's what they'd did, but then called it twice cause they stuck it in a to-process stack during collision processing.

There's varying other places to catch calling level transition logic twice.

zedprime
Jun 9, 2007

yospos
A large portion of save bloat was keeping track that the wooden spoon or cheese wheel you picked up is not at its original spot and is instead in your inventory/spot A. They started combatting this in Fallout 4 by having less doodads absolutely while also every nearly every doodad is consumable by crafting or repairing.

zedprime
Jun 9, 2007

yospos
I purposefully believe linear algebra does not exist. A conviction so strong I don't see anything wrong with that video. Just some normal doors and normal breasts, nothing strange.

zedprime
Jun 9, 2007

yospos
How ever will any other triple A rpg compete with this level of polish?

zedprime
Jun 9, 2007

yospos

poo poo Fuckasaurus posted:

I'm using "sanitizing inputs" as shorthand for "constructing a system robust enough to make a functional pokemon out of garbage data" which is effectively the same thing achieved by a different means but doesn't have a simple catchphrase like "sanitizing inputs" as a catch-all for the various implementations. Again, modern developers could use more of both.
This is error tolerant design and how much you tolerate errors depend son how mission critical that function or interface is. Because Pokemon missingno is a perfect example that an error tolerant interface is just a place for memory injection.

Modern computers and consoles would throw a memory violation trying to do a missingno - the people one level below you would say absolutely never.

The preference overall is to not throw errors and this comes with neat functionality and interface design. Where you.mjgbt see a bit of error tolerant design is for moddable games to help sandbox in the mods in a way a bad mod won't just stop the game from working because you can't fully ban bad mod data because of the whole "can't program a program that says the program will terminate because you can't tell it's going to terminate" problem.

zedprime
Jun 9, 2007

yospos

poo poo Fuckasaurus posted:

This is what I'm talking about with the word choice, it doesn't matter what words I used, because the concept I'm circling around has no suitable label that's less than a dozen words, and even when I used that you're attempting to correct me. It's almost entirely not error-tolerant design, it is the robust core of an engine designed to be iterated and expanded upon with minimal difficulty. The only thing they did to deliberately harden the system was add "MissingNo." as the name field for Pokemon outside of the 151 as they cut them, and it's likely that this was only to aid in determining the root cause of errors (the alternative, leaving the field blank, crashes the game when it tries to load the battle). This means that there are multiple Missingnos, at least 4 of which can be accessed through normal gameplay, and it also means that all of the Missingnos are actually fixed proto-Pokemon from an early build. Unfortunately we can tell that the memory structure changed somewhat since that build, which is why one of the Missingnos uses moves based on the moves of the other pokemon currently in your party, as the location where the player's team is stored in the release version was apparently at some point used for moves or at least indexed to the proto-pokemon entries as such.

You are correct that Missingno is a vector for injection, as with the correct player name you can escape to a few different places. Most are nonviable, crashing the game immediately before, during, or after combat, but a few others are much more viable, because they crash the game somewhat later. These are, of course, not names or anything resembling them, so it still falls outside of the class of bugs I'm discussing. I understand that modern memory management will throw a violation in this situation, however with proper memory management (which the Pokemon games simply could not have afforded due to the limitations of the platform) it could be handled in a way that's transparent to the player, such as the Lvl 2 Bulbasaur idea above. This is what's not being done, at least not to the extent where the average player only ever sees transparently handled bugs.

I'm well aware that the problem is that modern developers are financially incentivized to have a reach that well exceeds their grasp, whereas developers of the era I'm talking about were actual software developers with standards who could never survive in today's market and thought (apparently incorrectly) that good, stable software would sell better. "First 8K 60fps shooter" or whatever plays incredibly well for sales, whereas "Crashes every 30 minutes and multiple quest lines are incorrectly flagged and thus cannot be finished" does not have anywhere near the same impact in the other direction. I'm confident Ubisoft, for example, could unfuck Anvil and Disrupt to the degree required to achieve this in less than a development cycle, considering the significant improvements the engines have seen in general stability which occurred alongside full releases, however there is no financial incentive as people will clearly still buy broken games in droves. The very day that people stop buying broken games (never) the industry will stop making them.
Reading garbage after an unhandled exception and trucking along to get a passable result is error tolerant design. You don't need 16 words for that. It is what it is. Its rare to use 30 years on because you don't need to if you actually do your job and prevent unhandled exceptions from hitting production.

Handling an exception by subbing in a template object like a lvl 2 bulbasaur is one of a million error handling methodologies that come from a modern framework of being able to catch and handle exceptions that were only implemented piecemeal in the "good, stable software" made by "actual software developers" in the 90s (LMA all the way O describing the 90s this way) but is now purchasable off the shelf by any body using anything thicker than Rust or is described by textbooks for those big enough to roll their own.

"The robust core of an engine designed to be iterated and expanded upon with minimal difficulty" is a nonsense phrase you could never teach in a computer science course but I think I get it - its kind of the thing we've been groping for how to do by rote by trying to document certain successes with OOP etc. But at the end of the day in gaming there's just good games and bad ones and there's plenty of good ones with actual trash design and plenty of bad ones with absolutely impeccable design.

Overall I think you're having trouble explaining yourself because your ultimate goal is just insulting new games while building up old ones into something they weren't.

zedprime
Jun 9, 2007

yospos

dialhforhero posted:

Ah, yes. Like cars. Famous for not having issues in the first 36,000 miles or three years of ownership.

Or operating systems. They launch issue free always.

Or newly built houses. Which definitely don’t have electrical, plumbing, or foundation issues upon completion.

I am not defending putting out games in a broken state, but merely pointing out that what you said is demonstrably wrong.
Some of the inline examples they have are EA and Ubi so like I get it but they're embodying the joke about the Tesla owner showing up to a consumer panel and not shutting up about wanting a car where the steering wheel does not fall off.

zedprime
Jun 9, 2007

yospos
It's a good technique you can apply with no further higher design for cars because cars are mass manufactured to be identical in large numbers.

You probably want to do it for memory management for human NPCs but at that point you need to be also thinking about scene management of some sort to avoid identical quintuplets hanging out because you just birthday paradoxed the model into 5 adjacent slots.

zedprime
Jun 9, 2007

yospos
At least the Dragon Age 2 cave map had a toilet for you to poop in.

zedprime
Jun 9, 2007

yospos

Icedude posted:

It can't have been as bad as Mass Effect 1's map reuse, right?
Mass Effect map reuse you subjected yourself to it by side questing. DA2 took an approach like they made a big map for a main story event, then partitioned it for every other piece of content. Not just side quests, but smaller story events as well. Unavoidable even if you follow critical path only.

DA2 was crunched into existence in something insane like 14 months and accounting for preproduction they probably worked on gameplay assets for 6-9 months. In a technical point of view it's impressive there is as much as there is without you falling out of bounds constantly or seeing weird map generation gremlins but also they could have just not crunched for a year and made a game with lots of maps.

zedprime
Jun 9, 2007

yospos
DA2 would vary the shaders, widgets, and decals too. There was a few times I was like wow, a new map! before I found the toilet again and realized they just had a really good shader.

Adbot
ADBOT LOVES YOU

zedprime
Jun 9, 2007

yospos
Getting vibes of quitting the game causing a crash and replacing the exception message with "Thanks for playing the game."

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply