[{"data":1,"prerenderedAt":924},["ShallowReactive",2],{"doc-global_essentials\u002Fcharacters\u002Fcharacters_overview":3},{"id":4,"title":5,"body":6,"description":889,"extension":914,"meta":915,"navigation":919,"path":920,"seo":921,"stem":922,"__hash__":923},"docs\u002Fdocs\u002Fglobal_essentials\u002Fcharacters\u002Fcharacters_overview.md","Overview",{"type":7,"value":8,"toc":888},"minimark",[9,14,19,23,40,43,46,50,53,56,88,93,99,105,111,117,119,123,126,130,133,136,140,143,146,157,177,181,184,187,191,194,196,200,206,210,216,221,252,257,277,283,285,289,294,297,317,322,336,341,343,347,352,355,359,385,391,396,398,402,407,410,414,439,444,464,469,472,486,489,494,501,504,624,638,645,647,651,656,659,663,683,687,707,709,713,735,739,744,747,751,800,802,806,862,864,868],[10,11,13],"h1",{"id":12},"character-system-overview","Character System Overview",[15,16,18],"h2",{"id":17},"everything-is-layers","Everything is Layers",[20,21,22],"p",{},"If you've read about how games in Dryad Engine are built from layers of mods, you already understand how characters work. The same principle applies:",[24,25,26,34],"ul",{},[27,28,29,33],"li",{},[30,31,32],"strong",{},"Games"," = layers of mods (base game + expansions)",[27,35,36,39],{},[30,37,38],{},"Characters"," = layers of statuses (base template + items + skills + effects)",[20,41,42],{},"Just like a mod can override or extend the base game, a status can override or extend a character's base values.",[44,45],"hr",{},[15,47,49],{"id":48},"what-is-a-status","What is a Status?",[20,51,52],{},"A status is a bundle of changes that can be applied to a character. Think of it like a transparent overlay - it can add new values, change existing ones, or enable visual elements.",[20,54,55],{},"Every status can contain:",[24,57,58,64,70,76,82],{},[27,59,60,63],{},[30,61,62],{},"Stats"," (numbers like health, strength)",[27,65,66,69],{},[30,67,68],{},"Traits"," (custom data like name, portrait)",[27,71,72,75],{},[30,73,74],{},"Attributes"," (categories like mood, pose)",[27,77,78,81],{},[30,79,80],{},"Skin Layers"," (visual pieces like hair, clothes)",[27,83,84,87],{},[30,85,86],{},"Abilities"," (what the character can do)",[89,90,92],"h3",{"id":91},"where-do-statuses-come-from","Where Do Statuses Come From?",[20,94,95,98],{},[30,96,97],{},"1. The Character Template"," (always present)\nThis is the base layer - the character's starting state. It defines who they are before anything else happens.",[20,100,101,104],{},[30,102,103],{},"2. Equipped Items","\nWhen a character wears armor or holds a weapon, that item adds its status. Unequip it, and the status is removed.",[20,106,107,110],{},[30,108,109],{},"3. Learned Skills","\nWhen a character learns a skill, that skill's status is applied. More powerful skills = more impactful status.",[20,112,113,116],{},[30,114,115],{},"4. Applied Effects","\nBuffs, curses, blessings, poison - any temporary condition is a status that gets added on top.",[44,118],{},[15,120,122],{"id":121},"how-layers-combine","How Layers Combine",[20,124,125],{},"When multiple statuses define the same thing, the engine needs to decide what to do. Different types of values combine differently:",[89,127,129],{"id":128},"stats-add-them-up","Stats: Add Them Up",[20,131,132],{},"If the base template gives +100 Health, an equipped sword gives +20 Health, and a buff gives +50 Health, the character has 170 Health total.",[20,134,135],{},"Think of it like stacking bonuses in any RPG.",[89,137,139],{"id":138},"traits-attributes-last-one-wins","Traits & Attributes: Last One Wins",[20,141,142],{},"If the base template sets the character's name to \"Alice\" and then a curse status sets it to \"Cursed Alice\", the character's name becomes \"Cursed Alice\".",[20,144,145],{},"Think of it like overlapping stickers - the top sticker covers what's below.",[20,147,148,151,152,156],{},[30,149,150],{},"Exception: Merge mode."," Traits with ",[153,154,155],"code",{},"is_merge"," enabled accumulate across statuses instead. The merge behavior depends on the trait's type:",[24,158,159,165,171],{},[27,160,161,164],{},[30,162,163],{},"chooseMany"," - union (deduplicates entries)",[27,166,167,170],{},[30,168,169],{},"array"," - concatenate (preserves duplicates)",[27,172,173,176],{},[30,174,175],{},"schema"," - deep merge objects",[89,178,180],{"id":179},"skin-layers-show-everything","Skin Layers: Show Everything",[20,182,183],{},"If the base template enables the body layer and hair layer, and an item adds an outfit layer, all three layers display together.",[20,185,186],{},"Think of it like getting dressed - you don't remove your body when you put on clothes.",[89,188,190],{"id":189},"abilities-collect-all","Abilities: Collect All",[20,192,193],{},"If the base gives \"slash\" and a skill gives \"fireball\", the character can use both.",[44,195],{},[15,197,199],{"id":198},"the-editor-forms","The Editor Forms",[20,201,202,203,205],{},"In the ",[30,204,38],{}," tab of the editor, you'll find several forms. Each one defines a different aspect of how characters work.",[89,207,209],{"id":208},"character-stats","Character Stats",[20,211,212,215],{},[30,213,214],{},"What they are:"," Numbers that matter during gameplay.",[20,217,218],{},[30,219,220],{},"Examples from the tutorial game:",[24,222,223,229,235,241],{},[27,224,225,228],{},[30,226,227],{},"Health"," - Your physical condition. Run out and you die.",[27,230,231,234],{},[30,232,233],{},"Stamina"," - Short-term energy for actions like sprinting.",[27,236,237,240],{},[30,238,239],{},"Fashion"," - How well your outfit matches the situation.",[27,242,243,246,247],{},[30,244,245],{},"Endurance"," - Long-term fitness. Each point also gives +10 Stamina for each point which is explained in ",[248,249,251],"a",{"href":250},"\u002Fdocs\u002Fglobal_essentials\u002Fcharacters\u002Fcharacters_computed","Computed Stats",[20,253,254],{},[30,255,256],{},"Special options:",[24,258,259,265,271],{},[27,260,261,264],{},[30,262,263],{},"Is Resource"," - Has a current\u002Fmax value (like Health 50\u002F100)",[27,266,267,270],{},[30,268,269],{},"Is Replenishable"," - Automatically refills when gained",[27,272,273,276],{},[30,274,275],{},"Precision"," - How many decimal places to track",[20,278,279,282],{},[30,280,281],{},"When to use:"," Any number that affects gameplay - combat stats, progress counters.",[44,284],{},[89,286,288],{"id":287},"character-traits","Character Traits",[20,290,291,293],{},[30,292,214],{}," Custom data you want to store about a character.",[20,295,296],{},"Unlike stats (which are always numbers), traits can be anything:",[24,298,299,302,305,308,311,314],{},[27,300,301],{},"Text (name, biography)",[27,303,304],{},"Numbers (age, level)",[27,306,307],{},"Colors (hair color, aura color)",[27,309,310],{},"Images (portrait, icon)",[27,312,313],{},"Lists (tags, keywords)",[27,315,316],{},"Rich text (detailed descriptions with formatting)",[20,318,319],{},[30,320,321],{},"Examples:",[24,323,324,330],{},[27,325,326,329],{},[30,327,328],{},"name"," - The character's display name",[27,331,332,335],{},[30,333,334],{},"title_color"," - Custom color for their name in UI",[20,337,338,340],{},[30,339,281],{}," Anything that isn't a gameplay number - identity, appearance data, custom properties.",[44,342],{},[89,344,346],{"id":345},"character-attributes","Character Attributes",[20,348,349,351],{},[30,350,214],{}," Categories with a fixed set of options.",[20,353,354],{},"Unlike traits (which can be any value), attributes choose from predefined options. This makes them perfect for driving visual changes.",[20,356,357],{},[30,358,220],{},[24,360,361,367,373,379],{},[27,362,363,366],{},[30,364,365],{},"sex"," - Options: male, female",[27,368,369,372],{},[30,370,371],{},"mood"," - Options: normal, anxious, blush, confused",[27,374,375,378],{},[30,376,377],{},"hairstyle"," - Options: 1, 2, 3",[27,380,381,384],{},[30,382,383],{},"mc_outfit"," - Options: 0, 1, 2, 3",[20,386,387,390],{},[30,388,389],{},"How they work:","\nWhen you create an attribute, you define all possible values. Then skin layers can watch that attribute and show different images based on its current value.",[20,392,393,395],{},[30,394,281],{}," Anything where you have a fixed set of visual or state options.",[44,397],{},[89,399,401],{"id":400},"character-skin-layers","Character Skin Layers",[20,403,404,406],{},[30,405,214],{}," Visual pieces that stack to create a character's appearance.",[20,408,409],{},"Each layer is an image (or set of images) that renders at a specific depth. Lower z-index = further back. Higher z-index = further front.",[20,411,412],{},[30,413,220],{},[24,415,416,422,428,434],{},[27,417,418,421],{},[30,419,420],{},"mc_base"," (z-index: 0) - The body",[27,423,424,427],{},[30,425,426],{},"mc_eyes"," (z-index: 1) - The eyes",[27,429,430,433],{},[30,431,432],{},"mc_hair_back"," (z-index: -1) - Hair behind the body",[27,435,436,438],{},[30,437,383],{}," (z-index: 5) - Clothing on top",[20,440,441],{},[30,442,443],{},"Key fields:",[24,445,446,452,458],{},[27,447,448,451],{},[30,449,450],{},"z_index"," - Stacking order (negative = behind, positive = in front)",[27,453,454,457],{},[30,455,456],{},"attributes"," - Which attributes control this layer's appearance",[27,459,460,463],{},[30,461,462],{},"images"," - Different image files for different attribute combinations",[20,465,466],{},[30,467,468],{},"How attribute-driven images work:",[20,470,471],{},"If a layer is controlled by \"mood\" and \"hairstyle\" attributes, you provide images for each combination:",[24,473,474,477,480,483],{},[27,475,476],{},"face_happy_short",[27,478,479],{},"face_happy_long",[27,481,482],{},"face_sad_short",[27,484,485],{},"face_sad_long",[20,487,488],{},"The engine automatically picks the right image based on current attribute values.",[20,490,491],{},[30,492,493],{},"Layer styles:",[20,495,496,497,500],{},"The ",[153,498,499],{},"styles"," field lets you apply custom CSS classes to a skin layer. This is useful for color variations without needing separate image files.",[20,502,503],{},"The engine includes built-in color classes that shift red-colored assets to other colors using CSS filters:",[505,506,507,520],"table",{},[508,509,510],"thead",{},[511,512,513,517],"tr",{},[514,515,516],"th",{},"Class",[514,518,519],{},"Effect",[521,522,523,534,544,554,564,574,584,594,604,614],"tbody",{},[511,524,525,531],{},[526,527,528],"td",{},[153,529,530],{},"blue_default",[526,532,533],{},"Shifts red to blue",[511,535,536,541],{},[526,537,538],{},[153,539,540],{},"cyan_default",[526,542,543],{},"Shifts red to cyan",[511,545,546,551],{},[526,547,548],{},[153,549,550],{},"brown_default",[526,552,553],{},"Shifts red to brown",[511,555,556,561],{},[526,557,558],{},[153,559,560],{},"green_default",[526,562,563],{},"Shifts red to green",[511,565,566,571],{},[526,567,568],{},[153,569,570],{},"pink_default",[526,572,573],{},"Shifts red to pink",[511,575,576,581],{},[526,577,578],{},[153,579,580],{},"violet_default",[526,582,583],{},"Shifts red to violet",[511,585,586,591],{},[526,587,588],{},[153,589,590],{},"yellow_default",[526,592,593],{},"Shifts red to yellow",[511,595,596,601],{},[526,597,598],{},[153,599,600],{},"orange_default",[526,602,603],{},"Shifts red to orange",[511,605,606,611],{},[526,607,608],{},[153,609,610],{},"silver_default",[526,612,613],{},"Shifts red to silver\u002Fgray",[511,615,616,621],{},[526,617,618],{},[153,619,620],{},"black_default",[526,622,623],{},"Shifts red to black",[20,625,626,629,630,633,634,637],{},[30,627,628],{},"Example:"," Create hair assets in red, then use ",[153,631,632],{},"styles: [\"brown_default\"]"," for brown hair or ",[153,635,636],{},"styles: [\"yellow_default\"]"," for blonde. One set of images, multiple color options.",[20,639,640,641,644],{},"You can define your own color classes in your game's CSS file using the ",[153,642,643],{},".character-doll-image.classname"," selector with CSS filter properties.",[44,646],{},[89,648,650],{"id":649},"character-statuses","Character Statuses",[20,652,653,655],{},[30,654,214],{}," Pre-made bundles of changes you can apply to characters.",[20,657,658],{},"While items and skills automatically create their own statuses, you can also define standalone statuses for effects like buffs, debuffs, and conditions.",[20,660,661],{},[30,662,443],{},[24,664,665,671,677],{},[27,666,667,670],{},[30,668,669],{},"max_stacks"," - How many times this status can stack (poison stacking 3 times)",[27,672,673,676],{},[30,674,675],{},"duration"," - How long it lasts (if temporary)",[27,678,679,682],{},[30,680,681],{},"stats\u002Ftraits\u002Fattributes\u002Fskin_layers"," - What changes when applied",[20,684,685],{},[30,686,321],{},[24,688,689,695,701],{},[27,690,691,694],{},[30,692,693],{},"Blessed"," - +50 Health, +20 Strength, glowing aura layer",[27,696,697,700],{},[30,698,699],{},"Poisoned"," - -5 Health per turn, max 3 stacks, green tint layer",[27,702,703,706],{},[30,704,705],{},"Stunned"," - Can't use abilities, stunned expression attribute",[44,708],{},[89,710,712],{"id":711},"status-meta","Status Meta",[20,714,715,716,719,720,722,723,726,727,730,731,734],{},"Status effects can carry a ",[30,717,718],{},"meta"," data bag – a set of custom fields you define yourself (in the ",[153,721,712],{}," editor tab) and read from your own scripts. A burn status might carry ",[153,724,725],{},"damage_per_turn"," and ",[153,728,729],{},"element","; a buff might carry ",[153,732,733],{},"power_scaling",". The engine just stores and hands these values back to your game and plugin code, so the same status system flexibly powers whatever mechanics your game needs.",[89,736,738],{"id":737},"character-templates","Character Templates",[20,740,741,743],{},[30,742,214],{}," Complete character definitions - the blueprints.",[20,745,746],{},"A template combines everything above into one package. It defines a character's starting state before any items, skills, or effects modify them.",[20,748,749],{},[30,750,443],{},[24,752,753,759,765,771,777,782,788,794],{},[27,754,755,758],{},[30,756,757],{},"auto_create"," - Automatically create this character when the game starts",[27,760,761,764],{},[30,762,763],{},"add_to_party"," - Automatically add to player's party",[27,766,767,770],{},[30,768,769],{},"stats"," - Starting stat values",[27,772,773,776],{},[30,774,775],{},"traits"," - Starting traits (name, etc.)",[27,778,779,781],{},[30,780,456],{}," - Starting attribute values",[27,783,784,787],{},[30,785,786],{},"skin_layers"," - Which layers to display",[27,789,790,793],{},[30,791,792],{},"item_slots"," - Where equipment goes (with positions)",[27,795,796,799],{},[30,797,798],{},"skill_trees"," - Which skill trees this character can learn from",[44,801],{},[15,803,805],{"id":804},"quick-reference","Quick Reference",[505,807,808,818],{},[508,809,810],{},[511,811,812,815],{},[514,813,814],{},"I want to...",[514,816,817],{},"Use this form",[521,819,820,827,834,841,848,855],{},[511,821,822,825],{},[526,823,824],{},"Add a number like Health or Damage",[526,826,209],{},[511,828,829,832],{},[526,830,831],{},"Store custom data like name or portrait",[526,833,288],{},[511,835,836,839],{},[526,837,838],{},"Create options like mood or pose",[526,840,346],{},[511,842,843,846],{},[526,844,845],{},"Define visual pieces for appearance",[526,847,401],{},[511,849,850,853],{},[526,851,852],{},"Create a buff\u002Fdebuff\u002Fcondition",[526,854,650],{},[511,856,857,860],{},[526,858,859],{},"Define a complete character",[526,861,738],{},[44,863],{},[15,865,867],{"id":866},"next-steps","Next Steps",[24,869,870,875,881],{},[27,871,872,874],{},[248,873,251],{"href":250}," - Computed stats and scripting features",[27,876,877,880],{},[248,878,5],{"href":879},"\u002Fdocs\u002Fglobal_essentials\u002Fitems\u002Fitems_overview"," - How items work with the status system",[27,882,883,887],{},[248,884,886],{"href":885},"\u002Fdocs\u002Fglobal_essentials\u002Fcharacters\u002Fcharacters_api","API"," - Character API reference",{"title":889,"searchDepth":890,"depth":890,"links":891},"",2,[892,893,897,903,912,913],{"id":17,"depth":890,"text":18},{"id":48,"depth":890,"text":49,"children":894},[895],{"id":91,"depth":896,"text":92},3,{"id":121,"depth":890,"text":122,"children":898},[899,900,901,902],{"id":128,"depth":896,"text":129},{"id":138,"depth":896,"text":139},{"id":179,"depth":896,"text":180},{"id":189,"depth":896,"text":190},{"id":198,"depth":890,"text":199,"children":904},[905,906,907,908,909,910,911],{"id":208,"depth":896,"text":209},{"id":287,"depth":896,"text":288},{"id":345,"depth":896,"text":346},{"id":400,"depth":896,"text":401},{"id":649,"depth":896,"text":650},{"id":711,"depth":896,"text":712},{"id":737,"depth":896,"text":738},{"id":804,"depth":890,"text":805},{"id":866,"depth":890,"text":867},"md",{"plugin":916,"category":917,"page":918},"global_essentials","characters","characters_overview",true,"\u002Fdocs\u002Fglobal_essentials\u002Fcharacters\u002Fcharacters_overview",{"title":5,"description":889},"docs\u002Fglobal_essentials\u002Fcharacters\u002Fcharacters_overview","46APsv-b8PlxScoZTdudbNDUppzeQ9EY6JSCNQ-e_vA",1779582261071]