#Team Comtress 2 Megathread - It's finally here
1 messages · Page 4 of 1
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.
ok but this is already how medic works
overheal is on a timer
vacc bubbles are on a timer
😮💨
This is a uniquely different medigun.
yes and its still trying to keep the identity of both medic and the vacc
The Vaccinator's identity is to block damage.
My idea suits it more, espcally with the "max cap of 4".
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.
dalokohs bar's issue isnt that its temporary tho
You don't use it much do you..?
If at all.
its my most used lunchbox brother
Do you play much Heavy?
2nd most played after demo
I have 14k hours in this game
o-o
well, 13.8k
Still o-o
Regardless...
If the +50 health was passive..
It would feel a lot better.
Like how the Battalon's backup's health is passive.
true if direct hit had no splash penalty it would feel much better to
Bruh
dalokohs problem is that it still has base sandwich speed, depsite the much lower healing and need to redeploy it for the hp boost
I'm talking about interatcions...
The "direct hit" feels good because it has lower splash radius.
no it feels good because it chunks every class in the game lol
Or just make it passive and then that solves the issue anyways?
Constantly eating a chocolate bar to recive 50 hp is annoying and slow.
no because heavies just permanantly having +50hp is dumb and annoying, the deploy and eating animation at least means he sometimes has to give some down time in combat
"dumb and annoying"
Then how is the Battalon's back up okay?
ur not gonna believe this
The trade is 50 max health for a horrible healing lunchbox item.
but I think the banner passives are dumb to 
😮💨 Oh you're one of those people..
"All passive resistances should be removed".
"All resistances should be +5% maximum"
(Hyperbole)
no, actually I think its because the backup and conch are already some of soldiers best secondaries and they didnt need the buff
Gunboats..?
especially the conch which already had the benefit of requiring less rage to build
"some of"
Without the passive upsides, no one would use them...

Especally the Backup.
Regardless this is off topic.
We are talking about the Vaccinator.
yeah man people use the backup solely for the +20hp and not the complete immunity to crit damage and resistance to all damage types
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 ...
your ideal tf2
You are twisting my words.
I'm here for a serious discussion.
Not for "tactical antics".
bro you literally just said if the backup didnt have the 20hp nobody would use it

