#Team Comtress 2 Megathread - It's finally here

1 messages · Page 4 of 1

round coyote
#

or..??

Meh epic shield Meh epic shield Oh no, I was wasteful of my shield, it is my fault I lost it!
😌🛡️ - - - - - - - - 😌🛡️ - - - - - - - - - - 😨 🛡️ ⚔️

#

Making the user not have to constantly worry about a timer but rather have it lost themself is a much, much funner interaction to have.

#

.
Have you ever played one of those old Flash cooking games.?

#

Wait nevermind.

#

.
Regardless testing should be done.

charred shadow
#

ok but this is already how medic works

#

overheal is on a timer

#

vacc bubbles are on a timer

round coyote
#

😮‍💨
This is a uniquely different medigun.

charred shadow
#

its the vacc

round coyote
#

It's a complete rework.

#

The "shields" aspect is it's upside.

charred shadow
#

yes and its still trying to keep the identity of both medic and the vacc

round coyote
#

The Vaccinator's identity is to block damage.
My idea suits it more, espcally with the "max cap of 4".

charred shadow
#

and this is still blocking damage

round coyote
#

Both fit on identity, this isn't an "identity" issue.
But rather a
"the same issue of the dalokas bar" issue and
a
"Shield doesn't feel anywhere near as cool as it would've if it didn't drain"

#

For both the medic and the patient.

charred shadow
#

dalokohs bar's issue isnt that its temporary tho

round coyote
#

If at all.

charred shadow
#

its my most used lunchbox brother

round coyote
#

Do you play much Heavy?

charred shadow
#

2nd most played after demo

round coyote
#

Oh

#

Dang

charred shadow
#

I have 14k hours in this game

round coyote
#

o-o

charred shadow
#

well, 13.8k

round coyote
#

Still o-o

round coyote
#

Like how the Battalon's backup's health is passive.

charred shadow
#

true if direct hit had no splash penalty it would feel much better to

round coyote
#

Bruh

charred shadow
#

dalokohs problem is that it still has base sandwich speed, depsite the much lower healing and need to redeploy it for the hp boost

round coyote
#

I'm talking about interatcions...
The "direct hit" feels good because it has lower splash radius.

charred shadow
#

no it feels good because it chunks every class in the game lol

round coyote
#

Constantly eating a chocolate bar to recive 50 hp is annoying and slow.

charred shadow
round coyote
charred shadow
#

ur not gonna believe this

round coyote
#

The trade is 50 max health for a horrible healing lunchbox item.

charred shadow
#

but I think the banner passives are dumb to steamhappey

round coyote
#

"All passive resistances should be removed".

#

"All resistances should be +5% maximum"

#

(Hyperbole)

charred shadow
#

no, actually I think its because the backup and conch are already some of soldiers best secondaries and they didnt need the buff

charred shadow
#

especially the conch which already had the benefit of requiring less rage to build

#

"some of"

round coyote
#

Without the passive upsides, no one would use them...

charred shadow
round coyote
#

Especally the Backup.

#

Regardless this is off topic.

#

We are talking about the Vaccinator.

charred shadow
#

yeah man people use the backup solely for the +20hp and not the complete immunity to crit damage and resistance to all damage types

charred shadow
# round coyote 😮‍💨 Oh you're one of *those* people..

Go to https://buyraycon.com/greatblue to get up to 20% off sitewide! Brought to you by Raycon.
TF2's weapon downsides are very important to game balance, acting as a way to reel in the function of each weapon to keep them all in line with one another in terms of power. Let's remove them! This was a fun experiment that I've been running over the ...

▶ Play video
#

your ideal tf2

round coyote
#

I'm here for a serious discussion.

#

Not for "tactical antics".

charred shadow
#

bro you literally just said if the backup didnt have the 20hp nobody would use it

shell temple
#

can we stop it here, its clearly not an equal discussion that will end

round coyote
#

This is the appeal of this new medigun over other mediguns...

#

Everyone with other medigun attaches themselves to the medic.

#

