[{"data":1,"prerenderedAt":1597},["ShallowReactive",2],{"doc-global_essentials\u002Fmiscellaneous\u002Fproperties":3},{"id":4,"title":5,"body":6,"description":1588,"extension":1589,"meta":1590,"navigation":323,"path":1593,"seo":1594,"stem":1595,"__hash__":1596},"docs\u002Fdocs\u002Fglobal_essentials\u002Fmiscellaneous\u002Fproperties.md","Properties",{"type":7,"value":8,"toc":1557},"minimark",[9,13,22,29,32,37,42,45,49,52,55,57,61,160,162,166,169,201,203,207,214,234,238,252,256,358,362,369,422,424,428,438,445,554,558,562,570,574,580,584,676,678,682,686,711,714,875,877,881,886,889,921,925,928,955,959,962,1020,1022,1026,1030,1033,1093,1097,1100,1157,1161,1164,1194,1196,1200,1204,1207,1264,1273,1277,1280,1306,1308,1312,1316,1367,1371,1451,1455,1553],[10,11,5],"h1",{"id":12},"properties",[14,15,16,17,21],"p",{},"Properties serve as ",[18,19,20],"strong",{},"typed global variables"," for your game. Use them for game-wide values like currencies, settings, counters, and flags that need to persist across saves.",[14,23,24,25,28],{},"Properties are defined in the engine editor under ",[18,26,27],{},"General → Properties",".",[30,31],"hr",{},[33,34,36],"h2",{"id":35},"key-features","Key Features",[38,39,41],"h3",{"id":40},"auto-serializable-reactive","Auto-Serializable & Reactive",[14,43,44],{},"Properties are automatically saved and loaded with your game. Any changes trigger reactive updates in the UI - no manual save\u002Fload code needed.",[38,46,48],{"id":47},"live-schema-updates","Live Schema Updates",[14,50,51],{},"If you add a new property during development and a player loads an old save file where that property didn't exist yet, the game will automatically initialize the newly added property with its default value.",[14,53,54],{},"This means you can safely add new properties without breaking existing saves.",[30,56],{},[33,58,60],{"id":59},"property-types","Property Types",[62,63,64,80],"table",{},[65,66,67],"thead",{},[68,69,70,74,77],"tr",{},[71,72,73],"th",{},"Type",[71,75,76],{},"Description",[71,78,79],{},"Default",[81,82,83,100,115,130,145],"tbody",{},[68,84,85,92,95],{},[86,87,88],"td",{},[89,90,91],"code",{},"number",[86,93,94],{},"Numeric values with optional min\u002Fmax bounds",[86,96,97],{},[89,98,99],{},"0",[68,101,102,107,110],{},[86,103,104],{},[89,105,106],{},"string",[86,108,109],{},"Text values",[86,111,112],{},[89,113,114],{},"\"\"",[68,116,117,122,125],{},[86,118,119],{},[89,120,121],{},"boolean",[86,123,124],{},"True\u002Ffalse toggles",[86,126,127],{},[89,128,129],{},"false",[68,131,132,137,140],{},[86,133,134],{},[89,135,136],{},"array",[86,138,139],{},"Lists of values",[86,141,142],{},[89,143,144],{},"[]",[68,146,147,152,155],{},[86,148,149],{},[89,150,151],{},"object",[86,153,154],{},"Complex nested data (JSON)",[86,156,157],{},[89,158,159],{},"{}",[30,161],{},[33,163,165],{"id":164},"number-properties","Number Properties",[14,167,168],{},"Number properties support additional options:",[170,171,172,179,189,195],"ul",{},[173,174,175,178],"li",{},[18,176,177],{},"precision"," - Decimal places (0 = integers, 2 = two decimals)",[173,180,181,184,185,188],{},[18,182,183],{},"min_value"," \u002F ",[18,186,187],{},"max_value"," - Automatic clamping",[173,190,191,194],{},[18,192,193],{},"can_overflow"," - Allow exceeding max (still respects min)",[173,196,197,200],{},[18,198,199],{},"is_negative"," - UI hint that lower is better (e.g., damage taken)",[30,202],{},[33,204,206],{"id":205},"constant-properties","Constant Properties",[14,208,209,210,213],{},"Mark a property as ",[18,211,212],{},"constant"," to create immutable game values that:",[170,215,216,222,228],{},[173,217,218,221],{},[18,219,220],{},"Cannot be modified at runtime"," - Attempts to change the value will log a warning and be ignored",[173,223,224,227],{},[18,225,226],{},"Are excluded from save files"," - Smaller saves, and players always get the latest values",[173,229,230,233],{},[18,231,232],{},"Can be overridden in exisiting save files by mods"," - Perfect for base stats, multipliers, and config values",[38,235,237],{"id":236},"use-cases","Use Cases",[170,239,240,243,246,249],{},[173,241,242],{},"Base damage\u002Fhealth values that mods can tweak",[173,244,245],{},"Game balance multipliers",[173,247,248],{},"Configuration constants (e.g., max inventory size)",[173,250,251],{},"Reference values that should never change during gameplay",[38,253,255],{"id":254},"behavior","Behavior",[257,258,263],"pre",{"className":259,"code":260,"language":261,"meta":262,"style":262},"language-js shiki shiki-themes github-light github-dark","\u002F\u002F Attempting to modify a constant property:\ngame.getProperty(\"base_damage\").currentValue = 100;\n\u002F\u002F Console: \"Cannot modify constant property 'base_damage'\"\n\u002F\u002F Value remains unchanged\n\n\u002F\u002F Reading works normally:\nconst damage = game.getProperty(\"base_damage\").currentValue; \u002F\u002F Works fine\n","js","",[89,264,265,274,306,312,318,325,331],{"__ignoreMap":262},[266,267,270],"span",{"class":268,"line":269},"line",1,[266,271,273],{"class":272},"sJ8bj","\u002F\u002F Attempting to modify a constant property:\n",[266,275,277,281,285,288,292,295,299,303],{"class":268,"line":276},2,[266,278,280],{"class":279},"sVt8B","game.",[266,282,284],{"class":283},"sScJk","getProperty",[266,286,287],{"class":279},"(",[266,289,291],{"class":290},"sZZnC","\"base_damage\"",[266,293,294],{"class":279},").currentValue ",[266,296,298],{"class":297},"szBVR","=",[266,300,302],{"class":301},"sj4cs"," 100",[266,304,305],{"class":279},";\n",[266,307,309],{"class":268,"line":308},3,[266,310,311],{"class":272},"\u002F\u002F Console: \"Cannot modify constant property 'base_damage'\"\n",[266,313,315],{"class":268,"line":314},4,[266,316,317],{"class":272},"\u002F\u002F Value remains unchanged\n",[266,319,321],{"class":268,"line":320},5,[266,322,324],{"emptyLinePlaceholder":323},true,"\n",[266,326,328],{"class":268,"line":327},6,[266,329,330],{"class":272},"\u002F\u002F Reading works normally:\n",[266,332,334,337,340,343,346,348,350,352,355],{"class":268,"line":333},7,[266,335,336],{"class":297},"const",[266,338,339],{"class":301}," damage",[266,341,342],{"class":297}," =",[266,344,345],{"class":279}," game.",[266,347,284],{"class":283},[266,349,287],{"class":279},[266,351,291],{"class":290},[266,353,354],{"class":279},").currentValue; ",[266,356,357],{"class":272},"\u002F\u002F Works fine\n",[38,359,361],{"id":360},"checking-if-constant","Checking if Constant",[14,363,364,365,368],{},"Use the ",[89,366,367],{},"skipSave"," property to check if a property is constant:",[257,370,372],{"className":259,"code":371,"language":261,"meta":262,"style":262},"const prop = game.getProperty(\"base_damage\");\nif (prop.skipSave) {\n  console.log(\"This is a constant property\");\n}\n",[89,373,374,394,402,417],{"__ignoreMap":262},[266,375,376,378,381,383,385,387,389,391],{"class":268,"line":269},[266,377,336],{"class":297},[266,379,380],{"class":301}," prop",[266,382,342],{"class":297},[266,384,345],{"class":279},[266,386,284],{"class":283},[266,388,287],{"class":279},[266,390,291],{"class":290},[266,392,393],{"class":279},");\n",[266,395,396,399],{"class":268,"line":276},[266,397,398],{"class":297},"if",[266,400,401],{"class":279}," (prop.skipSave) {\n",[266,403,404,407,410,412,415],{"class":268,"line":308},[266,405,406],{"class":279},"  console.",[266,408,409],{"class":283},"log",[266,411,287],{"class":279},[266,413,414],{"class":290},"\"This is a constant property\"",[266,416,393],{"class":279},[266,418,419],{"class":268,"line":314},[266,420,421],{"class":279},"}\n",[30,423],{},[33,425,427],{"id":426},"default-value-behavior","Default Value Behavior",[14,429,430,433,434,437],{},[18,431,432],{},"Important:"," Changing the default value of a property that has already been initialized in a save file will ",[18,435,436],{},"not"," update that save value UNLESS it is flagged as 'constant'.",[14,439,440,441,444],{},"If you need to force a value change for non-constant properties in existing saves, use the ",[89,442,443],{},"game_initiated"," event:",[257,446,448],{"className":259,"code":447,"language":261,"meta":262,"style":262},"game.on(\"game_initiated\", () => {\n  \u002F\u002F Force update for existing saves if needed\n  if (game.isNewGame === false) {\n    let prop = game.getProperty(\"my_property\");\n    if (prop.currentValue === oldValue) {\n      prop.currentValue = newValue;\n    }\n  }\n});\n",[89,449,450,471,476,493,514,527,537,542,548],{"__ignoreMap":262},[266,451,452,454,457,459,462,465,468],{"class":268,"line":269},[266,453,280],{"class":279},[266,455,456],{"class":283},"on",[266,458,287],{"class":279},[266,460,461],{"class":290},"\"game_initiated\"",[266,463,464],{"class":279},", () ",[266,466,467],{"class":297},"=>",[266,469,470],{"class":279}," {\n",[266,472,473],{"class":268,"line":276},[266,474,475],{"class":272},"  \u002F\u002F Force update for existing saves if needed\n",[266,477,478,481,484,487,490],{"class":268,"line":308},[266,479,480],{"class":297},"  if",[266,482,483],{"class":279}," (game.isNewGame ",[266,485,486],{"class":297},"===",[266,488,489],{"class":301}," false",[266,491,492],{"class":279},") {\n",[266,494,495,498,501,503,505,507,509,512],{"class":268,"line":314},[266,496,497],{"class":297},"    let",[266,499,500],{"class":279}," prop ",[266,502,298],{"class":297},[266,504,345],{"class":279},[266,506,284],{"class":283},[266,508,287],{"class":279},[266,510,511],{"class":290},"\"my_property\"",[266,513,393],{"class":279},[266,515,516,519,522,524],{"class":268,"line":320},[266,517,518],{"class":297},"    if",[266,520,521],{"class":279}," (prop.currentValue ",[266,523,486],{"class":297},[266,525,526],{"class":279}," oldValue) {\n",[266,528,529,532,534],{"class":268,"line":327},[266,530,531],{"class":279},"      prop.currentValue ",[266,533,298],{"class":297},[266,535,536],{"class":279}," newValue;\n",[266,538,539],{"class":268,"line":333},[266,540,541],{"class":279},"    }\n",[266,543,545],{"class":268,"line":544},8,[266,546,547],{"class":279},"  }\n",[266,549,551],{"class":268,"line":550},9,[266,552,553],{"class":279},"});\n",[33,555,557],{"id":556},"accessing-properties-in-dungeons","Accessing Properties in Dungeons",[38,559,561],{"id":560},"conditions","Conditions",[257,563,568],{"className":564,"code":566,"language":567},[565],"language-text","_property(gold) > 100\n_property(settings.volume) >= 50\n","text",[89,569,566],{"__ignoreMap":262},[38,571,573],{"id":572},"placeholders","Placeholders",[257,575,578],{"className":576,"code":577,"language":567},[565],"You have |property(gold)| gold remaining.\nVolume: |property(settings.volume)|%\n",[89,579,577],{"__ignoreMap":262},[38,581,583],{"id":582},"actions","Actions",[257,585,587],{"className":259,"code":586,"language":261,"meta":262,"style":262},"\u002F\u002F String format (= set, > add, \u003C subtract)\n{ property: \"gold>100\" }           \u002F\u002F add 100 to gold\n{ property: \"score=0, lives\u003C1\" }   \u002F\u002F set score to 0, subtract 1 from lives\n\n\u002F\u002F Object format (for setting complex values)\n{ property: { settings: { volume: 80, theme: \"dark\" } } }\n",[89,588,589,594,614,631,635,640],{"__ignoreMap":262},[266,590,591],{"class":268,"line":269},[266,592,593],{"class":272},"\u002F\u002F String format (= set, > add, \u003C subtract)\n",[266,595,596,599,602,605,608,611],{"class":268,"line":276},[266,597,598],{"class":279},"{ ",[266,600,601],{"class":283},"property",[266,603,604],{"class":279},": ",[266,606,607],{"class":290},"\"gold>100\"",[266,609,610],{"class":279}," }           ",[266,612,613],{"class":272},"\u002F\u002F add 100 to gold\n",[266,615,616,618,620,622,625,628],{"class":268,"line":308},[266,617,598],{"class":279},[266,619,601],{"class":283},[266,621,604],{"class":279},[266,623,624],{"class":290},"\"score=0, lives\u003C1\"",[266,626,627],{"class":279}," }   ",[266,629,630],{"class":272},"\u002F\u002F set score to 0, subtract 1 from lives\n",[266,632,633],{"class":268,"line":314},[266,634,324],{"emptyLinePlaceholder":323},[266,636,637],{"class":268,"line":320},[266,638,639],{"class":272},"\u002F\u002F Object format (for setting complex values)\n",[266,641,642,644,646,649,652,654,657,659,662,665,668,670,673],{"class":268,"line":327},[266,643,598],{"class":279},[266,645,601],{"class":283},[266,647,648],{"class":279},": { ",[266,650,651],{"class":283},"settings",[266,653,648],{"class":279},[266,655,656],{"class":283},"volume",[266,658,604],{"class":279},[266,660,661],{"class":301},"80",[266,663,664],{"class":279},", ",[266,666,667],{"class":283},"theme",[266,669,604],{"class":279},[266,671,672],{"class":290},"\"dark\"",[266,674,675],{"class":279}," } } }\n",[30,677],{},[33,679,681],{"id":680},"api-reference","API Reference",[38,683,685],{"id":684},"getting-a-property","Getting a Property",[257,687,689],{"className":259,"code":688,"language":261,"meta":262,"style":262},"const reputation = game.getProperty(\"reputation\");\n",[89,690,691],{"__ignoreMap":262},[266,692,693,695,698,700,702,704,706,709],{"class":268,"line":269},[266,694,336],{"class":297},[266,696,697],{"class":301}," reputation",[266,699,342],{"class":297},[266,701,345],{"class":279},[266,703,284],{"class":283},[266,705,287],{"class":279},[266,707,708],{"class":290},"\"reputation\"",[266,710,393],{"class":279},[38,712,5],{"id":713},"properties-1",[62,715,716,727],{},[65,717,718],{},[68,719,720,723,725],{},[71,721,722],{},"Property",[71,724,73],{},[71,726,76],{},[81,728,729,743,758,787,801,816,831,845,861],{},[68,730,731,736,740],{},[86,732,733],{},[89,734,735],{},"id",[86,737,738],{},[89,739,106],{},[86,741,742],{},"Unique identifier",[68,744,745,750,755],{},[86,746,747],{},[89,748,749],{},"name",[86,751,752],{},[89,753,754],{},"string?",[86,756,757],{},"Display name",[68,759,760,765,769],{},[86,761,762],{},[89,763,764],{},"type",[86,766,767],{},[89,768,106],{},[86,770,771,664,774,664,777,664,780,783,784],{},[89,772,773],{},"'number'",[89,775,776],{},"'boolean'",[89,778,779],{},"'string'",[89,781,782],{},"'array'",", or ",[89,785,786],{},"'object'",[68,788,789,793,798],{},[86,790,791],{},[89,792,177],{},[86,794,795],{},[89,796,797],{},"number?",[86,799,800],{},"Decimal places (number type only)",[68,802,803,808,813],{},[86,804,805],{},[89,806,807],{},"isNegative",[86,809,810],{},[89,811,812],{},"boolean?",[86,814,815],{},"Whether lower values are better",[68,817,818,823,828],{},[86,819,820],{},[89,821,822],{},"defaultValue",[86,824,825],{},[89,826,827],{},"any",[86,829,830],{},"The initial default value",[68,832,833,838,842],{},[86,834,835],{},[89,836,837],{},"canOverflow",[86,839,840],{},[89,841,812],{},[86,843,844],{},"Whether value can exceed max",[68,846,847,851,855],{},[86,848,849],{},[89,850,367],{},[86,852,853],{},[89,854,121],{},[86,856,857,860],{},[89,858,859],{},"true"," if this is a constant property (readonly)",[68,862,863,868,872],{},[86,864,865],{},[89,866,867],{},"currentValue",[86,869,870],{},[89,871,827],{},[86,873,874],{},"The current value (get\u002Fset directly)",[30,876],{},[38,878,880],{"id":879},"value-methods","Value Methods",[882,883,885],"h4",{"id":884},"getcurrentvalue","getCurrentValue()",[14,887,888],{},"Get the current value.",[257,890,892],{"className":259,"code":891,"language":261,"meta":262,"style":262},"const value = game.getProperty(\"gold\").getCurrentValue();\n",[89,893,894],{"__ignoreMap":262},[266,895,896,898,901,903,905,907,909,912,915,918],{"class":268,"line":269},[266,897,336],{"class":297},[266,899,900],{"class":301}," value",[266,902,342],{"class":297},[266,904,345],{"class":279},[266,906,284],{"class":283},[266,908,287],{"class":279},[266,910,911],{"class":290},"\"gold\"",[266,913,914],{"class":279},").",[266,916,917],{"class":283},"getCurrentValue",[266,919,920],{"class":279},"();\n",[882,922,924],{"id":923},"setcurrentvaluevalue","setCurrentValue(value)",[14,926,927],{},"Set a new value. For numbers, automatically applies clamping and precision.",[257,929,931],{"className":259,"code":930,"language":261,"meta":262,"style":262},"game.getProperty(\"gold\").setCurrentValue(500);\n",[89,932,933],{"__ignoreMap":262},[266,934,935,937,939,941,943,945,948,950,953],{"class":268,"line":269},[266,936,280],{"class":279},[266,938,284],{"class":283},[266,940,287],{"class":279},[266,942,911],{"class":290},[266,944,914],{"class":279},[266,946,947],{"class":283},"setCurrentValue",[266,949,287],{"class":279},[266,951,952],{"class":301},"500",[266,954,393],{"class":279},[882,956,958],{"id":957},"addcurrentvalueamount-number-only","addCurrentValue(amount) - Number only",[14,960,961],{},"Add to the current value. Use negative numbers to subtract.",[257,963,965],{"className":259,"code":964,"language":261,"meta":262,"style":262},"game.getProperty(\"gold\").addCurrentValue(100);  \u002F\u002F gain 100\ngame.getProperty(\"gold\").addCurrentValue(-50);  \u002F\u002F lose 50\n",[89,966,967,993],{"__ignoreMap":262},[266,968,969,971,973,975,977,979,982,984,987,990],{"class":268,"line":269},[266,970,280],{"class":279},[266,972,284],{"class":283},[266,974,287],{"class":279},[266,976,911],{"class":290},[266,978,914],{"class":279},[266,980,981],{"class":283},"addCurrentValue",[266,983,287],{"class":279},[266,985,986],{"class":301},"100",[266,988,989],{"class":279},");  ",[266,991,992],{"class":272},"\u002F\u002F gain 100\n",[266,994,995,997,999,1001,1003,1005,1007,1009,1012,1015,1017],{"class":268,"line":276},[266,996,280],{"class":279},[266,998,284],{"class":283},[266,1000,287],{"class":279},[266,1002,911],{"class":290},[266,1004,914],{"class":279},[266,1006,981],{"class":283},[266,1008,287],{"class":279},[266,1010,1011],{"class":297},"-",[266,1013,1014],{"class":301},"50",[266,1016,989],{"class":279},[266,1018,1019],{"class":272},"\u002F\u002F lose 50\n",[30,1021],{},[38,1023,1025],{"id":1024},"minmax-methods-number-only","Min\u002FMax Methods (Number only)",[882,1027,1029],{"id":1028},"getminvalue-setminvaluevalue","getMinValue() \u002F setMinValue(value)",[14,1031,1032],{},"Get or set the minimum allowed value.",[257,1034,1036],{"className":259,"code":1035,"language":261,"meta":262,"style":262},"const min = game.getProperty(\"reputation\").getMinValue(); \u002F\u002F -100\ngame.getProperty(\"reputation\").setMinValue(-50); \u002F\u002F raise floor\n",[89,1037,1038,1066],{"__ignoreMap":262},[266,1039,1040,1042,1045,1047,1049,1051,1053,1055,1057,1060,1063],{"class":268,"line":269},[266,1041,336],{"class":297},[266,1043,1044],{"class":301}," min",[266,1046,342],{"class":297},[266,1048,345],{"class":279},[266,1050,284],{"class":283},[266,1052,287],{"class":279},[266,1054,708],{"class":290},[266,1056,914],{"class":279},[266,1058,1059],{"class":283},"getMinValue",[266,1061,1062],{"class":279},"(); ",[266,1064,1065],{"class":272},"\u002F\u002F -100\n",[266,1067,1068,1070,1072,1074,1076,1078,1081,1083,1085,1087,1090],{"class":268,"line":276},[266,1069,280],{"class":279},[266,1071,284],{"class":283},[266,1073,287],{"class":279},[266,1075,708],{"class":290},[266,1077,914],{"class":279},[266,1079,1080],{"class":283},"setMinValue",[266,1082,287],{"class":279},[266,1084,1011],{"class":297},[266,1086,1014],{"class":301},[266,1088,1089],{"class":279},"); ",[266,1091,1092],{"class":272},"\u002F\u002F raise floor\n",[882,1094,1096],{"id":1095},"getmaxvalue-setmaxvaluevalue","getMaxValue() \u002F setMaxValue(value)",[14,1098,1099],{},"Get or set the maximum allowed value.",[257,1101,1103],{"className":259,"code":1102,"language":261,"meta":262,"style":262},"const max = game.getProperty(\"reputation\").getMaxValue(); \u002F\u002F 100\ngame.getProperty(\"reputation\").setMaxValue(150); \u002F\u002F raise cap\n",[89,1104,1105,1132],{"__ignoreMap":262},[266,1106,1107,1109,1112,1114,1116,1118,1120,1122,1124,1127,1129],{"class":268,"line":269},[266,1108,336],{"class":297},[266,1110,1111],{"class":301}," max",[266,1113,342],{"class":297},[266,1115,345],{"class":279},[266,1117,284],{"class":283},[266,1119,287],{"class":279},[266,1121,708],{"class":290},[266,1123,914],{"class":279},[266,1125,1126],{"class":283},"getMaxValue",[266,1128,1062],{"class":279},[266,1130,1131],{"class":272},"\u002F\u002F 100\n",[266,1133,1134,1136,1138,1140,1142,1144,1147,1149,1152,1154],{"class":268,"line":276},[266,1135,280],{"class":279},[266,1137,284],{"class":283},[266,1139,287],{"class":279},[266,1141,708],{"class":290},[266,1143,914],{"class":279},[266,1145,1146],{"class":283},"setMaxValue",[266,1148,287],{"class":279},[266,1150,1151],{"class":301},"150",[266,1153,1089],{"class":279},[266,1155,1156],{"class":272},"\u002F\u002F raise cap\n",[882,1158,1160],{"id":1159},"addminvalueamount-addmaxvalueamount","addMinValue(amount) \u002F addMaxValue(amount)",[14,1162,1163],{},"Adjust min\u002Fmax by an amount.",[257,1165,1167],{"className":259,"code":1166,"language":261,"meta":262,"style":262},"game.getProperty(\"reputation\").addMaxValue(20); \u002F\u002F increase cap by 20\n",[89,1168,1169],{"__ignoreMap":262},[266,1170,1171,1173,1175,1177,1179,1181,1184,1186,1189,1191],{"class":268,"line":269},[266,1172,280],{"class":279},[266,1174,284],{"class":283},[266,1176,287],{"class":279},[266,1178,708],{"class":290},[266,1180,914],{"class":279},[266,1182,1183],{"class":283},"addMaxValue",[266,1185,287],{"class":279},[266,1187,1188],{"class":301},"20",[266,1190,1089],{"class":279},[266,1192,1193],{"class":272},"\u002F\u002F increase cap by 20\n",[30,1195],{},[38,1197,1199],{"id":1198},"utility-methods","Utility Methods",[882,1201,1203],{"id":1202},"getratio-number-only","getRatio() - Number only",[14,1205,1206],{},"Get the ratio of current value to maximum (0.0 to 1.0). Useful for progress bars.",[257,1208,1210],{"className":259,"code":1209,"language":261,"meta":262,"style":262},"const ratio = game.getProperty(\"reputation\").getRatio(); \u002F\u002F 0.75 = 75%\nconst barWidth = ratio * 100 + \"%\";\n",[89,1211,1212,1239],{"__ignoreMap":262},[266,1213,1214,1216,1219,1221,1223,1225,1227,1229,1231,1234,1236],{"class":268,"line":269},[266,1215,336],{"class":297},[266,1217,1218],{"class":301}," ratio",[266,1220,342],{"class":297},[266,1222,345],{"class":279},[266,1224,284],{"class":283},[266,1226,287],{"class":279},[266,1228,708],{"class":290},[266,1230,914],{"class":279},[266,1232,1233],{"class":283},"getRatio",[266,1235,1062],{"class":279},[266,1237,1238],{"class":272},"\u002F\u002F 0.75 = 75%\n",[266,1240,1241,1243,1246,1248,1251,1254,1256,1259,1262],{"class":268,"line":276},[266,1242,336],{"class":297},[266,1244,1245],{"class":301}," barWidth",[266,1247,342],{"class":297},[266,1249,1250],{"class":279}," ratio ",[266,1252,1253],{"class":297},"*",[266,1255,302],{"class":301},[266,1257,1258],{"class":297}," +",[266,1260,1261],{"class":290}," \"%\"",[266,1263,305],{"class":279},[14,1265,1266,1267,1270,1271,28],{},"Returns ",[89,1268,1269],{},"1"," if max is not set or is ",[89,1272,99],{},[882,1274,1276],{"id":1275},"switch-boolean-only","switch() - Boolean only",[14,1278,1279],{},"Toggle between true and false.",[257,1281,1283],{"className":259,"code":1282,"language":261,"meta":262,"style":262},"game.getProperty(\"dark_mode\").switch(); \u002F\u002F toggle on\u002Foff\n",[89,1284,1285],{"__ignoreMap":262},[266,1286,1287,1289,1291,1293,1296,1298,1301,1303],{"class":268,"line":269},[266,1288,280],{"class":279},[266,1290,284],{"class":283},[266,1292,287],{"class":279},[266,1294,1295],{"class":290},"\"dark_mode\"",[266,1297,914],{"class":279},[266,1299,1300],{"class":283},"switch",[266,1302,1062],{"class":279},[266,1304,1305],{"class":272},"\u002F\u002F toggle on\u002Foff\n",[30,1307],{},[33,1309,1311],{"id":1310},"examples","Examples",[38,1313,1315],{"id":1314},"reputation-system","Reputation System",[257,1317,1319],{"className":259,"code":1318,"language":261,"meta":262,"style":262},"\u002F\u002F Check if player can afford something\nconst reputation = game.getProperty(\"reputation\");\nif (reputation.currentValue >= 100) {\n  \u002F\u002F give item\n}\n",[89,1320,1321,1326,1344,1358,1363],{"__ignoreMap":262},[266,1322,1323],{"class":268,"line":269},[266,1324,1325],{"class":272},"\u002F\u002F Check if player can afford something\n",[266,1327,1328,1330,1332,1334,1336,1338,1340,1342],{"class":268,"line":276},[266,1329,336],{"class":297},[266,1331,697],{"class":301},[266,1333,342],{"class":297},[266,1335,345],{"class":279},[266,1337,284],{"class":283},[266,1339,287],{"class":279},[266,1341,708],{"class":290},[266,1343,393],{"class":279},[266,1345,1346,1348,1351,1354,1356],{"class":268,"line":308},[266,1347,398],{"class":297},[266,1349,1350],{"class":279}," (reputation.currentValue ",[266,1352,1353],{"class":297},">=",[266,1355,302],{"class":301},[266,1357,492],{"class":279},[266,1359,1360],{"class":268,"line":314},[266,1361,1362],{"class":272},"  \u002F\u002F give item\n",[266,1364,1365],{"class":268,"line":320},[266,1366,421],{"class":279},[38,1368,1370],{"id":1369},"settings-object","Settings Object",[257,1372,1374],{"className":259,"code":1373,"language":261,"meta":262,"style":262},"\u002F\u002F Store complex settings\nconst settings = game.getProperty(\"settings\");\nsettings.currentValue = {\n  volume: 80,\n  theme: \"dark\",\n  notifications: true\n};\n\n\u002F\u002F Access nested value in conditions: _property(settings.volume) > 50\n",[89,1375,1376,1381,1401,1410,1420,1429,1437,1442,1446],{"__ignoreMap":262},[266,1377,1378],{"class":268,"line":269},[266,1379,1380],{"class":272},"\u002F\u002F Store complex settings\n",[266,1382,1383,1385,1388,1390,1392,1394,1396,1399],{"class":268,"line":276},[266,1384,336],{"class":297},[266,1386,1387],{"class":301}," settings",[266,1389,342],{"class":297},[266,1391,345],{"class":279},[266,1393,284],{"class":283},[266,1395,287],{"class":279},[266,1397,1398],{"class":290},"\"settings\"",[266,1400,393],{"class":279},[266,1402,1403,1406,1408],{"class":268,"line":308},[266,1404,1405],{"class":279},"settings.currentValue ",[266,1407,298],{"class":297},[266,1409,470],{"class":279},[266,1411,1412,1415,1417],{"class":268,"line":314},[266,1413,1414],{"class":279},"  volume: ",[266,1416,661],{"class":301},[266,1418,1419],{"class":279},",\n",[266,1421,1422,1425,1427],{"class":268,"line":320},[266,1423,1424],{"class":279},"  theme: ",[266,1426,672],{"class":290},[266,1428,1419],{"class":279},[266,1430,1431,1434],{"class":268,"line":327},[266,1432,1433],{"class":279},"  notifications: ",[266,1435,1436],{"class":301},"true\n",[266,1438,1439],{"class":268,"line":333},[266,1440,1441],{"class":279},"};\n",[266,1443,1444],{"class":268,"line":544},[266,1445,324],{"emptyLinePlaceholder":323},[266,1447,1448],{"class":268,"line":550},[266,1449,1450],{"class":272},"\u002F\u002F Access nested value in conditions: _property(settings.volume) > 50\n",[38,1452,1454],{"id":1453},"progress-tracking","Progress Tracking",[257,1456,1458],{"className":259,"code":1457,"language":261,"meta":262,"style":262},"\u002F\u002F Track completion with min\u002Fmax\nconst progress = game.getProperty(\"chapter_progress\");\nprogress.setMaxValue(10); \u002F\u002F 10 objectives\nprogress.addCurrentValue(1); \u002F\u002F complete one\n\n\u002F\u002F Show progress bar\nconst percent = progress.getRatio() * 100; \u002F\u002F 10%, 20%, etc.\n",[89,1459,1460,1465,1485,1502,1517,1521,1526],{"__ignoreMap":262},[266,1461,1462],{"class":268,"line":269},[266,1463,1464],{"class":272},"\u002F\u002F Track completion with min\u002Fmax\n",[266,1466,1467,1469,1472,1474,1476,1478,1480,1483],{"class":268,"line":276},[266,1468,336],{"class":297},[266,1470,1471],{"class":301}," progress",[266,1473,342],{"class":297},[266,1475,345],{"class":279},[266,1477,284],{"class":283},[266,1479,287],{"class":279},[266,1481,1482],{"class":290},"\"chapter_progress\"",[266,1484,393],{"class":279},[266,1486,1487,1490,1492,1494,1497,1499],{"class":268,"line":308},[266,1488,1489],{"class":279},"progress.",[266,1491,1146],{"class":283},[266,1493,287],{"class":279},[266,1495,1496],{"class":301},"10",[266,1498,1089],{"class":279},[266,1500,1501],{"class":272},"\u002F\u002F 10 objectives\n",[266,1503,1504,1506,1508,1510,1512,1514],{"class":268,"line":314},[266,1505,1489],{"class":279},[266,1507,981],{"class":283},[266,1509,287],{"class":279},[266,1511,1269],{"class":301},[266,1513,1089],{"class":279},[266,1515,1516],{"class":272},"\u002F\u002F complete one\n",[266,1518,1519],{"class":268,"line":320},[266,1520,324],{"emptyLinePlaceholder":323},[266,1522,1523],{"class":268,"line":327},[266,1524,1525],{"class":272},"\u002F\u002F Show progress bar\n",[266,1527,1528,1530,1533,1535,1538,1540,1543,1545,1547,1550],{"class":268,"line":333},[266,1529,336],{"class":297},[266,1531,1532],{"class":301}," percent",[266,1534,342],{"class":297},[266,1536,1537],{"class":279}," progress.",[266,1539,1233],{"class":283},[266,1541,1542],{"class":279},"() ",[266,1544,1253],{"class":297},[266,1546,302],{"class":301},[266,1548,1549],{"class":279},"; ",[266,1551,1552],{"class":272},"\u002F\u002F 10%, 20%, etc.\n",[1554,1555,1556],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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 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 .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);}",{"title":262,"searchDepth":276,"depth":276,"links":1558},[1559,1563,1564,1565,1570,1571,1576,1583],{"id":35,"depth":276,"text":36,"children":1560},[1561,1562],{"id":40,"depth":308,"text":41},{"id":47,"depth":308,"text":48},{"id":59,"depth":276,"text":60},{"id":164,"depth":276,"text":165},{"id":205,"depth":276,"text":206,"children":1566},[1567,1568,1569],{"id":236,"depth":308,"text":237},{"id":254,"depth":308,"text":255},{"id":360,"depth":308,"text":361},{"id":426,"depth":276,"text":427},{"id":556,"depth":276,"text":557,"children":1572},[1573,1574,1575],{"id":560,"depth":308,"text":561},{"id":572,"depth":308,"text":573},{"id":582,"depth":308,"text":583},{"id":680,"depth":276,"text":681,"children":1577},[1578,1579,1580,1581,1582],{"id":684,"depth":308,"text":685},{"id":713,"depth":308,"text":5},{"id":879,"depth":308,"text":880},{"id":1024,"depth":308,"text":1025},{"id":1198,"depth":308,"text":1199},{"id":1310,"depth":276,"text":1311,"children":1584},[1585,1586,1587],{"id":1314,"depth":308,"text":1315},{"id":1369,"depth":308,"text":1370},{"id":1453,"depth":308,"text":1454},"Properties serve as typed global variables for your game. Use them for game-wide values like currencies, settings, counters, and flags that need to persist across saves.","md",{"plugin":1591,"category":1592,"page":12},"global_essentials","miscellaneous","\u002Fdocs\u002Fglobal_essentials\u002Fmiscellaneous\u002Fproperties",{"title":5,"description":1588},"docs\u002Fglobal_essentials\u002Fmiscellaneous\u002Fproperties","qGDOGryTUkKQIfaFDlsX57qI-mE53DR9WvkYX2BYUBE",1779582261505]