TF2 was disruptive because it brought the competitive feel of MarioKart and Twisted Metal (fixed-characters, zany levels)-plus the athletic arena feel of Madden and NBA Jam-to FPS gameplay. Unreal and other franchises had toyed with the gameplay concepts but Valve incorporated a slick comic noir aesthetic and self-deprecating chaos to expand appeal.
it's also really incredibly well designed from a gameplay standpoint. a lot of people talk about it for how rewarding and skill-based the gameplay is to this day
Eh, I think Quake and Unreal had faster paced competitive gameplay and zanier maps, etc. The key difference with TF2 was the highly defined character roles and unique game modes. It kept a lot of what made Quake and Unreal so fun - the fast paced combat, crazy maps, etc - and refined them, while expanding the ways you can play the game. At the time it came out it was the pinnacle of the arena shooter genre.
@@charlesbenca5357 That is also fine. The client needs assets. The problem is much deeper: The server ever trusted the client. The worst thing that file *should* be able to do is cause visual glitches and/or crash the game. (i.e. you try to open a loot box with the modified catapult, the client shows the animation for loot box opening... and crashes when the server replies in an unexpected way.) That's generally what happens in e.g. Minecraft. The client has assets, data and logic, and calculates most things itself, but the server re-does or checks all relevant logic, and if he comes to a different result... well, the game is de-synced. But that's hard, expensive, and requires careful planning. Anti Cheat, checksums, hard-to-modify or online storage of assets are all just plasters. To be fair, that's how they fixed the issues, but that there were so many of them, repeatedly, shows that their whole inventory system was never refactored to be server side by default, and only has the client do enough to allow for offline play.
Quoting all values is because internally the core Source game engine only has char and float I believe, doesn't even have integers or full qualified strings. So it was easier to wrap all values and either be a matched case or a casted number faster than trying to write a wrapper and parser for game+webserver+gamehost all separately for different reading methods.
To be fair, originally TF2 meant to be a simple multiplayer FPS in the age of the dedicated servers where server owners were able to tinker with their own configurations as much as they wanted, and only later became this monstrosity of hats, keys, inventory. I don't even want to think about the hacks upon hacks used to make this thing possible in the first place.
I think the solution is to encode the text file in base64, since obviously no hackers will ever expect something so stupid and won't figure it out. It's the perfect solution.
"They had JSON back then" - but libraries where rare and crappy. So when you have to basically roll your own decoder you might as well make your own file format.
No, not really. It actually makes it easier to parse this way. They don't need to have special cases for parsing because they already know schema of the file they will be parsing.
Yeah this is pretty much it, you can open a quake live config in 2024 and see seta r_teleporterFlash "1" for example, it's very much an engine convention. Ratchet, sure it's easy to parse but that doens't invalidate it being an engine driven convention. It's funny that quake engine games have comparitively very little trust in the client and server authority rules there with the obvious exceptions of input etc,
TF2 is basically a heavily moded version of Half Life 2, they must have had some really weird technical requirement to work with to end up with this monstrosity of a file.
Best off the cuff Asmon impression ever lol. All that configuration JSON stuff looks exactly like the stuf used in GoldSrc from Half-Life 1, so even if JSON was around, I would assume that valve had just kept using their already familiar in house formats they used since probably 1997 or so, and only bothered to change it if there was a major reason to. It looks the same as the files that describe every single HUD menu including screen positions, every weapon, every sounds resource definitions, which are used to define every aspect of any GoldSrc or source "mod" though I'm sure the hl and hl2 games use the engine in the same way, and "mods" are only mods because some of them incorporate hl/hl2 resources and assume they will be present, rather than starting with an empty engine with no content. The fact that I can type in a cs 1.6 console> speak "the time is four twenty" and hear the voice from the original half life always amuses me. And the quoted values in the files are the same as every text based .cfg files that are auto generated by the game engines themselves. The universal usage of quotes probably makes make the parsers and generators less complex, not needing to parse types becuse they are only loading values into the game and the game LATER parses the values as the game instance starts. The elements are stored in game as text values and loaded into actual data structures when they get referenced by game engine instances, some being modifyable live in session and some only loaded as the scenario begins. Here are some quirks in goldsrc CS 1.6 which I know well and I'm sure many of these quirks still exist in the source games and beyond. In the case of cfg files, you can always just omit quotes if there is a single element with no whitespace or separators. However, cl_crosshair_color "0 255 0" and cl_crosshair_color 0 255 0 are not equivalent and in the second example, the last two elements are ignored, since crosshair_color is implemented to expect a string "R G B" meaning the first example is green crosshair an the second seems to (afaik) only successfully set the R value to 0 and seems invariably zero out the G and B values. I would assume that this is just the default constructor behavior of that data type as the engine parses the user-accessible value and passes it to the active game instance, rather than simply leaving the existing G and B unchanged, it replaces the entire RGB as a whole. This only becomes a real issue when getting into configuring your "alias" the command used to create user defined configurations and input customizations, can only collect multiple commands into one action by using quoted strings including separators. When keybinds are used in game, "bind mouse1 +attack" is the standard attack bind, and the + is used for pairing commands with their - counterpart, activating whatever you've bound to -attack when mouse1 is released. All input actions have an associated built in command attached. Problem: I have no headphones and when I talk on voice chat, it picks up the game sounds loudly and people yell at me and can't hear me speak unless I turn the volume and lose the ability to hear enemies coming. Solution: create an alias that mutes the volume while you are holding the voice key, default setting: bind k +voicerecord alias +shhrecord "volume 0; +voicerecord" alias -shhrecord "volume 1; -voicerecord" bind k +shhrecord works like a charm and lets you use voice chat without having to isolate your microphone or blow up your teammates ears. Just remember you're deaf for a moment while you speak. or you want your gun to refuse to autofire because you hold down attack with your ak47 too much and want to be forced to practive single shots. (btw the wait command just introduces a single frame delay to ensure that actions dont happen too fast to actually activate properly) alias +oneshot "+attack; wait; -attack" bind mouse1 +oneshot Which works, but doesn't require a - counterpart since in this case, the firing action is already cancelled and nothing need to be triggered when releasing fire. NOTE: this bind interferes with using other weapons and with holding grenades before throwing. you would need a way to turn off the setting when changing weapons to use it in game without complications. Or another legitimate customization you might desire: you want to use a green crosshair but have it turn red as you are firing but go green again as you release fire. Attempts: alias +redattack "+attack; cl_crosshair_color "255 0 0" " fails to work because of nested quotes. Okay maybe we can just make an alias to contain the crosshair command first, alias setred "cl_crosshair_color "255 0 0"" Oops. same problem. Only way to escape the need to nest these quotes, that I've found? to activate the loading a config file from your game folder, which simply runs all lines of the config file as console commands. redx.cfg containing a single line: cl_crosshair_color "255 0 0" greenx.cfg containing: cl_crosshair_color "0 255 0" bind redx "exec redx.cfg" bind greenx "exec greenx.cfg" alias +redattack "redx; +attack" alias -redattack "-attack; greenx" And you've better hope the implementation or caching of data is handled well by the game and/or your OS, because this solution indeed works, if you're comfortable with the game being told to actively load and run two .cfg files each and every time you fire your gun, just because you are trying to change a three-element variable in combination with another action. The fact that the way these games are structured leave a lot up to the client to configure, means that servers have to "assert" limits for various settings and the choice of what to allow and what not to is decided by whoever runs the server that you connect to. I've had settings that are fine almost everywhere get me booted from ones that decide that my every day settings are not legitimate. No servers have been prevented me from using customized in game sounds, though some override them. Most servers allow me to enforce minimum player models, which I use to block custom VIP models which are confusingly colored in regards to which team they are on, but a couple of servers will override all of my attempts to not "allow customized content" and somehow force it despite my use of the newer cl_filterstuff commands that are mean to prevent servers from modifying client settings you don't want them to. *shrug* I mean, barely any servers still allow flashlights even though it was a standard setting that was on when CS was new. Too many people using them annoyingly as well as the large part of the community whos graphics hardware wasn't able to handle the extra load outweighed the value of having them enabled and I only know one public server that has them enabled. The one major eyebrow raising client side option I currently think is strange to be allowed to use in 1.6 is r_wadtextures 1, which instructs the engine to, I have no clue, maybe only load textures from the .wad files and ignore any that are defined in the map files to be loaded from other places? or... the opposite? In any case it results in crashes for many maps which I would assume don't contain the required texture references for successful loading of maps, all probably created before the existence of the command, but for a few (de_dust2, de_hell) many textures end up failing to render their intended surfaces and are filled with bright purple checkerboard patterns instead. Since the r_wadtextures command is only in the newest version of 1.6, as far as I've seen, no servers prevent this setting. Luckily, as far as it might be considered a graphical cheat, woo boy it makes it extremely hard to see and fire at enemies, like trying to fight an optical illusion, and only increases difficulty instead of making anything easier. If there are ways to make use of it for an advantage, I haven't fathomed any and am not attempting to. So, its clear that valve made the structure of their standard ways of handling game data files with an emphasis on modding and clear access to many details of the client behavior, and left a lof of the implementation of securing the individual games operation, including item management, up to the individual teams running each individual game and the server operators who can freely decide to be thorough and manage those details or leave things stock and allow players the freedom to tune their own experience.
I think was mistake on valves part not correctly incentives reporting exploits because it will create incentive not reporting problems and exploits but rather abusing them and get that cash flowing through trade
Just saying but a client side check of a checksum of a file is still not enough to prevent this from happening from people who know what they are doing. There's people that write cheats for these games and that's 100x harder than MITM the requests and modifing them on the spot. Alternatively you could just patch out the check or if it's sent over the wire just hardcode the checksum of an unedited file...
At least that requires modifying or injecting code, which can get you caught by VAC. That said, trusting the client to do any of these "open crate, rename item, etc" behaviors is crazy.
yo thats dope, I just discovered f4mi's channel a few days ago, been kinda binging it. So cool to see prime checking it out too. She makes great videos!
TF2 is mah favourite game, I play it to this day. Hats and payed-for pixels though... it is a single shameful thing TF2 has done, but what a disaster for game industry it was!
Between 2013 and 2016 I spent nearly 2k hours in TF2 learning english and trading. I ammassed an inventory in the ballpark of 1k$ from zero external investment. and have since transferred that over to csgo where I did continue for two years but since stoppped. Trading has taught me a lot about talking to starngers and being suspicious. Since scams and sharks are rampant. I also got into collecting some items with special attributes like lvl100 or gifted by.... Which arent tracked by the common economy tools. Hence my inventory now has a much larger sentimental value than a first look approximation.
A checksum client side is easily patchable. A checksum server side could have hash collisions but is more secure, although you are uploading the 6MBs to the server everytime again. Why does valve not just use a server side database instead of a client side one...
Eh, I can get this counterargument when you are talking about "pay 2 win" microtransactions, but imo it's all ok as long as it stays in cosmetics. Maybe to you a digital item is not worth a lot of money, but if people want it then why would you stop them? Maybe they like the game more than you do and want to support it. Also I think the way Valve does it is the best. You can buy keys and open chests or sell it all for small profit. If you don't want the randomness you can buy the skin you want directly. I even once got a random drop from a game in CSGO worth more than 100$ and I bought myself a few games for that
@@rmidifferent8906 Eh, I'd argue TF2 is effectively pay-to-win. Among other restrictions, you can't use text or voice chat in game on official servers-including calling for medic-without ponying up the $5 for a 'premium' account! In theory you can work around it by playing on community servers... but then you're going to end up getting pounded by people with thousands of hours and all the unlocks in short order. The game's still well worth the $5, and definitely more than fun enough for some casual time-killing even as a F2P...but let's be real; being unable to coordinate with your team or even call for medic on an official server is a massive gameplay disadvantage.
ParseBool(ParseInt(baseitem)) is incredibly based. That's some "hey, there is a weird bug in this legacy code, can you take a quick look?" type of energy.
I used to adjust my guns in the original Rainbow size because all the attributes like accuracy, rate of fire, power, etc were all just a text file that you could edit.
12:37 - no, valve didn't make that, early 2000s mmorpgs such as Habbo Hotel, RuneScape and WoW essentially made the concept of crypto with virtual economies that gave birth to essentially nft black markets for real money, both selling and buying. 😂. Unfortunately lots of us early internet game users have encountered selling and trading for real money and some of them made a LOT of money out of it. Valve just made it even more profitable with their games like csgo and tf2
I wrote a vdf parser for first year DS uni class. It's technically superior to json because it supports comments and training comma doesn't murder it like json spec compliant parsers
Yeah bro fun fact that all of valves' internal data or configuration is stored using the valve data file format. It's literally a key value data file with keys and subkeys And tbh its way fucking better then json man has support for so many things
Love TF2, I finally got the iphone ear buds since their price dropped a couple of years ago. I still don't have a unusual hat (probley never will) but I have ear buds and that is all that matters.
I can kind of support loot boxes (even purchaseable) as a "let people do what they want with their money", but definitely the free crate that needs a paid key should absolutely be illegal.
The only thing that stopped you from binding console commands to buttons on the ps3 was a crc32 hash on the save file. Even better all the severs would just accept sv_cheats 1, then you could do whatever.
@@o11k If u watch 3 hours TV every day, you will have wasted 10 years of your life on watching TV by the time you are 80... and as we all know, watching TV makes you stupid, while playing video games improves your eye-hand coordination...
Almost as bad as payday 2 client side "anticheat" which is just some file or files that check what items and properties you have and if those are not standard or you shouldn't hvae gotten them yet (like paid hats and dlcs) then it tries to...🤣 it tries to put a "CHEATER" *sticker* on you so people kick you from multiplayer lobbys 🤣🤣, and it's so bad that the free epic games giveaway broke something and gave that sticker everyone who got the game through the giveaway. It's literally just some lua file appending text to your player profile when searching for multiplayer.
They're not using that json as a database. That's read only. It's pretty much the express purpose of json. Once again game devs have proven themselves smarter than web devs Anyway, their custom format comes from way before JSON and they just carried it forward because they have all the tools. A web dev would waste time retooling
The original Team Fortress was fun. There was just something satisfying about being able to shoot a rocket at your own feet and launching yourself all over the map and into enemy territory at the cost of some health. TF2 nerfed everything and added useless/pointless hats. I really disliked TF2. Original Half-Life multiplayer was also amazingly fun. HL2 removed satchels, tripmines, and snarks which were a lot of random fun. The OG Counter-Strike 1.6 was tons of fun too. CS: Go-to-the-Bathroom was not fun. And hard pass on the latest nonsense in CS.
1. It’s parsed into objects on load, so it’s not as easy to edit, and 2. the game process is protected with vac, so once again it’s not easier to edit.
Agreed capitalism is voting with your wallet but we lack the self control/awareness to actually vote for we want. But also I will never forget the horse armour dlc and I will never buy it.
To say TF2 started this is a bit misleading. This was being done in mobile games at this point. TF2 was probably the most high profile game on non mobile platforms that did it at the time though. Also Yannis is pretty based, would highly recommend you look into his history. He didnt have anything to do with TF2s crate-key thing, he was advising the Steam Marketplace overall.
prime talking about TF2 LESSGOOOO
Less go? Please no
@@JamesBDmk noooo
TF2 was disruptive because it brought the competitive feel of MarioKart and Twisted Metal (fixed-characters, zany levels)-plus the athletic arena feel of Madden and NBA Jam-to FPS gameplay. Unreal and other franchises had toyed with the gameplay concepts but Valve incorporated a slick comic noir aesthetic and self-deprecating chaos to expand appeal.
it's also really incredibly well designed from a gameplay standpoint. a lot of people talk about it for how rewarding and skill-based the gameplay is to this day
Eh, I think Quake and Unreal had faster paced competitive gameplay and zanier maps, etc. The key difference with TF2 was the highly defined character roles and unique game modes. It kept a lot of what made Quake and Unreal so fun - the fast paced combat, crazy maps, etc - and refined them, while expanding the ways you can play the game. At the time it came out it was the pinnacle of the arena shooter genre.
@tayzonday watches @theprimeagen? 🤯
It's not JSON as a database, it's JSON as... data. It's read only. It's a game asset.
4:50 The video is in 4/3 for historical accuracy reasons
@7:30 Json as database has a redeeming trait when used for small datasets: You can check it into vcs and then get nice diffs of its changes over time.
honestly i think it's a good usage of json. the only problem is it was stored on the client, not that it was json.
@@charlesbenca5357 That is also fine. The client needs assets. The problem is much deeper: The server ever trusted the client. The worst thing that file *should* be able to do is cause visual glitches and/or crash the game. (i.e. you try to open a loot box with the modified catapult, the client shows the animation for loot box opening... and crashes when the server replies in an unexpected way.)
That's generally what happens in e.g. Minecraft.
The client has assets, data and logic, and calculates most things itself, but the server re-does or checks all relevant logic, and if he comes to a different result... well, the game is de-synced.
But that's hard, expensive, and requires careful planning. Anti Cheat, checksums, hard-to-modify or online storage of assets are all just plasters.
To be fair, that's how they fixed the issues, but that there were so many of them, repeatedly, shows that their whole inventory system was never refactored to be server side by default, and only has the client do enough to allow for offline play.
Quoting all values is because internally the core Source game engine only has char and float I believe, doesn't even have integers or full qualified strings. So it was easier to wrap all values and either be a matched case or a casted number faster than trying to write a wrapper and parser for game+webserver+gamehost all separately for different reading methods.
14:30 Wait till he hears about 1.5million usd knife skin in Counter-Strike XD
Economies in games seem so pointless to me... the classic "market economy" creating value sinks
@@Kane0123 Have you seen Counter Strike's economy? Hello?
@@p99chan99 hello
@@Kane0123indeed, now let's add NFTs to the mix
@@Kane0123 idk the 15 years of fun from trading i've had has really made it worth it for me, made way more money from the game than i ever spent on it
To be fair, originally TF2 meant to be a simple multiplayer FPS in the age of the dedicated servers where server owners were able to tinker with their own configurations as much as they wanted, and only later became this monstrosity of hats, keys, inventory. I don't even want to think about the hacks upon hacks used to make this thing possible in the first place.
TF2 is my favorite game
TF2 is my favorite game
Never thought I’d watch Prime reacts to TF2 content
I think the solution is to encode the text file in base64, since obviously no hackers will ever expect something so stupid and won't figure it out. It's the perfect solution.
FAMI AND TF2 FEATURED LETS GOOOO
I don’t know if you remember this Prime but I introduced you two at Open Sauce 🙏
I Don't!!!!! WTF
"They had JSON back then" - but libraries where rare and crappy. So when you have to basically roll your own decoder you might as well make your own file format.
The string as bool thing is probably due to the "cvar" (console variable) code from Quake, which was later used in GoldSrc and Source engines.
No, not really. It actually makes it easier to parse this way. They don't need to have special cases for parsing because they already know schema of the file they will be parsing.
Yeah this is pretty much it, you can open a quake live config in 2024 and see seta r_teleporterFlash "1" for example, it's very much an engine convention. Ratchet, sure it's easy to parse but that doens't invalidate it being an engine driven convention. It's funny that quake engine games have comparitively very little trust in the client and server authority rules there with the obvious exceptions of input etc,
I have to parse a huge VDF (Valve's shitty JSON) file for my project, it's actually hell.
It makes me want JDSL.
From what game?
@@vilian9185 It's for Steam
@@vilian9185Any goldsrc derivative games, so that includes source and even source 2
Why? When I learned Java I wrote a VDF parser and writer for fun and it was super easy
TF2 is basically a heavily moded version of Half Life 2, they must have had some really weird technical requirement to work with to end up with this monstrosity of a file.
All Valve games are just heavily modded Half Life
@@temari2860 In that one the executable was still named hl2.exe and if you delete some files you get the Half Life 2 main menu.
@@temari2860 and Half Life was a heavily modded Quake (the original one). Also, this hideous txt file format ? Thanks Carmack for that.
The F4mi Prime crossover I never expected
Best off the cuff Asmon impression ever lol.
All that configuration JSON stuff looks exactly like the stuf used in GoldSrc from Half-Life 1, so even if JSON was around, I would assume that valve had just kept using their already familiar in house formats they used since probably 1997 or so, and only bothered to change it if there was a major reason to.
It looks the same as the files that describe every single HUD menu including screen positions, every weapon, every sounds resource definitions, which are used to define every aspect of any GoldSrc or source "mod" though I'm sure the hl and hl2 games use the engine in the same way, and "mods" are only mods because some of them incorporate hl/hl2 resources and assume they will be present, rather than starting with an empty engine with no content. The fact that I can type in a cs 1.6 console> speak "the time is four twenty" and hear the voice from the original half life always amuses me.
And the quoted values in the files are the same as every text based .cfg files that are auto generated by the game engines themselves. The universal usage of quotes probably makes make the parsers and generators less complex, not needing to parse types becuse they are only loading values into the game and the game LATER parses the values as the game instance starts. The elements are stored in game as text values and loaded into actual data structures when they get referenced by game engine instances, some being modifyable live in session and some only loaded as the scenario begins.
Here are some quirks in goldsrc CS 1.6 which I know well and I'm sure many of these quirks still exist in the source games and beyond.
In the case of cfg files, you can always just omit quotes if there is a single element with no whitespace or separators. However,
cl_crosshair_color "0 255 0"
and
cl_crosshair_color 0 255 0
are not equivalent and in the second example, the last two elements are ignored, since crosshair_color is implemented to expect a string "R G B" meaning the first example is green crosshair an the second seems to (afaik) only successfully set the R value to 0 and seems invariably zero out the G and B values. I would assume that this is just the default constructor behavior of that data type as the engine parses the user-accessible value and passes it to the active game instance, rather than simply leaving the existing G and B unchanged, it replaces the entire RGB as a whole.
This only becomes a real issue when getting into configuring your "alias" the command used to create user defined configurations and input customizations, can only collect multiple commands into one action by using quoted strings including separators.
When keybinds are used in game, "bind mouse1 +attack" is the standard attack bind, and the + is used for pairing commands with their - counterpart, activating whatever you've bound to -attack when mouse1 is released. All input actions have an associated built in command attached.
Problem: I have no headphones and when I talk on voice chat, it picks up the game sounds loudly and people yell at me and can't hear me speak unless I turn the volume and lose the ability to hear enemies coming.
Solution: create an alias that mutes the volume while you are holding the voice key, default setting: bind k +voicerecord
alias +shhrecord "volume 0; +voicerecord"
alias -shhrecord "volume 1; -voicerecord"
bind k +shhrecord
works like a charm and lets you use voice chat without having to isolate your microphone or blow up your teammates ears. Just remember you're deaf for a moment while you speak.
or you want your gun to refuse to autofire because you hold down attack with your ak47 too much and want to be forced to practive single shots. (btw the wait command just introduces a single frame delay to ensure that actions dont happen too fast to actually activate properly)
alias +oneshot "+attack; wait; -attack"
bind mouse1 +oneshot
Which works, but doesn't require a - counterpart since in this case, the firing action is already cancelled and nothing need to be triggered when releasing fire. NOTE: this bind interferes with using other weapons and with holding grenades before throwing. you would need a way to turn off the setting when changing weapons to use it in game without complications.
Or another legitimate customization you might desire:
you want to use a green crosshair but have it turn red as you are firing but go green again as you release fire.
Attempts:
alias +redattack "+attack; cl_crosshair_color "255 0 0" "
fails to work because of nested quotes. Okay maybe we can just make an alias to contain the crosshair command first,
alias setred "cl_crosshair_color "255 0 0""
Oops. same problem.
Only way to escape the need to nest these quotes, that I've found? to activate the loading a config file from your game folder, which simply runs all lines of the config file as console commands.
redx.cfg containing a single line: cl_crosshair_color "255 0 0"
greenx.cfg containing: cl_crosshair_color "0 255 0"
bind redx "exec redx.cfg"
bind greenx "exec greenx.cfg"
alias +redattack "redx; +attack"
alias -redattack "-attack; greenx"
And you've better hope the implementation or caching of data is handled well by the game and/or your OS, because this solution indeed works, if you're comfortable with the game being told to actively load and run two .cfg files each and every time you fire your gun, just because you are trying to change a three-element variable in combination with another action.
The fact that the way these games are structured leave a lot up to the client to configure, means that servers have to "assert" limits for various settings and the choice of what to allow and what not to is decided by whoever runs the server that you connect to. I've had settings that are fine almost everywhere get me booted from ones that decide that my every day settings are not legitimate. No servers have been prevented me from using customized in game sounds, though some override them. Most servers allow me to enforce minimum player models, which I use to block custom VIP models which are confusingly colored in regards to which team they are on, but a couple of servers will override all of my attempts to not "allow customized content" and somehow force it despite my use of the newer cl_filterstuff commands that are mean to prevent servers from modifying client settings you don't want them to. *shrug*
I mean, barely any servers still allow flashlights even though it was a standard setting that was on when CS was new. Too many people using them annoyingly as well as the large part of the community whos graphics hardware wasn't able to handle the extra load outweighed the value of having them enabled and I only know one public server that has them enabled.
The one major eyebrow raising client side option I currently think is strange to be allowed to use in 1.6 is r_wadtextures 1, which instructs the engine to, I have no clue, maybe only load textures from the .wad files and ignore any that are defined in the map files to be loaded from other places? or... the opposite? In any case it results in crashes for many maps which I would assume don't contain the required texture references for successful loading of maps, all probably created before the existence of the command, but for a few (de_dust2, de_hell) many textures end up failing to render their intended surfaces and are filled with bright purple checkerboard patterns instead. Since the r_wadtextures command is only in the newest version of 1.6, as far as I've seen, no servers prevent this setting.
Luckily, as far as it might be considered a graphical cheat, woo boy it makes it extremely hard to see and fire at enemies, like trying to fight an optical illusion, and only increases difficulty instead of making anything easier. If there are ways to make use of it for an advantage, I haven't fathomed any and am not attempting to.
So, its clear that valve made the structure of their standard ways of handling game data files with an emphasis on modding and clear access to many details of the client behavior, and left a lof of the implementation of securing the individual games operation, including item management, up to the individual teams running each individual game and the server operators who can freely decide to be thorough and manage those details or leave things stock and allow players the freedom to tune their own experience.
I think was mistake on valves part not correctly incentives reporting exploits because it will create incentive not reporting problems and exploits but rather abusing them and get that cash flowing through trade
Just saying but a client side check of a checksum of a file is still not enough to prevent this from happening from people who know what they are doing. There's people that write cheats for these games and that's 100x harder than MITM the requests and modifing them on the spot. Alternatively you could just patch out the check or if it's sent over the wire just hardcode the checksum of an unedited file...
Yess
I was screaming the whole video that doesn't matter what they change, it's still clientside!! AAAA
@@someoneunknown6894Yeah client side is stupid in any way
thank you.
Exactly. Unless they fully implement server side logic, anyone so determined will get around it by patching
At least that requires modifying or injecting code, which can get you caught by VAC. That said, trusting the client to do any of these "open crate, rename item, etc" behaviors is crazy.
i remember swapping out wall textures with window textures , and spy footsteps with horns in the beginning of tf2 :)
"you've gotta stop buying stupid shit"
...
"those magnetic posters are actually pretty cool"
I still play this game daily...there's nothing else like it and the charm it has built over the decades
Some of the best editing in a video I've seen in a minute! Gave them a sub!
Let’s appreciate the videos storytelling and editing. And music.
yo thats dope, I just discovered f4mi's channel a few days ago, been kinda binging it. So cool to see prime checking it out too. She makes great videos!
I have 4317 hours in tf2, and still playing, this video is great
I like how you still watch the in-video ads to support the creator.
TF2 is mah favourite game, I play it to this day. Hats and payed-for pixels though... it is a single shameful thing TF2 has done, but what a disaster for game industry it was!
I’ll never get the idea that people are mad that cosmetics exist in a game lol
STOP, can we take a moment to appreciate how creative this lady was ... UNBELIEVABLE !!!
This reminded me that the James Web Telescope uses XML
Between 2013 and 2016 I spent nearly 2k hours in TF2 learning english and trading. I ammassed an inventory in the ballpark of 1k$ from zero external investment. and have since transferred that over to csgo where I did continue for two years but since stoppped.
Trading has taught me a lot about talking to starngers and being suspicious. Since scams and sharks are rampant. I also got into collecting some items with special attributes like lvl100 or gifted by.... Which arent tracked by the common economy tools. Hence my inventory now has a much larger sentimental value than a first look approximation.
A checksum client side is easily patchable. A checksum server side could have hash collisions but is more secure, although you are uploading the 6MBs to the server everytime again. Why does valve not just use a server side database instead of a client side one...
Because the game is 17 years old and didn't even had hats in the launch, it was a latter addition that fucked things
@@vilian9185 the game was in development a decade before it released. The codebase was already ancient.
@@Electric_Bill a yes, and source was a quake engine lol
Because ancient spaghetti code probably requires it to be a client side file
Not gonna lie I have seen worse 'JSON' encodings in the automotive industry...
people saying "its my money i can spend it how i want"
...SIR, YOU FUND THE ENSHITTIFICATION!
Idk man, that was inevitable like with movies enshittification, loot boxes were only a way to make it happen
@@vilian9185 death and decay are inevitable... why fight it. bend over and learn to enjoy it.
Eh, I can get this counterargument when you are talking about "pay 2 win" microtransactions, but imo it's all ok as long as it stays in cosmetics. Maybe to you a digital item is not worth a lot of money, but if people want it then why would you stop them? Maybe they like the game more than you do and want to support it.
Also I think the way Valve does it is the best. You can buy keys and open chests or sell it all for small profit. If you don't want the randomness you can buy the skin you want directly. I even once got a random drop from a game in CSGO worth more than 100$ and I bought myself a few games for that
@@rmidifferent8906 Eh, I'd argue TF2 is effectively pay-to-win. Among other restrictions, you can't use text or voice chat in game on official servers-including calling for medic-without ponying up the $5 for a 'premium' account! In theory you can work around it by playing on community servers... but then you're going to end up getting pounded by people with thousands of hours and all the unlocks in short order. The game's still well worth the $5, and definitely more than fun enough for some casual time-killing even as a F2P...but let's be real; being unable to coordinate with your team or even call for medic on an official server is a massive gameplay disadvantage.
the editing on the original video is really good
Blue hair! She codes in Rust in her free time, I bet
Holy sh-t I just randomly looked _"Downtown"_ song up yesterday what a trip lmao
"Stop spending your money on stupid things" ** displate advert ** "Ok imma look into this"
I wonder if people spend more money on virtual hats than actual hats at this point.
Ik I have
ParseBool(ParseInt(baseitem)) is incredibly based.
That's some "hey, there is a weird bug in this legacy code, can you take a quick look?" type of energy.
tf2 is an incredible amount of fun, plus beautiful graphics
I used to adjust my guns in the original Rainbow size because all the attributes like accuracy, rate of fire, power, etc were all just a text file that you could edit.
they redownloaded a mongo database LMAOOOOOO
12:37 - no, valve didn't make that, early 2000s mmorpgs such as Habbo Hotel, RuneScape and WoW essentially made the concept of crypto with virtual economies that gave birth to essentially nft black markets for real money, both selling and buying. 😂. Unfortunately lots of us early internet game users have encountered selling and trading for real money and some of them made a LOT of money out of it. Valve just made it even more profitable with their games like csgo and tf2
3:35 Nah that quarter is chat saying that and asmon saying because you buy.
Even if they added signature verification you could just patch out the call to return true
That ending reminded me of soooo many cracks.
I wrote a vdf parser for first year DS uni class. It's technically superior to json because it supports comments and training comma doesn't murder it like json spec compliant parsers
Yeah bro fun fact that all of valves' internal data or configuration is stored using the valve data file format. It's literally a key value data file with keys and subkeys
And tbh its way fucking better then json man has support for so many things
Just press (f). Says It right there...
This was a gem, thanks
Love TF2, I finally got the iphone ear buds since their price dropped a couple of years ago. I still don't have a unusual hat (probley never will) but I have ear buds and that is all that matters.
0:24 I also experience youtube ui just not working problerly.
String as bool? In college I did string as bit.
I can kind of support loot boxes (even purchaseable) as a "let people do what they want with their money", but definitely the free crate that needs a paid key should absolutely be illegal.
Someone can explain what is the genesis of this "The name is a primeagen" at the end of each video?
My first ever api used JSON as a Database because my stupid ass didn't know about SQLite and I wanted a simple and light storage.
I always thought using colon to separate keys from values was JSONs biggest downside.
Will use Valve data file format for everything from now on
I really loved this one.
The best part about Valve giving out the Cheater's Lament is that I participated in the item grinding cheats and I still got a Cheater's Lament lol
I know that voice. It's f4mi. Fantastic creator
In the beginning valve release the Half-life Generation box set... on physical optical discs
Greece mentioned!
The Orange Box changed my life.
The creator of this video really edited the shit out of it. If videos can be vaporwave, this must be it!
The frying pan is from Left 4 Dead 2
Based asmon watcher prime
Star Trek Online does the random loot boxes with paid keys as well.
13:39 PUBG tried to sue Epic for Fortnite for their claim to battle royals and the "Bus" start system lol.
If the download method allowed partials it wouldn't need to download the full 7mb, just the modified bits that need to be reset. But still.
@13:18 The Golden Griddle... They had tasty pilaf.
14:47 nice gold standard joke!
Looks like valve never heard of hashing
TF 2 was life. I literally did nothing but TF2-maxxing for the first 3 years
The only thing that stopped you from binding console commands to buttons on the ps3 was a crc32 hash on the save file. Even better all the severs would just accept sv_cheats 1, then you could do whatever.
Ayyye covering Fami lesgooooo
Valve's VDF format is older than JSON by a good few years
CS2 major biggest e-sport game where loot boxes are looked by keys which you buy only on steam. Valve and Gaben did this.
Dont whiz on the electric fence!
if you think valve's format is bad you should see media molecule's in littlebigplanet
F4mi content mentioned?!?!? LETS GOOOOOO
I think I have 25K+ TF2 hours and never bought anything. But I haven't played in 2 years...
My man. I've spent inordinate time in games and spent nothing as well.
Bro spent 3 years straight on tf2 wtf
@@o11k If u watch 3 hours TV every day, you will have wasted 10 years of your life on watching TV by the time you are 80... and as we all know, watching TV makes you stupid, while playing video games improves your eye-hand coordination...
shit, in my application at work we have json in database fields which is in of itself it's own database
Almost as bad as payday 2 client side "anticheat" which is just some file or files that check what items and properties you have and if those are not standard or you shouldn't hvae gotten them yet (like paid hats and dlcs) then it tries to...🤣
it tries to put a "CHEATER" *sticker* on you so people kick you from multiplayer lobbys 🤣🤣, and it's so bad that the free epic games giveaway broke something and gave that sticker everyone who got the game through the giveaway. It's literally just some lua file appending text to your player profile when searching for multiplayer.
They're not using that json as a database. That's read only. It's pretty much the express purpose of json.
Once again game devs have proven themselves smarter than web devs
Anyway, their custom format comes from way before JSON and they just carried it forward because they have all the tools. A web dev would waste time retooling
The original Team Fortress was fun. There was just something satisfying about being able to shoot a rocket at your own feet and launching yourself all over the map and into enemy territory at the cost of some health. TF2 nerfed everything and added useless/pointless hats. I really disliked TF2. Original Half-Life multiplayer was also amazingly fun. HL2 removed satchels, tripmines, and snarks which were a lot of random fun. The OG Counter-Strike 1.6 was tons of fun too. CS: Go-to-the-Bathroom was not fun. And hard pass on the latest nonsense in CS.
You do know that rocket jumping is still a thing it tf2? And that you can disable all hats? Also Hat Fortress 2 for the win!!!!!
You sound like a miserable old hag
Whoooo said it suuuuuuuccccckkkssss it is my favourite game ever
I feel like I can apply on valve..
lol, displate page is doooooooooogshit. never seen loadingtimes like that. could deserve its own theogg \ primagen reacts video
And when had Valve learned that you can edit process memory so you need to do an actual validation on your server?
Checksum is useless. Just edit it in memory after the check.
1. It’s parsed into objects on load, so it’s not as easy to edit, and 2. the game process is protected with vac, so once again it’s not easier to edit.
@@l3xforever I guess. I could probably do it in 30 minutes .
even if useless it's already better than what they had before (for a long time)
L take leaded gasoline man (around the 4:10 ish mark)
You know what's better than having a specific skin or hat? Being good at the game...
What happened with the full screen button? Did it just not register his click?
Agreed capitalism is voting with your wallet but we lack the self control/awareness to actually vote for we want. But also I will never forget the horse armour dlc and I will never buy it.
JSON as a database - Mongo is a joke :))
9:29 any game that does that makes me immediately not want to play at all.
To say TF2 started this is a bit misleading. This was being done in mobile games at this point. TF2 was probably the most high profile game on non mobile platforms that did it at the time though.
Also Yannis is pretty based, would highly recommend you look into his history. He didnt have anything to do with TF2s crate-key thing, he was advising the Steam Marketplace overall.
wait, so instead of forcing every client to redownload 7MB on every launch, why not just encrypt that local file...? lol. wow.