With this new vaccinator (if the shields didn't go away by themselves), goes to the medic, gets a charge and then goes and does their own thing, where as the medic has a pocket as well.

#

This is a brand new play style.
It's awesome and epic.

shell temple
#

yes but 50 dmg goes away in one shot on most shit

#

60 seconds is a long time

#

it wont affect anything

#

except for stacking

round coyote
#

But if you do have the shield drain...
People will... Still play much much closer to the medic...

round coyote
shell temple
#

it wont decay

#

its just 50 shield

#

and then it gets removed entirely after 60 seconds

#

if it hasnt already been consumed

round coyote
#

I'm.. Talking about it going away after 60 seconds...

#

The "decay" word was wrong sorry.

shell temple
#

60 seconds is more than enough to go anywhere on any map

charred shadow
#

60 seconds is around how long it takes to build an entire stock uber

#

thats a long time in terms of TF2

round coyote
raw orchid
#

40 seconds if you build perfectly.

round coyote
#

Without removing the appeal of getting a shield and going away from the medic.

#

Thus keeping it interesting for stacking, and keeping it fun for people who just want one shield and going away.

#

🤔

charred shadow
#

you are basing so much of this new vacc on stuff in your head rather than actually trying it out

shell temple
#

people are gonna lose the shield in like 10 seconds

#

in any combat

round coyote
round coyote
#

People would instead try keeping that shield active.

#

The main person the drain would harm is Spy.

round coyote
#

Of course I'd prefer testing.

#

We all would.

charred shadow
#

you wanted to keep arguing over imaginary scenarios

round coyote
#

If Spy got a shield from a Vaccinator shield, he'd try holding on to it.
Often lasting more than 60 seconds..

round coyote
shell temple
#

we're gonna test engi changes tonight or tomorrow

#

then perhaps ill do medic

round coyote
#

It should be tested with and without a drain I think...

shell temple
#

sure im fine with that

round coyote
#

^-^

#

Thanks

charred shadow
#

coms I might send some potato missions to you tomorrow night or wed if you wanna do some mvm play tests

shell temple
#

yeah we can do mvm

#

but i need a day or two if you need anything custom

#

or changes

round coyote
clever creekBOT
#

*Who gets to test these

changes.? Is it possible

if I could as well.?*

shell temple
#

anyone who joins

round coyote
#

🤔 How do I join..?

charred shadow
#

dont need changes atm, just figured it would be fun to see how mvm plays on comtress without having to play broken parts for the 500th time

shell temple
#

oh lol

#

yeah

chilly nova
shell temple
#

we can do mvm tonight then

round coyote
#

Tc2..?

chilly nova
#

Comtress

#

2

shell temple
#

would be a nice break from me needing to patch the game every day

clever creekBOT
#

*would be a nice break

from me needing to patch the

game every day*

shell temple
#

typical colours 2

round coyote
#

???

#

You own the Roblox one?

shell temple
#

lol

#

i knew it

delicate schooner
clever creekBOT
#

*Are you hoping most

of your changes get into

standard TF2?*

charred shadow
#

one of our halloween potato maps, memorial had some annoying problems with the terrain eating explosions on half the map

delicate schooner
#

🤔

round coyote
delicate schooner
#

what about the spring cleaning update making it into TF2

charred shadow
#

so most teams just went heavy and phlog stacks

chilly nova
clever creekBOT
#

*what about the spring

cleaning update making it

into TF2*

shell temple
#

the bug fixes sure

chilly nova
#

after i sneak in some extra steamids

shell temple
#

but not letranger shooting while cloaked

#

do NOT add that to tf2

#

okay maybe do

round coyote
#

Of course not silly April Fools style changes.

shell temple
#

but only if i get control to push daily balance updates

shell temple
charred shadow
shell temple
#

its just really funny

round coyote
#

Well maybe add that to the enforcer instead because that gun needs a buff and the Letranger is already meta for Spy.

shell temple
#

gun spy is the only way we make spy viable

round coyote
#

No no, I have a funnier idea.

shell temple
#

and make backstabs a kill of opportunity

charred shadow
#

when I was making overclocks for potato, I gave enforcer minicrits from behind

shell temple
#

rather than necessary

charred shadow
#

might be fun in pvp

round coyote
#

Amba- 😅

chilly nova
#

let spy teamkill so he can better blend in

shell temple
round coyote
#

Headshot?

#

You added all revolvers can headshot?

shell temple
#

yeah all revolvers can headshot

round coyote
#

That's awesome!

shell temple
#

except the letranger

harsh hemlock
shell temple
#

keep in mind

round coyote
chilly nova
#

true

shell temple
#

those changes arent in rn

#

only were done last night

#

as part of the playtest

#

because we be testing inhere

wheat herald
#

can you make the letranger do 200 bodyshot and 0 headshot

round coyote
#

In my balance document, I did minicrits.
But you're sound like crits.

shell temple
#

crits with falloff ofc

#

amby is always perfectly accurate

round coyote
#

It's a cool one.

charred shadow
#

give revolvers explosive headshot in mvm

round coyote
shell temple
#

you can backstab halfway out of decloak

#

so stabs are much more reliable

round coyote
#

That is a needed buff lol.

charred shadow
#

fear

harsh hemlock
shell temple
#

it makes spy awareness key

#

nah

round coyote
harsh hemlock
round coyote
#

It infact would buff the other watches more.

shell temple
#

i think dead ringer needs to lose its resistances on death

round coyote
#

Due to the backstab thing he mentioned.
Not to also mention that the deadringer is the worst
watch in vanilla.

#

Huh??

#

Bro...

harsh hemlock
#

i guess

#

but you can test it

shell temple
#

just give it 1 second invuln + cleanse + huge speed boost

round coyote
#

🤔

#

That could work.

#

Also fits more design wise I think.

shell temple
#

the other invis watches should have the resist

harsh hemlock
#

they have, but it is way lower

round coyote
#

It wouldn't have the 20% resistance?

#

On cloak?

shell temple
#

yeah ik

#

i meant it should be special to non dr cloaks

round coyote
shell temple
#

nope no resist, youre already getting a death escape and resist a damage instance, shouldnt have resist

#

just enough to get out

#

yeah even faster

#

i think dead ringer is best when used as a revenge kill

delicate schooner
#

Do you believe the reason that spring cleaning update changes didn't get in is because it was from leaked source code?

shell temple
#

the speed helps with that more than the resist

#

resist just makes it a tank damage item

round coyote
#

Especally if you make him able to attack after decloacking faster.

delicate schooner
round coyote
#

It would help make it an aggressive watch.

delicate schooner
#

🤔

shell temple
sour sedge
shell temple
#

a lot of automation fixes

#

optimizations

#

gameplay fixes

round coyote
#

That's awesome!

shell temple
#

done over the years

shell temple
charred shadow
#

heres the content from our last 2 events

tight nexus
#

could anyone tell me how to prevent this?

#

It was supposed to be just 2 commits, idk why did it updated

chilly nova
#

rebasing your commits on top of the new tree and removing the old commits should do the trick: git rebase -i origin/tc2-mod and remove the commits manually after calling git fetch

tight nexus
#

ehhhhh

tranquil mirage
#

random but people say mercurial is easier and better than git

#

never used

chilly nova
#

just use cvs 🙄

tranquil mirage
#

me when me when

chilly nova
#

?

tranquil mirage
#

firejail kinda sucks

#

bubblewrap is better

chilly nova
#

ehhh it still works

tranquil mirage
#

maybe

#

i didnt know fasterthanlime is a major contributor of itch

eternal jungle
#

I tried downloading the firefox repo via mercurial and it took like 24 hours

tranquil mirage
#

what

eternal jungle
#

Idk it took forever to sync it

tranquil mirage
#

this seems like a server problem or something, not the tool

eternal jungle
#

Firefox uses mercurial though so you have no choice

tranquil mirage
#

also --depth 0

#

or 1 idk

chilly nova
#

aren't they moving to git now

eternal jungle
#

Maybe idk this was a few years ago

shell temple
#

mercurial is bad

#

git is bad

sour sedge
#

I use JJ (written in rust)

chilly nova
#

return to project - backup v4 copy final (2)

sour sedge
eternal jungle
#

McomsVCS when

chilly nova
#

why does tf2 have to parse the item schema twice at load 😢

#

(yes yes i know it's cause it's loaded in server and client separately)

#

but still i hate

shell temple
#

i fixed this

#

but then ficool told me not to because it was gonna be fixed in live

eternal jungle
#

ETA 5 years

round coyote
sour sedge
#

Theres a whole list of fixes/changes I'm waiting for to make it to live

round coyote
#

Like a discord role.

chilly nova
#

add yourself to the comtress role in #roles👥

sour sedge
chilly nova
#

hey when are you going to relea-

sour sedge
#

Release dn

#

Anyways probably never I never started the rewrite ujel

chilly nova
#

i need to have it

shell temple
#

im releasing c# vm for source

#

with full native filesystem access

#

(except for .cfg files)

#

(this fixes a critical security exploit)

chilly nova
#

mastercoms when a chromium developer gets hit by a car

clever creekBOT
#

*mastercoms when a

chromium developer

gets hit by a car*

chilly nova
#

oooh

#

nice

sour sedge
#

My memory edit api is better

chilly nova
#

just give me the ability to map pages of memory as executable

#

and i'll be happy

sour sedge
#

(Can't be a security vuln if its intentional!!)

shell temple
#

shell has arbitrary execution exploit

#

MAJOR security flaw

#

repro:

./a.out

chilly nova
#

bash: ./a.out: Permission denied

#

epic fail

shell temple
#

wtff...

#

i have an oh my zsh that automatically +x any run file steamhapp

chilly nova
#

lmao

tranquil mirage
chilly nova
#

thank you gnu developers 🙏

shell temple
#

does the sdk release mean tf2c has to revert the phong change

chilly nova
#

why would it

shell temple
#

oh right the shaders are in

chilly nova
#

does the sdk release mean that open fortress will be open source

shell temple
#

no why would it

chilly nova
shell temple
#

why is it even called open fortress

#

honestly a really bad name

chilly nova
#

so i can beat this joke into the ground

shell temple
#

@dusky sapphire @wheat herald open

shell temple
#

never forget

shell temple
#

the open 1st tc2 upward playtest

wheat herald
#

is this true??

dusky sapphire
#

i did the very first open moment in tc2 yes

vernal hull
dusky sapphire
#

thats it

harsh hemlock
harsh hemlock
wheat herald
#

I feel like the issue template should have a checkbox that says "why is this a good idea?"

ruby cape
#

because i want to force people to not see the match hud 😡

#

and i know nothing about vscript

#

rip

eternal jungle
#

Is there any actual reason to build in steam sniper docker on linux

#

apart from convenience or whatever

wheat herald
#

no docker

#

docker bad

chilly nova
#

because that's the runtime that the game is targeting

wheat herald
#

buy a new thinkpad for every environment you want

jaunty fractal
#

well.... fuck this shit....
now, gotta make fastapi app which game server would curl to

eternal jungle
#

Idk how all this steam runtime stuff works (not a linux user)

clever creekBOT
#

*Idk how all

this steam runtime stuff works (not

a linux user)*

chilly nova
#

all steam games run under one of the steam runtimes on linux

#

because distro fragmentation

eternal jungle
#

And a runtime is like a minimal statically linked linux 'system' containing everything needed for the game?

#

or what is it

wheat herald
jaunty fractal
#

intresting fact, API is protected, when user is not logged in to the game, TF API will block the request

golden gust
chilly nova
eternal jungle
chilly nova
#

and that way they know that certain libraries will get shipped

eternal jungle
#

I noticed it was cancelling tickets basically as soon as possible

#

either when user logs off or requests a new ticket

golden gust
eternal jungle
#

or disconnects from the server even

chilly nova
golden gust
#

steam-native

chilly nova
#

what

golden gust
#

it disables the entire runtime

#

and replaces it with system libraries

chilly nova
#

oh my god

#

but also i don't think that'll disable the sniper runtime

#

unless they do some really fucked up stuff

eternal jungle
chilly nova
#

yeah

#

there are some hacks with graphics drivers though iirc

jaunty fractal
eternal jungle
#

Ah

golden gust
chilly nova
#

because it's a separate thing from the scout runtime that steam runs itself off of

#

it runs under it

#

idk how the package works though

golden gust
chilly nova
#

oh that's a feature of steam

eternal jungle
#

@jaunty fractal Were you able to decode any of the inventory request messages (just for fun)?

#

I think they look like protobuf but I couldn't figure out where the definitions are

chilly nova
eternal jungle
#

Maybe in gcsdk?

#

I didn't really look much at it

jaunty fractal
chilly nova
#

you can dump protobufs from the binaries, or check out the steamdb gametracking repos for them

jaunty fractal
#

but prolly it's just binary that easily attaches to inventory

chilly nova
#

they won't have them if they're specific to the sdk gcsdk though probably

eternal jungle
#

It might not even be protobuf idk

#

I'll look at it later doing other stuff rn

chilly nova
#

protoc --decode_raw also lets you decode it even without the schema steamhapp

tight nexus
#

4 minutes compile, is it good or trash?

chilly nova
#

good

#

enough

eternal jungle
#

3 minutes on my laptop with 2015 cpu

chilly nova
#

it's not like you need to recompile the entire thing every 5 minutes

tranquil mirage
#

steam should use flatpak (they kinda already use)

eternal jungle
#

Whichever are used for the inventory request messages

sour sedge
#

Define inventory requests, just loading the inventory?

eternal jungle
#

I don't think it would be mentioned in the source

eternal jungle
#

both client loading its own inventory and also client sending desired loadout to server

#

and web api sending loadout back to server (I think)?

#

it all looks to use the same thing

#

whatever goes in the msg parameter

#

in web api requests

chilly nova
#

can you point me to the source files for it i'm too lazy to find it myself

eternal jungle
#

tf_gc_client and tf_gc_server

#

bottom of files

#

maybe other places but most of it was there

jaunty fractal
#

if you want message i can provide you one

chilly nova
#

oh well everything in that is protobuf

tight nexus
#

damn

eternal jungle
#

Are the 'shared objects' protobuf?

tight nexus
#

i compiled the branch with the forced firstperson

sour sedge
chilly nova
#

OH NVM I MAY BE STUPID

sour sedge
#

Pretty much everything else is protobuf though

tight nexus
#

how do i disable it?

chilly nova
#

i was looking in the old sources

eternal jungle
#

Okay well the webapi inventory stuff looks similar to the old anyways

#

if I remember right

#

it's just wrapped by web api

#

but like the msg I think is similar to existing stuff

jaunty fractal
#

kinda

chilly nova
#

OnWebapiEquipmentReceive?

jaunty fractal
#

yep

#

this is called when HTTP request has returned

chilly nova
#
        CGCClientSharedObjectCache *pSOCache = GetGCClient()->AddLocalSOCache( steamID, bufMsgSubscription.Base(), bufMsgSubscription.TellPut() );
        if ( !pSOCache )
        {
            Warning( "Inventory response failed to create SO cache (probably protobuf didn't parse)\n" );
            return;
        }

uhhh well

#

it does mention protobuf

tight nexus
chilly nova
#

if you want i can go looking in gcsdk for the actual function itself

eternal jungle
#

Idk if AddLocalSOCache would be what does the actual decoding

#

or if it would happen later

#

idk

chilly nova
#

CMsgSOCacheSubscribed

#

it parses

#

ugh i can only find references to it in random cheats lol

clever creekBOT
#

*ugh i can only

find references to it

in random cheats lol*

chilly nova
#

guess i'll just have to dump it myself 😔

eternal jungle
#

I guess that means it's the same as existing stuff

#

right?

chilly nova
#

yeah looks like it

sour sedge
#

I believe so

eternal jungle
#

I kinda want to check if the web api allows you to do anything you shouldn't be able to do

#

but probably not worth bothering

sour sedge
#

Web api is read only

eternal jungle
#

the design at least looks sound

#

No you can change loadout

shell temple
#

not really

eternal jungle
#

I know it's fake loadout

#

rather than real tf2

#

but you can change it

shell temple
#

afaik its untracked on their end

chilly nova
#

so how does it actually work?

tight nexus
chilly nova
#

does it just ask the server if it's valid

eternal jungle
#

No the client asks the server to ask the web api if you can have a certain loadout

#

and gives it the loadout

#

at least I think it does that

sour sedge
#

Stored in a single file

#

It still validates that your steam user actually owns the items when the server gives you your items

chilly nova
#
message CMsgSOCacheSubscribed {
  message SubscribedType {
    optional int32 type_id = 1;
    repeated bytes object_data = 2;
  }

  optional fixed64 owner = 1;
  repeated .CMsgSOCacheSubscribed.SubscribedType objects = 2;
  optional fixed64 version = 3;
  optional .CMsgSOIDOwner owner_soid = 4;
  optional uint32 service_id = 5;
  repeated uint32 service_list = 6;
  optional fixed64 sync_version = 7;
}
sour sedge
#

Will default to stock if you don't have an item with the matching id in your backpack

chilly nova
#

i'm not sure what object_data is

eternal jungle
#

Maybe just the internal format for inventories that econ_item_inventory can parse?

#

idk

chilly nova
#

oh wait why didn't i think to check the leaked code 🤦‍♀️

#

let's see if it has anything

sour sedge
#

I believe object_data is just metadata

#

Orwait no nvm misread

wheat herald
#

I LOVE PROTOBUFS!!!!!!!!!!!!!!!!!!!!!!!!

eternal jungle
#

I misread also thought you meant objects

sour sedge
#

object_data just seems to be arbitrary base64 encoded data potentially?

#

Wait nvm it base64 encodes it when sent to the server

clever creekBOT
#

*Wait nvm it

base64 encodes it when

sent to the server*

eternal jungle
#

Yeah the whole msg is base64 encoded

sour sedge
#

Looks like object_data is potentially unused?

#

Just takes the item id (which is the type)

chilly nova
#

are you sure that's the item id

#

idk enough about gcsdk

#

but this seems much more generic

eternal jungle
#

Item id would be in one of the objects

#

I think

#

it sends multiple items at once

chilly nova
#

@jaunty fractal can you send me one of the messages?

sour sedge
#

Talking about how the client/server appears to interact with the data

#

Wait no

chilly nova
#

???

sour sedge
#

Hard converts it into CEconItem? How?

chilly nova
#

oh god this is a reflection system isn't it

sour sedge
#

Yep

chilly nova
#

gg

sour sedge
#

Its literally just CEconItem* pItem = ( CEconItem* )pItemCache->GetObject( i );

#

Then it sends the item id it rips out of that to the server

#

pMsg->add_item_id( pItem->GetID() );

#

If its equipped*

#

Oh they overwrite the = operator

chilly nova
#

so then it's all in econ_item.cpp

#

ok

#

fun

sour sedge
#

Yep

#

But since its still a hard cast ig its already in that format???????

#

// We do destructive operations on our local object
YOU DON'T FUCKING SAY

chilly nova
sour sedge
#

This system fucking sucks

chilly nova
#

CSOEconItem

#

i bet that's fucking it

eternal jungle
#

The overall design seems good

sour sedge
#

Its... really not

chilly nova
eternal jungle
#

With the client asking steam for its own inventory and sending only the loadout to the server

chilly nova
#

so you should just be able to parse it out

eternal jungle
#

and the server asking web api if it's allowed

sour sedge
#

Yeah but the way its reading that is a mess

eternal jungle
#

I cam think of many worse ways to design it

sour sedge
#

I can think of infinitely many better ways I am very grumpy after seeing this

chilly nova
#

please give example message i'm too lazy to grab one myself

clever creekBOT
#

*please give example

message i'm too lazy to

decode one myself*

eternal jungle
#

Wait isn't the part you're complaining about literally used in all valve games

#

for the inventories

#

like real tf2, dota, etc

sour sedge
#

Like, I can't call it over engineered, because its not done properly, but I can't call it underengineered because its impressive what they pulled out of their butt with this message passing system

#

Its literally the class as it would appear in memory serialized to bytes from what I can tell...

chilly nova
#

no it's not

#

it's a protobuf

eternal jungle
#

He means inside the protobuf

sour sedge
#

^

chilly nova
#

yes

#

inside the protobuf

#

is another protobuf

#

CSOEconItem

#

that gets decoded into a CEconItem

sour sedge
#

(which is just CSharedObject)

chilly nova
#

yes

sour sedge
#

Wait where is it read into CSOEconItem

#

I don't think I saw that anywhere I though it was just left as repeated bytes

chilly nova
#

CEconItem::BParseFromMessage

sour sedge
#

Oh okay thats slightly better but this is still

#

A design

chilly nova
#

it's just a weird reflection system

sour sedge
#

Its nasty

eternal jungle
#

How else would you even do it

#

This is how the econ in real tf2 works too

sour sedge
#

Thats what I'm complaining about

eternal jungle
#

But like what's wrong with it

#

I legitimately don't understand

chilly nova
#

use protobuf Any maybe idk steamhapp

#

but i'm not sure how new that is

sour sedge
#

A lot? CSharedObject is used for a lot more than just econ stuff this is literally just disgusting they're dumping everything into a single type and then repulling it out of their ass

jaunty fractal
#

yea

chilly nova
#

that's generally how it works

#

you have a base class that everything inherits from, allowing you to cast once you've verified it

#

well, it doesn't need to be inheritance

#

but you need some base info for every object

sour sedge
#

The entire point of protobufs is to have a well defined schema if you are just using one schema for everything you don't want protobufs you can literally serialize to anything at that point

chilly nova
#

ehhh yeah in this case it's a bit silly

sour sedge
#

You could literally just fucking base64 encode it at this point if this is how you're gonna use it steamhappy

eternal jungle
#

But they have CSOEconItem

chilly nova
#

i think what UB is saying is that they should have just made it a CSOEconItem in the protobuf definition

#

although since gcsdk is common across games maybe they can't do that 🤷

sour sedge
#

Well I was meaning more this entire system seems like it was retroactively made to support the econ system using an already existing format but yeah

#

Seems like a 1am hack job rather than properly... using and defining protobuf schemas

eternal jungle
#

I mean I don't really understand it too well but it seems like they did do that

sour sedge
#

I mean idk I'm a psycho who thinks your protocol schema should always be excessively extremely well defined without ambiguities like this

eternal jungle
#

and they just have an outer wrapper

#

that doesn't benefit from using protobuf but they just did it that way to integrate with existing gc stuff question mark

chilly nova
#

since item definitions are going to be different

#

or they could be

sour sedge
#

They are yeah I believe

chilly nova
#

well they are in shared so idk

#

er

eternal jungle
#

The outer wrapper just doesn't matter

#

imo

chilly nova
#

what i mean is that they're not in a game specific dir

eternal jungle
#

they have a properly defined protobuf schema for CSOEconItem

#
message CSOEconItem
{
    optional uint64                    id = 1;
    optional uint32                    account_id = 2;
    optional uint32                    inventory = 3;
    optional uint32                    def_index = 4;
    optional uint32                    quantity = 5;
    optional uint32                    level = 6;
    optional uint32                    quality = 7;
    optional uint32                    flags = 8 [ default = 0 ];
    optional uint32                    origin = 9;
    optional string                    custom_name = 10;
    optional string                    custom_desc = 11;
    repeated CSOEconItemAttribute    attribute = 12;
    optional CSOEconItem            interior_item = 13;
    optional bool                    in_use = 14 [ default = false ];
    optional uint32                    style = 15 [default = 0 ];
    optional uint64                    original_id = 16 [ default = 0 ];
    optional bool                    contains_equipped_state = 17;            // DEPRECATED
    repeated CSOEconItemEquipped    equipped_state = 18;
    optional bool                    contains_equipped_state_v2 = 19;        // will be set to true even if equipped_state is an empty array, meaning "unequipped from everything"
}```
sour sedge
rich moat
chilly nova
#

CSharedObject == base reflection class

sour sedge
#

Its all one fat fucking single protobuf all the way down that contains literally anything

chilly nova
#

it's not a protobuf

sour sedge
#

Its yucky

#

You know what I mean >:(

chilly nova
eternal jungle
#

Idk I think it's literally fine

#

it allows for easy extensibility

#

and they can always use protobuf inside of it

#

as they do here

chilly nova
#

awesome

sour sedge
#

Yeah its literally anything ever it is a hatecrime against people who like well defined hard schemas for their messaging

chilly nova
#

put a json document inside messagepack inside cbor inside keyvalues inside protobuf

sour sedge
#

Its so evil

chilly nova
#

ur evil

sour sedge
#

And I literally work for a company that forced me to add arbitrary interior encryption to our protobuf schemas on the consumer end because they don't trust TLS for some reason

#

Actually probably should remove that last part but yeah

chilly nova
sour sedge
#

Already deleted the message

eternal jungle
#

I saw what you deleted

sour sedge
#

I have a lot of very choice thoughts on our entire setup at my irl job and I really want to talk about it but I make good money and don't want to get fired

#

The one respect I have about this shared object system is that you could literally just up and use any underlying protocol because it relies entirely on reflection shenanigans

shell temple
#

the shared object system's whole point is to treat all steam data as data

#

as in

#

everything is a shared object

sour sedge
#

Mmhm

shell temple
#

this helps caching, notifications, etc

#

its terrible but it does what it is designed to do

#

which is like

#

basically make a replicatable cacheable client-server sql row sharer

sour sedge
#

Its the complete inverse of how I like to design things basically is the tl;dr of why I don't like it

#

I like specialization

eternal jungle
#

but they can specialize inside of this shared object wrapper

sour sedge
chilly nova
#

which isnt as nice

sour sedge
#

I want specialization at the schema level yeah

eternal jungle
#

I guess but the code is already full of this way of thinking

#

so who really cares

sour sedge
#

Yeah its too late for my complaints by like

#

Over a decade

chilly nova
#

just make a time machine

sour sedge
#

I do not want to return to the dark ages I will enjoy the safety of the modern era where I can write my nice fancy well documented specialized schemas with a type for everything I send over the wire

#

I can be grumpy about it though

chilly nova
#

idk man i just decode everything with c pointer magic and it seems to work

sour sedge
#

No need to parse when you can just reinterpret the data

chilly nova
#

thats what casts are for

sour sedge
#

Mmmhm

#

Remove all the sanity checks for extra speed too

chilly nova
#

yeah

#

rust is kinda stupid ngl

#

what idiot would want to add more checks

sour sedge
#

Exactly, why would you want safety? You're wasting my cycles...

chilly nova
#

and more safety

#

🙄

sour sedge
#

We should just be sending binary over the wire and just cast it in memory

#

It's only gonna error like 1% of the time anyways

clever creekBOT
#

*It's only gonna

error like 1% of

the time anyways*

sour sedge
#

Acceptable casualties

eternal jungle
#

I guess the web api loadout is always updated when you change your loadout in tf2

#

like real tf2

chilly nova
#

someone should violate tos

eternal jungle
#

but yeah you guys were right there's no writing to it from mod tf

sour sedge
#

Yeah that's just a proxy to the real item servers

#

Your mod loadout is all local in a .txt file using valves object format I forget the name of

chilly nova
#

keyvalues?

#

or one of the other ones

eternal jungle
#

It's keyvalues

sour sedge
#

Keyvalues yeah

#

Sometimes called VDF I guess

chilly nova
#

keyvalues binary my beloved

sour sedge
#

Just use messagepack smh my head are they stupid

eternal jungle
#

I wonder what the item ids are

#

I guess they match the item ids you see on backpack.tf for example

sour sedge
#

It's unique(not) id

#

Yeah

rich moat
#

dogshit ass sound code

sour sedge
#

Has to exist in your backpack though, it does check that bare minimum

clever creekBOT
#

*Has to exist in

your backpack though, it does check

that bare minimum*

eternal jungle
#

They get changed when the item changes hands :/

chilly nova
#

when will someone rewrite all of the proprietary engine dlls

rich moat
#

i think it might literally be like race condition RNG to determine whether it plays vacc charge 1 or the stock medigun charge sound

#

race condition + prediction (this is on a branch without fixing the prediction issue)

sour sedge
chilly nova
#

ew no

#

c++ only

rich moat
#

cause like on frog fortress I only get vacc charge but on live tf2 i only get stock medigun noise in my tests

eternal jungle
#

Does tf2 still use the original vphysics or did joshie replace it with their jolt physics?

chilly nova
#

original

rich moat
#

I don't think vphysics jolt is considered stable enough yet

eternal jungle
#

So it works on 64 bit?

chilly nova
#

yes

rich moat
#

i haven't looked at in in a while

eternal jungle
#

huh

chilly nova
#

somehow

#

actually it was probably just stolen from csgo

rich moat
#

updates relatively recently at least

chilly nova
#

since thats 64bit

sour sedge
chilly nova
#

it doesnt work with airblast iirc

#

cause it doesnt have the cone collision code

rich moat
#

I think you mean the cube collision code trollfig

rich moat
#

oh wait it got fixed right

chilly nova
#

youre thinking of the sphere check

sour sedge
#

I believe some physics on live are broken as of latest update, push triggers in particular behave wrongly iirc?

rich moat
#

right

eternal jungle
#

When you crouch while standing on somebody's head it bugs out

#

since latest update

sour sedge
#

A push trigger sending you towards the ceiling will clientside visually clip you into the ceiling for some reason, but doesn't actually clip you into the ceiling from the servers perspective, zero clue why that happens now

eternal jungle
#

it's like network stuff not physics though

chilly nova
rich moat
sour sedge
#

Probably

#

I don't even know what all was changed I didn't read the notes

chilly nova
#

perhaps

rich moat
eternal jungle
#

I read all the notes for the 64 bit update and I don't know what was changed in it

rich moat
#

supposedly walking on props and other entities is improved

#

but uh, i guess players don't count towards that

sour sedge
chilly nova
#

if the funny mac symbols were still with us...

rich moat
#

me when I test only on listen servers (i don't know if thats true I have not tested the physics on listen or dedicated servers)

shell temple
#

how do you check an entity's life time

eternal jungle
chilly nova
#

is it possible to run the sdk without a server binary

#

i wanna pull a titanfall 1

eternal jungle
#

on windows anyways

chilly nova
#

smh my head

eternal jungle
#

maybe you could skip over it

shell temple
#

does anyone know how the model gets hidden when youre hauling a building

mortal gate
#

are you referring to r_drawviewmodel toggle scripts or just how they changed the animation position

shell temple
#

no the actual building

#

it gets hidden when you pick it up

chilly nova
#

not sure exactly but maybe trace through CTFPlayer::TryToPickupBuilding

#

looks like it calls the MakeCarriedObject method of the building entity, which then does a bunch of sstuff

shell temple
#

yeah i cant find anything to do with it

shell temple
#

it seems like at some point it clears out the model in some way

#

but literally cannot find it

sour sedge
#

I believe the building itself doesn't exist on the server?

shell temple
#

it does

#

farthest ive gotten is that its an invalid activity lookup

chilly nova
#

it's an entity

shell temple
#

so something about the model has to be changed

#

but i cant find anything

chilly nova
#

maybe in CBaseEntity::FollowEntity?

sour sedge
#

There's two separate classes for the builder, one for server, one for client, which hauled buildings should use as well, so check both ig?

chilly nova
#

oh right

shell temple
#

i checked everything

#

followentity does seem to do it

#

but idk why

chilly nova
#

start commenting out parts of it and see what happens?

wheat herald
#

have yoiu just searched for "hide" in the enginer builtign code

chilly nova
#

...

#

what's the enginer builtign code

wheat herald
#

the code for engineer that gets built

eternal jungle
#

Wild guess but maybe related to bool IsDisabled( void ) { return m_bDisabled || m_bCarried; }?

shell temple
#

nope

#

i am very certain its not in any tf code

sour sedge
#

Are you sure its not the entity changing its bodygroup?

chilly nova
#

but where

sour sedge
#

OnGoActive / OnGoInactive?

#

Wait no I don't think thats it actually

eternal jungle
#

I think it is

#

wtf else would it be

#

that changes bodygroup

chilly nova
#

related to earlier but i found something rather funny about protobuf

#

the wire format doesn't differentiate between bytes and submessages

#

afaict

#

so protoc decodes the SO objects as a submessage

#

what if it's related to bonemerging?

#

actually that sounds really stupid now that i say it

eternal jungle
#

how do you check the bodygroups of a model

#

or animation

#

idk how it works

chilly nova
#

uhhhh i think hlmv lets you view that but i'm not sure

eternal jungle
#

looked but didn't see it

chilly nova
#

omg coms why did you change the console bind i'm going to cry

clever creekBOT
#

*omg coms why

did you change the console bind

i'm going to cry*

rich moat
#

is it f7 now

eternal jungle
#

Erm what the cringe

chilly nova
#

no it's \

rich moat
#

bruh

chilly nova
#

hm no maybe not

#

but i did manage to make the sentry completely disappear when i place it again

tight nexus
eternal jungle
#

where bodygroups

sour sedge
#

@rich moat don't we bonemerge to the player's viewmodel when we want to do the persisent variables trick with teleporters?

chilly nova
tight nexus
#

i knew it

rich moat
#

(i presume you're talking about vscript)

sour sedge
#

Yeah

tight nexus
#

i told coms that it depends on the input method

#

` only works if you are using an english keyboard

#

in ES ISO keyboard that key is the \

sour sedge
tight nexus
#

i proposed the F3

sour sedge
#

Its related to m_bPlacing

#

Something about that being true causes it to only be rendered and networked to its m_hBuilder

chilly nova
#

how do you know?

#

m_bPlacing seems... odd

#

that sounds like it's being placed, but not placed

#

idk

eternal jungle
#

placing just means the same thing as carrying

#

I think

#
    // Add this object to the team's list
    // But only if we're not placing it
    if ( pTeam && (!m_bPlacing) )
    {
        pTeam->AddObject( this );
    }```?
chilly nova
#

but there's also a carrying member

#

🤔

eternal jungle
sour sedge
rich moat
#

isn't carrying used for picked up weapons?

sour sedge
rich moat
#

thats my guess since i think when you look at a player with a picked up weapon it says "Carrying X" iirc

chilly nova
#

oh creates a tele

sour sedge
#

Preventing it from being set to placing causes this funnyness

chilly nova
#

oh wait does it change it's model to the blueprint?

sour sedge
#

Yeah

#

My question is still is it being shown to other players though

chilly nova
#

so what stops other players from seeing the blueprint

#

want me to jump on tc2?

rich moat
#

isn't there a bug where if you pick up a building with an infinite sapper the spy can also see the blueprint?

#

that might help figure this out

sour sedge
#

Well, I know the sentry is only networked to the local player, or is supposed to be, when in placement mode

chilly nova
#

oh so maybe it only networks to the object's owner

wheat herald
#

too bad I cant test jack SHIT because VISUAL STUDIO FUCKING SUCKS and is REFUSING TO COMPILE MY CODE

chilly nova
#

which i guess would also include the spy

#

skill issue, works on linux

sour sedge
#

Anyone feel free to hop on

chilly nova
#

i'm anyone

#

but not everyone

#

what did you change UB

sour sedge
#

tf_obj.cpp line 883

#

Commented out

chilly nova
#

maybe it has something to do with activities

eternal jungle
#

did you try getting rid of line 3615

#

m_bcarried

wheat herald
#

I did

#

it just made the building destroy when picked up

#

which is funny

#

but pointless

rich moat
wheat herald
#

i dont know how to test what any this shit looks like from another players perspective

chilly nova
#

friends

sour sedge
#

@shell temple
Potential lead

int CBaseObject::ShouldTransmit( const CCheckTransmitInfo *pInfo )
{
    // Always transmit to owner
    if ( GetBuilder() && pInfo->m_pClientEnt == GetBuilder()->edict() )
        return FL_EDICT_ALWAYS;

    // Placement models only transmit to owners
    if ( IsPlacing() )
        return FL_EDICT_DONTSEND;

    if ( pInfo->m_pClientEnt )
    {
        CBaseEntity *pRecipientEntity = CBaseEntity::Instance( pInfo->m_pClientEnt );
        if ( pRecipientEntity && pRecipientEntity->ShouldForceTransmitsForTeam( GetTeamNumber() ) )
            return FL_EDICT_ALWAYS;
    }

    return BaseClass::ShouldTransmit( pInfo );
}
chilly nova
#

oh you know what that would make perfect sense

#

it hides the model by not sending the entity

eternal jungle
#

but it hides from owner too

sour sedge
#

No

chilly nova
#

no, it turns into the blueprint

sour sedge
#

It always shows to the owner

eternal jungle
#

isn't that a separate model?

wheat herald
#

yall are right

#

commenting out the first 2 lines makes the blueprint never show

chilly nova
#

separate model on the same entity

#

it swaps it out when you pick it up

eternal jungle
#

where does it do that

sour sedge
#

@chilly nova join again should be able to see now

chilly nova
#

aaaa now i have to restart it

#

hold on

wheat herald
#

this code is a mess tbh...

#

why is there so much...

#

did they really need that much code

sour sedge
#

Well yeah its in like 8 different files

chilly nova
#

old complex game

wheat herald
#

rewriting in 10 lines

chilly nova
#

on old complex game engine

eternal jungle
#

Niterux fortress will be 100,000 loc

shell temple
#

where is the blueprint

#

how do i force it not to be blueprint

chilly nova
#

?

umbral siren
wheat herald
#

@shell temple

shell temple
#

thats irrelevant

wheat herald
#

if you comment out the first 2 lines on should transmit it hides the blueprint

eternal jungle
#

thats how you force it to not be blueprint

shell temple
#

i want the model

#

thats how you force it to be nothing

wheat herald
#

?

eternal jungle
#

well we just look and find where it swaps normal model to blueprint

shell temple
#

yeah

#

i want to find that

chilly nova
#

::Spawn

shell temple
#

what in spawn?

chilly nova
#

that's where it sets the model to it's placement model

chilly nova
shell temple
#

am i looking at the right ::Spawn

#

what line what file

rich moat
#

i just found out they call this function in another part of the medigun code in regards to the vaccinator :(

shell temple
#

i think its buildpoints though

rich moat
#

so close

chilly nova
chilly nova
#

the entity is never "nothing"

#

it's just not networked

shell temple
#

i want to draw the actual sentry model

#

for everyone

#

or well in my case the dispenser model

chilly nova
#

even when it's being carried?

shell temple
#

yes

#

i want it to be attached to the engie

chilly nova
#

CObjectSentrygun::Spawn sets the placement model for the sentry

#

so change it to be the placed model

#

and always network it

#

like, remove the IsPlacing check in CBaseObject::ShouldTransmit

shell temple
#

where does it do that for dispenser though

eternal jungle
#

I think it is OnGoActive

chilly nova
#

CObjectDispenser::Spawn

shell temple
#

that sets it to the actual model i think

#

i dont see it in there

eternal jungle
#

oh I thought that's what you were asking

#

mb

shell temple
#

also its used in other places

chilly nova
#

?

shell temple
#

GetPlacementModel

wheat herald
#

const char* CObjectDispenser::GetPlacementModel()
{
return /IsMiniBuilding() ? MINI_DISPENSER_MODEL_PLACEMENT :/ DISPENSER_MODEL_PLACEMENT;
}

eternal jungle
#

You'll have to make the the model networked to everyone even when placing

shell temple
#

i dont really understand whats going on because when does it spawn

#

yes ik

#

i already did that when it was said

#

but in my case it wasnt networking to me either

#

so it wasnt that

wheat herald
#

throw all the code in chatgpt and ask it to rewrite it to stop being so stupid

shell temple
#

let me show you the problem

chilly nova
#

set a breakpoint on spawn and look at the backtrace?

#

i may be misunderstanding completely

shell temple
#

yes its a very weird question

#

why is the model not rendering

#

im carrying it rn

#

the shadow is rendering

wheat herald
#

i dont know ive never seen that

shell temple
#

but the model is not

wheat herald
#

your build is broken

chilly nova
#

what did you change

shell temple
#

this is what im trying to do

#

a lot of things

#

but not anything fundamental

eternal jungle
#

Can you just comment line 475 in c_baseobject

chilly nova
#

so you changed something and it broke?

#

is that correct?

shell temple
#

if i go to placement mode

#

it works

#

no

#

nothing broke

#

im trying to implement new functionality

#

im trying to get it to render

#

when it wasnt rendering before

#

and i have been asking this whole time

#

why isnt it rendering

#

and no one is giving me an answer

wheat herald
#

can this new functionality kill engineer whenever he builds something please

#

i dont know ive never had that happen to me before

shell temple
#

yes obviously

#

i am adding functionality

#

the only thing i cannot figure out is how to make the model not invisible

#

while carrying

eternal jungle
#

How are you putting it on his back

chilly nova
shell temple
#

i didnt change anything

#

it is always attached to him

wheat herald
#

I DONT UNDERSTAND ANYTHING AND I GIVE UO

shell temple
#

when he picks it up

shell temple
eternal jungle
#

Do you want it active

sour sedge
#

Can you share your screen coms its kinda hard to figure out when we're talking past eachother

radiant cape
#

based, replay

shell temple
#

maybe its a problem with IsPlacing as other people noted

#

because technically i have split up semantics of placing and carrying

sour sedge
#

Who's the owner of the dispenser, still the engineer? Or are you creating a new dispenser entity?

#

Idk what all code you've touched so all I can do is grasp at straws here lol

shell temple
#

its literally nothing fundamental

#

like literally

eternal jungle
#

If it's active does that means it heals people still

shell temple
#

the dispenser is attached to the player already

#

while hauling

eternal jungle
#

while he's carrying it?

shell temple
#

yes

#

backpack dispenser

#

funny change of the day

radiant cape
#

you guys talking about dispenser made me remember that engi bug that if you stand on the top of the dispenser it gives you double metal

#

due to two checks occurring at the same time

sour sedge
radiant cape
#

shounic has a video about it

shell temple
#

since engineer can use his weapons

#

so i think the builder creates some weird proxy entity

#

for the placer

sour sedge
#

No, its the same entity as before

eternal jungle
#

What makes the toolbox