-
Posts
896 -
Joined
-
Ooh, Python. I wrote my first bin file parser in Python. Love it for quick prototyping. It worked, but was painfully slow.
Eventually redid it in C++. With templates. Because I had never really used them before, and STL uses them extensively, so they must be good, right? Might as well learn.
Yeah... won't be doing that again. -
Did you ever say which system you were consulted on, or is that covered under NDA?
If I had to guess, I'd say Archvillain scaling by league size. I can't think of any other mechanics introduced around then that would require heavy mathematical analysis to get right. -
-
Um... somewhere reliable.
So much attention has been focused on the data tables in the piggs that not many people have looked elsewhere, to find those elusive missing bits of info that are compiled in through auto-generated headers.
Quote:Also... I see things missing here. There is a Max to Max (a MaxMax), a Max and MinRes, and a MaxStr too. Those maybe aren't in the attributes, so where are they ? the MaxMax health gets recalculated everytime there is a Max modification ? The MaxStr is too, or is it fixed ? Is Maxresistance an entity-independant constant ?
Things that are defined there apply to every entity that belongs to its class, whether it's a player archetype or a NPC class. They are.
Per-class attribute info
(these exist once and are static across all levels)
AttribMin
AttribBase -- the starting value for the attribute
StrengthMin
ResistanceMin
AttribDimin[Str|Cur|Res][In|Out] (PvP diminishing returns)
Per-level attribute info
(these are still per-class, but come in a table form that defines values for levels 1-50 for players and 1-55 for NPCs)
AttribMax -- the starting value for the attribute's Max aspect
AttribMaxMax
StrengthMax
ResistanceMax -
Quote:I think it's been around at least since CoV. At a glance some very old powers use OnActivate (5th column inherent resistances), so whenever it was added, the defaults must have been populated from whatever used to determine that behavior.Except that feature is relatively new, so that had to be arbitrated some other way in the past.
Quote:Actually, that makes it a 3-value flag whether the effect is to be duration-resisted, magnitude resisted, or not at all. Makes me wonder if there isn't a fourth possibility.
Practically, and this is something I went back and forth with Arcana on a while back, it seems that these flags are automatically assigned by whatever tools the devs used to compile the data. So effectively it is based on the type of the effect. IIRC, based on datamining, I determined that there is a fourth option -- if a Constant type effect is resistible, both its magnitude and duration will be resisted.
Constant attribmods are ones where the Scale is not used at all; instead the base Magnitude and Duration from the power definition is used. They're fairly rare, however, and almost always use one of the 'special' Attribs that isn't really an attrib at all, like GrantPower.
Quote:At least answer what line (in powers.bin ?) did say defense buffs were Cur mods, without modifying the wording (as Codewalker said "kCurAbs", and I saw kMeter...
CurAbs is just an alias for Abs. I have no idea how often it's used, as we only have the binary representation of the data, not the source text files that it's compiled from.
Many of the constants in the game engine are prefixed with 'k'. That doesn't really mean anything, it's just a convention that they used for some of the constants. Probably because all of them go into a giant global hash table, and it's to try to prevent the inevitable namespace collisions.
Here's the binary representations that are defined for attribmod type:
kCurrent=0x00000000
kMaximum=0x00000004
kStrength=0x00000008
kResistance=0x0000000C
kAbsolute=0x00000010
kCurrentAbsolute=0x00000010
kCur=0x00000000
kMax=0x00000004
kStr=0x00000008
kRes=0x0000000C
kAbs=0x00000010
kCurAbs=0x00000010
You'll notice these are separated by 4. The normal attribs themselves are as well. For attribs, the ID number also doubles as an index into the memory block where the attributes are stored (32-bit single precision floats). My theory is that on the server side, it keeps a separate copy of that block for each aspect, so the server keeps 2300 bytes worth of data on hand to describe the combat state of every entity. That's 115 attributes * 4 bytes = 460 bytes * 5 aspects = 2300.
Quote:like kMeter could be a pointer to a meter/attribute, and these variables/aliases are part of the attribmod attributes ??
'Rage' is the attrib that is actually granted by things like Brute and Dominator attacks. Brutes have an inherent power that on every tick gives them Meter based on how much Rage they have. IIRC, the damage buff is based on the current value of Meter, forming a kind of feedback loop (which the inherent power that handles Fury decay takes advantage of). -
Quote:Now that I think about it, that probably depends on the ApplicationType of the attribmod. If it's OnTick, it'll try to reapply every tick, but if it's OnActivate then it will only apply when the power is first activated.Which actually creates an unanswered question for me: are endurance cur effects flagged to be permanent, or does the game engine presume Cur effects on Endurance are permanent automatically? Both are theoretically possible at the moment, although I suspect its the latter that is true due to a bug that occurred several issues ago that demonstrated what the game engine does when you apply a Cur to health with a duration inadvertently. I would personally code it that way without direct evidence to the contrary.
-
-
Well, honestly, I suspect even the devs themselves have trouble with that part of it, considering that one of the accepted aliases in the parsing engine for Abs is kCurAbs (kCurrentAbsolute)... ;-)
-
Wait, how can that possibly work for defense?
Max for the attack type attribs increase as you level, that much is evident from the class tables. That hard cap seems to apply even though all the buffs are Cur. Or do you think the code that handles defense just reads Cur and clamps it to Max explicitly, ignoring the normal logic? -
The client doesn't check anything before playing demos. Which parts are you missing? I can easily pull the missing info you need from the costume definitions.
-
Oh, I've got a ton of names camped on Exalted during the great name rush that I never used. Used all the slots across 4 accounts (my normal two, plus two premiums that were VIP at the time thanks to the $2.99 deal).
Well, I used two of them but have about 40 more that I never got to.
I also have "Rusty the Powerful" on every server. Been hanging onto that since Going Rogue beta, but never came up something cool to do with it. -
Quote:Mezzes, and by extension mez protection powers, are Cur effects with a limited duration. As are defense buffs, movement speed, and just about everything except for damage, come to think of it.Did test with a crabspider, you're right. Great! So the question is, do we need (i.e. is there a power with) duration-limited +-X Cur effects ? (we do need one-shot Cur mods, that's not the question)
Cur applying as a percentage of anything seems to be a quirk of the implementation and as far as I can tell only applies for certain attrib types (damage, endurance, hitpoints). The Cur effects for defense powers certainly don't end up adding a percentage of the defense cap for that level. -
Quote:Arcana beat me to it, but CoD reorders some of the effects in order to make the display a bit friendlier to read. It generally preserves the order within a certain target type, but does change it in order to group effects with a certain target together. It also tries to merge together similar effects to present them on a single line, such as damage, defense, or mez types, if they're "close enough" (generally with the same Scale, duration, and a few other things).Well, as I said, since it's a one-shot calculator only at the moment, and (as you can see on the City of Data) since the damage is listed first before the resistible resistance debuff, should the power resolution method (not written at the moment) resolve effects in their order, the first tick of damage is not under the influence of the debuffs, but all the other ticks (resolved laters) are.
So don't depend on city of data being accurate for the exact order that the engine applies effects in, as it intentionally lies about that in some cases. -
Quote:Don't forget there's multiple versions of that flag.On other news, I think I've nailed the attribmod library, I'm tackling the Powers & Effects (restricted to attribmod effects, discarding the summon, setmode etc...) one, but that one is hairy, especially the "Ignore buffs&debuffs" flag on powers >_>
There's the "ignore outside buffs" flag on powers that still allows enhancements slotted in the power to work, but ignores outside strength buffs.
There's the "ignore buffs and enhancements" flag on individual attribmod/effects that ignores ALL strength buffs, even ones that come from slotted enhancements.
There's also the "list of attributes to disallow buffing" on the power, where if you put say, Recharge or Range in that list, the entire power will ignore all strength buffs to that particular attribute, whether they're from enhancements or outside buffs. -
Quote:It's also important to note that those addresses are not the personal addresses of the people indicated. We're not bothering them at home. They are @ncsoft.com, so even though they may be obfuscated, they are still business addresses. They are there to be used for things relating to NCSoft business, and that's exactly what this effort is.For the most part the CoH community has been walking on eggshells to avoid 'offending' NCsoft. That's laudable, but they have done nothing whatsoever to earn that. From a customer service point of view NCsoft's response, or lack thereof, is nothing short of disgraceful.
I don't think the line that many people think is being crossed is actually one at all. -
Quote:All evidence to date shows that the positive, well spoken members of this community outnumber the naysayers by nearly 10 to 1, and the trolls by even more.Not to sound like a negative Nancy but I agree completely with this. It's like giving the trolls the keys to the castle or worse.
Like it or not, the information is out there now. The trolls will be trolling. Our choice now becomes whether to drown out that unhelpful signal with something better, or stand still wringing our hands worrying about it and doing nothing.
We can't afford to do nothing anymore. -
And since I've seen it mentioned a couple more times, I'll repeat: The City of Data database is not where you'd want to start for something like that. It's a mess. I've been trying to clean it up here and there, but it's still missing a lot of fields, some are the wrong type or have the wrong precision (chance was rounding at hundredths, so things like 0.5% chance on Overwhelming Force showed as 0...), some make assumptions that they shouldn't, and many things are shoehorned into a relational structure that they were never designed to be in.
The AT modifiers table was one of the most mind-bogglingly strange SQL designs I've ever seen, which is why it non-obviously broke once the devs went past 50 player + NPC classes. I had to pull it out entirely and redesign it from scratch.
If you're seriously considering writing a combat engine just for the hell of it, you're much, much better off just figuring out how to parse powers.bin directly... -
Quote:The decision was made before my time, and I never pushed to have it changed. As far as I know, it was made so that the public-facing data was only things that could reasonably be determined by player experimentation (albeit a lot of it). Over time that eroded slowly as things like the exact text of the conditions became shown, but that was less of an issue since they were integral to the way that the powers function.May I ask why the NPC data was always kept hidden in the back-end of things? I've often wanted to be able to, say, look at how much resistance various enemies have, or exactly what the various powers of the Awakened are doing behind the scenes as they charge up and flash text at me, and it's always been a bit frustrating to know that it's in CoD, just hard to find.
Also, going strictly of secondhand information here so I may be way off, but I was under the impression that getting in trouble for leaking NPC powers from the Hami revamp was part of why Iakona "left". -
The Mids or even the City of Data database is a bad place to start. Despite my efforts to modernize CoD, it's still lagging behind as far as actual implementation details. There's a lot of fields in the powers that it doesn't even display, like activation requirements, target requirements, etc.
Quote:Probably because all of the animation data is specified in terms of frames, and there are 30 frames in a second. That and discussions with a developer who worked primarily on the animation side of things.I actually miswrote that. I meant: What makes you think the 1/30 sec loop is the animation one ? Is it exclusively animation ? I think it's the combat/vitals loop, and the 1/8 sec loop the positionning loop, and animation is just a by-product of the power part of combat.
30hz would be awfully inefficient for a combat loop just because of how much time you'd spend re-evaluating things that don't really change all that often, relatively speaking. The server DOES have to process animations, if for no other reason than to figure out how long to root a player, since the only place that information exists is on the flags of the animations themselves (the ones flagged CantMove). Not to mention the timing for things like weapon redraw.
I think it's been fairly well established by information posted by developers that there are two separate loops going that interact with each other periodically.
Quote:But I also think what remaining out of our reach is the "which powers has every NPC" database.
Quote:It's an example of what, actually ? When does this get involved, and what does it do client-side ? I did throw grammar at it because I didn't know what that was. I do want to know when and what because that could help me understand the mechanics, not reinvent an emulating mechanism. I know you don't invent things, but I was as puzzled by this as much as if you did. I could have called that an "*** pull". If it's power-related and not in the City of Data database, it's useful. If you just applied that fancy representation just for the pleasure of finding me dumb-founded... well... I don't see the point.
City of Data pretties them up a bit before displaying them as conditionals -- it contains a parser that re-arranges them into algebraic notation. It also evaluates them in order to try to figure out if a certain effect is PVP or PVE-only, and whether or not to count it in the "average damage" total.
Incidentally, I did write that parser over a weekend, but it's a grossly simplified version. It implements all of the grammar I believe, but when evaluating most of the variables just dummies them out as zero or a predefined default. -
Because that worked so well for Aion, amirite?
-
Ohh, Group Fly, that's a good one.
Confession: Before Beast Mastery came out, but after we had the Coyote transform, I took Group Fly on one character, for the sole purpose of proving that the "wolf" model did in fact have flying animations. -
You're probably right. That was before I started archiving every incremental build, and my memory is a little fuzzy from that time.
-
Quote:No, I wasn't. Diellan is in charge of the Mids code. I helped out a tiny bit here and there, mostly with suggestions. I was involved in planning the project to eventually write an HTML-based replacement for smartphones, tablets, and desktop, but it never got especially far.Wait... you where on charge of that code? I attempted various time to get a hold of some one, every time contacted the wrong person. I never pursued it extensively since I ended up jumping to other things, but my attack simulations attempts always got abandoned because the gargantuan amount of work I would had have to go through to acquire all the data that is in Mids or CoD.
A few times i thought it would had simply been best if I just somehow got it into Mids itself, but again, always ended up getting derailed to other stuff.
The Mids database is somewhat far removed from the actual source data, just because a lot of the special case stuff was written before some of the mechanics were fully understood. For a long time it was populated by TopDoc's csvs, which I assume are dumped from the bin files.
The source code was originally written by Mids -- who the name comes from. He allowed a few people to maintain it after he stopped playing, on the condition that it remain closed.
I did take over maintaining City of Data a about a year and a half ago; and started producing our own bin dumps internally. Mids was switched over to use those about 8 months ago IIRC. I have a pair of programs that dump the powers data (the full attribmod/effects data was not included in the client until Real Numbers was added in around I12.5). One into a database format compatible with City of Data, and the other into TopDoc-compatible CSVs for Mids, with some cleanup of the misnamed fields and attribs, and a few extensions added later like PPM.
Neither form completely represents the true state of the data, which was compiled by the devs from simple text files. From what I've gathered those text files were generated out of Excel by some custom tools.
PS: I apologize if yours was one of the PMs that came in requesting powers data that I ignored. Due to the nature of obtaining it, which technically went against the ToS, it wasn't something that we really talked about outside of a small group. Unfortunately that made some people seem a bit cliquish, but it was a necessary evil given the sensitive nature of the work. -
If that somehow happens, they need to put a special case on Virtue so that the Atlas Park 33 instance always spawns. Just make it the default so you normally don't notice unless there's more than one.
-
Quote:And all the newer chaining powers -- from reworked Chain Induction to Electric Control and forward -- use pseudopets that have a single power with a spherical AoE and 1 or 2 target max -- a power that in most cases does damage and summons another psuedopet for the next hop.For example, CoH has no "chaining" mechanic. None. Chaining powers grant powers to targets which create an aura around the target which forces the target to grant additional powers to a limited number of the targets around them which themselves damage the target and grant the same aura to those targets and set a flag which prevents the same target from being hit again by the target it hit with its own aura.
There's often more than one way to skin a cat with the engine. Dual Pistols probably could have been reworked with the newish "OwnPower?" RPN conditions and work exactly the same, while being completely different behind the scenes.
There's some attribs in there that never got used at all. PowerChanceMod finally made an appearance when Overwhelming Force was 'nerfed', it apparently works like GlobalChanceMod but is limited to a single power like the name would imply. Normally pretty useless since it doesn't extend outside the current power, but when used on an enhancement it makes it only apply to the power that the boost is slotted into. That also partially confirms one of my theories about how enhancements work internally, but there's still a bit of mystery to it.
Not to mention all the possibilities that hooking Lua up to the powers system could have offered...
(I've brainstormed this quite a bit myself, as for the eventual Mids successor I wanted to push for doing a more accurate simulation of the combat system rather than a ton of special cases that are a PITA to maintain)