posted September 16, 2002 09:29 AM
hey there guys. yes, old post, but i just now found it. ill respond here cause it doesnt look like an answer was found and also because this brings up something ive been meaning to tell everyone for quite a while now, but it was so much typing i never bothered, lol. and since its one of those nights where im up and typing and relaxing i figure what better time to babble on about it?
prepare for much more information than you asked for! lol
being able to pull the players name from above the tank is actually exploiting an error in TM. (not saying that doing this is "evil" just that its using a glitch in the programming is all).
as it turns out, near as i was able to tell, the way that TM keeps track of where to position a players hovering name and where to place the players position on other peoples radar is by looking at the cooridnates of that persons flag. that sounds strange... lemme try again
when playing a multiplayer game if youre looking at some other players tank you will see their name above them and youll see their position located on your radar, right? right.
we see that as "this is where that players tank is located so therefor thats where their dot is on my radar and thats why their name is hovering over the tank."
TM itself however doesnt see it like that. it works a little differently deoending on if its multiplayer or single player. doing this in single player mode is largely pointless. in a multiplayer game tho your local TM game sees it as:
"the server tells me that this player exists because its telling me that his FLAG is at cooridnates XXX by XXX by XXX on the map, therefor i will place his name on the players list to acknowledge his existance (the score display when you hit tab) and then look at where my own player is on the map. I'll then compare the two positions and place that other players/ AI's dot on my own radar "here". then i will place that players/ AI's name above that same position a little bit."
and it keeps track like that. more or less anyhow.
at no point in there does the server bother to tellthe client where other TANKS are located, just where FLAGS are located, because of course there will be a tank attached to the flag. so it works out pretty good .
less info to transmit back and forth between server and client that way i guess. the server just reports the position of other players/ bots FLAGS (as well as what direction theyre pointing, turret angle and speed). your local copy then translates all that into the various visual representations you get on your end.
kinda like when youre on a server and if you dont have a custom tank installed on your end the way that all you see when someone is using that tank is a their bolton weapon flipping all over the place with strange dust clouds under it. (wow, bad run-on sentence, lol, sorry, its late.) but im sure youve all seen that at one point or another right? the reason why is that the server doesnt send (among other things) the following info to the clients:
1) the actual mesh/ model file of the tank being used.
2) the tanks texture file/ bmp itself, only the name of the texture that the client should apply to the mesh.
this part is pretty common knowledge among modders, that the server doesnt send those 2 things to the clients (the main thing that TM does synch and communicate to the clients is the ent files).
even though that part IS fairly common knowledge not too many people i think know what that really means as far as how TM deals with things. for one thing the server doesnt pay attention to ANY physichs at all (sort of, for purposes of telling the clients anyhow. it of course determines all physichs on its own end so it can relay new placement information to the clients), it lets the client do all that work, it just tells the client what has happened/ which ent file caused the physichs to occur. then its the clients job to mimic that situation and apply the physichs on its own end. more or less, as far as general shooting and tank positioning goes, all that the server reports to the client is:
1) this players FLAG is here.
-- Client: ok, i will then attach graphics and models to that position to display that tank on screen since contained somewhere in there is the type of tank that this player is driving. i will then place that players name in my player list as well. i will then analyze and use the bounding box/ collision box information from this tanks model file and apply that information locally depending on what you tell me this tank is doing at the time.
(lack of THIS information is why a not installed tank is displayed as flipping and spazzing out in a multiplayer game. your local copy cant look at the tanks model file and apply friction/ collision physichs to it to coinside with how that tank is actually moving, the client is only getting 1/2 the information really.)
this is also what causesthat... well... i dont know what to call it. you know how if you hit a "spazzing" tank w/ a hard concussion weapon, like a Mass Driver, how from the clients view the spazzing tank kinda stalls for a split second (just pauses and sits there), dissapears briefly and then reapears a few feet off flying like normal? well thats because the client reported to the server that its firing the weapon at this trajectory, the server then registers a hit and applies the necessasary effect to that players tank reporting the struck tanks change in position to all the rest of the clients. normally the client would also register that hit and apply its own physichs to the target, the server and client then just kinda briefly compare notes to make sure that the targeted tank flys right. but the problem is that when you dont have a tank installed your local copy has no bounding boxes to look at it just treats the other tank as a very tiny miniscule speck of physical area and attempts to apply EVERYTHING to that one little speck. so the client reports that it has fired, but has no idea itself if it actually hit or not, it most likely assumes a miss itself. the client doesnt find out that it hit til the server tells it to start applying new physichs to the target. so the time when the server says to suddenly change the targets position but the client cant figure out why since IT didnt register a hit is where the stalls happen. but since the server is god the client must do what the server says, so it applys the new speed/ trajectory info to the target w/ out having any real idea why its doing it.
the local copy also doesnt really know how/ where to apply smoke puffs from the treads since it doesnt even know where the treads are!
you modders out there (because you know how smoke puffs work) now ask: "ok, then why is it that a "spazzing" smouldering/ on fire tank has its smoke/ flame displayed propperly, but the dirt puffs from the treads are all screwed up?"
Answer: because when TM displays smoke/ flame on the top of a tank its basing where to display them on the position of that tank models point of origin/ center of gravity/ center of mass/ whatever you prefer to call it: the middle of the model. how does it know where the middle is if it doesnt know what the model file looks like? because the server has told the client where the flag is at. the server then can look at the offset info in the synched tank ent file to tell exactly where the point of origin for that unknown tank is located. the client in essence is trying to apply everything to this miniscule solid area and it dont work too well.
(the client for example will want to place the "lowest part of the tank model on the ground", in this case thats the point of origin since the client doesnt have this tank installed. unfortunately the server is telling the client it cant because the flag and thus point of origon is "here" (a couple "feet" above the ground). so the server and client end up fighting with each other by trying to apply the same physichs rules to 2 different objects, the server of course wins out by just saying "Do THIS" but never explains why to the client.
2) this player is facing this direction.
-- Client: ok, i will alter my display accordingly and adjust the collision box being exposed to my player. i will also alter the damage done by weapons accordingly to what part of the tank is hit.
when a client is trying to use a point of origin for an entire tank i dont know what damage modifier its trying to apply. chances are the client doesnt even compute damage but instead reads it from the server, i dunno.
3) this player has XXX amount of velocity/ speed built up and is moving in this direction at this speed.
-- Client: i will then keep track of how everything else going on effects this tank at its current speed.
4) this entity file has just been activated (an explo file for example) at these cooridnates so now the client should activate it too. im not going to tell you how to apply this concussive effect to the target or how to apply the explosion graphics or crater info. you can figure it out yourself by applying the ent on your end, ill just tell you the new position of the target tank
-- Client: ok, i too will activate this explo file (a concussion missiles explo for example) at those same cooridnates. since we both are activating the same file at the same place with the same set of physichs in place we will both get the same results so theres no need for me to report to you everything im doing and waste the bandwidth. i now will display these smoke and explosion graphics and sprites. i also create this crater here. i also apply this concussive effect to the targeted tank based on the weapons concussion information and various gravity, mass and friction settings.
problem is that the clients results are different than the servers results. so the client has to pause for a minute and resynch its info of whats going on to what the server is telling it.
5) this weapon projectile is flying in this direction at this speed. i will let you know when it hits something. you figure out what to do once i tell you that it has.
-- Client: alright, ill match you by displaying all assiciated graphics and sounds for the projectile youre telling me exists at THIS location.
once on the server the (cruise missile for example) has struck a tank (as determined by the models bounding box) the server tells the clients to then remove the projectile and activate the various explosion related entity files. a client without the tanks model files will NOT register the hit and will want to continue the missile flying along its path. then suddenly the server tells the client to remove the projectile and begin activating and applying explo effects. the client is briefly confused. the client applies those effects to the missing tank files point of origin getting THESE results, but the server has applied those effects to the actual model and has come up with different results. the client is briefly confused again, but does what the server tells it to do.
OK, enough of that, i just thought that people should know all that garbage . now, back to how to remove a name and what that does.
to remove a players name from above him you go into the tanks ent file and change the setting for the BaubleType param to something that doesnt exist. something like "lkashgflksadh" will work. just something that isnt there.
this will make it so that the tank has no flag on it. it will also remove that players tank from the radar map. it also stops that player from being able to be on a team and removes that players name from the name screen!
this makes for a renegade vigilante stealth kinda tank. pretty neat really. unfortunately tho the server will complain A LOT! its constantly trying to find the garbage flag file and wastes a whole lot of time on it. fills the server window w/ loads and loads of errors. slows the whole game down a lot if you get more than a couple people joining in. somehow the client is still updated on where the stealth tank is tho, so it does work. i dont suggest doing this to tanks because of the problems it causes.
i discovered this when making the warbird tank. when it cloaked its flag was still visible, so i simply removed the flag. this initially caused problems in CTF matches, but i figured that wasnt too big of a deal, id deal w/ it later. i later found out when testing it w/ Vlad that his name wasnt appearing on the player list and he wasnt showing on radar. it was fun for a while, especially when someone else joined and couldnt figure out what kept shooting and running into him, lol.
my solution to "remove" the warbirds flag was to mount it WAY above the tank so it couldnt be seen. so there IS a flag on that tank, just so high up you cant see it.
i admit again that im no programmer at all and all this is mainly conjecture. im sure its not 100% correct on the way TM "thinks", but from experience im sure im pretty close.
all in all i did very little testing with this, just played around with it briefly, fixed it and moved on to other things so i could get the warbird finished and released.
and btw, im not going to go back over this and proofread it, so if i have nasty typos or if somethings not clear then youll just have to ask me what im talking about .
maybe someone could take this and exerpt parts for a tutorial or info thingy somewhere? if you want to go right ahead .
and here ends another long winded post by JV.
im taking a nap...
Let the rocks roll and the battle commence. http://www.bzrpg.2ya.com .
Check out the site! Loads of Tread Marks support and AddOns. Home of the S.T.O.R.M Pack.
The Storm has arived!! :)