Autoraise: true ColorDiffuse: b: 1.0 g: 1.0 r: 1.0 CustomImage: CustomToken: MergeDistancePixels: 15.0 Stackable: false StandUp: false Thickness: 0.2 ImageScalar: 1.0 ImageSecondaryURL: '' ImageURL: http://cloud-3.steamusercontent.com/ugc/1746813422552892356/271AF704E848C2542888FF3F9ED3583195A8CAF4/ WidthScale: 0.0 Description: '' DragSelectable: true GMNotes: '' GUID: d1759b Grid: true GridProjection: false Hands: false HideWhenFaceDown: false IgnoreFoW: false LayoutGroupSortIndex: 0 Locked: false LuaScript: !include 'Custom_Token Cyclopean Foundations Campaign Log 1 d1759b.ttslua' LuaScriptState: '{"checkbox":[],"counter":[{"hideBG":true,"pos":[-1.08,0.1,-1.01],"size":800,"value":0},{"hideBG":true,"pos":[-1.27,0.1,-0.79],"size":600,"value":0},{"hideBG":true,"pos":[-1,0.1,-0.79],"size":600,"value":0},{"hideBG":true,"pos":[-0.251,0.1,-1.01],"size":800,"value":0},{"hideBG":true,"pos":[-0.441,0.1,-0.79],"size":600,"value":0},{"hideBG":true,"pos":[-0.171,0.1,-0.79],"size":600,"value":0},{"hideBG":true,"pos":[0.579,0.1,-1.01],"size":800,"value":0},{"hideBG":true,"pos":[0.389,0.1,-0.79],"size":600,"value":0},{"hideBG":true,"pos":[0.659,0.1,-0.79],"size":600,"value":0},{"hideBG":true,"pos":[1.407,0.1,-1.01],"size":800,"value":0},{"hideBG":true,"pos":[1.217,0.1,-0.79],"size":600,"value":0},{"hideBG":true,"pos":[1.487,0.1,-0.79],"size":600,"value":0}],"textbox":[{"alignment":2,"font_size":300,"label":"Empty","pos":[-1.265,0.1,-1.39],"rows":1,"value":"","width":3800},{"alignment":2,"font_size":300,"label":"Empty","pos":[-1.265,0.1,-1.195],"rows":1,"value":"","width":3800},{"alignment":2,"font_size":300,"label":"Empty","pos":[-1.265,0.1,-0.42],"rows":7,"value":"","width":3800},{"alignment":2,"font_size":300,"label":"Empty","pos":[-0.436,0.1,-1.39],"rows":1,"value":"","width":3800},{"alignment":2,"font_size":300,"label":"Empty","pos":[-0.436,0.1,-1.195],"rows":1,"value":"","width":3800},{"alignment":2,"font_size":300,"label":"Empty","pos":[-0.436,0.1,-0.42],"rows":7,"value":"","width":3800},{"alignment":2,"font_size":300,"label":"Empty","pos":[0.394,0.1,-1.39],"rows":1,"value":"","width":3800},{"alignment":2,"font_size":300,"label":"Empty","pos":[0.394,0.1,-1.195],"rows":1,"value":"","width":3800},{"alignment":2,"font_size":300,"label":"Empty","pos":[0.394,0.1,-0.42],"rows":7,"value":"","width":3800},{"alignment":2,"font_size":300,"label":"Empty","pos":[1.222,0.1,-1.39],"rows":1,"value":"","width":3800},{"alignment":2,"font_size":300,"label":"Empty","pos":[1.222,0.1,-1.195],"rows":1,"value":"","width":3800},{"alignment":2,"font_size":300,"label":"Empty","pos":[1.222,0.1,-0.42],"rows":7,"value":"","width":3800},{"alignment":2,"font_size":300,"label":"Empty","pos":[-0.93,0.1,0.982],"rows":25,"value":"","width":7800},{"alignment":2,"font_size":300,"label":"Empty","pos":[0.82,0.1,0.707],"rows":20,"value":"","width":7800},{"alignment":2,"font_size":300,"label":"Empty","pos":[1.01,0.1,1.7],"rows":5,"value":"","width":7400}]}' MeasureMovement: false Name: Custom_Token Nickname: Cyclopean Foundations Campaign Log 1 Snap: true States: '2': Autoraise: true ColorDiffuse: b: 1.0 g: 1.0 r: 1.0 CustomImage: CustomToken: MergeDistancePixels: 15.0 Stackable: false StandUp: false Thickness: 0.2 ImageScalar: 1.0 ImageSecondaryURL: '' ImageURL: http://cloud-3.steamusercontent.com/ugc/1746813561756453431/F430752BBFBB38B8BD332A3A35E81ED6CD670FC8/ WidthScale: 0.0 Description: '' DragSelectable: true GMNotes: '' GUID: eda22b Grid: true GridProjection: false Hands: false HideWhenFaceDown: false IgnoreFoW: false LayoutGroupSortIndex: 0 Locked: false LuaScript: "\t--[[ Character Sheet Template by: MrStump\r\n\r\nYou can set\ \ up your own character sheet if you follow these steps.\r\n\r\nStep 1) Change\ \ the character sheet image\r\n -Right click on the character sheet, click\ \ Custom\r\n -Replace the image URL with one for your character sheet\r\n\ \ -Click import, make sure your sheet loads\r\n -SAVE THE GAME (the table\ \ setup)\r\n -LOAD FROM THAT SAVE YOU JUST MADE\r\n\r\nStep 2) Edit script\ \ to fit your character sheet\r\n -Below you will see some general options,\ \ and then the big data table\r\n -The data table is what determines how\ \ many of which buttons are made\r\n -Checkboxes\r\n -Counters\r\ \n -Textboxes\r\n -By default, there are 3 of each. You can add more\ \ or remove entries\r\n -If you intend to add/remove, be sure only to add/remove\ \ ENTRIES\r\n -This is what an entry looks like:\r\n {\r\n\ \ pos = {-0.977,0.1,-0.589},\r\n size = 800,\r\ \n state = false\r\n },\r\n -Deleting the whole\ \ thing would remove that specific item on the sheet\r\n -Copy and pasting\ \ it after another entry would create another\r\n -Each entry type has unique\ \ data points (pos, size, state, etc)\r\n -Do not try to add in your\ \ own data points or remove them individually\r\n -There is a summary\ \ of what each point does at the top of its category\r\n\r\nStep 3) Save and\ \ check script changes\r\n -Hit Save & Apply in the script window to save\ \ your code\r\n -You can edit your code as needed and Save+Apply as often\ \ as needed\r\n -When you are finished, make disableSave = false below then\ \ Save+apply\r\n -This enables saving, so your sheet will remember whats\ \ on it.\r\n\r\nBonus) Finding/Editing Positions for elements\r\n I have\ \ included a tool to get positions for buttons in {x,y,z} form\r\n Place\ \ it where you want the center of your element to be\r\n Then copy the table\ \ from the notes (lower right of screen)\r\n You can highlight it and\ \ CTRL+C\r\n Paste it into the data table where needed (pos=)\r\n If you\ \ want to manually tweek the values:\r\n {0,0,0} is the center of the\ \ character sheet\r\n {1,0,0} is right, {-1,0,0} is left\r\n {0,0,-1}\ \ is up, {0,0,1} is down\r\n 0.1 for Y is the height off of the page.\r\ \n If it was 0, it would be down inside the model of the sheet\r\n\ \r\nBegin editing below: ]]\r\n\r\n--Set this to true while editing and false\ \ when you have finished\r\ndisableSave = false\r\n--Remember to set this to\ \ false once you are done making changes\r\n--Then, after you save & apply it,\ \ save your game too\r\n\r\n--Color information for button text (r,g,b, values\ \ of 0-1)\r\nbuttonFontColor = {0,0,0}\r\n--Color information for button background\r\ \nbuttonColor = {1,1,1}\r\n--Change scale of button (Avoid changing if possible)\r\ \nbuttonScale = {0.1,0.1,0.1}\r\n\r\n--This is the button placement information\r\ \ndefaultButtonData = {\r\n --Add checkboxes\r\n checkbox = {\r\n \ \ --[[\r\n pos = the position (pasted from the helper tool)\r\n\ \ size = height/width/font_size for checkbox\r\n state = default\ \ starting value for checkbox (true=checked, false=not)\r\n ]]\r\n \ \ --Prologue\r\n {\r\n pos = {-1.756,0.1,-1.435},\r\ \n size = 600,\r\n state = false\r\n },\r\n \ \ --Lost Moorings\r\n {\r\n pos = {-1.736,0.1,-1.232},\r\ \n size = 600,\r\n state = false\r\n },\r\n \ \ --Going Twice\r\n {\r\n pos = {-1.721,0.1,-0.987},\r\ \n size = 600,\r\n state = false\r\n },\r\n \ \ --Private Lives\r\n {\r\n pos = {-1.719,0.1,-0.77},\r\ \n size = 600,\r\n state = false\r\n },\r\n \ \ --Crumbling Masonry\r\n {\r\n pos = {-1.715,0.1,-0.545},\r\ \n size = 600,\r\n state = false\r\n },\r\n \ \ --A House Divided\r\n {\r\n pos = {-1.702,0.1,-0.328},\r\ \n size = 600,\r\n state = false\r\n },\r\n \ \ --Across Dreadful Waters\r\n {\r\n pos = {-1.688,0.1,-0.086},\r\ \n size = 600,\r\n state = false\r\n },\r\n \ \ --Blood From Stones\r\n {\r\n pos = {-1.679,0.1,0.166},\r\ \n size = 600,\r\n state = false\r\n },\r\n \ \ --Pyroclastic Flow\r\n {\r\n pos = {-1.663,0.1,0.445},\r\ \n size = 600,\r\n state = false\r\n },\r\n \ \ --Tomb of Dead Dreams\r\n {\r\n pos = {-1.643,0.1,0.677},\r\ \n size = 600,\r\n state = false\r\n },\r\n \ \ --Epilogue\r\n {\r\n pos = {-1.632,0.1,0.948},\r\n\ \ size = 600,\r\n state = false\r\n },\r\n \ \ --End of checkboxes\r\n },\r\n --Add counters that have a + and\ \ - button\r\n counter = {\r\n --[[\r\n pos = the position\ \ (pasted from the helper tool)\r\n size = height/width/font_size for\ \ counter\r\n value = default starting value for counter\r\n \ \ hideBG = if background of counter is hidden (true=hidden, false=not)\r\n \ \ ]]\r\n --Notice\r\n {\r\n pos = {-0.399,0.1,-1.399},\r\ \n size = 1500,\r\n value = 0,\r\n hideBG\ \ = true\r\n },\r\n --End of counters\r\n },\r\n --Add editable\ \ text boxes\r\n textbox = {\r\n --[[\r\n pos = the position\ \ (pasted from the helper tool)\r\n rows = how many lines of text\ \ you want for this box\r\n width = how wide the text box is\r\n\ \ font_size = size of text. This and \"rows\" effect overall height\r\ \n label = what is shown when there is no text. \"\" = nothing\r\n\ \ value = text entered into box. \"\" = nothing\r\n alignment\ \ = Number to indicate how you want text aligned\r\n (1=Automatic,\ \ 2=Left, 3=Center, 4=Right, 5=Justified)\r\n ]]\r\n --Cultists\ \ Alive\r\n {\r\n pos = {0.543,0.1,-1.447},\r\n \ \ rows = 5,\r\n width = 3700,\r\n font_size\ \ = 300,\r\n label = \"Empty\",\r\n value = \"\ \",\r\n alignment = 2\r\n },\r\n --Cultists Killed\r\ \n {\r\n pos = {1.404,0.1,-1.418},\r\n rows\ \ = 6,\r\n width = 4000,\r\n font_size = 300,\r\ \n label = \"Empty\",\r\n value = \"\",\r\n \ \ alignment = 2\r\n },\r\n --End of textboxes\r\n \ \ }\r\n}\r\n\r\n\r\n\r\n--Lua beyond this point, I recommend doing something\ \ more fun with your life\r\n\r\n\r\n\r\n--Save function\r\nfunction updateSave()\r\ \n saved_data = JSON.encode(ref_buttonData)\r\n if disableSave==true then\ \ saved_data=\"\" end\r\n self.script_state = saved_data\r\nend\r\n\r\n--Startup\ \ procedure\r\nfunction onload(saved_data)\r\n if disableSave==true then\ \ saved_data=\"\" end\r\n if saved_data ~= \"\" then\r\n local loaded_data\ \ = JSON.decode(saved_data)\r\n ref_buttonData = loaded_data\r\n else\r\ \n ref_buttonData = defaultButtonData\r\n end\r\n\r\n spawnedButtonCount\ \ = 0\r\n createCheckbox()\r\n createCounter()\r\n createTextbox()\r\ \nend\r\n\r\n\r\n\r\n--Click functions for buttons\r\n\r\n\r\n\r\n--Checks or\ \ unchecks the given box\r\nfunction click_checkbox(tableIndex, buttonIndex)\r\ \n if ref_buttonData.checkbox[tableIndex].state == true then\r\n ref_buttonData.checkbox[tableIndex].state\ \ = false\r\n self.editButton({index=buttonIndex, label=\"\"})\r\n \ \ else\r\n ref_buttonData.checkbox[tableIndex].state = true\r\n \ \ self.editButton({index=buttonIndex, label=string.char(10008)})\r\n end\r\ \n updateSave()\r\nend\r\n\r\n--Applies value to given counter display\r\n\ function click_counter(tableIndex, buttonIndex, amount)\r\n ref_buttonData.counter[tableIndex].value\ \ = ref_buttonData.counter[tableIndex].value + amount\r\n self.editButton({index=buttonIndex,\ \ label=ref_buttonData.counter[tableIndex].value})\r\n updateSave()\r\nend\r\ \n\r\n--Updates saved value for given text box\r\nfunction click_textbox(i,\ \ value, selected)\r\n if selected == false then\r\n ref_buttonData.textbox[i].value\ \ = value\r\n updateSave()\r\n end\r\nend\r\n\r\n--Dud function for\ \ if you have a background on a counter\r\nfunction click_none() end\r\n\r\n\ \r\n\r\n--Button creation\r\n\r\n\r\n\r\n--Makes checkboxes\r\nfunction createCheckbox()\r\ \n for i, data in ipairs(ref_buttonData.checkbox) do\r\n --Sets up\ \ reference function\r\n local buttonNumber = spawnedButtonCount\r\n\ \ local funcName = \"checkbox\"..i\r\n local func = function()\ \ click_checkbox(i, buttonNumber) end\r\n self.setVar(funcName, func)\r\ \n --Sets up label\r\n local label = \"\"\r\n if data.state==true\ \ then label=string.char(10008) end\r\n --Creates button and counts it\r\ \n self.createButton({\r\n label=label, click_function=funcName,\ \ function_owner=self,\r\n position=data.pos, height=data.size, width=data.size,\r\ \n font_size=data.size, scale=buttonScale,\r\n color=buttonColor,\ \ font_color=buttonFontColor\r\n })\r\n spawnedButtonCount = spawnedButtonCount\ \ + 1\r\n end\r\nend\r\n\r\n--Makes counters\r\nfunction createCounter()\r\ \n for i, data in ipairs(ref_buttonData.counter) do\r\n --Sets up\ \ display\r\n local displayNumber = spawnedButtonCount\r\n --Sets\ \ up label\r\n local label = data.value\r\n --Sets height/width\ \ for display\r\n local size = data.size\r\n if data.hideBG ==\ \ true then size = 0 end\r\n --Creates button and counts it\r\n \ \ self.createButton({\r\n label=label, click_function=\"click_none\"\ , function_owner=self,\r\n position=data.pos, height=size, width=size,\r\ \n font_size=data.size, scale=buttonScale,\r\n color=buttonColor,\ \ font_color=buttonFontColor\r\n })\r\n spawnedButtonCount = spawnedButtonCount\ \ + 1\r\n\r\n --Sets up add 1\r\n local funcName = \"counterAdd\"\ ..i\r\n local func = function() click_counter(i, displayNumber, 1) end\r\ \n self.setVar(funcName, func)\r\n --Sets up label\r\n \ \ local label = \"+\"\r\n --Sets up position\r\n local offsetDistance\ \ = (data.size/2 + data.size/4) * (buttonScale[1] * 0.002)\r\n local\ \ pos = {data.pos[1] + offsetDistance, data.pos[2], data.pos[3]}\r\n \ \ --Sets up size\r\n local size = data.size / 2\r\n --Creates\ \ button and counts it\r\n self.createButton({\r\n label=label,\ \ click_function=funcName, function_owner=self,\r\n position=pos,\ \ height=size, width=size,\r\n font_size=size, scale=buttonScale,\r\ \n color=buttonColor, font_color=buttonFontColor\r\n })\r\n\ \ spawnedButtonCount = spawnedButtonCount + 1\r\n\r\n --Sets up\ \ subtract 1\r\n local funcName = \"counterSub\"..i\r\n local\ \ func = function() click_counter(i, displayNumber, -1) end\r\n self.setVar(funcName,\ \ func)\r\n --Sets up label\r\n local label = \"-\"\r\n \ \ --Set up position\r\n local pos = {data.pos[1] - offsetDistance, data.pos[2],\ \ data.pos[3]}\r\n --Creates button and counts it\r\n self.createButton({\r\ \n label=label, click_function=funcName, function_owner=self,\r\n\ \ position=pos, height=size, width=size,\r\n font_size=size,\ \ scale=buttonScale,\r\n color=buttonColor, font_color=buttonFontColor\r\ \n })\r\n spawnedButtonCount = spawnedButtonCount + 1\r\n end\r\ \nend\r\n\r\nfunction createTextbox()\r\n for i, data in ipairs(ref_buttonData.textbox)\ \ do\r\n --Sets up reference function\r\n local funcName = \"\ textbox\"..i\r\n local func = function(_,_,val,sel) click_textbox(i,val,sel)\ \ end\r\n self.setVar(funcName, func)\r\n\r\n self.createInput({\r\ \n input_function = funcName,\r\n function_owner = self,\r\ \n label = data.label,\r\n alignment = data.alignment,\r\ \n position = data.pos,\r\n scale = buttonScale,\r\ \n width = data.width,\r\n height = (data.font_size*data.rows)+24,\r\ \n font_size = data.font_size,\r\n color \ \ = buttonColor,\r\n font_color = buttonFontColor,\r\n \ \ value = data.value,\r\n })\r\n end\r\nend\r\n" LuaScriptState: '' MeasureMovement: false Name: Custom_Token Nickname: Cyclopean Foundations Campaign Log 2 Snap: true Sticky: true Tooltip: true Transform: posX: -1.46598017 posY: 1.57562077 posZ: -26.9408417 rotX: 359.9201 rotY: 270.106842 rotZ: 0.01672261 scaleX: 4.37388372 scaleY: 1.0 scaleZ: 4.37388372 Value: 0 XmlUI: '' Sticky: true Tooltip: true Transform: posX: -1.47 posY: 1.58 posZ: -26.94 rotX: 359.92 rotY: 269.96 rotZ: 0.02 scaleX: 4.37 scaleY: 1.0 scaleZ: 4.37 Value: 0 XmlUI: ''