can we stop it here, its clearly not an equal discussion that will end
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.
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
But if you do have the shield drain...
People will... Still play much much closer to the medic...
It changes everything...
it wont decay
its just 50 shield
and then it gets removed entirely after 60 seconds
if it hasnt already been consumed
I'm.. Talking about it going away after 60 seconds...
The "decay" word was wrong sorry.
60 seconds is more than enough to go anywhere on any map
60 seconds is around how long it takes to build an entire stock uber
thats a long time in terms of TF2
😮💨
At the end of the day, it is you're change. But I'm telling you.
This will half ruin the item's appeal and upside.
Stacking can easily be fixed.
Well I suggest another change.
How about the first shield never disappears.
But stacked shields go away after 60 seconds.
40 seconds if you build perfectly.
Therefore, keeping the appeal I mentioned, but for "stacking" where it would be an issue, then you're solution takes play.
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.
🤔
you are basing so much of this new vacc on stuff in your head rather than actually trying it out
We are all literally doing that same thing.
Not.. Really..?
People would instead try keeping that shield active.
The main person the drain would harm is Spy.
you wanted to keep arguing over imaginary scenarios
If Spy got a shield from a Vaccinator shield, he'd try holding on to it.
Often lasting more than 60 seconds..
Honestly that is fair.
It should be tested with and without a drain I think...
sure im fine with that
I can atleast ask if you test it without the drain.. Right?
^-^
Thanks
coms I might send some potato missions to you tomorrow night or wed if you wanna do some mvm play tests
yeah we can do mvm
but i need a day or two if you need anything custom
or changes
Who gets to test these changes.?
Is it possible if I could as well.?
*Who gets to test these
changes.? Is it possible
if I could as well.?*
anyone who joins
🤔 How do I join..?
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
open tc2 and join from the server browser
we can do mvm tonight then
Tc2..?
would be a nice break from me needing to patch the game every day
*would be a nice break
from me needing to patch the
game every day*
typical colours 2
Are you hoping most of your changes get into standard TF2?
*Are you hoping most
of your changes get into
standard TF2?*
one of our halloween potato maps, memorial had some annoying problems with the terrain eating explosions on half the map
🤔
Wait really..?
I thought that was the entire point of this.. 😭
what about the spring cleaning update making it into TF2
so most teams just went heavy and phlog stacks
im hoping the powerplay change gets in
*what about the spring
cleaning update making it
into TF2*
the bug fixes sure
after i sneak in some extra steamids
yeah
but not letranger shooting while cloaked
do NOT add that to tf2
okay maybe do
Of course not silly April Fools style changes.
but only if i get control to push daily balance updates
its actually not that bad
only works with cloak n dagger 
its just really funny
Wait really..?
Well maybe add that to the enforcer instead because that gun needs a buff and the Letranger is already meta for Spy.
gun spy is the only way we make spy viable
No no, I have a funnier idea.
and make backstabs a kill of opportunity
when I was making overclocks for potato, I gave enforcer minicrits from behind
rather than necessary
Amba- 😅
let spy teamkill so he can better blend in
enforcer can do a 150 headshot, it doesnt need buffs
yeah all revolvers can headshot
That's awesome!
except the letranger
enable friendly fire by default, it will fix spy checking 
keep in mind
With crits or minicrits?
true
those changes arent in rn
only were done last night
as part of the playtest
because we be testing inhere
can you make the letranger do 200 bodyshot and 0 headshot
In my balance document, I did minicrits.
But you're sound like crits.
Huh, that is an interesting take.
It's a cool one.
What buffs do the Ambassador get.?
That is a needed buff lol.
fear
so the dead ringer will be the supreme watch?
No..?
dead ringer pairs pretty well with real gun spies
It infact would buff the other watches more.
i think dead ringer needs to lose its resistances on death
Due to the backstab thing he mentioned.
Not to also mention that the deadringer is the worst
watch in vanilla.
Huh??
Bro...
that will make it useless
i guess
but you can test it
just give it 1 second invuln + cleanse + huge speed boost
the other invis watches should have the resist
they have, but it is way lower
When you say "huge speed boost"
Do you mean it lasts longer or that it is a "hyper speed boost"
As in it's even faster?
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
Do you believe the reason that spring cleaning update changes didn't get in is because it was from leaked source code?
the speed helps with that more than the resist
resist just makes it a tank damage item
no because changes did get in
I agree here.
That is it's biggest use.
Especally if you make him able to attack after decloacking faster.
Wait, it was included in vanilla TF2?
It would help make it an aggressive watch.
🤔
some
MVM 
done over the years
idk
could anyone tell me how to prevent this?
It was supposed to be just 2 commits, idk why did it updated
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
ehhhhh
just use cvs 🙄
me when me when
?
ehhh it still works
Mercurial is so fucking slow
I tried downloading the firefox repo via mercurial and it took like 24 hours
what
Idk it took forever to sync it
this seems like a server problem or something, not the tool
Firefox uses mercurial though so you have no choice
aren't they moving to git now
Maybe idk this was a few years ago
I use JJ (written in rust)
return to project - backup v4 copy final (2)
McomsVCS when
Version Comtrol(l) System
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
ETA 5 years
Is there a way to get a "ping" when testing goes up?
Theres a whole list of fixes/changes I'm waiting for to make it to live
Like a discord role.
add yourself to the comtress role in #roles👥
https://github.com/ValveSoftware/source-sdk-2013/pull/679
I first complained about this in August of 2024
hey when are you going to relea-
i need to have it
im releasing c# vm for source
with full native filesystem access
(except for .cfg files)
(this fixes a critical security exploit)
mastercoms when a chromium developer gets hit by a car
*mastercoms when a
chromium developer
gets hit by a car*
My memory edit api is better
(Can't be a security vuln if its intentional!!)
lmao
/lib64/ld-linux-x86-64.so.2 ./a.out easy
thank you gnu developers 🙏
does the sdk release mean tf2c has to revert the phong change
why would it
oh right the shaders are in
does the sdk release mean that open fortress will be open source
no why would it

so i can beat this joke into the ground
@dusky sapphire @wheat herald open
never forget
that me
the open 1st tc2 upward playtest
is this true??
i did the very first open moment in tc2 yes
No idea 
just because its supposed to be open source
thats it
because it used to be open source
not anymore :((
I feel like the issue template should have a checkbox that says "why is this a good idea?"
because i want to force people to not see the match hud 😡
and i know nothing about vscript
rip
Is there any actual reason to build in steam sniper docker on linux
apart from convenience or whatever
because that's the runtime that the game is targeting
buy a new thinkpad for every environment you want
well.... fuck this shit....
now, gotta make fastapi app which game server would curl to
Idk how all this steam runtime stuff works (not a linux user)
*Idk how all
this steam runtime stuff works (not
a linux user)*
all steam games run under one of the steam runtimes on linux
because distro fragmentation
And a runtime is like a minimal statically linked linux 'system' containing everything needed for the game?
or what is it
i bet that's the only thing that makes game development bearable for linux
intresting fact, API is protected, when user is not logged in to the game, TF API will block the request
linux isn’t a real platform
the steam runtime (distro) is
yeah, it's a "base" linux system that all games can target
You mean the tickets get cancelled or something else?
and that way they know that certain libraries will get shipped
I noticed it was cancelling tickets basically as soon as possible
either when user logs off or requests a new ticket
unless you use arch btw
or disconnects from the server even
?
steam-native
what
oh my god
but also i don't think that'll disable the sniper runtime
unless they do some really fucked up stuff
And it's just kind of compatible with your kernel because every linux distro uses roughly the same kernel?
it just returns user is not in game as the message
Ah
it’s funny because i dont think they even document why would you do it
why not?
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
oh that's a feature of steam
@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
where are they decoded? in steamapi?
not really my goal at the moment
you can dump protobufs from the binaries, or check out the steamdb gametracking repos for them
but prolly it's just binary that easily attaches to inventory
they won't have them if they're specific to the sdk gcsdk though probably
protoc --decode_raw also lets you decode it even without the schema 
4 minutes compile, is it good or trash?
3 minutes on my laptop with 2015 cpu
it's not like you need to recompile the entire thing every 5 minutes
Which ones are you looking for
steam should use flatpak (they kinda already use)
Whichever are used for the inventory request messages
Define inventory requests, just loading the inventory?
I don't think it would be mentioned in the source
I mean it's all the same format I think
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
can you point me to the source files for it i'm too lazy to find it myself
tf_gc_client and tf_gc_server
bottom of files
maybe other places but most of it was there
tf_gc_server
if you want message i can provide you one
oh well everything in that is protobuf
damn
Are the 'shared objects' protobuf?
i compiled the branch with the forced firstperson
Inventory requests use the teamfortress.com web api iirc
OH NVM I MAY BE STUPID
Pretty much everything else is protobuf though
how do i disable it?
i was looking in the old sources
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
kinda
OnWebapiEquipmentReceive?
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
coms is there a command?
if you want i can go looking in gcsdk for the actual function itself
Idk if AddLocalSOCache would be what does the actual decoding
or if it would happen later
idk
CMsgSOCacheSubscribed
it parses
ugh i can only find references to it in random cheats lol
*ugh i can only
find references to it
in random cheats lol*
guess i'll just have to dump it myself 😔
yeah looks like it
I believe so
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
Web api is read only
not really
afaik its untracked on their end
so how does it actually work?
alright it's tf_taunt_first_person_always
does it just ask the server if it's valid
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
Your loadout is entirely local yeah
Stored in a single file
It still validates that your steam user actually owns the items when the server gives you your items
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;
}
Will default to stock if you don't have an item with the matching id in your backpack
i'm not sure what object_data is
Maybe just the internal format for inventories that econ_item_inventory can parse?
idk
oh wait why didn't i think to check the leaked code 🤦♀️
let's see if it has anything
I LOVE PROTOBUFS!!!!!!!!!!!!!!!!!!!!!!!!
I misread also thought you meant objects
object_data just seems to be arbitrary base64 encoded data potentially?
Wait nvm it base64 encodes it when sent to the server
*Wait nvm it
base64 encodes it when
sent to the server*
Yeah the whole msg is base64 encoded
Looks like object_data is potentially unused?
Just takes the item id (which is the type)
are you sure that's the item id
idk enough about gcsdk
but this seems much more generic
@jaunty fractal can you send me one of the messages?
???
Hard converts it into CEconItem? How?
oh god this is a reflection system isn't it
Yep
gg
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
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
they check at the top
This system fucking sucks
The item part of it maybe
The overall design seems good
Its... really not
it's in the sdk source too
With the client asking steam for its own inventory and sending only the loadout to the server
so you should just be able to parse it out
and the server asking web api if it's allowed
Yeah but the way its reading that is a mess
I cam think of many worse ways to design it
I can think of infinitely many better ways I am very grumpy after seeing this
please give example message i'm too lazy to grab one myself
*please give example
message i'm too lazy to
decode one myself*
Wait isn't the part you're complaining about literally used in all valve games
for the inventories
like real tf2, dota, etc
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...
He means inside the protobuf
^
yes
inside the protobuf
is another protobuf
CSOEconItem
that gets decoded into a CEconItem
(which is just CSharedObject)
yes
Wait where is it read into CSOEconItem
I don't think I saw that anywhere I though it was just left as repeated bytes
CEconItem::BParseFromMessage
it's just a weird reflection system
Its nasty
Thats what I'm complaining about
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
sorry i was tabbed out
yea
???
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
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
ehhh yeah in this case it's a bit silly
You could literally just fucking base64 encode it at this point if this is how you're gonna use it 
But they have CSOEconItem
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 🤷
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
I mean I don't really understand it too well but it seems like they did do that
I mean idk I'm a psycho who thinks your protocol schema should always be excessively extremely well defined without ambiguities like this
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
actually no it makes a lot more sense if they share the same outer protobuf across games
since item definitions are going to be different
or they could be
They are yeah I believe
what i mean is that they're not in a game specific dir
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"
}```
My issue lies with CSharedObject being used from everything from economy to lobbies to parties to competitive data to etc.. etc..
"quantity" defined... and yet each crate, key, and scrap is a separate item...
CSharedObject == base reflection class
Its all one fat fucking single protobuf all the way down that contains literally anything
it's not a protobuf
the entire point is that its not a protobuf, it can be any object
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
actually if i understand correctly they could put json in the object data and it would work as long as the type used that
awesome
Yeah its literally anything ever it is a hatecrime against people who like well defined hard schemas for their messaging
Its so evil
ur evil
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

past tense
Already deleted the message
I saw what you deleted
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
the shared object system's whole point is to treat all steam data as data
as in
everything is a shared object
Mmhm
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
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
but they can specialize inside of this shared object wrapper
I think the big benefit is more that its trivial to scale horizontally on a system like this
tbf the specialization is pushed out of the schema and into the code
which isnt as nice
I want specialization at the schema level yeah
just make a time machine
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
idk man i just decode everything with c pointer magic and it seems to work
No need to parse when you can just reinterpret the data
thats what casts are for
Exactly, why would you want safety? You're wasting my cycles...
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
*It's only gonna
error like 1% of
the time anyways*
Acceptable casualties
I guess the web api loadout is always updated when you change your loadout in tf2
like real tf2
someone should violate tos
but yeah you guys were right there's no writing to it from mod tf
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
It's keyvalues
keyvalues binary my beloved
Just use messagepack smh my head are they stupid
I wonder what the item ids are
I guess they match the item ids you see on backpack.tf for example
dogshit ass sound code
Has to exist in your backpack though, it does check that bare minimum
*Has to exist in
your backpack though, it does check
that bare minimum*
They get changed when the item changes hands :/
when will someone rewrite all of the proprietary engine dlls
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)
Rewriting vphysics in rust rn
cause like on frog fortress I only get vacc charge but on live tf2 i only get stock medigun noise in my tests
Does tf2 still use the original vphysics or did joshie replace it with their jolt physics?
original
I don't think vphysics jolt is considered stable enough yet
So it works on 64 bit?
yes
i haven't looked at in in a while
huh
updates relatively recently at least
since thats 64bit
Will be using the rapier physics engine not because it's popular but because it specifically sucks for this task in particular
I think you mean the cube collision code 
oh wait it got fixed right
youre thinking of the sphere check
I believe some physics on live are broken as of latest update, push triggers in particular behave wrongly iirc?
right
i blame ub

When you crouch while standing on somebody's head it bugs out
since latest update
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
it's like network stuff not physics though
wget 😢
probably to do with the prediction changes
perhaps
I read all the notes for the 64 bit update and I don't know what was changed in it
supposedly walking on props and other entities is improved
but uh, i guess players don't count towards that
Moving platforms disagree
if the funny mac symbols were still with us...
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)
how do you check an entity's life time
happened even on listen
it crashes
on windows anyways
smh my head
maybe you could skip over it
does anyone know how the model gets hidden when youre hauling a building
are you referring to r_drawviewmodel toggle scripts or just how they changed the animation position
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
yeah i cant find anything to do with it
Trying to think
it seems like at some point it clears out the model in some way
but literally cannot find it
I believe the building itself doesn't exist on the server?
it's an entity
maybe in CBaseEntity::FollowEntity?
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?
oh right
start commenting out parts of it and see what happens?
have yoiu just searched for "hide" in the enginer builtign code
the code for engineer that gets built
Wild guess but maybe related to bool IsDisabled( void ) { return m_bDisabled || m_bCarried; }?
Are you sure its not the entity changing its bodygroup?
but where
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
uhhhh i think hlmv lets you view that but i'm not sure
looked but didn't see it
*omg coms why
did you change the console bind
i'm going to cry*
is it f7 now
Erm what the cringe
no it's \
bruh
i might have actually been right??
hm no maybe not

but i did manage to make the sentry completely disappear when i place it again
is the key next to the 1 key the ` ?
where bodygroups
@rich moat don't we bonemerge to the player's viewmodel when we want to do the persisent variables trick with teleporters?
yeah, to the left
i knew it
idk i've never done any of that stuff in vscript
(i presume you're talking about vscript)
Yeah
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 \
Doesn't seem to be this
i proposed the F3
Its related to m_bPlacing
Something about that being true causes it to only be rendered and networked to its m_hBuilder
how do you know?
m_bPlacing seems... odd
that sounds like it's being placed, but not placed
idk
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 );
}```?
valve ™
Because its what we do in vscript 
isn't carrying used for picked up weapons?
thats my guess since i think when you look at a player with a picked up weapon it says "Carrying X" iirc
Preventing it from being set to placing causes this funnyness
oh wait does it change it's model to the blueprint?
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
Well, I know the sentry is only networked to the local player, or is supposed to be, when in placement mode
oh so maybe it only networks to the object's owner
too bad I cant test jack SHIT because VISUAL STUDIO FUCKING SUCKS and is REFUSING TO COMPILE MY CODE
Wheres niterux fortress
Anyone feel free to hop on
maybe it has something to do with activities
I did
it just made the building destroy when picked up
which is funny
but pointless
me when I win a comp game at 2/20 K/D
i dont know how to test what any this shit looks like from another players perspective
friends
@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 );
}
oh you know what that would make perfect sense
it hides the model by not sending the entity
but it hides from owner too
No
no, it turns into the blueprint
It always shows to the owner
isn't that a separate model?
where does it do that
@chilly nova join again should be able to see now
this code is a mess tbh...
why is there so much...
did they really need that much code
Well yeah its in like 8 different files
old complex game
rewriting in 10 lines
on old complex game engine
Niterux fortress will be 100,000 loc
i cant see the blueprint
where is the blueprint
how do i force it not to be blueprint
?
21 years is not old 😓
thats irrelevant
if you comment out the first 2 lines on should transmit it hides the blueprint
thats how you force it to not be blueprint
?
well we just look and find where it swaps normal model to blueprint
::Spawn
what in spawn?
that's where it sets the model to it's placement model
but if you're just trying to hide the model from the client just do it here
i dont see where
am i looking at the right ::Spawn
what line what file
i just found out they call this function in another part of the medigun code in regards to the vaccinator :(
i think its buildpoints though
so close
what do you mean by nothing
the entity is never "nothing"
it's just not networked
i want to draw the actual sentry model
for everyone
or well in my case the dispenser model
even when it's being carried?
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
where does it do that for dispenser though
I think it is OnGoActive
CObjectDispenser::Spawn
also its used in other places
?
GetPlacementModel
const char* CObjectDispenser::GetPlacementModel()
{
return /IsMiniBuilding() ? MINI_DISPENSER_MODEL_PLACEMENT :/ DISPENSER_MODEL_PLACEMENT;
}
You'll have to make the the model networked to everyone even when placing
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
throw all the code in chatgpt and ask it to rewrite it to stop being so stupid
let me show you the problem
set a breakpoint on spawn and look at the backtrace?
i may be misunderstanding completely
yes its a very weird question
why is the model not rendering
im carrying it rn
the shadow is rendering
i dont know ive never seen that
but the model is not
your build is broken
what did you change
Can you just comment line 475 in c_baseobject
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
can this new functionality kill engineer whenever he builds something please
i dont know ive never had that happen to me before
yes obviously
i am adding functionality
the only thing i cannot figure out is how to make the model not invisible
while carrying
How are you putting it on his back
i don't understand what's going on in this screenshot
I DONT UNDERSTAND ANYTHING AND I GIVE UO
when he picks it up
i made it so the building remains active while carrying
Do you want it active
Can you share your screen coms its kinda hard to figure out when we're talking past eachother
based, replay
maybe its a problem with IsPlacing as other people noted
because technically i have split up semantics of placing and carrying
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
If it's active does that means it heals people still
while he's carrying it?
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
shounic has a video about it
the thing is, im not using builder
since engineer can use his weapons
so i think the builder creates some weird proxy entity
for the placer
No, its the same entity as before
What makes the toolbox



