...
The 2da format is relatively simple, and can be read about in the Bioware documentation:
- The top line must be 2DA V2.0
- There may be one or more blank lines before the first line that contains characters, which is considered the header line
- The first column header must be blank, and that column is ignored (is usually a human readable number)
- The first column number IDs can be wrong - the game just reads each new line as a new entry (incremented from 0)
- The second and onwards columns must have the header match the in-game reference loaded, the order of columns doesn't matter. Label columns are generally ignored.
- The first column header must be blank, and that column is ignored (is usually a human readable number)
- Further lines are data rows:
- Column data - but not the header name - can be in double quotes - "text here" - to include spaces. Whether or not the game understands that one being in quotes very much depends
- Column data is separated by one or more whitespace characters (tabs, spaces)
- Blank data is classified with 4 stars: ****
- You can quote the stars ("****") or have a blank quoted field which, of course, is blank ("") but any other combination of stars (less, more, or in single quotes) will be returns literally.
- Column data - but not the header name - can be in double quotes - "text here" - to include spaces. Whether or not the game understands that one being in quotes very much depends
...
The game generally won't care what order columns are in except for two some minor exceptions;
- swearfilter.2da cannot be rearranged
- The first column of the spell preference 2da files
- itemprops.2da appears to be hardcoded due to the PropColumn in baseitems.2da (although not sure if you can add more columns to it).
...
This is a list of the different core 2da files (we're ignoring tileset specific ones but there will be a generic entry for them, plus the multitude of class and package 2das) with a note about the usage for client or server, and line limits (if known). Anything in this list is used by the game, the unused ones are listed later on this page.
...
| 2da file | Brief Description | Client Loaded | Server Loaded | Toolset Loaded | Line Limit | Line Limit Notes | |||
|---|---|---|---|---|---|---|---|---|---|
| actions.2da | List of actions and associated icons / TLK strings used by the GUI | Yes | Yes | No | Hardcoded | This file cannot have alterations to lines made, the references are all hardcoded. | |||
| ambientmusic.2da | Ambient music tracks | Yes | No | Yes | Unknown | Needs testing. GFF field is stored as INT (-2147483648 to 2147483647). | |||
| ambientsound.2da | Ambient sound tracks | Yes | No | Yes | Unknown | Needs testing. GFF field is stored as INT (-2147483648 to 2147483647). | |||
| ammunitiontypes.2da | For the hardcoded ranged weapons, what models to use for certain ammo types (eg; Fire Arrows) | Yes | No | No | Unknown / Hardcoded | Likely hardcoded, so no changes to line amounts allowed. | |||
| appearance.2da | Creature appearances and base properties like size etc. | Yes | Yes | Yes | Unknown | GFF field is stored as WORD (0 to 65535). | |||
| appearancesndset.2da | Appearance Sound Set eg what ambient sound they play, referenced by SOUNDAPPTYPE in appearance.2da | Yes | No | Yes? | Unknown | Needs testing. More can be added but not sure about the line limit. | |||
| armor.2da | List of armor values, although some of this is hardcoded. | Yes | Yes | Yes | Unknown | Needs testing. New AC values can be added but only incrementally (so higher AC, eg: 8, 9, 10 could be added next). | |||
| armorparts.2da | Used for the toolset to set how many of each part of armor there are. | No | No | Yes | Hardcoded | There is a single line used by the toolset, no additional lines are even needed. | |||
| baseitems.2da | All the item types in the game (eg: longsword, torch, scroll) | Yes | Yes | Yes | 255 | Hardcoded due to network limitations; items may not function as intended. | |||
| bodybag.2da | The bodybag a creature will leave around. | No | Yes | Yes | Likely 255 | Needs testing. GFF field is stored as BYTE (0 to 255) | |||
| chargenclothes.2da | Clothing available at character generation. | Yes | Yes | No | Unknown | Needs testing. No GFF field, is purely loaded by the engine (at chargen client side and on the server side when the client sends over what clothing choice at the end of chargen for that item to load). | |||
| classes.2da | Character classes and main class options | Yes | Yes | Yes | 254 | Hardcoded due to network limitations plus "255" number is reserved as "CLASS_TYPE_INVALID" | |||
| cloakmodel.2da | Cloaks model references and options for each model. | Yes | Yes | Yes | Unknown | Needs testing. | |||
| cls_atk_xxx.2da | Standard name for classes.2da "AttackBonusTable" 2da value, defining the Base Attack Bonus progression | Yes | Yes | Yes | 60 | Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. In any case epic levels (21+) have static progression from epicattacks.2da | |||
| cls_bfeat_xxx.2da | Standard name for classes.2da "BonusFeatsTable" 2da value, defining the bonus feats a class gets | Yes | Yes | Yes | Unknown | Needs testing but likely the limit here is same as feat.2da | |||
| cls_feat_xxx.2da | Standard name for classes.2da "FeatsTable" 2da value, defining the feat availability for a class | Yes | Yes | Yes | Unknown | Needs testing but likely the limit here is same as feat.2da | |||
| cls_pres_xxx.2da | Standard name for classes.2da "PreReqTable" 2da value, defining the prerequisits for taking this (Prestiege) class | Yes | Yes | Yes | Unknown | Needs testing but this is hardly going to ever be the longest file. | |||
| cls_savthr_xxx.2da | Standard name for classes.2da "SavingThrowTable" 2da value, defining the saving throw (Fortitude, Will, Reflex) progression | Yes | Yes | Yes | 60 | Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. In any case epic levels (21+) have static progression from epicsaves.2da | |||
| cls_skill_xxx.2da | Standard name for classes.2da "SkillsTable" 2da value, defining the skills the class has available | Yes | Yes | Yes | Unknown (likely 255) | Needs testing but is likely limited to the same size as skills.2da (255 or 32 depending on bugs) | |||
| cls_spgn_xxx.2da | Standard name for classes.2da "SpellGainTable" 2da value, defining the spells gained each level (How many can be cast per level). Every spellcaster needs this. | Yes | Yes | Yes | 60 | Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. Note in EE that spellcasters are typically limited to level 40 in the engine. | |||
| cls_spkn_xxx.2da | Standard name for classes.2da "SpellKnownTable" 2da value, defining how many spells are known (Eg; for Bards and Sorcerers) | Yes | Yes | Yes | 60 | Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. Note in EE that spellcasters are typically limited to level 40 in the engine. | |||
| cls_stat_xxx.2da | Standard name for classes.2da "StatGainTable" 2da value, defining the stat increases for the class (Eg; Dragon Disciple, Pale Master) | Yes | Yes | Yes | 60 | Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. | |||
| creaturesize.2da | File is hardcoded (engine values in ruleset.2da) and only used by the toolset for the names of sizes | No | No | Yes | Hardcoded | Noted in description this is basically hardcoded and is for toolset only use. | |||
| creaturespeed.2da | File defining the speed of PCs and NPCs | Yes | Yes | Yes | Unknown | Needs testing. This file can be extended but some lines are hardcoded. See creaturespeed.2da | |||
| crtemplates.2da | This defines some "creature templates" for NPCs such as "Half-Celestial" used in the toolset only. Links to ini files that load items and stat changes onto the creature blueprint. | No | No | Yes | Unknown | Needs testing. Solely for Toolset usage. | |||
| cursors.2da | Not a complete list of cursors, but used for trigger objects to define some mouse over cursors. Most cursors in the game are hardcoded and for the scripting OnPlayerTarget event you can set your own unrelated to this 2da. | Yes | No | Yes | Likely 255 | Needs testing. GFF field is stored as BYTE (0 - 255) | |||
| damagehitvisual.2da | Damage VFX line sent to the client when a particular damage is inflicted by a weapon. | No | Yes | No | Hardcoded | The amount of damage types is hardcoded. | |||
| damagelevels.2da | Damage levels, such as "Uninjured" or "Near Death". The amount of HP each level is for is hardcoded, this is purely for clientside TLK loading. | Yes | No | No | Hardcoded | The damage levels are set in the engine, this just displays the right localised TLK string. | |||
| defaultacsounds.2da | The sounds of each armor when hit, thus leather armour when hit by a sword has the impact effect sound like leather. | Yes | No | No | Unknown | Needs testing. New AC values can be added but only incrementally (so higher AC, eg: 8, 9, 10 could be added next). | |||
| des_xxx.2da | These 2da files were used by Bioware designers to have custom systems that work with Get2DAString() in scripts, eg for crafting. | No | Yes | No | N/A | No limits as such apart from what limits 2DA files have naturally | |||
| diffsettings.2da | Difficulty Settings used by the game, at least the ones Bioware made editable. | Yes | Yes | No | Hardcoded | The amount of difficulty options and what options are editable is hardcoded. | |||
| disease.2da | Diseases defined by the game for EffectDisease or On Hit: Disease item properties. Clients are sent completed effects, not the information loaded in this file, except the name used On Hit item properties most likely. | Yes | Yes | Yes | Unknown | Needs testing. | |||
| domains.2da | Domains that by default only Clerics use, but now in EE any spellcaster can be assigned if setup. | Yes | Yes | No | Likely 255 | Needs testing. GFF field is stored as BYTE (0 - 255) | |||
| doortypes.2da | List of doors tied to various tilesets. Clients will load it for most likely the sound reference. | Yes | Yes | Yes | Unknown | ||||
| effecticons.2da | Effect icons used by the game, now extendable massively in EE with EffectIcon. | Yes | Yes | No | 255 | This 255 limit was set properly in EE for EffectIcon. Previously all effect icons were hardcoded. | |||
| encdifficulty.2da | Encounter difficulty. Used by servers for a multiplier on the "difficulty", and in toolset to set the difficulty. | No | Yes | Yes | Unknown | Needs testing. Not sure if more can be added. GFF field is stored as INT (-2147483648 to 2147483647). | |||
| encumbrance.2da | Encumberance levels for amount of strength a creature has. Client uses this to show the amount you can carry. Server it is used where the speed is worked out. | Yes | Yes | No | Unknown | Needs testing. Rows go up to 100 but potentially could be extended. | |||
environment.2da | Contains the area lighting environmental presets available in the toolset only. | No | No | Yes | Unknown | Needs testing. May be hardcoded. | |||
| epicattacks.2da | Attack progression for epic levels (21+). Clients and toolset is just for showing numbers. | Yes | Yes | Yes | 60 | Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. Note the epic levels are 21+ so first 20 lines would be ignored usually. | |||
| epicsaves.2da | Save progression for epic levels (21+). Clients and toolset is just for showing numbers. | Yes | Yes | Yes | 60 | Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. Note the epic levels are 21+ so first 20 lines would be ignored usually. | |||
| excitedduration.2da | "Excited" duration, ie; combat music time! Both options are the same, clients say it loads but is it used for anything? Probably not. It is also probably not worth altering this since...who knows what might happen in the engine. If you know maybe post it here! | Yes but not used? | Yes | No | Hardcoded | The entries here are hardcoded. | |||
| exptable.2da | Used to figure out when the characters levelup. | No | Yes | No | 41 | Line 41 is actually making level 40 the highest. EE has some bugs if you go over 40 levels for PCs around spellcasting. | |||
| feat.2da | 32,768 | uint16 used in network however not recommended to go over 32K even if 65,536 is absolute maximum. There are likely problems with subdial feats if you do this. | |||||||
| footstepsounds.2da | |||||||||
| fractionalcr.2da | |||||||||
| gender.2da | |||||||||
| genericdoors.2da | The generic "general" doors and their modes/info. | No | Yes | Yes | Unknown | Needs testing. | |||
| hen_companion.2da | |||||||||
| hen_familiar.2da | |||||||||
| inventorysnds.2da | |||||||||
| iprp_abilities.2da | Yes | Yes | Yes | ||||||
| iprp_acmodtype.2da | Yes | Yes | Yes | ||||||
| iprp_addcost.2da | Yes | Yes | Yes | ||||||
| iprp_additional.2da | Yes | Yes | Yes | ||||||
| iprp_aligngrp.2da | Yes | Yes | Yes | ||||||
| iprp_alignment.2da | Yes | Yes | Yes | ||||||
| iprp_ammocost.2da | Yes | Yes | Yes | ||||||
| iprp_ammotype.2da | Yes | Yes | Yes | ||||||
| iprp_amount.2da | Yes | Yes | Yes | ||||||
| iprp_arcspell.2da | Yes | Yes | Yes | ||||||
| iprp_bonuscost.2da | Yes | Yes | Yes | ||||||
| iprp_chargecost.2da | Yes | Yes | Yes | ||||||
| iprp_color.2da | Yes | Yes | Yes | ||||||
| iprp_combatdam.2da | Yes | Yes | Yes | ||||||
| iprp_costtable.2da | Yes | Yes | Yes | ||||||
| iprp_damagecost.2da | Yes | Yes | Yes | 127 (or possibly 128) | Certainly going to line 129 or higher works for the server end (damage is done correctly) but the client won't show it correctly in the character sheet because it looks up 2da line as a negative (impossible). Line 159 was tested which had the string "-97 Magical Damage" since 159 - 128 = 31, and 128 - 31 = 97. It shows correctly on items, and higher lines are safe for NPCs to use. | ||||
| iprp_damagetype.2da | Yes | Yes | Yes | ||||||
| iprp_damvulcost.2da | Yes | Yes | Yes | ||||||
| iprp_feats.2da | Yes | Yes | Yes | ||||||
| iprp_immuncost.2da | Yes | Yes | Yes | ||||||
| iprp_immunity.2da | Yes | Yes | Yes | ||||||
| iprp_kitcost.2da | Yes | Yes | Yes | ||||||
| iprp_lightcost.2da | Yes | Yes | Yes | ||||||
| iprp_matcost.2da | Yes | Yes | Yes | ||||||
| iprp_material.2da | Yes | Yes | Yes | ||||||
| iprp_meleecost.2da | Yes | Yes | Yes | ||||||
| iprp_monstcost.2da | Yes | Yes | Yes | ||||||
| iprp_monsterdam.2da | Yes | Yes | Yes | ||||||
| iprp_monsterhit.2da | Yes | Yes | Yes | ||||||
| iprp_neg10cost.2da | Yes | Yes | Yes | ||||||
| iprp_neg5cost.2da | Yes | Yes | Yes | ||||||
| iprp_onhit.2da | Yes | Yes | Yes | ||||||
| iprp_onhitcost.2da | Yes | Yes | Yes | ||||||
| iprp_onhitdur.2da | Yes | Yes | Yes | ||||||
| iprp_onhitspell.2da | Yes | Yes | Yes | ||||||
| iprp_paramtable.2da | Yes | Yes | Yes | ||||||
| iprp_poison.2da | Yes | Yes | Yes | ||||||
| iprp_protection.2da | Yes | Yes | Yes | ||||||
| iprp_qualcost.2da | Yes | Yes | Yes | ||||||
| iprp_quality.2da | Yes | Yes | Yes | ||||||
| iprp_redcost.2da | Yes | Yes | Yes | ||||||
| iprp_resistcost.2da | Yes | Yes | Yes | ||||||
| iprp_saveelement.2da | Yes | Yes | Yes | ||||||
| iprp_savingthrow.2da | Yes | Yes | Yes | ||||||
| iprp_skillcost.2da | Yes | Yes | Yes | ||||||
| iprp_slotscost.2da | Yes | Yes | Yes | ||||||
| iprp_soakcost.2da | Yes | Yes | Yes | ||||||
| iprp_spellcost.2da | Yes | Yes | Yes | ||||||
| iprp_spellcstr.2da | Yes | Yes | Yes | ||||||
| iprp_spelllvcost.2da | Yes | Yes | Yes | ||||||
| iprp_spelllvlimm.2da | Yes | Yes | Yes | ||||||
| iprp_spells.2da | Yes | Yes | Yes | ||||||
| iprp_spellshl.2da | Yes | Yes | Yes | ||||||
| iprp_srcost.2dai | Yes | Yes | Yes | ||||||
| iprp_trapcost.2da | Yes | Yes | Yes | ||||||
| iprp_traps.2da | Is this used? to test, maybe just in toolset? | ??? | ??? | ??? | |||||
| iprp_trapsize.2da | Yes | Yes | Yes | ||||||
| iprp_visualfx.2da | Yes | Yes | Yes | ||||||
| iprp_walk.2da | Yes | Yes | Yes | ||||||
| iprp_weightcost.2da | Yes | Yes | Yes | ||||||
| iprp_weightinc.2da | Yes | Yes | Yes | ||||||
| itempropdef.2da | Yes | Yes | Yes | ||||||
| itemprops.2da | Yes | Yes | Yes | ||||||
| itemvalue.2da | Yes | Yes | Yes | ||||||
itmwizammo.2da | Toolset only; Item Wizard 2da files | No | No | Yes | |||||
| itmwizarmor.2da | Toolset only; Item Wizard 2da files | No | No | Yes | |||||
| itmwizhelmet.2da | Toolset only; Item Wizard 2da files | No | No | Yes | |||||
| itmwizmelee.2da | Toolset only; Item Wizard 2da files | No | No | Yes | |||||
| itmwizpotion.2da | Toolset only; Item Wizard 2da files | No | No | Yes | |||||
| itmwizranged.2da | Toolset only; Item Wizard 2da files | No | No | Yes | |||||
| itmwizrods.2da | Toolset only; Item Wizard 2da files | No | No | Yes | |||||
| itmwizscroll.2da | Toolset only; Item Wizard 2da files | No | No | Yes | |||||
| itmwizstaves.2da | Toolset only; Item Wizard 2da files | No | No | Yes | |||||
| itmwizthrow.2da | Toolset only; Item Wizard 2da files | No | No | Yes | |||||
| itmwiztrap.2da | Toolset only; Item Wizard 2da files | No | No | Yes | |||||
| itmwizwands.2da | Toolset only; Item Wizard 2da files | No | No | Yes | |||||
| keymap.2da | |||||||||
| lightcolor.2da | |||||||||
| loadhints.2da | |||||||||
| loadscreens.2da | Load Screens used by the game. | Yes | Yes | Yes | Unknown | ||||
| masterfeats.2da | |||||||||
| namefilter.2da | |||||||||
| packages.2da | Packages are used by the class system to allow people to not bother choosing level up feats/skills. Button can be removed by ruleset.2da nowadays. | ||||||||
| packeqXXX.2dapackeqXXX.2da | |||||||||
| packftXXX.2da | |||||||||
| packskXXX.2da | |||||||||
| packspXXX.2da | |||||||||
| parts_belt.2da | |||||||||
| parts_bicep.2da | |||||||||
| parts_chest.2da | Armor Chest parts. This is what really determines the AC of the appearance. The float values are floored. | ||||||||
| parts_foot.2da | |||||||||
| parts_forearm.2da | |||||||||
| parts_hand.2da | |||||||||
| parts_legs.2da | |||||||||
| parts_neck.2da | |||||||||
| parts_pelvis.2da | |||||||||
| parts_robe.2da | |||||||||
| parts_shin.2da | |||||||||
| parts_shoulder.2da | |||||||||
| phenotype.2da | The phenotypes available to fuller player models, eg Humans, so they can have horses, or be "Big". | ||||||||
| placeableobjsnds.2da | |||||||||
| placeables.2da | Placeable object appearances and properties | ||||||||
| poison.2da | Poisons the game uses in EffectPoison. On Hit variant is just pure ability damage. | ||||||||
| polymorph.2da | Polymorphs used by EffectPolymorph which change your character into something else entirely. | ||||||||
| portraits.2da | |||||||||
| pregen.2da | Pregenerated characters available to filter in character select. | ||||||||
| prioritygroups.2da | |||||||||
| progfx.2da | NWN:EE unhardcoded "programmed effects" values. | Yes | No | No | Unknown | Likely same limit as visualeffects.2da if there is one | |||
| pvpsettings.2da | Toolset only list of PvP settings | ||||||||
| race_feat_xxx.2da | |||||||||
| racialtypes.2da | Racial types the game has, for players and NPCs | ||||||||
| ranges.2da | |||||||||
| repadjust.2da | Reputation adjustments the game makes | No | Yes | No | Hardcoded | Hardcoded list, but values can be altered. | |||
| replacetexture.2da | Not really sure what this does. Tiles related? | Yes | No | No | Unknown | Needs testing. | |||
| repute.2da | Toolset only defaults for the faction manager the game uses the modules settings. | No | No | Yes | Hardcoded | Hardcoded standard faction list | |||
| restduration.2da | Time it takes at each level to rest with ActionRest | No | Yes | No | 60 | Classes are limited to 40 levels for PCs and 60 levels (mostly) for NPCs. | |||
| rrf_nss.2da | The dropdown in the toolset when opening a script has these categories and simple filters available. | No | No | Yes | Unknown | Needs testing. | |||
| rrf_wav.2da | The dropdown in the toolset when opening a sound file has these categories and simple filters available. | No | No | Yes | Unknown | Needs testing. | |||
| ruleset.2da | NWN:EE allows some unhardoding of default feats and values the game uses, some very useful client side only options too. | Yes | Yes | Yes | Hardcoded | All values are hardcoded to particular lines of course. | |||
| skills.skills.2da | 32 | Hardcoded due to network limitations to 255 but GUI issues make it a 32 skill limit. May only affect the "Untrained" column however? https://github.com/Beamdog/nwn-issues/issues/171 | |||||||
| skillvsitemcost.2da | |||||||||
| skyboxes.2da | |||||||||
| sounddefaultspos.2da | Default values for toolset placeable sound types | No | No | Yes | Hardcoded | Toolset uses this for the default values of the different placeable sound types. | |||
| sounddefaultstim.2da | Default values for toolset placeable sound types | No | No | Yes | Hardcoded | Toolset uses this for the default values of the different placeable sound types. | |||
| soundeax.2da | EAX values are still in the toolset mainly for compatibility, as of EE they are no longer used. | No | No | Yes | Hardcoded | Hardcoded but unused by the game so who cares. | |||
| soundset.2da | Soundset references. | ||||||||
| soundsettype.2da | Column "Type" in soundset.2da refers to this. The categories of soundset file in the toolset, unused out of the toolset however since only 0 matters for chargen (PC voicesets) | No | No | Yes | Unknown | Needs testing. | |||
| spells.2da | Spells and abilities usable by creatures | Yes | Yes | Yes | 4096 | Possibly the limit - needs testing, but is to do with 12 bits available for the "spell radial" entry being sent over the network. May have been removed at some point but needs fully testing. | |||
| spellschools.2da | statescripts.2da | stringtokens.2da | Spell schools. The amount is hardcoded but you should be able to alter the TLK strings now. | YesNo | YesYes | No | Hardcoded | Hardcoded list | |
| statescripts.2da | State scripts run when under the effect of certain effects, also shows the games default priority list for them | No | Yes | No | Hardcoded | Entirely hardcoded. | |||
| stringtokens.2da | String tokens like <Man/Woman> used in conversations and in general. See Conversations. | No | Yes | Yes | Unknown | Needs testing | Unknown | Needs testing, can new ones be even added? | |
| surfacemat.2da | 64 | 0 through 63 are valid lines for this in patch 1.84.8193.29 and up. | |||||||
| swearfilter.2da | |||||||||
| tailmodel.2da | |||||||||
| tilecolor.2datraps | |||||||||
| XXX_edge.2da | vfx_persistent.2da | Tileset edge information. One per tileset. | No | Yes | Yes | Unknown | Needs testing. | ||
| traps.2da | |||||||||
| vfx_persistent.2da | Persistent VFX, ie items created with EffectAreaOfEffect. | No | Yes | No | Unknown | Needs testing. | |||
| visualeffects.2da | Visual Effects the game uses, called from the game (see Hardcoded VFX References) or by EffectVisualEffect. | ||||||||
| waypoint.2da | Toolset | visualeffects.2da | waypoint.2da | Toolset only waypoint definition file. Basically waypoints are not "real" so this defines the different types so they show properly in the toolset with a model. | |||||
| weaponsounds.2da | |||||||||
| wingmodelweathertypes.2da | xptable.2da | Weather related 2da. Server just tells client which line number to load. | Yes | No | No | Unknown | Needs testing. | ||
| wingmodel.2da | |||||||||
| xptable.2da |
Unused 2da Unused 2da files
Bioware left in some 2da files from early development (before game release). These files are not loaded by the game, toolset or Get2DAString at all and can be ignored. They do get confusing however.
...
There is one special case here: x3restrict.2da is used in the default game spells to restrict polymorph spells when casting on a horse. Added for horse support.
Toolset only 2da files
These are only used by the toolset, not directly by the game:
...
.
...
Client and Serverside 2das
...