[{"data":1,"prerenderedAt":3876},["ShallowReactive",2],{"doc-global_essentials\u002Fcharacters\u002Fcharacters_api":3},{"id":4,"title":5,"body":6,"description":17,"extension":3867,"meta":3868,"navigation":239,"path":3872,"seo":3873,"stem":3874,"__hash__":3875},"docs\u002Fdocs\u002Fglobal_essentials\u002Fcharacters\u002Fcharacters_api.md","API",{"type":7,"value":8,"toc":3770},"minimark",[9,14,18,21,26,31,34,78,82,85,151,155,158,179,183,186,368,372,375,409,413,416,457,461,468,502,506,512,542,546,552,582,586,589,695,699,710,713,811,823,825,829,1061,1063,1067,1071,1074,1096,1100,1103,1122,1124,1128,1132,1135,1161,1165,1168,1191,1195,1198,1224,1228,1231,1254,1258,1261,1281,1283,1287,1291,1294,1320,1324,1327,1351,1355,1362,1415,1419,1422,1447,1451,1454,1502,1506,1509,1532,1536,1539,1567,1569,1573,1577,1580,1601,1605,1612,1646,1650,1653,1671,1675,1678,1704,1707,1710,1767,1771,1774,1798,1802,1805,1828,1854,1856,1860,1864,1867,1893,1897,1900,1922,1926,1929,1950,1954,1957,1987,1991,1994,2016,2020,2023,2045,2047,2051,2055,2058,2077,2081,2084,2102,2106,2109,2137,2141,2144,2166,2170,2173,2208,2210,2214,2218,2221,2240,2244,2247,2268,2272,2275,2295,2299,2302,2323,2327,2330,2409,2413,2416,2443,2445,2449,2453,2456,2489,2493,2496,2521,2525,2528,2549,2553,2556,2571,2575,2578,2603,2607,2610,2632,2634,2638,2642,2645,2707,2711,2714,2782,2786,2792,2822,2930,2932,2936,2940,2943,2988,2990,2994,2998,3001,3067,3071,3077,3125,3129,3136,3140,3146,3150,3157,3161,3164,3166,3170,3173,3343,3346,3514,3516,3520,3523,3606,3632,3634,3638,3641,3766],[10,11,13],"h1",{"id":12},"character-api-reference","Character API Reference",[15,16,17],"p",{},"API reference for working with characters in code.",[19,20],"hr",{},[22,23,25],"h2",{"id":24},"game-methods","Game Methods",[27,28,30],"h3",{"id":29},"getcharacterid","getCharacter(id)",[15,32,33],{},"Get a character by ID.",[35,36,41],"pre",{"className":37,"code":38,"language":39,"meta":40,"style":40},"language-js shiki shiki-themes github-light github-dark","const mc = game.getCharacter(\"mc\");\n","js","",[42,43,44],"code",{"__ignoreMap":40},[45,46,49,53,57,60,64,68,71,75],"span",{"class":47,"line":48},"line",1,[45,50,52],{"class":51},"szBVR","const",[45,54,56],{"class":55},"sj4cs"," mc",[45,58,59],{"class":51}," =",[45,61,63],{"class":62},"sVt8B"," game.",[45,65,67],{"class":66},"sScJk","getCharacter",[45,69,70],{"class":62},"(",[45,72,74],{"class":73},"sZZnC","\"mc\"",[45,76,77],{"class":62},");\n",[27,79,81],{"id":80},"getparty","getParty()",[15,83,84],{},"Get all characters in the party.",[35,86,88],{"className":37,"code":87,"language":39,"meta":40,"style":40},"const party = game.getParty();\nfor (const character of party) {\n  console.log(character.getName());\n}\n",[42,89,90,107,127,145],{"__ignoreMap":40},[45,91,92,94,97,99,101,104],{"class":47,"line":48},[45,93,52],{"class":51},[45,95,96],{"class":55}," party",[45,98,59],{"class":51},[45,100,63],{"class":62},[45,102,103],{"class":66},"getParty",[45,105,106],{"class":62},"();\n",[45,108,110,113,116,118,121,124],{"class":47,"line":109},2,[45,111,112],{"class":51},"for",[45,114,115],{"class":62}," (",[45,117,52],{"class":51},[45,119,120],{"class":55}," character",[45,122,123],{"class":51}," of",[45,125,126],{"class":62}," party) {\n",[45,128,130,133,136,139,142],{"class":47,"line":129},3,[45,131,132],{"class":62},"  console.",[45,134,135],{"class":66},"log",[45,137,138],{"class":62},"(character.",[45,140,141],{"class":66},"getName",[45,143,144],{"class":62},"());\n",[45,146,148],{"class":47,"line":147},4,[45,149,150],{"class":62},"}\n",[27,152,154],{"id":153},"getallcharacters","getAllCharacters()",[15,156,157],{},"Get all characters in the game.",[35,159,161],{"className":37,"code":160,"language":39,"meta":40,"style":40},"const allChars = game.getAllCharacters();\n",[42,162,163],{"__ignoreMap":40},[45,164,165,167,170,172,174,177],{"class":47,"line":48},[45,166,52],{"class":51},[45,168,169],{"class":55}," allChars",[45,171,59],{"class":51},[45,173,63],{"class":62},[45,175,176],{"class":66},"getAllCharacters",[45,178,106],{"class":62},[27,180,182],{"id":181},"createcharacterid-template-skipevents","createCharacter(id, template, skipEvents?)",[15,184,185],{},"Create a character from a template object or registered template ID.",[35,187,189],{"className":37,"code":188,"language":39,"meta":40,"style":40},"\u002F\u002F From a registered template ID\nconst shopkeeper = game.createCharacter(\"shopkeeper_1\", \"shopkeeper_template\");\ngame.addCharacter(shopkeeper);\n\n\u002F\u002F From a custom template object\nconst npc = game.createCharacter(\"custom_npc\", {\n  traits: { name: \"Custom NPC\" },\n  stats: { health: 100, strength: 10 },\n  attributes: { sex: \"male\" }\n});\ngame.addCharacter(npc);\n\n\u002F\u002F Skip creation events (for previews, etc.)\nconst preview = game.createCharacter(\"preview\", \"some_template\", true);\n",[42,190,191,197,224,235,241,247,269,281,298,310,316,326,331,337],{"__ignoreMap":40},[45,192,193],{"class":47,"line":48},[45,194,196],{"class":195},"sJ8bj","\u002F\u002F From a registered template ID\n",[45,198,199,201,204,206,208,211,213,216,219,222],{"class":47,"line":109},[45,200,52],{"class":51},[45,202,203],{"class":55}," shopkeeper",[45,205,59],{"class":51},[45,207,63],{"class":62},[45,209,210],{"class":66},"createCharacter",[45,212,70],{"class":62},[45,214,215],{"class":73},"\"shopkeeper_1\"",[45,217,218],{"class":62},", ",[45,220,221],{"class":73},"\"shopkeeper_template\"",[45,223,77],{"class":62},[45,225,226,229,232],{"class":47,"line":129},[45,227,228],{"class":62},"game.",[45,230,231],{"class":66},"addCharacter",[45,233,234],{"class":62},"(shopkeeper);\n",[45,236,237],{"class":47,"line":147},[45,238,240],{"emptyLinePlaceholder":239},true,"\n",[45,242,244],{"class":47,"line":243},5,[45,245,246],{"class":195},"\u002F\u002F From a custom template object\n",[45,248,250,252,255,257,259,261,263,266],{"class":47,"line":249},6,[45,251,52],{"class":51},[45,253,254],{"class":55}," npc",[45,256,59],{"class":51},[45,258,63],{"class":62},[45,260,210],{"class":66},[45,262,70],{"class":62},[45,264,265],{"class":73},"\"custom_npc\"",[45,267,268],{"class":62},", {\n",[45,270,272,275,278],{"class":47,"line":271},7,[45,273,274],{"class":62},"  traits: { name: ",[45,276,277],{"class":73},"\"Custom NPC\"",[45,279,280],{"class":62}," },\n",[45,282,284,287,290,293,296],{"class":47,"line":283},8,[45,285,286],{"class":62},"  stats: { health: ",[45,288,289],{"class":55},"100",[45,291,292],{"class":62},", strength: ",[45,294,295],{"class":55},"10",[45,297,280],{"class":62},[45,299,301,304,307],{"class":47,"line":300},9,[45,302,303],{"class":62},"  attributes: { sex: ",[45,305,306],{"class":73},"\"male\"",[45,308,309],{"class":62}," }\n",[45,311,313],{"class":47,"line":312},10,[45,314,315],{"class":62},"});\n",[45,317,319,321,323],{"class":47,"line":318},11,[45,320,228],{"class":62},[45,322,231],{"class":66},[45,324,325],{"class":62},"(npc);\n",[45,327,329],{"class":47,"line":328},12,[45,330,240],{"emptyLinePlaceholder":239},[45,332,334],{"class":47,"line":333},13,[45,335,336],{"class":195},"\u002F\u002F Skip creation events (for previews, etc.)\n",[45,338,340,342,345,347,349,351,353,356,358,361,363,366],{"class":47,"line":339},14,[45,341,52],{"class":51},[45,343,344],{"class":55}," preview",[45,346,59],{"class":51},[45,348,63],{"class":62},[45,350,210],{"class":66},[45,352,70],{"class":62},[45,354,355],{"class":73},"\"preview\"",[45,357,218],{"class":62},[45,359,360],{"class":73},"\"some_template\"",[45,362,218],{"class":62},[45,364,365],{"class":55},"true",[45,367,77],{"class":62},[27,369,371],{"id":370},"addcharactercharacter-isparty","addCharacter(character, isParty?)",[15,373,374],{},"Add a character to the game. Optionally add to party.",[35,376,378],{"className":37,"code":377,"language":39,"meta":40,"style":40},"game.addCharacter(npc);       \u002F\u002F Add without joining party\ngame.addCharacter(npc, true); \u002F\u002F Add and join party\n",[42,379,380,392],{"__ignoreMap":40},[45,381,382,384,386,389],{"class":47,"line":48},[45,383,228],{"class":62},[45,385,231],{"class":66},[45,387,388],{"class":62},"(npc);       ",[45,390,391],{"class":195},"\u002F\u002F Add without joining party\n",[45,393,394,396,398,401,403,406],{"class":47,"line":109},[45,395,228],{"class":62},[45,397,231],{"class":66},[45,399,400],{"class":62},"(npc, ",[45,402,365],{"class":55},[45,404,405],{"class":62},"); ",[45,407,408],{"class":195},"\u002F\u002F Add and join party\n",[27,410,412],{"id":411},"ischaracterinpartycharacter","isCharacterInParty(character)",[15,414,415],{},"Check if a character is in the party. Accepts character instance or ID string.",[35,417,419],{"className":37,"code":418,"language":39,"meta":40,"style":40},"if (game.isCharacterInParty(\"alice\")) {\n  console.log(\"Alice is in the party\");\n}\n",[42,420,421,440,453],{"__ignoreMap":40},[45,422,423,426,429,432,434,437],{"class":47,"line":48},[45,424,425],{"class":51},"if",[45,427,428],{"class":62}," (game.",[45,430,431],{"class":66},"isCharacterInParty",[45,433,70],{"class":62},[45,435,436],{"class":73},"\"alice\"",[45,438,439],{"class":62},")) {\n",[45,441,442,444,446,448,451],{"class":47,"line":109},[45,443,132],{"class":62},[45,445,135],{"class":66},[45,447,70],{"class":62},[45,449,450],{"class":73},"\"Alice is in the party\"",[45,452,77],{"class":62},[45,454,455],{"class":47,"line":129},[45,456,150],{"class":62},[27,458,460],{"id":459},"addtopartycharacter","addToParty(character)",[15,462,463,464,467],{},"Add a character to the party. Accepts character instance or ID string. Triggers ",[42,465,466],{},"character_join_party"," event.",[35,469,471],{"className":37,"code":470,"language":39,"meta":40,"style":40},"game.addToParty(\"alice\");  \u002F\u002F Using ID string\ngame.addToParty(npc);      \u002F\u002F Using Character instance\n",[42,472,473,490],{"__ignoreMap":40},[45,474,475,477,480,482,484,487],{"class":47,"line":48},[45,476,228],{"class":62},[45,478,479],{"class":66},"addToParty",[45,481,70],{"class":62},[45,483,436],{"class":73},[45,485,486],{"class":62},");  ",[45,488,489],{"class":195},"\u002F\u002F Using ID string\n",[45,491,492,494,496,499],{"class":47,"line":109},[45,493,228],{"class":62},[45,495,479],{"class":66},[45,497,498],{"class":62},"(npc);      ",[45,500,501],{"class":195},"\u002F\u002F Using Character instance\n",[27,503,505],{"id":504},"removefrompartycharacter","removeFromParty(character)",[15,507,508,509,467],{},"Remove a character from the party. Accepts character instance or ID string. Triggers ",[42,510,511],{},"character_leave_party",[35,513,515],{"className":37,"code":514,"language":39,"meta":40,"style":40},"game.removeFromParty(\"alice\");  \u002F\u002F Using ID string\ngame.removeFromParty(npc);      \u002F\u002F Using Character instance\n",[42,516,517,532],{"__ignoreMap":40},[45,518,519,521,524,526,528,530],{"class":47,"line":48},[45,520,228],{"class":62},[45,522,523],{"class":66},"removeFromParty",[45,525,70],{"class":62},[45,527,436],{"class":73},[45,529,486],{"class":62},[45,531,489],{"class":195},[45,533,534,536,538,540],{"class":47,"line":109},[45,535,228],{"class":62},[45,537,523],{"class":66},[45,539,498],{"class":62},[45,541,501],{"class":195},[27,543,545],{"id":544},"deletecharactercharacter","deleteCharacter(character)",[15,547,548,549,467],{},"Delete a character from the game entirely. Accepts character instance or ID string. Removes their private inventory and removes them from party. Triggers ",[42,550,551],{},"character_delete",[35,553,555],{"className":37,"code":554,"language":39,"meta":40,"style":40},"game.deleteCharacter(\"alice\");  \u002F\u002F Using ID string\ngame.deleteCharacter(npc);      \u002F\u002F Using Character instance\n",[42,556,557,572],{"__ignoreMap":40},[45,558,559,561,564,566,568,570],{"class":47,"line":48},[45,560,228],{"class":62},[45,562,563],{"class":66},"deleteCharacter",[45,565,70],{"class":62},[45,567,436],{"class":73},[45,569,486],{"class":62},[45,571,489],{"class":195},[45,573,574,576,578,580],{"class":47,"line":109},[45,575,228],{"class":62},[45,577,563],{"class":66},[45,579,498],{"class":62},[45,581,501],{"class":195},[27,583,585],{"id":584},"createstatustemplate","createStatus(template)",[15,587,588],{},"Create a status from a template object or registered template ID.",[35,590,592],{"className":37,"code":591,"language":39,"meta":40,"style":40},"\u002F\u002F From a registered template ID\nconst buff = game.createStatus(\"strength_buff\");\ncharacter.addStatus(buff);\n\n\u002F\u002F From a custom template object\nconst customStatus = game.createStatus({\n  id: \"custom_buff\",\n  stats: { strength: 10 },\n  maxStacks: 3\n});\ncharacter.addStatus(customStatus);\n",[42,593,594,598,619,630,634,638,654,665,674,682,686],{"__ignoreMap":40},[45,595,596],{"class":47,"line":48},[45,597,196],{"class":195},[45,599,600,602,605,607,609,612,614,617],{"class":47,"line":109},[45,601,52],{"class":51},[45,603,604],{"class":55}," buff",[45,606,59],{"class":51},[45,608,63],{"class":62},[45,610,611],{"class":66},"createStatus",[45,613,70],{"class":62},[45,615,616],{"class":73},"\"strength_buff\"",[45,618,77],{"class":62},[45,620,621,624,627],{"class":47,"line":129},[45,622,623],{"class":62},"character.",[45,625,626],{"class":66},"addStatus",[45,628,629],{"class":62},"(buff);\n",[45,631,632],{"class":47,"line":147},[45,633,240],{"emptyLinePlaceholder":239},[45,635,636],{"class":47,"line":243},[45,637,246],{"class":195},[45,639,640,642,645,647,649,651],{"class":47,"line":249},[45,641,52],{"class":51},[45,643,644],{"class":55}," customStatus",[45,646,59],{"class":51},[45,648,63],{"class":62},[45,650,611],{"class":66},[45,652,653],{"class":62},"({\n",[45,655,656,659,662],{"class":47,"line":271},[45,657,658],{"class":62},"  id: ",[45,660,661],{"class":73},"\"custom_buff\"",[45,663,664],{"class":62},",\n",[45,666,667,670,672],{"class":47,"line":283},[45,668,669],{"class":62},"  stats: { strength: ",[45,671,295],{"class":55},[45,673,280],{"class":62},[45,675,676,679],{"class":47,"line":300},[45,677,678],{"class":62},"  maxStacks: ",[45,680,681],{"class":55},"3\n",[45,683,684],{"class":47,"line":312},[45,685,315],{"class":62},[45,687,688,690,692],{"class":47,"line":318},[45,689,623],{"class":62},[45,691,626],{"class":66},[45,693,694],{"class":62},"(customStatus);\n",[27,696,698],{"id":697},"registerstatgroupresolverresolver","registerStatGroupResolver(resolver)",[15,700,701,702,705,706,709],{},"Register a function that controls which stat groups appear in the character sheet per character. The resolver receives a character and returns an array of stat tag names. The engine filters stats by those tags, sorts by ",[42,703,704],{},"order",", and resolves group display names from locale key ",[42,707,708],{},"group.{tag}",".",[15,711,712],{},"Without a resolver, the character sheet defaults to two groups: \"Resources\" and \"Stats\".",[35,714,716],{"className":37,"code":715,"language":39,"meta":40,"style":40},"\u002F\u002F Show combat and survival for everyone, allegiance only for MC\ngame.registerStatGroupResolver((character) => {\n    const tags = ['survival', 'combat'];\n    if (character.tags.includes('mc')) tags.push('allegiance');\n    return tags;\n});\n",[42,717,718,723,746,770,799,807],{"__ignoreMap":40},[45,719,720],{"class":47,"line":48},[45,721,722],{"class":195},"\u002F\u002F Show combat and survival for everyone, allegiance only for MC\n",[45,724,725,727,730,733,737,740,743],{"class":47,"line":109},[45,726,228],{"class":62},[45,728,729],{"class":66},"registerStatGroupResolver",[45,731,732],{"class":62},"((",[45,734,736],{"class":735},"s4XuR","character",[45,738,739],{"class":62},") ",[45,741,742],{"class":51},"=>",[45,744,745],{"class":62}," {\n",[45,747,748,751,754,756,759,762,764,767],{"class":47,"line":129},[45,749,750],{"class":51},"    const",[45,752,753],{"class":55}," tags",[45,755,59],{"class":51},[45,757,758],{"class":62}," [",[45,760,761],{"class":73},"'survival'",[45,763,218],{"class":62},[45,765,766],{"class":73},"'combat'",[45,768,769],{"class":62},"];\n",[45,771,772,775,778,781,783,786,789,792,794,797],{"class":47,"line":147},[45,773,774],{"class":51},"    if",[45,776,777],{"class":62}," (character.tags.",[45,779,780],{"class":66},"includes",[45,782,70],{"class":62},[45,784,785],{"class":73},"'mc'",[45,787,788],{"class":62},")) tags.",[45,790,791],{"class":66},"push",[45,793,70],{"class":62},[45,795,796],{"class":73},"'allegiance'",[45,798,77],{"class":62},[45,800,801,804],{"class":47,"line":243},[45,802,803],{"class":51},"    return",[45,805,806],{"class":62}," tags;\n",[45,808,809],{"class":47,"line":249},[45,810,315],{"class":62},[15,812,813,814,218,817,218,820,709],{},"Group names are resolved from locale entries. For the tags above, define locale entries with IDs: ",[42,815,816],{},"group.survival",[42,818,819],{},"group.combat",[42,821,822],{},"group.allegiance",[19,824],{},[22,826,828],{"id":827},"character-properties","Character Properties",[830,831,832,848],"table",{},[833,834,835],"thead",{},[836,837,838,842,845],"tr",{},[839,840,841],"th",{},"Property",[839,843,844],{},"Type",[839,846,847],{},"Description",[849,850,851,867,881,896,911,926,940,954,968,983,998,1017,1031,1046],"tbody",{},[836,852,853,859,864],{},[854,855,856],"td",{},[42,857,858],{},"id",[854,860,861],{},[42,862,863],{},"string",[854,865,866],{},"Unique identifier",[836,868,869,874,878],{},[854,870,871],{},[42,872,873],{},"templateId",[854,875,876],{},[42,877,863],{},[854,879,880],{},"Template ID this character was created from",[836,882,883,888,893],{},[854,884,885],{},[42,886,887],{},"traits",[854,889,890],{},[42,891,892],{},"Record\u003Cstring, any>",[854,894,895],{},"Character traits (key-value pairs)",[836,897,898,903,908],{},[854,899,900],{},[42,901,902],{},"attributes",[854,904,905],{},[42,906,907],{},"Record\u003Cstring, string>",[854,909,910],{},"Character attributes",[836,912,913,918,923],{},[854,914,915],{},[42,916,917],{},"skinLayers",[854,919,920],{},[42,921,922],{},"Set\u003Cstring>",[854,924,925],{},"Active skin layer IDs",[836,927,928,933,937],{},[854,929,930],{},[42,931,932],{},"abilities",[854,934,935],{},[42,936,922],{},[854,938,939],{},"Ability IDs this character has",[836,941,942,947,951],{},[854,943,944],{},[42,945,946],{},"abilityModifiers",[854,948,949],{},[42,950,892],{},[854,952,953],{},"Modifiers applied to abilities",[836,955,956,961,965],{},[854,957,958],{},[42,959,960],{},"skillTrees",[854,962,963],{},[42,964,922],{},[854,966,967],{},"Available skill tree IDs",[836,969,970,975,980],{},[854,971,972],{},[42,973,974],{},"learnedSkills",[854,976,977],{},[42,978,979],{},"Array",[854,981,982],{},"Skills this character has learned",[836,984,985,990,995],{},[854,986,987],{},[42,988,989],{},"itemSlots",[854,991,992],{},[42,993,994],{},"ItemSlot[]",[854,996,997],{},"Equipment slots",[836,999,1000,1005,1010],{},[854,1001,1002],{},[42,1003,1004],{},"statuses",[854,1006,1007],{},[42,1008,1009],{},"Map\u003Cstring, Status>",[854,1011,1012,1013,1016],{},"Applied status effects (use ",[42,1014,1015],{},"getStatuses()"," to iterate)",[836,1018,1019,1024,1028],{},[854,1020,1021],{},[42,1022,1023],{},"actions",[854,1025,1026],{},[42,1027,892],{},[854,1029,1030],{},"Custom actions registered on this character",[836,1032,1033,1038,1043],{},[854,1034,1035],{},[42,1036,1037],{},"skinLayerStyles",[854,1039,1040],{},[42,1041,1042],{},"Map\u003Cstring, string[]>",[854,1044,1045],{},"CSS classes applied to skin layers",[836,1047,1048,1053,1058],{},[854,1049,1050],{},[42,1051,1052],{},"renderedLayers",[854,1054,1055],{},[42,1056,1057],{},"CharacterSkinLayerObject[]",[854,1059,1060],{},"Rendered skin layers for display",[19,1062],{},[22,1064,1066],{"id":1065},"id-methods","ID Methods",[27,1068,1070],{"id":1069},"getid","getId()",[15,1072,1073],{},"Get the character's ID.",[35,1075,1077],{"className":37,"code":1076,"language":39,"meta":40,"style":40},"const id = character.getId();\n",[42,1078,1079],{"__ignoreMap":40},[45,1080,1081,1083,1086,1088,1091,1094],{"class":47,"line":48},[45,1082,52],{"class":51},[45,1084,1085],{"class":55}," id",[45,1087,59],{"class":51},[45,1089,1090],{"class":62}," character.",[45,1092,1093],{"class":66},"getId",[45,1095,106],{"class":62},[27,1097,1099],{"id":1098},"setidid","setId(id)",[15,1101,1102],{},"Set the character's ID. Also updates the private inventory ID to match.",[35,1104,1106],{"className":37,"code":1105,"language":39,"meta":40,"style":40},"character.setId(\"new_character_id\");\n",[42,1107,1108],{"__ignoreMap":40},[45,1109,1110,1112,1115,1117,1120],{"class":47,"line":48},[45,1111,623],{"class":62},[45,1113,1114],{"class":66},"setId",[45,1116,70],{"class":62},[45,1118,1119],{"class":73},"\"new_character_id\"",[45,1121,77],{"class":62},[19,1123],{},[22,1125,1127],{"id":1126},"trait-attribute-methods","Trait & Attribute Methods",[27,1129,1131],{"id":1130},"gettraitkey","getTrait(key)",[15,1133,1134],{},"Get a trait value.",[35,1136,1138],{"className":37,"code":1137,"language":39,"meta":40,"style":40},"const mood = character.getTrait(\"mood\");\n",[42,1139,1140],{"__ignoreMap":40},[45,1141,1142,1144,1147,1149,1151,1154,1156,1159],{"class":47,"line":48},[45,1143,52],{"class":51},[45,1145,1146],{"class":55}," mood",[45,1148,59],{"class":51},[45,1150,1090],{"class":62},[45,1152,1153],{"class":66},"getTrait",[45,1155,70],{"class":62},[45,1157,1158],{"class":73},"\"mood\"",[45,1160,77],{"class":62},[27,1162,1164],{"id":1163},"settraitkey-value","setTrait(key, value)",[15,1166,1167],{},"Set a trait value on the character's core status.",[35,1169,1171],{"className":37,"code":1170,"language":39,"meta":40,"style":40},"character.setTrait(\"mood\", \"happy\");\n",[42,1172,1173],{"__ignoreMap":40},[45,1174,1175,1177,1180,1182,1184,1186,1189],{"class":47,"line":48},[45,1176,623],{"class":62},[45,1178,1179],{"class":66},"setTrait",[45,1181,70],{"class":62},[45,1183,1158],{"class":73},[45,1185,218],{"class":62},[45,1187,1188],{"class":73},"\"happy\"",[45,1190,77],{"class":62},[27,1192,1194],{"id":1193},"getattributekey","getAttribute(key)",[15,1196,1197],{},"Get an attribute value.",[35,1199,1201],{"className":37,"code":1200,"language":39,"meta":40,"style":40},"const hairColor = character.getAttribute(\"hair_color\");\n",[42,1202,1203],{"__ignoreMap":40},[45,1204,1205,1207,1210,1212,1214,1217,1219,1222],{"class":47,"line":48},[45,1206,52],{"class":51},[45,1208,1209],{"class":55}," hairColor",[45,1211,59],{"class":51},[45,1213,1090],{"class":62},[45,1215,1216],{"class":66},"getAttribute",[45,1218,70],{"class":62},[45,1220,1221],{"class":73},"\"hair_color\"",[45,1223,77],{"class":62},[27,1225,1227],{"id":1226},"setattributekey-value","setAttribute(key, value)",[15,1229,1230],{},"Set an attribute value on the character's core status.",[35,1232,1234],{"className":37,"code":1233,"language":39,"meta":40,"style":40},"character.setAttribute(\"hair_color\", \"blonde\");\n",[42,1235,1236],{"__ignoreMap":40},[45,1237,1238,1240,1243,1245,1247,1249,1252],{"class":47,"line":48},[45,1239,623],{"class":62},[45,1241,1242],{"class":66},"setAttribute",[45,1244,70],{"class":62},[45,1246,1221],{"class":73},[45,1248,218],{"class":62},[45,1250,1251],{"class":73},"\"blonde\"",[45,1253,77],{"class":62},[27,1255,1257],{"id":1256},"getname","getName()",[15,1259,1260],{},"Get the character's display name (from 'name' trait).",[35,1262,1264],{"className":37,"code":1263,"language":39,"meta":40,"style":40},"const name = character.getName();\n",[42,1265,1266],{"__ignoreMap":40},[45,1267,1268,1270,1273,1275,1277,1279],{"class":47,"line":48},[45,1269,52],{"class":51},[45,1271,1272],{"class":55}," name",[45,1274,59],{"class":51},[45,1276,1090],{"class":62},[45,1278,141],{"class":66},[45,1280,106],{"class":62},[19,1282],{},[22,1284,1286],{"id":1285},"stat-resource-methods","Stat & Resource Methods",[27,1288,1290],{"id":1289},"getstatname","getStat(name)",[15,1292,1293],{},"Get a stat's computed value directly as a number. Works reactively in Vue templates and computed properties.",[35,1295,1297],{"className":37,"code":1296,"language":39,"meta":40,"style":40},"const maxHealth = character.getStat(\"health\");\n",[42,1298,1299],{"__ignoreMap":40},[45,1300,1301,1303,1306,1308,1310,1313,1315,1318],{"class":47,"line":48},[45,1302,52],{"class":51},[45,1304,1305],{"class":55}," maxHealth",[45,1307,59],{"class":51},[45,1309,1090],{"class":62},[45,1311,1312],{"class":66},"getStat",[45,1314,70],{"class":62},[45,1316,1317],{"class":73},"\"health\"",[45,1319,77],{"class":62},[27,1321,1323],{"id":1322},"setstatname-value","setStat(name, value)",[15,1325,1326],{},"Set the base value of a stat on the character's core status.",[35,1328,1330],{"className":37,"code":1329,"language":39,"meta":40,"style":40},"character.setStat(\"semen_collected_potency\", 42);\n",[42,1331,1332],{"__ignoreMap":40},[45,1333,1334,1336,1339,1341,1344,1346,1349],{"class":47,"line":48},[45,1335,623],{"class":62},[45,1337,1338],{"class":66},"setStat",[45,1340,70],{"class":62},[45,1342,1343],{"class":73},"\"semen_collected_potency\"",[45,1345,218],{"class":62},[45,1347,1348],{"class":55},"42",[45,1350,77],{"class":62},[27,1352,1354],{"id":1353},"getstatrefname","getStatRef(name)",[15,1356,1357,1358,1361],{},"Get a stat's reactive ComputedRef. Use when you need the ref itself (e.g., for ",[42,1359,1360],{},"watch()"," or storing).",[35,1363,1365],{"className":37,"code":1364,"language":39,"meta":40,"style":40},"const healthRef = character.getStatRef(\"health\");\nwatch(healthRef, (newVal) => console.log(\"Health changed:\", newVal));\n",[42,1366,1367,1387],{"__ignoreMap":40},[45,1368,1369,1371,1374,1376,1378,1381,1383,1385],{"class":47,"line":48},[45,1370,52],{"class":51},[45,1372,1373],{"class":55}," healthRef",[45,1375,59],{"class":51},[45,1377,1090],{"class":62},[45,1379,1380],{"class":66},"getStatRef",[45,1382,70],{"class":62},[45,1384,1317],{"class":73},[45,1386,77],{"class":62},[45,1388,1389,1392,1395,1398,1400,1402,1405,1407,1409,1412],{"class":47,"line":109},[45,1390,1391],{"class":66},"watch",[45,1393,1394],{"class":62},"(healthRef, (",[45,1396,1397],{"class":735},"newVal",[45,1399,739],{"class":62},[45,1401,742],{"class":51},[45,1403,1404],{"class":62}," console.",[45,1406,135],{"class":66},[45,1408,70],{"class":62},[45,1410,1411],{"class":73},"\"Health changed:\"",[45,1413,1414],{"class":62},", newVal));\n",[27,1416,1418],{"id":1417},"getresourcename","getResource(name)",[15,1420,1421],{},"Get the current value of a resource (e.g., current HP).",[35,1423,1425],{"className":37,"code":1424,"language":39,"meta":40,"style":40},"const currentHp = character.getResource(\"health\");\n",[42,1426,1427],{"__ignoreMap":40},[45,1428,1429,1431,1434,1436,1438,1441,1443,1445],{"class":47,"line":48},[45,1430,52],{"class":51},[45,1432,1433],{"class":55}," currentHp",[45,1435,59],{"class":51},[45,1437,1090],{"class":62},[45,1439,1440],{"class":66},"getResource",[45,1442,70],{"class":62},[45,1444,1317],{"class":73},[45,1446,77],{"class":62},[27,1448,1450],{"id":1449},"addresourcename-value","addResource(name, value)",[15,1452,1453],{},"Add to a resource value. Use negative to subtract. Value is clamped between 0 and max.",[35,1455,1457],{"className":37,"code":1456,"language":39,"meta":40,"style":40},"character.addResource(\"health\", -10); \u002F\u002F Take 10 damage\ncharacter.addResource(\"health\", 20);  \u002F\u002F Heal 20\n",[42,1458,1459,1482],{"__ignoreMap":40},[45,1460,1461,1463,1466,1468,1470,1472,1475,1477,1479],{"class":47,"line":48},[45,1462,623],{"class":62},[45,1464,1465],{"class":66},"addResource",[45,1467,70],{"class":62},[45,1469,1317],{"class":73},[45,1471,218],{"class":62},[45,1473,1474],{"class":51},"-",[45,1476,295],{"class":55},[45,1478,405],{"class":62},[45,1480,1481],{"class":195},"\u002F\u002F Take 10 damage\n",[45,1483,1484,1486,1488,1490,1492,1494,1497,1499],{"class":47,"line":109},[45,1485,623],{"class":62},[45,1487,1465],{"class":66},[45,1489,70],{"class":62},[45,1491,1317],{"class":73},[45,1493,218],{"class":62},[45,1495,1496],{"class":55},"20",[45,1498,486],{"class":62},[45,1500,1501],{"class":195},"\u002F\u002F Heal 20\n",[27,1503,1505],{"id":1504},"setresourcename-value","setResource(name, value)",[15,1507,1508],{},"Set a resource to a specific value. Value is clamped between 0 and max.",[35,1510,1512],{"className":37,"code":1511,"language":39,"meta":40,"style":40},"character.setResource(\"health\", 50);\n",[42,1513,1514],{"__ignoreMap":40},[45,1515,1516,1518,1521,1523,1525,1527,1530],{"class":47,"line":48},[45,1517,623],{"class":62},[45,1519,1520],{"class":66},"setResource",[45,1522,70],{"class":62},[45,1524,1317],{"class":73},[45,1526,218],{"class":62},[45,1528,1529],{"class":55},"50",[45,1531,77],{"class":62},[27,1533,1535],{"id":1534},"getresourcerationame","getResourceRatio(name)",[15,1537,1538],{},"Get the ratio of current resource to max stat value (0 to 1).",[35,1540,1542],{"className":37,"code":1541,"language":39,"meta":40,"style":40},"const healthPercent = character.getResourceRatio(\"health\"); \u002F\u002F 0.75 = 75%\n",[42,1543,1544],{"__ignoreMap":40},[45,1545,1546,1548,1551,1553,1555,1558,1560,1562,1564],{"class":47,"line":48},[45,1547,52],{"class":51},[45,1549,1550],{"class":55}," healthPercent",[45,1552,59],{"class":51},[45,1554,1090],{"class":62},[45,1556,1557],{"class":66},"getResourceRatio",[45,1559,70],{"class":62},[45,1561,1317],{"class":73},[45,1563,405],{"class":62},[45,1565,1566],{"class":195},"\u002F\u002F 0.75 = 75%\n",[19,1568],{},[22,1570,1572],{"id":1571},"status-methods","Status Methods",[27,1574,1576],{"id":1575},"getcorestatus","getCoreStatus()",[15,1578,1579],{},"Get the core status (first status, contains base character data).",[35,1581,1583],{"className":37,"code":1582,"language":39,"meta":40,"style":40},"const coreStatus = character.getCoreStatus();\n",[42,1584,1585],{"__ignoreMap":40},[45,1586,1587,1589,1592,1594,1596,1599],{"class":47,"line":48},[45,1588,52],{"class":51},[45,1590,1591],{"class":55}," coreStatus",[45,1593,59],{"class":51},[45,1595,1090],{"class":62},[45,1597,1598],{"class":66},"getCoreStatus",[45,1600,106],{"class":62},[27,1602,1604],{"id":1603},"addstatusstatus","addStatus(status)",[15,1606,1607,1608,1611],{},"Add a status effect. If status already exists and is stackable, adds stacks instead. Use ",[42,1609,1610],{},"game.createStatus(id)"," to build the Status instance from a registered template.",[35,1613,1615],{"className":37,"code":1614,"language":39,"meta":40,"style":40},"const poison = game.createStatus(\"poison\");\ncharacter.addStatus(poison);\n",[42,1616,1617,1637],{"__ignoreMap":40},[45,1618,1619,1621,1624,1626,1628,1630,1632,1635],{"class":47,"line":48},[45,1620,52],{"class":51},[45,1622,1623],{"class":55}," poison",[45,1625,59],{"class":51},[45,1627,63],{"class":62},[45,1629,611],{"class":66},[45,1631,70],{"class":62},[45,1633,1634],{"class":73},"\"poison\"",[45,1636,77],{"class":62},[45,1638,1639,1641,1643],{"class":47,"line":109},[45,1640,623],{"class":62},[45,1642,626],{"class":66},[45,1644,1645],{"class":62},"(poison);\n",[27,1647,1649],{"id":1648},"removestatusid","removeStatus(id)",[15,1651,1652],{},"Remove a status effect by ID.",[35,1654,1656],{"className":37,"code":1655,"language":39,"meta":40,"style":40},"character.removeStatus(\"poison\");\n",[42,1657,1658],{"__ignoreMap":40},[45,1659,1660,1662,1665,1667,1669],{"class":47,"line":48},[45,1661,623],{"class":62},[45,1663,1664],{"class":66},"removeStatus",[45,1666,70],{"class":62},[45,1668,1634],{"class":73},[45,1670,77],{"class":62},[27,1672,1674],{"id":1673},"getstatusid","getStatus(id)",[15,1676,1677],{},"Get a status by ID.",[35,1679,1681],{"className":37,"code":1680,"language":39,"meta":40,"style":40},"const status = character.getStatus(\"blessed\");\n",[42,1682,1683],{"__ignoreMap":40},[45,1684,1685,1687,1690,1692,1694,1697,1699,1702],{"class":47,"line":48},[45,1686,52],{"class":51},[45,1688,1689],{"class":55}," status",[45,1691,59],{"class":51},[45,1693,1090],{"class":62},[45,1695,1696],{"class":66},"getStatus",[45,1698,70],{"class":62},[45,1700,1701],{"class":73},"\"blessed\"",[45,1703,77],{"class":62},[27,1705,1015],{"id":1706},"getstatuses",[15,1708,1709],{},"Get all status effects on this character.",[35,1711,1713],{"className":37,"code":1712,"language":39,"meta":40,"style":40},"const statuses = character.getStatuses();\nconst boons = statuses.filter(s => s.tags?.includes('boon'));\n",[42,1714,1715,1731],{"__ignoreMap":40},[45,1716,1717,1719,1722,1724,1726,1729],{"class":47,"line":48},[45,1718,52],{"class":51},[45,1720,1721],{"class":55}," statuses",[45,1723,59],{"class":51},[45,1725,1090],{"class":62},[45,1727,1728],{"class":66},"getStatuses",[45,1730,106],{"class":62},[45,1732,1733,1735,1738,1740,1743,1746,1748,1751,1754,1757,1759,1761,1764],{"class":47,"line":109},[45,1734,52],{"class":51},[45,1736,1737],{"class":55}," boons",[45,1739,59],{"class":51},[45,1741,1742],{"class":62}," statuses.",[45,1744,1745],{"class":66},"filter",[45,1747,70],{"class":62},[45,1749,1750],{"class":735},"s",[45,1752,1753],{"class":51}," =>",[45,1755,1756],{"class":62}," s.tags?.",[45,1758,780],{"class":66},[45,1760,70],{"class":62},[45,1762,1763],{"class":73},"'boon'",[45,1765,1766],{"class":62},"));\n",[27,1768,1770],{"id":1769},"setstatusstacksstatusid-newstacks","setStatusStacks(statusId, newStacks)",[15,1772,1773],{},"Set a status's stack count with proper resource adjustment for replenishable stats.",[35,1775,1777],{"className":37,"code":1776,"language":39,"meta":40,"style":40},"character.setStatusStacks(\"power_buff\", 3);\n",[42,1778,1779],{"__ignoreMap":40},[45,1780,1781,1783,1786,1788,1791,1793,1796],{"class":47,"line":48},[45,1782,623],{"class":62},[45,1784,1785],{"class":66},"setStatusStacks",[45,1787,70],{"class":62},[45,1789,1790],{"class":73},"\"power_buff\"",[45,1792,218],{"class":62},[45,1794,1795],{"class":55},"3",[45,1797,77],{"class":62},[27,1799,1801],{"id":1800},"addstatusstacksstatusid-amount","addStatusStacks(statusId, amount?)",[15,1803,1804],{},"Add stacks to a status with proper resource adjustment. Returns true if stacks were added successfully.",[35,1806,1808],{"className":37,"code":1807,"language":39,"meta":40,"style":40},"character.addStatusStacks(\"poison\", 2);\n",[42,1809,1810],{"__ignoreMap":40},[45,1811,1812,1814,1817,1819,1821,1823,1826],{"class":47,"line":48},[45,1813,623],{"class":62},[45,1815,1816],{"class":66},"addStatusStacks",[45,1818,70],{"class":62},[45,1820,1634],{"class":73},[45,1822,218],{"class":62},[45,1824,1825],{"class":55},"2",[45,1827,77],{"class":62},[1829,1830,1831],"blockquote",{},[15,1832,1833,1837,1838,1841,1842,1845,1846,1849,1850,1853],{},[1834,1835,1836],"strong",{},"Note:"," Use ",[42,1839,1840],{},"setStatusStacks()"," and ",[42,1843,1844],{},"addStatusStacks()"," instead of ",[42,1847,1848],{},"status.currentStacks"," or ",[42,1851,1852],{},"status.addStacks()"," directly when you need replenishable resources (like health) to adjust with the stat change.",[19,1855],{},[22,1857,1859],{"id":1858},"skin-layer-methods","Skin Layer Methods",[27,1861,1863],{"id":1862},"addskinlayerslayers","addSkinLayers(layers)",[15,1865,1866],{},"Add skin layers to the character.",[35,1868,1870],{"className":37,"code":1869,"language":39,"meta":40,"style":40},"character.addSkinLayers([\"armor_plate\", \"helmet\"]);\n",[42,1871,1872],{"__ignoreMap":40},[45,1873,1874,1876,1879,1882,1885,1887,1890],{"class":47,"line":48},[45,1875,623],{"class":62},[45,1877,1878],{"class":66},"addSkinLayers",[45,1880,1881],{"class":62},"([",[45,1883,1884],{"class":73},"\"armor_plate\"",[45,1886,218],{"class":62},[45,1888,1889],{"class":73},"\"helmet\"",[45,1891,1892],{"class":62},"]);\n",[27,1894,1896],{"id":1895},"removeskinlayerslayers","removeSkinLayers(layers)",[15,1898,1899],{},"Remove skin layers from the character.",[35,1901,1903],{"className":37,"code":1902,"language":39,"meta":40,"style":40},"character.removeSkinLayers([\"armor_plate\", \"helmet\"]);\n",[42,1904,1905],{"__ignoreMap":40},[45,1906,1907,1909,1912,1914,1916,1918,1920],{"class":47,"line":48},[45,1908,623],{"class":62},[45,1910,1911],{"class":66},"removeSkinLayers",[45,1913,1881],{"class":62},[45,1915,1884],{"class":73},[45,1917,218],{"class":62},[45,1919,1889],{"class":73},[45,1921,1892],{"class":62},[27,1923,1925],{"id":1924},"getskinlayers","getSkinLayers()",[15,1927,1928],{},"Get the set of active skin layer IDs.",[35,1930,1932],{"className":37,"code":1931,"language":39,"meta":40,"style":40},"const layers = character.getSkinLayers();\n",[42,1933,1934],{"__ignoreMap":40},[45,1935,1936,1938,1941,1943,1945,1948],{"class":47,"line":48},[45,1937,52],{"class":51},[45,1939,1940],{"class":55}," layers",[45,1942,59],{"class":51},[45,1944,1090],{"class":62},[45,1946,1947],{"class":66},"getSkinLayers",[45,1949,106],{"class":62},[27,1951,1953],{"id":1952},"setskinlayerstylelayerid-styles","setSkinLayerStyle(layerId, styles)",[15,1955,1956],{},"Set (overwrite) the CSS style classes for a skin layer.",[35,1958,1960],{"className":37,"code":1959,"language":39,"meta":40,"style":40},"character.setSkinLayerStyle(\"face\", [\"blushing\", \"sweating\"]);\n",[42,1961,1962],{"__ignoreMap":40},[45,1963,1964,1966,1969,1971,1974,1977,1980,1982,1985],{"class":47,"line":48},[45,1965,623],{"class":62},[45,1967,1968],{"class":66},"setSkinLayerStyle",[45,1970,70],{"class":62},[45,1972,1973],{"class":73},"\"face\"",[45,1975,1976],{"class":62},", [",[45,1978,1979],{"class":73},"\"blushing\"",[45,1981,218],{"class":62},[45,1983,1984],{"class":73},"\"sweating\"",[45,1986,1892],{"class":62},[27,1988,1990],{"id":1989},"addskinlayerstylelayerid-styleclass","addSkinLayerStyle(layerId, styleClass)",[15,1992,1993],{},"Add a CSS style class to a skin layer.",[35,1995,1997],{"className":37,"code":1996,"language":39,"meta":40,"style":40},"character.addSkinLayerStyle(\"face\", \"blushing\");\n",[42,1998,1999],{"__ignoreMap":40},[45,2000,2001,2003,2006,2008,2010,2012,2014],{"class":47,"line":48},[45,2002,623],{"class":62},[45,2004,2005],{"class":66},"addSkinLayerStyle",[45,2007,70],{"class":62},[45,2009,1973],{"class":73},[45,2011,218],{"class":62},[45,2013,1979],{"class":73},[45,2015,77],{"class":62},[27,2017,2019],{"id":2018},"removeskinlayerstylelayerid-styleclass","removeSkinLayerStyle(layerId, styleClass)",[15,2021,2022],{},"Remove a CSS style class from a skin layer.",[35,2024,2026],{"className":37,"code":2025,"language":39,"meta":40,"style":40},"character.removeSkinLayerStyle(\"face\", \"blushing\");\n",[42,2027,2028],{"__ignoreMap":40},[45,2029,2030,2032,2035,2037,2039,2041,2043],{"class":47,"line":48},[45,2031,623],{"class":62},[45,2033,2034],{"class":66},"removeSkinLayerStyle",[45,2036,70],{"class":62},[45,2038,1973],{"class":73},[45,2040,218],{"class":62},[45,2042,1979],{"class":73},[45,2044,77],{"class":62},[19,2046],{},[22,2048,2050],{"id":2049},"skill-tree-methods","Skill Tree Methods",[27,2052,2054],{"id":2053},"addskilltreeskilltreeid","addSkillTree(skillTreeId)",[15,2056,2057],{},"Add a skill tree to this character's available skill trees.",[35,2059,2061],{"className":37,"code":2060,"language":39,"meta":40,"style":40},"character.addSkillTree(\"combat_skills\");\n",[42,2062,2063],{"__ignoreMap":40},[45,2064,2065,2067,2070,2072,2075],{"class":47,"line":48},[45,2066,623],{"class":62},[45,2068,2069],{"class":66},"addSkillTree",[45,2071,70],{"class":62},[45,2073,2074],{"class":73},"\"combat_skills\"",[45,2076,77],{"class":62},[27,2078,2080],{"id":2079},"removeskilltreeskilltreeid","removeSkillTree(skillTreeId)",[15,2082,2083],{},"Remove a skill tree from this character's available skill trees.",[35,2085,2087],{"className":37,"code":2086,"language":39,"meta":40,"style":40},"character.removeSkillTree(\"combat_skills\");\n",[42,2088,2089],{"__ignoreMap":40},[45,2090,2091,2093,2096,2098,2100],{"class":47,"line":48},[45,2092,623],{"class":62},[45,2094,2095],{"class":66},"removeSkillTree",[45,2097,70],{"class":62},[45,2099,2074],{"class":73},[45,2101,77],{"class":62},[27,2103,2105],{"id":2104},"learnskillskilltreeid-id-level","learnSkill(skillTreeId, id, level?)",[15,2107,2108],{},"Learn a skill. If already learned, increases level (up to max).",[35,2110,2112],{"className":37,"code":2111,"language":39,"meta":40,"style":40},"character.learnSkill(\"combat_skills\", \"fireball\", 1);\n",[42,2113,2114],{"__ignoreMap":40},[45,2115,2116,2118,2121,2123,2125,2127,2130,2132,2135],{"class":47,"line":48},[45,2117,623],{"class":62},[45,2119,2120],{"class":66},"learnSkill",[45,2122,70],{"class":62},[45,2124,2074],{"class":73},[45,2126,218],{"class":62},[45,2128,2129],{"class":73},"\"fireball\"",[45,2131,218],{"class":62},[45,2133,2134],{"class":55},"1",[45,2136,77],{"class":62},[27,2138,2140],{"id":2139},"unlearnskillskilltreeid-id","unlearnSkill(skillTreeId, id)",[15,2142,2143],{},"Unlearn a skill. Refunds currency if the skill tree has a refund_factor set.",[35,2145,2147],{"className":37,"code":2146,"language":39,"meta":40,"style":40},"character.unlearnSkill(\"combat_skills\", \"fireball\");\n",[42,2148,2149],{"__ignoreMap":40},[45,2150,2151,2153,2156,2158,2160,2162,2164],{"class":47,"line":48},[45,2152,623],{"class":62},[45,2154,2155],{"class":66},"unlearnSkill",[45,2157,70],{"class":62},[45,2159,2074],{"class":73},[45,2161,218],{"class":62},[45,2163,2129],{"class":73},[45,2165,77],{"class":62},[27,2167,2169],{"id":2168},"getskillstatusidskilltreeid-skillslotid","getSkillStatusId(skillTreeId, skillSlotId)",[15,2171,2172],{},"Generate a status ID for a skill.",[35,2174,2176],{"className":37,"code":2175,"language":39,"meta":40,"style":40},"const statusId = character.getSkillStatusId(\"combat\", \"fireball\");\n\u002F\u002F Returns: \"_skill_combat_fireball\"\n",[42,2177,2178,2203],{"__ignoreMap":40},[45,2179,2180,2182,2185,2187,2189,2192,2194,2197,2199,2201],{"class":47,"line":48},[45,2181,52],{"class":51},[45,2183,2184],{"class":55}," statusId",[45,2186,59],{"class":51},[45,2188,1090],{"class":62},[45,2190,2191],{"class":66},"getSkillStatusId",[45,2193,70],{"class":62},[45,2195,2196],{"class":73},"\"combat\"",[45,2198,218],{"class":62},[45,2200,2129],{"class":73},[45,2202,77],{"class":62},[45,2204,2205],{"class":47,"line":109},[45,2206,2207],{"class":195},"\u002F\u002F Returns: \"_skill_combat_fireball\"\n",[19,2209],{},[22,2211,2213],{"id":2212},"inventory-methods","Inventory Methods",[27,2215,2217],{"id":2216},"setprivateinventoryinventory","setPrivateInventory(inventory)",[15,2219,2220],{},"Set the character's private inventory.",[35,2222,2224],{"className":37,"code":2223,"language":39,"meta":40,"style":40},"character.setPrivateInventory(\"mc_backpack\");\n",[42,2225,2226],{"__ignoreMap":40},[45,2227,2228,2230,2233,2235,2238],{"class":47,"line":48},[45,2229,623],{"class":62},[45,2231,2232],{"class":66},"setPrivateInventory",[45,2234,70],{"class":62},[45,2236,2237],{"class":73},"\"mc_backpack\"",[45,2239,77],{"class":62},[27,2241,2243],{"id":2242},"getprivateinventory","getPrivateInventory()",[15,2245,2246],{},"Get the character's private inventory.",[35,2248,2250],{"className":37,"code":2249,"language":39,"meta":40,"style":40},"const inventory = character.getPrivateInventory();\n",[42,2251,2252],{"__ignoreMap":40},[45,2253,2254,2256,2259,2261,2263,2266],{"class":47,"line":48},[45,2255,52],{"class":51},[45,2257,2258],{"class":55}," inventory",[45,2260,59],{"class":51},[45,2262,1090],{"class":62},[45,2264,2265],{"class":66},"getPrivateInventory",[45,2267,106],{"class":62},[27,2269,2271],{"id":2270},"getpartyinventory","getPartyInventory()",[15,2273,2274],{},"Get the inventory to use for equipping items. Returns party inventory if in party, otherwise private inventory.",[35,2276,2278],{"className":37,"code":2277,"language":39,"meta":40,"style":40},"const inventory = character.getPartyInventory();\n",[42,2279,2280],{"__ignoreMap":40},[45,2281,2282,2284,2286,2288,2290,2293],{"class":47,"line":48},[45,2283,52],{"class":51},[45,2285,2258],{"class":55},[45,2287,59],{"class":51},[45,2289,1090],{"class":62},[45,2291,2292],{"class":66},"getPartyInventory",[45,2294,106],{"class":62},[27,2296,2298],{"id":2297},"getequippeditems","getEquippedItems()",[15,2300,2301],{},"Get all items currently equipped by this character.",[35,2303,2305],{"className":37,"code":2304,"language":39,"meta":40,"style":40},"const equipped = character.getEquippedItems();\n",[42,2306,2307],{"__ignoreMap":40},[45,2308,2309,2311,2314,2316,2318,2321],{"class":47,"line":48},[45,2310,52],{"class":51},[45,2312,2313],{"class":55}," equipped",[45,2315,59],{"class":51},[45,2317,1090],{"class":62},[45,2319,2320],{"class":66},"getEquippedItems",[45,2322,106],{"class":62},[27,2324,2326],{"id":2325},"equipitemitem-slotid-slotindex","equipItem(item, slotId?, slotIndex?)",[15,2328,2329],{},"Equip an item to this character. Accepts Item instance or uid string.",[35,2331,2333],{"className":37,"code":2332,"language":39,"meta":40,"style":40},"character.equipItem(\"item_uid_123\");           \u002F\u002F Auto-find slot\ncharacter.equipItem(swordItem);                \u002F\u002F Using Item instance\ncharacter.equipItem(\"item_uid_123\", \"weapon\"); \u002F\u002F Specific slot type\ncharacter.equipItem(\"item_uid_123\", \"ring\", 1); \u002F\u002F Specific slot index\n",[42,2334,2335,2353,2365,2385],{"__ignoreMap":40},[45,2336,2337,2339,2342,2344,2347,2350],{"class":47,"line":48},[45,2338,623],{"class":62},[45,2340,2341],{"class":66},"equipItem",[45,2343,70],{"class":62},[45,2345,2346],{"class":73},"\"item_uid_123\"",[45,2348,2349],{"class":62},");           ",[45,2351,2352],{"class":195},"\u002F\u002F Auto-find slot\n",[45,2354,2355,2357,2359,2362],{"class":47,"line":109},[45,2356,623],{"class":62},[45,2358,2341],{"class":66},[45,2360,2361],{"class":62},"(swordItem);                ",[45,2363,2364],{"class":195},"\u002F\u002F Using Item instance\n",[45,2366,2367,2369,2371,2373,2375,2377,2380,2382],{"class":47,"line":129},[45,2368,623],{"class":62},[45,2370,2341],{"class":66},[45,2372,70],{"class":62},[45,2374,2346],{"class":73},[45,2376,218],{"class":62},[45,2378,2379],{"class":73},"\"weapon\"",[45,2381,405],{"class":62},[45,2383,2384],{"class":195},"\u002F\u002F Specific slot type\n",[45,2386,2387,2389,2391,2393,2395,2397,2400,2402,2404,2406],{"class":47,"line":147},[45,2388,623],{"class":62},[45,2390,2341],{"class":66},[45,2392,70],{"class":62},[45,2394,2346],{"class":73},[45,2396,218],{"class":62},[45,2398,2399],{"class":73},"\"ring\"",[45,2401,218],{"class":62},[45,2403,2134],{"class":55},[45,2405,405],{"class":62},[45,2407,2408],{"class":195},"\u002F\u002F Specific slot index\n",[27,2410,2412],{"id":2411},"unequipitemitem","unequipItem(item)",[15,2414,2415],{},"Unequip an item from this character. Accepts Item instance or uid string.",[35,2417,2419],{"className":37,"code":2418,"language":39,"meta":40,"style":40},"character.unequipItem(\"item_uid_123\");\ncharacter.unequipItem(swordItem);\n",[42,2420,2421,2434],{"__ignoreMap":40},[45,2422,2423,2425,2428,2430,2432],{"class":47,"line":48},[45,2424,623],{"class":62},[45,2426,2427],{"class":66},"unequipItem",[45,2429,70],{"class":62},[45,2431,2346],{"class":73},[45,2433,77],{"class":62},[45,2435,2436,2438,2440],{"class":47,"line":109},[45,2437,623],{"class":62},[45,2439,2427],{"class":66},[45,2441,2442],{"class":62},"(swordItem);\n",[19,2444],{},[22,2446,2448],{"id":2447},"item-slot-methods","Item Slot Methods",[27,2450,2452],{"id":2451},"additemslotid-slotid-x-y","addItemSlot(id, slotId, x, y)",[15,2454,2455],{},"Add an equipment slot to the character.",[35,2457,2459],{"className":37,"code":2458,"language":39,"meta":40,"style":40},"character.addItemSlot(\"main_hand_1\", \"weapon_slot\", 100, 200);\n",[42,2460,2461],{"__ignoreMap":40},[45,2462,2463,2465,2468,2470,2473,2475,2478,2480,2482,2484,2487],{"class":47,"line":48},[45,2464,623],{"class":62},[45,2466,2467],{"class":66},"addItemSlot",[45,2469,70],{"class":62},[45,2471,2472],{"class":73},"\"main_hand_1\"",[45,2474,218],{"class":62},[45,2476,2477],{"class":73},"\"weapon_slot\"",[45,2479,218],{"class":62},[45,2481,289],{"class":55},[45,2483,218],{"class":62},[45,2485,2486],{"class":55},"200",[45,2488,77],{"class":62},[27,2490,2492],{"id":2491},"getitemslotbyidid","getItemSlotById(id)",[15,2494,2495],{},"Get an item slot by its unique ID.",[35,2497,2499],{"className":37,"code":2498,"language":39,"meta":40,"style":40},"const slot = character.getItemSlotById(\"main_hand_1\");\n",[42,2500,2501],{"__ignoreMap":40},[45,2502,2503,2505,2508,2510,2512,2515,2517,2519],{"class":47,"line":48},[45,2504,52],{"class":51},[45,2506,2507],{"class":55}," slot",[45,2509,59],{"class":51},[45,2511,1090],{"class":62},[45,2513,2514],{"class":66},"getItemSlotById",[45,2516,70],{"class":62},[45,2518,2472],{"class":73},[45,2520,77],{"class":62},[27,2522,2524],{"id":2523},"getitemslots","getItemSlots()",[15,2526,2527],{},"Get all item slots on this character.",[35,2529,2531],{"className":37,"code":2530,"language":39,"meta":40,"style":40},"const slots = character.getItemSlots();\n",[42,2532,2533],{"__ignoreMap":40},[45,2534,2535,2537,2540,2542,2544,2547],{"class":47,"line":48},[45,2536,52],{"class":51},[45,2538,2539],{"class":55}," slots",[45,2541,59],{"class":51},[45,2543,1090],{"class":62},[45,2545,2546],{"class":66},"getItemSlots",[45,2548,106],{"class":62},[27,2550,2552],{"id":2551},"removeitemslotslot","removeItemSlot(slot)",[15,2554,2555],{},"Remove an item slot from the character.",[35,2557,2559],{"className":37,"code":2558,"language":39,"meta":40,"style":40},"character.removeItemSlot(slot);\n",[42,2560,2561],{"__ignoreMap":40},[45,2562,2563,2565,2568],{"class":47,"line":48},[45,2564,623],{"class":62},[45,2566,2567],{"class":66},"removeItemSlot",[45,2569,2570],{"class":62},"(slot);\n",[27,2572,2574],{"id":2573},"getitemslotsbyslotidslotid","getItemSlotsBySlotId(slotId)",[15,2576,2577],{},"Get all item slots of a specific slot type.",[35,2579,2581],{"className":37,"code":2580,"language":39,"meta":40,"style":40},"const weaponSlots = character.getItemSlotsBySlotId(\"weapon_slot\");\n",[42,2582,2583],{"__ignoreMap":40},[45,2584,2585,2587,2590,2592,2594,2597,2599,2601],{"class":47,"line":48},[45,2586,52],{"class":51},[45,2588,2589],{"class":55}," weaponSlots",[45,2591,59],{"class":51},[45,2593,1090],{"class":62},[45,2595,2596],{"class":66},"getItemSlotsBySlotId",[45,2598,70],{"class":62},[45,2600,2477],{"class":73},[45,2602,77],{"class":62},[27,2604,2606],{"id":2605},"getavailableslotsforitemitem","getAvailableSlotsForItem(item)",[15,2608,2609],{},"Get all slots where an item can be equipped.",[35,2611,2613],{"className":37,"code":2612,"language":39,"meta":40,"style":40},"const availableSlots = character.getAvailableSlotsForItem(sword);\n",[42,2614,2615],{"__ignoreMap":40},[45,2616,2617,2619,2622,2624,2626,2629],{"class":47,"line":48},[45,2618,52],{"class":51},[45,2620,2621],{"class":55}," availableSlots",[45,2623,59],{"class":51},[45,2625,1090],{"class":62},[45,2627,2628],{"class":66},"getAvailableSlotsForItem",[45,2630,2631],{"class":62},"(sword);\n",[19,2633],{},[22,2635,2637],{"id":2636},"ability-methods","Ability Methods",[27,2639,2641],{"id":2640},"getabilities","getAbilities()",[15,2643,2644],{},"Get all final computed abilities (base + modifiers merged).",[35,2646,2648],{"className":37,"code":2647,"language":39,"meta":40,"style":40},"const abilities = character.getAbilities().value;\n\u002F\u002F {\n\u002F\u002F   fireball: {\n\u002F\u002F     meta: { name: \"Fireball\", icon: \"...\", cooldown_base: 3 },\n\u002F\u002F     effects: {\n\u002F\u002F       main_damage: { damage: 50, damage_type: \"fire\" }\n\u002F\u002F     }\n\u002F\u002F   }\n\u002F\u002F }\n",[42,2649,2650,2667,2672,2677,2682,2687,2692,2697,2702],{"__ignoreMap":40},[45,2651,2652,2654,2657,2659,2661,2664],{"class":47,"line":48},[45,2653,52],{"class":51},[45,2655,2656],{"class":55}," abilities",[45,2658,59],{"class":51},[45,2660,1090],{"class":62},[45,2662,2663],{"class":66},"getAbilities",[45,2665,2666],{"class":62},"().value;\n",[45,2668,2669],{"class":47,"line":109},[45,2670,2671],{"class":195},"\u002F\u002F {\n",[45,2673,2674],{"class":47,"line":129},[45,2675,2676],{"class":195},"\u002F\u002F   fireball: {\n",[45,2678,2679],{"class":47,"line":147},[45,2680,2681],{"class":195},"\u002F\u002F     meta: { name: \"Fireball\", icon: \"...\", cooldown_base: 3 },\n",[45,2683,2684],{"class":47,"line":243},[45,2685,2686],{"class":195},"\u002F\u002F     effects: {\n",[45,2688,2689],{"class":47,"line":249},[45,2690,2691],{"class":195},"\u002F\u002F       main_damage: { damage: 50, damage_type: \"fire\" }\n",[45,2693,2694],{"class":47,"line":271},[45,2695,2696],{"class":195},"\u002F\u002F     }\n",[45,2698,2699],{"class":47,"line":283},[45,2700,2701],{"class":195},"\u002F\u002F   }\n",[45,2703,2704],{"class":47,"line":300},[45,2705,2706],{"class":195},"\u002F\u002F }\n",[27,2708,2710],{"id":2709},"getabilityabilityid","getAbility(abilityId)",[15,2712,2713],{},"Get a specific computed ability by ID.",[35,2715,2717],{"className":37,"code":2716,"language":39,"meta":40,"style":40},"const fireball = character.getAbility(\"fireball\");\nfor (const effectId in fireball.effects) {\n  const aspects = fireball.effects[effectId];\n  console.log(effectId, aspects.damage);\n}\n",[42,2718,2719,2739,2756,2769,2778],{"__ignoreMap":40},[45,2720,2721,2723,2726,2728,2730,2733,2735,2737],{"class":47,"line":48},[45,2722,52],{"class":51},[45,2724,2725],{"class":55}," fireball",[45,2727,59],{"class":51},[45,2729,1090],{"class":62},[45,2731,2732],{"class":66},"getAbility",[45,2734,70],{"class":62},[45,2736,2129],{"class":73},[45,2738,77],{"class":62},[45,2740,2741,2743,2745,2747,2750,2753],{"class":47,"line":109},[45,2742,112],{"class":51},[45,2744,115],{"class":62},[45,2746,52],{"class":51},[45,2748,2749],{"class":55}," effectId",[45,2751,2752],{"class":51}," in",[45,2754,2755],{"class":62}," fireball.effects) {\n",[45,2757,2758,2761,2764,2766],{"class":47,"line":129},[45,2759,2760],{"class":51},"  const",[45,2762,2763],{"class":55}," aspects",[45,2765,59],{"class":51},[45,2767,2768],{"class":62}," fireball.effects[effectId];\n",[45,2770,2771,2773,2775],{"class":47,"line":147},[45,2772,132],{"class":62},[45,2774,135],{"class":66},[45,2776,2777],{"class":62},"(effectId, aspects.damage);\n",[45,2779,2780],{"class":47,"line":243},[45,2781,150],{"class":62},[27,2783,2785],{"id":2784},"getgroupedabilities","getGroupedAbilities()",[15,2787,2788,2789,709],{},"Get abilities organized by ability groups. Returns ",[42,2790,2791],{},"{ useGroups, groups }",[2793,2794,2795,2811],"ul",{},[2796,2797,2798,2799,2802,2803,2806,2807,2810],"li",{},"If no abilities have a ",[42,2800,2801],{},"group"," meta assigned, ",[42,2804,2805],{},"useGroups"," is ",[42,2808,2809],{},"false"," and all ability IDs are in a single flat group.",[2796,2812,2813,2814,2806,2816,1841,2818,2821],{},"If any ability has a group, ",[42,2815,2805],{},[42,2817,365],{},[42,2819,2820],{},"groups"," contains sorted groups with their ability IDs. Ungrouped abilities are logged as warnings and excluded.",[35,2823,2825],{"className":37,"code":2824,"language":39,"meta":40,"style":40},"const { useGroups, groups } = character.getGroupedAbilities();\n\nif (useGroups) {\n  for (const group of groups) {\n    console.log(group.name, group.abilityIds);\n  }\n} else {\n  \u002F\u002F Flat list — all abilities in groups[0].abilityIds\n  console.log(groups[0].abilityIds);\n}\n",[42,2826,2827,2853,2857,2864,2881,2891,2896,2906,2911,2926],{"__ignoreMap":40},[45,2828,2829,2831,2834,2836,2838,2840,2843,2846,2848,2851],{"class":47,"line":48},[45,2830,52],{"class":51},[45,2832,2833],{"class":62}," { ",[45,2835,2805],{"class":55},[45,2837,218],{"class":62},[45,2839,2820],{"class":55},[45,2841,2842],{"class":62}," } ",[45,2844,2845],{"class":51},"=",[45,2847,1090],{"class":62},[45,2849,2850],{"class":66},"getGroupedAbilities",[45,2852,106],{"class":62},[45,2854,2855],{"class":47,"line":109},[45,2856,240],{"emptyLinePlaceholder":239},[45,2858,2859,2861],{"class":47,"line":129},[45,2860,425],{"class":51},[45,2862,2863],{"class":62}," (useGroups) {\n",[45,2865,2866,2869,2871,2873,2876,2878],{"class":47,"line":147},[45,2867,2868],{"class":51},"  for",[45,2870,115],{"class":62},[45,2872,52],{"class":51},[45,2874,2875],{"class":55}," group",[45,2877,123],{"class":51},[45,2879,2880],{"class":62}," groups) {\n",[45,2882,2883,2886,2888],{"class":47,"line":243},[45,2884,2885],{"class":62},"    console.",[45,2887,135],{"class":66},[45,2889,2890],{"class":62},"(group.name, group.abilityIds);\n",[45,2892,2893],{"class":47,"line":249},[45,2894,2895],{"class":62},"  }\n",[45,2897,2898,2901,2904],{"class":47,"line":271},[45,2899,2900],{"class":62},"} ",[45,2902,2903],{"class":51},"else",[45,2905,745],{"class":62},[45,2907,2908],{"class":47,"line":283},[45,2909,2910],{"class":195},"  \u002F\u002F Flat list — all abilities in groups[0].abilityIds\n",[45,2912,2913,2915,2917,2920,2923],{"class":47,"line":300},[45,2914,132],{"class":62},[45,2916,135],{"class":66},[45,2918,2919],{"class":62},"(groups[",[45,2921,2922],{"class":55},"0",[45,2924,2925],{"class":62},"].abilityIds);\n",[45,2927,2928],{"class":47,"line":312},[45,2929,150],{"class":62},[19,2931],{},[22,2933,2935],{"id":2934},"utility-methods","Utility Methods",[27,2937,2939],{"id":2938},"updatedata","update(data)",[15,2941,2942],{},"Bulk update character data.",[35,2944,2946],{"className":37,"code":2945,"language":39,"meta":40,"style":40},"character.update({\n  stats: { strength: 10 },\n  traits: { mood: \"happy\" },\n  attributes: { hair_color: \"red\" }\n});\n",[42,2947,2948,2957,2965,2974,2984],{"__ignoreMap":40},[45,2949,2950,2952,2955],{"class":47,"line":48},[45,2951,623],{"class":62},[45,2953,2954],{"class":66},"update",[45,2956,653],{"class":62},[45,2958,2959,2961,2963],{"class":47,"line":109},[45,2960,669],{"class":62},[45,2962,295],{"class":55},[45,2964,280],{"class":62},[45,2966,2967,2970,2972],{"class":47,"line":129},[45,2968,2969],{"class":62},"  traits: { mood: ",[45,2971,1188],{"class":73},[45,2973,280],{"class":62},[45,2975,2976,2979,2982],{"class":47,"line":147},[45,2977,2978],{"class":62},"  attributes: { hair_color: ",[45,2980,2981],{"class":73},"\"red\"",[45,2983,309],{"class":62},[45,2985,2986],{"class":47,"line":243},[45,2987,315],{"class":62},[19,2989],{},[22,2991,2993],{"id":2992},"spine-animation-methods","Spine Animation Methods",[27,2995,2997],{"id":2996},"getspinetrackanimationsview","getSpineTrackAnimations(view?)",[15,2999,3000],{},"Get the current track-to-animation mapping based on character attributes. Animations are grouped by underscore prefix — each group plays on its own Spine track, driven by the matching attribute.",[35,3002,3004],{"className":37,"code":3003,"language":39,"meta":40,"style":40},"\u002F\u002F Spine has animations: \"body\", \"belly_0\", \"belly_1\", \"face_idle\", \"face_ahegao\"\n\u002F\u002F Character attributes: belly = \"1\", face = \"idle\"\n\u002F\u002F Result: { 0: \"body\", 1: \"belly_1\", 2: \"face_idle\" }\nconst trackMap = character.getSpineTrackAnimations();\n\n\u002F\u002F Change belly animation by setting the attribute:\ncharacter.setAttribute('belly', '2'); \u002F\u002F automatically plays belly_2 on track 1\n",[42,3005,3006,3011,3016,3021,3037,3041,3046],{"__ignoreMap":40},[45,3007,3008],{"class":47,"line":48},[45,3009,3010],{"class":195},"\u002F\u002F Spine has animations: \"body\", \"belly_0\", \"belly_1\", \"face_idle\", \"face_ahegao\"\n",[45,3012,3013],{"class":47,"line":109},[45,3014,3015],{"class":195},"\u002F\u002F Character attributes: belly = \"1\", face = \"idle\"\n",[45,3017,3018],{"class":47,"line":129},[45,3019,3020],{"class":195},"\u002F\u002F Result: { 0: \"body\", 1: \"belly_1\", 2: \"face_idle\" }\n",[45,3022,3023,3025,3028,3030,3032,3035],{"class":47,"line":147},[45,3024,52],{"class":51},[45,3026,3027],{"class":55}," trackMap",[45,3029,59],{"class":51},[45,3031,1090],{"class":62},[45,3033,3034],{"class":66},"getSpineTrackAnimations",[45,3036,106],{"class":62},[45,3038,3039],{"class":47,"line":243},[45,3040,240],{"emptyLinePlaceholder":239},[45,3042,3043],{"class":47,"line":249},[45,3044,3045],{"class":195},"\u002F\u002F Change belly animation by setting the attribute:\n",[45,3047,3048,3050,3052,3054,3057,3059,3062,3064],{"class":47,"line":271},[45,3049,623],{"class":62},[45,3051,1242],{"class":66},[45,3053,70],{"class":62},[45,3055,3056],{"class":73},"'belly'",[45,3058,218],{"class":62},[45,3060,3061],{"class":73},"'2'",[45,3063,405],{"class":62},[45,3065,3066],{"class":195},"\u002F\u002F automatically plays belly_2 on track 1\n",[27,3068,3070],{"id":3069},"hasspineanimationanimation-view","hasSpineAnimation(animation, view?)",[15,3072,3073,3074,3076],{},"Check if a spine animation exists for the given view. Returns ",[42,3075,2809],{}," if spine hasn't loaded yet.",[35,3078,3080],{"className":37,"code":3079,"language":39,"meta":40,"style":40},"if (character.hasSpineAnimation('belly_2', '')) {\n  character.setAttribute('belly', '2');\n}\n",[42,3081,3082,3104,3121],{"__ignoreMap":40},[45,3083,3084,3086,3089,3092,3094,3097,3099,3102],{"class":47,"line":48},[45,3085,425],{"class":51},[45,3087,3088],{"class":62}," (character.",[45,3090,3091],{"class":66},"hasSpineAnimation",[45,3093,70],{"class":62},[45,3095,3096],{"class":73},"'belly_2'",[45,3098,218],{"class":62},[45,3100,3101],{"class":73},"''",[45,3103,439],{"class":62},[45,3105,3106,3109,3111,3113,3115,3117,3119],{"class":47,"line":109},[45,3107,3108],{"class":62},"  character.",[45,3110,1242],{"class":66},[45,3112,70],{"class":62},[45,3114,3056],{"class":73},[45,3116,218],{"class":62},[45,3118,3061],{"class":73},[45,3120,77],{"class":62},[45,3122,3123],{"class":47,"line":129},[45,3124,150],{"class":62},[27,3126,3128],{"id":3127},"setavailablespineanimationsview-names","setAvailableSpineAnimations(view, names)",[15,3130,3131,3132,3135],{},"Register available animation names for a view. Called automatically by ",[42,3133,3134],{},"CharacterDollSpine"," on load — you normally don't call this directly.",[27,3137,3139],{"id":3138},"isspinecharacter","isSpineCharacter()",[15,3141,3142,3143,3145],{},"Returns ",[42,3144,365],{}," if the character has a default spine config.",[27,3147,3149],{"id":3148},"isspineforviewview","isSpineForView(view)",[15,3151,3152,3153,3156],{},"Check if a spine config exists for the given view (e.g. ",[42,3154,3155],{},"\"back\"",").",[27,3158,3160],{"id":3159},"getspineskins","getSpineSkins()",[15,3162,3163],{},"Returns an array of Spine skin names derived from the character's current attributes.",[19,3165],{},[22,3167,3169],{"id":3168},"status-interface","Status Interface",[15,3171,3172],{},"Status effects applied to characters.",[830,3174,3175,3185],{},[833,3176,3177],{},[836,3178,3179,3181,3183],{},[839,3180,841],{},[839,3182,844],{},[839,3184,847],{},[849,3186,3187,3199,3214,3228,3243,3262,3276,3291,3304,3317,3330],{},[836,3188,3189,3193,3197],{},[854,3190,3191],{},[42,3192,858],{},[854,3194,3195],{},[42,3196,863],{},[854,3198,866],{},[836,3200,3201,3206,3211],{},[854,3202,3203],{},[42,3204,3205],{},"maxStacks",[854,3207,3208],{},[42,3209,3210],{},"number",[854,3212,3213],{},"Max stack count (1 = non-stackable, -1 = unlimited)",[836,3215,3216,3221,3225],{},[854,3217,3218],{},[42,3219,3220],{},"currentStacks",[854,3222,3223],{},[42,3224,3210],{},[854,3226,3227],{},"Current stack count",[836,3229,3230,3235,3240],{},[854,3231,3232],{},[42,3233,3234],{},"isHidden",[854,3236,3237],{},[42,3238,3239],{},"boolean",[854,3241,3242],{},"Hidden from UI",[836,3244,3245,3250,3255],{},[854,3246,3247],{},[42,3248,3249],{},"tags",[854,3251,3252],{},[42,3253,3254],{},"string[]",[854,3256,3257,3258,3261],{},"Tags for categorizing\u002Ffiltering (e.g. ",[42,3259,3260],{},"'battle'",")",[836,3263,3264,3269,3273],{},[854,3265,3266],{},[42,3267,3268],{},"duration",[854,3270,3271],{},[42,3272,3210],{},[854,3274,3275],{},"Duration (-1 = permanent, interpretation depends on game\u002Fplugin)",[836,3277,3278,3283,3288],{},[854,3279,3280],{},[42,3281,3282],{},"stats",[854,3284,3285],{},[42,3286,3287],{},"Record\u003Cstring, number>",[854,3289,3290],{},"Stat modifiers",[836,3292,3293,3297,3301],{},[854,3294,3295],{},[42,3296,887],{},[854,3298,3299],{},[42,3300,892],{},[854,3302,3303],{},"Trait values",[836,3305,3306,3310,3314],{},[854,3307,3308],{},[42,3309,902],{},[854,3311,3312],{},[42,3313,907],{},[854,3315,3316],{},"Attribute values",[836,3318,3319,3323,3327],{},[854,3320,3321],{},[42,3322,917],{},[854,3324,3325],{},[42,3326,922],{},[854,3328,3329],{},"Skin layers added",[836,3331,3332,3336,3340],{},[854,3333,3334],{},[42,3335,932],{},[854,3337,3338],{},[42,3339,922],{},[854,3341,3342],{},"Abilities granted",[27,3344,1572],{"id":3345},"status-methods-1",[35,3347,3349],{"className":37,"code":3348,"language":39,"meta":40,"style":40},"\u002F\u002F Check if stackable and add stacks\nif (status.isStackable()) {\n  \u002F\u002F Use character.addStatusStacks() for proper resource adjustment\n  character.addStatusStacks(status.id, 2);\n\n  \u002F\u002F Or use status.addStacks() directly if you don't need resource adjustment\n  \u002F\u002F status.addStacks(2);\n}\n\n\u002F\u002F Add stat modifier\nstatus.addStat(\"strength\", 5);\n\n\u002F\u002F Set computed stats key\nstatus.setComputedStats(\"level_scaling\");\n\n\u002F\u002F Set values from template\nstatus.setValues({\n  stats: { strength: 10 },\n  traits: { name: \"Power Buff\" },\n  abilities: [\"power_strike\"]\n});\n",[42,3350,3351,3356,3369,3374,3387,3391,3396,3401,3405,3409,3414,3434,3438,3443,3457,3462,3468,3478,3487,3497,3509],{"__ignoreMap":40},[45,3352,3353],{"class":47,"line":48},[45,3354,3355],{"class":195},"\u002F\u002F Check if stackable and add stacks\n",[45,3357,3358,3360,3363,3366],{"class":47,"line":109},[45,3359,425],{"class":51},[45,3361,3362],{"class":62}," (status.",[45,3364,3365],{"class":66},"isStackable",[45,3367,3368],{"class":62},"()) {\n",[45,3370,3371],{"class":47,"line":129},[45,3372,3373],{"class":195},"  \u002F\u002F Use character.addStatusStacks() for proper resource adjustment\n",[45,3375,3376,3378,3380,3383,3385],{"class":47,"line":147},[45,3377,3108],{"class":62},[45,3379,1816],{"class":66},[45,3381,3382],{"class":62},"(status.id, ",[45,3384,1825],{"class":55},[45,3386,77],{"class":62},[45,3388,3389],{"class":47,"line":243},[45,3390,240],{"emptyLinePlaceholder":239},[45,3392,3393],{"class":47,"line":249},[45,3394,3395],{"class":195},"  \u002F\u002F Or use status.addStacks() directly if you don't need resource adjustment\n",[45,3397,3398],{"class":47,"line":271},[45,3399,3400],{"class":195},"  \u002F\u002F status.addStacks(2);\n",[45,3402,3403],{"class":47,"line":283},[45,3404,150],{"class":62},[45,3406,3407],{"class":47,"line":300},[45,3408,240],{"emptyLinePlaceholder":239},[45,3410,3411],{"class":47,"line":312},[45,3412,3413],{"class":195},"\u002F\u002F Add stat modifier\n",[45,3415,3416,3419,3422,3424,3427,3429,3432],{"class":47,"line":318},[45,3417,3418],{"class":62},"status.",[45,3420,3421],{"class":66},"addStat",[45,3423,70],{"class":62},[45,3425,3426],{"class":73},"\"strength\"",[45,3428,218],{"class":62},[45,3430,3431],{"class":55},"5",[45,3433,77],{"class":62},[45,3435,3436],{"class":47,"line":328},[45,3437,240],{"emptyLinePlaceholder":239},[45,3439,3440],{"class":47,"line":333},[45,3441,3442],{"class":195},"\u002F\u002F Set computed stats key\n",[45,3444,3445,3447,3450,3452,3455],{"class":47,"line":339},[45,3446,3418],{"class":62},[45,3448,3449],{"class":66},"setComputedStats",[45,3451,70],{"class":62},[45,3453,3454],{"class":73},"\"level_scaling\"",[45,3456,77],{"class":62},[45,3458,3460],{"class":47,"line":3459},15,[45,3461,240],{"emptyLinePlaceholder":239},[45,3463,3465],{"class":47,"line":3464},16,[45,3466,3467],{"class":195},"\u002F\u002F Set values from template\n",[45,3469,3471,3473,3476],{"class":47,"line":3470},17,[45,3472,3418],{"class":62},[45,3474,3475],{"class":66},"setValues",[45,3477,653],{"class":62},[45,3479,3481,3483,3485],{"class":47,"line":3480},18,[45,3482,669],{"class":62},[45,3484,295],{"class":55},[45,3486,280],{"class":62},[45,3488,3490,3492,3495],{"class":47,"line":3489},19,[45,3491,274],{"class":62},[45,3493,3494],{"class":73},"\"Power Buff\"",[45,3496,280],{"class":62},[45,3498,3500,3503,3506],{"class":47,"line":3499},20,[45,3501,3502],{"class":62},"  abilities: [",[45,3504,3505],{"class":73},"\"power_strike\"",[45,3507,3508],{"class":62},"]\n",[45,3510,3512],{"class":47,"line":3511},21,[45,3513,315],{"class":62},[19,3515],{},[22,3517,3519],{"id":3518},"itemslot-interface","ItemSlot Interface",[15,3521,3522],{},"Equipment slots on characters.",[830,3524,3525,3535],{},[833,3526,3527],{},[836,3528,3529,3531,3533],{},[839,3530,841],{},[839,3532,844],{},[839,3534,847],{},[849,3536,3537,3550,3564,3578,3592],{},[836,3538,3539,3543,3547],{},[854,3540,3541],{},[42,3542,858],{},[854,3544,3545],{},[42,3546,863],{},[854,3548,3549],{},"Unique slot instance ID",[836,3551,3552,3557,3561],{},[854,3553,3554],{},[42,3555,3556],{},"slotId",[854,3558,3559],{},[42,3560,863],{},[854,3562,3563],{},"Slot type ID (from item_slots schema)",[836,3565,3566,3571,3575],{},[854,3567,3568],{},[42,3569,3570],{},"x",[854,3572,3573],{},[42,3574,3210],{},[854,3576,3577],{},"X position for UI",[836,3579,3580,3585,3589],{},[854,3581,3582],{},[42,3583,3584],{},"y",[854,3586,3587],{},[42,3588,3210],{},[854,3590,3591],{},"Y position for UI",[836,3593,3594,3599,3603],{},[854,3595,3596],{},[42,3597,3598],{},"itemUid",[854,3600,3601],{},[42,3602,863],{},[854,3604,3605],{},"UID of equipped item (empty if none)",[35,3607,3609],{"className":37,"code":3608,"language":39,"meta":40,"style":40},"const slotDef = slot.getSlotObject(); \u002F\u002F Get slot type definition\n",[42,3610,3611],{"__ignoreMap":40},[45,3612,3613,3615,3618,3620,3623,3626,3629],{"class":47,"line":48},[45,3614,52],{"class":51},[45,3616,3617],{"class":55}," slotDef",[45,3619,59],{"class":51},[45,3621,3622],{"class":62}," slot.",[45,3624,3625],{"class":66},"getSlotObject",[45,3627,3628],{"class":62},"(); ",[45,3630,3631],{"class":195},"\u002F\u002F Get slot type definition\n",[19,3633],{},[22,3635,3637],{"id":3636},"characterskinlayerobject-interface","CharacterSkinLayerObject Interface",[15,3639,3640],{},"Skin layer data for rendering.",[830,3642,3643,3653],{},[833,3644,3645],{},[836,3646,3647,3649,3651],{},[839,3648,841],{},[839,3650,844],{},[839,3652,847],{},[849,3654,3655,3668,3681,3696,3710,3725,3739,3753],{},[836,3656,3657,3662,3666],{},[854,3658,3659],{},[42,3660,3661],{},"uid",[854,3663,3664],{},[42,3665,863],{},[854,3667,866],{},[836,3669,3670,3674,3678],{},[854,3671,3672],{},[42,3673,858],{},[854,3675,3676],{},[42,3677,863],{},[854,3679,3680],{},"Skin layer ID",[836,3682,3683,3688,3693],{},[854,3684,3685],{},[42,3686,3687],{},"z_index",[854,3689,3690],{},[42,3691,3692],{},"number?",[854,3694,3695],{},"Stacking order",[836,3697,3698,3702,3707],{},[854,3699,3700],{},[42,3701,902],{},[854,3703,3704],{},[42,3705,3706],{},"string[]?",[854,3708,3709],{},"Attributes controlling this layer",[836,3711,3712,3717,3722],{},[854,3713,3714],{},[42,3715,3716],{},"images",[854,3718,3719],{},[42,3720,3721],{},"Record\u003Cstring, any>?",[854,3723,3724],{},"Images for attribute combinations",[836,3726,3727,3732,3736],{},[854,3728,3729],{},[42,3730,3731],{},"masks",[854,3733,3734],{},[42,3735,3721],{},[854,3737,3738],{},"Mask definitions",[836,3740,3741,3746,3750],{},[854,3742,3743],{},[42,3744,3745],{},"styles",[854,3747,3748],{},[42,3749,3706],{},[854,3751,3752],{},"Default CSS classes",[836,3754,3755,3759,3763],{},[854,3756,3757],{},[42,3758,3249],{},[854,3760,3761],{},[42,3762,3706],{},[854,3764,3765],{},"Tags for filtering",[3767,3768,3769],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":40,"searchDepth":109,"depth":109,"links":3771},[3772,3785,3786,3790,3797,3806,3815,3823,3830,3838,3846,3851,3854,3862,3865,3866],{"id":24,"depth":109,"text":25,"children":3773},[3774,3775,3776,3777,3778,3779,3780,3781,3782,3783,3784],{"id":29,"depth":129,"text":30},{"id":80,"depth":129,"text":81},{"id":153,"depth":129,"text":154},{"id":181,"depth":129,"text":182},{"id":370,"depth":129,"text":371},{"id":411,"depth":129,"text":412},{"id":459,"depth":129,"text":460},{"id":504,"depth":129,"text":505},{"id":544,"depth":129,"text":545},{"id":584,"depth":129,"text":585},{"id":697,"depth":129,"text":698},{"id":827,"depth":109,"text":828},{"id":1065,"depth":109,"text":1066,"children":3787},[3788,3789],{"id":1069,"depth":129,"text":1070},{"id":1098,"depth":129,"text":1099},{"id":1126,"depth":109,"text":1127,"children":3791},[3792,3793,3794,3795,3796],{"id":1130,"depth":129,"text":1131},{"id":1163,"depth":129,"text":1164},{"id":1193,"depth":129,"text":1194},{"id":1226,"depth":129,"text":1227},{"id":1256,"depth":129,"text":1257},{"id":1285,"depth":109,"text":1286,"children":3798},[3799,3800,3801,3802,3803,3804,3805],{"id":1289,"depth":129,"text":1290},{"id":1322,"depth":129,"text":1323},{"id":1353,"depth":129,"text":1354},{"id":1417,"depth":129,"text":1418},{"id":1449,"depth":129,"text":1450},{"id":1504,"depth":129,"text":1505},{"id":1534,"depth":129,"text":1535},{"id":1571,"depth":109,"text":1572,"children":3807},[3808,3809,3810,3811,3812,3813,3814],{"id":1575,"depth":129,"text":1576},{"id":1603,"depth":129,"text":1604},{"id":1648,"depth":129,"text":1649},{"id":1673,"depth":129,"text":1674},{"id":1706,"depth":129,"text":1015},{"id":1769,"depth":129,"text":1770},{"id":1800,"depth":129,"text":1801},{"id":1858,"depth":109,"text":1859,"children":3816},[3817,3818,3819,3820,3821,3822],{"id":1862,"depth":129,"text":1863},{"id":1895,"depth":129,"text":1896},{"id":1924,"depth":129,"text":1925},{"id":1952,"depth":129,"text":1953},{"id":1989,"depth":129,"text":1990},{"id":2018,"depth":129,"text":2019},{"id":2049,"depth":109,"text":2050,"children":3824},[3825,3826,3827,3828,3829],{"id":2053,"depth":129,"text":2054},{"id":2079,"depth":129,"text":2080},{"id":2104,"depth":129,"text":2105},{"id":2139,"depth":129,"text":2140},{"id":2168,"depth":129,"text":2169},{"id":2212,"depth":109,"text":2213,"children":3831},[3832,3833,3834,3835,3836,3837],{"id":2216,"depth":129,"text":2217},{"id":2242,"depth":129,"text":2243},{"id":2270,"depth":129,"text":2271},{"id":2297,"depth":129,"text":2298},{"id":2325,"depth":129,"text":2326},{"id":2411,"depth":129,"text":2412},{"id":2447,"depth":109,"text":2448,"children":3839},[3840,3841,3842,3843,3844,3845],{"id":2451,"depth":129,"text":2452},{"id":2491,"depth":129,"text":2492},{"id":2523,"depth":129,"text":2524},{"id":2551,"depth":129,"text":2552},{"id":2573,"depth":129,"text":2574},{"id":2605,"depth":129,"text":2606},{"id":2636,"depth":109,"text":2637,"children":3847},[3848,3849,3850],{"id":2640,"depth":129,"text":2641},{"id":2709,"depth":129,"text":2710},{"id":2784,"depth":129,"text":2785},{"id":2934,"depth":109,"text":2935,"children":3852},[3853],{"id":2938,"depth":129,"text":2939},{"id":2992,"depth":109,"text":2993,"children":3855},[3856,3857,3858,3859,3860,3861],{"id":2996,"depth":129,"text":2997},{"id":3069,"depth":129,"text":3070},{"id":3127,"depth":129,"text":3128},{"id":3138,"depth":129,"text":3139},{"id":3148,"depth":129,"text":3149},{"id":3159,"depth":129,"text":3160},{"id":3168,"depth":109,"text":3169,"children":3863},[3864],{"id":3345,"depth":129,"text":1572},{"id":3518,"depth":109,"text":3519},{"id":3636,"depth":109,"text":3637},"md",{"plugin":3869,"category":3870,"page":3871},"global_essentials","characters","characters_api","\u002Fdocs\u002Fglobal_essentials\u002Fcharacters\u002Fcharacters_api",{"title":5,"description":17},"docs\u002Fglobal_essentials\u002Fcharacters\u002Fcharacters_api","MD2V8QnVlxEDb2o_4Iki7x2fVj9VJQdfdI7hAqxD9I4",1779582261259]