--[[ Character Sheet Template by: MrStump You can set up your own character sheet if you follow these steps. Step 1) Change the character sheet image -Right click on the character sheet, click Custom -Replace the image URL with one for your character sheet -Click import, make sure your sheet loads -SAVE THE GAME (the table setup) -LOAD FROM THAT SAVE YOU JUST MADE Step 2) Edit script to fit your character sheet -Below you will see some general options, and then the big data table -The data table is what determines how many of which buttons are made -Checkboxes -Counters -Textboxes -By default, there are 3 of each. You can add more or remove entries -If you intend to add/remove, be sure only to add/remove ENTRIES -This is what an entry looks like: { pos = {-0.977,0.1,-0.589}, size = 800, state = false }, -Deleting the whole thing would remove that specific item on the sheet -Copy and pasting it after another entry would create another -Each entry type has unique data points (pos, size, state, etc) -Do not try to add in your own data points or remove them individually -There is a summary of what each point does at the top of its category Step 3) Save and check script changes -Hit Save & Apply in the script window to save your code -You can edit your code as needed and Save+Apply as often as needed -When you are finished, make disableSave = false below then Save+apply -This enables saving, so your sheet will remember whats on it. Bonus) Finding/Editing Positions for elements I have included a tool to get positions for buttons in {x,y,z} form Place it where you want the center of your element to be Then copy the table from the notes (lower right of screen) You can highlight it and CTRL+C Paste it into the data table where needed (pos=) If you want to manually tweek the values: {0,0,0} is the center of the character sheet {1,0,0} is right, {-1,0,0} is left {0,0,-1} is up, {0,0,1} is down 0.1 for Y is the height off of the page. If it was 0, it would be down inside the model of the sheet Begin editing below: ]] --Set this to true while editing and false when you have finished disableSave = false --Remember to set this to false once you are done making changes --Then, after you save & apply it, save your game too --Color information for button text (r,g,b, values of 0-1) buttonFontColor = {0,0,0} --Color information for button background buttonColor = {1,1,1} --Change scale of button (Avoid changing if possible) buttonScale = {0.1,0.1,0.1} --This is the button placement information defaultButtonData = { --Add checkboxes checkbox = { --[[ pos = the position (pasted from the helper tool) size = height/width/font_size for checkbox state = default starting value for checkbox (true=checked, false=not) ]] --First checkbox --{ -- pos = {-0.977,0.1,-0.589}, --size = 800, --state = false --}, --End of checkboxes }, --Add counters that have a + and - button counter = { --[[ pos = the position (pasted from the helper tool) size = height/width/font_size for counter value = default starting value for counter hideBG = if background of counter is hidden (true=hidden, false=not) ]] --First counter { pos = {-0.984,0.05,-1.02}, size = 800, value = 0, hideBG = true }, { pos = {-0.16,0.05,-1.02}, size = 800, value = 0, hideBG = true }, { pos = {.67,0.05,-1.01}, size = 800, value = 0, hideBG = true }, { pos = {1.5,0.05,-1.01}, size = 800, value = 0, hideBG = true }, { pos = {-1.257,0.05,-0.852}, size = 600, value = 0, hideBG = true }, { pos = {-0.953,0.05,-0.852}, size = 600, value = 0, hideBG = true }, { pos = {-0.427,0.05,-0.852}, size = 600, value = 0, hideBG = true }, { pos = {-0.127,0.05,-0.852}, size = 600, value = 0, hideBG = true }, { pos = {0.395,0.05,-0.85}, size = 600, value = 0, hideBG = true }, { pos = {0.695,0.05,-0.85}, size = 600, value = 0, hideBG = true }, { pos = {1.216,0.05,-0.842}, size = 600, value = 0, hideBG = true }, { pos = {1.516,0.05,-0.842}, size = 600, value = 0, hideBG = true }, --End of counters }, --Add editable text boxes textbox = { --[[ pos = the position (pasted from the helper tool) rows = how many lines of text you want for this box width = how wide the text box is font_size = size of text. This and "rows" effect overall height label = what is shown when there is no text. "" = nothing value = text entered into box. "" = nothing alignment = Number to indicate how you want text aligned (1=Automatic, 2=Left, 3=Center, 4=Right, 5=Justified) ]] --First textbox { pos = {-1.27,0.05,-1.326}, rows = 1, width = 3000, font_size = 300, label = "Joshua", value = "", alignment = 2 }, { pos = {-0.435,0.05,-1.326}, rows = 1, width = 3000, font_size = 300, label = "Miriam", value = "", alignment = 2 }, { pos = {.385,0.05,-1.326}, rows = 1, width = 3000, font_size = 300, label = "Abner", value = "", alignment = 2 }, { pos = {1.21,0.05,-1.326}, rows = 1, width = 3000, font_size = 300, label = "Sara", value = "", alignment = 2 }, { pos = {-1.27,0.05,-1.18}, rows = 1, width = 3000, font_size = 300, label = "Tommy Muldoon", value = "", alignment = 2 }, { pos = {-0.435,0.05,-1.18}, rows = 1, width = 3000, font_size = 300, label = "Daisy Walker", value = "", alignment = 2 }, { pos = {.385,0.05,-1.17}, rows = 1, width = 3000, font_size = 300, label = "Finn Edwards", value = "", alignment = 2 }, { pos = {1.21,0.05,-1.17}, rows = 1, width = 3000, font_size = 300, label = "Agnes Baker", value = "", alignment = 2 }, { pos = {-1.202,0.05,-0.468}, rows = 7, width = 3500, font_size = 300, label = "", value = "", alignment = 2 }, { pos = {-0.373,0.05,-0.468}, rows = 7, width = 3500, font_size = 300, label = "", value = "", alignment = 2 }, { pos = {0.455,0.05,-0.468}, rows = 7, width = 3500, font_size = 300, label = "", value = "", alignment = 2 }, { pos = {1.284,0.05,-0.468}, rows = 7, width = 3500, font_size = 300, label = "", value = "", alignment = 2 }, --Third textbox { pos = {-0.981,0.05,0.692}, rows = 16, width = 6000, font_size = 300, label = "HEED THE CALL", value = "", alignment = 2 }, { pos = {0.619,0.05,0.312}, rows = 14, width = 6000, font_size = 300, label = "SERVE MY CAUSE", value = "", alignment = 2 }, { pos = {-1.038,0.05,1.553}, rows = 6, width = 5000, font_size = 300, label = "Confirm max brain death period - H", value = "", alignment = 2 }, { pos = {0.261,0.05,1.124}, rows = 3, width = 3000, font_size = 200, label = "", value = "", alignment = 2 }, { pos = {0.261,0.05,1.333}, rows = 3, width = 3000, font_size = 200, label = "", value = "", alignment = 2 }, { pos = {0.261,0.05,1.535}, rows = 3, width = 3000, font_size = 200, label = "", value = "", alignment = 2 }, { pos = {0.261,0.05,1.772}, rows = 3, width = 3000, font_size = 200, label = "", value = "", alignment = 2 }, { pos = {1.012,0.05,1.1}, rows = 3, width = 3000, font_size = 200, label = "", value = "", alignment = 2 }, { pos = {1.012,0.05,1.3}, rows = 3, width = 3000, font_size = 200, label = "", value = "", alignment = 2 }, { pos = {1.012,0.05,1.52}, rows = 3, width = 3000, font_size = 200, label = "", value = "", alignment = 2 }, { pos = {1.012,0.05,1.72}, rows = 3, width = 3000, font_size = 200, label = "", value = "", alignment = 2 }, --End of textboxes } } --Lua beyond this point, I recommend doing something more fun with your life --Save function function updateSave() saved_data = JSON.encode(ref_buttonData) if disableSave==true then saved_data="" end self.script_state = saved_data end --Startup procedure function onload(saved_data) if disableSave==true then saved_data="" end if saved_data ~= "" then local loaded_data = JSON.decode(saved_data) ref_buttonData = loaded_data else ref_buttonData = defaultButtonData end spawnedButtonCount = 0 createCheckbox() createCounter() createTextbox() end --Click functions for buttons --Checks or unchecks the given box function click_checkbox(tableIndex, buttonIndex) if ref_buttonData.checkbox[tableIndex].state == true then ref_buttonData.checkbox[tableIndex].state = false self.editButton({index=buttonIndex, label=""}) else ref_buttonData.checkbox[tableIndex].state = true self.editButton({index=buttonIndex, label=string.char(10008)}) end updateSave() end --Applies value to given counter display function click_counter(tableIndex, buttonIndex, amount) ref_buttonData.counter[tableIndex].value = ref_buttonData.counter[tableIndex].value + amount self.editButton({index=buttonIndex, label=ref_buttonData.counter[tableIndex].value}) updateSave() end --Updates saved value for given text box function click_textbox(i, value, selected) if selected == false then ref_buttonData.textbox[i].value = value updateSave() end end --Dud function for if you have a background on a counter function click_none() end --Button creation --Makes checkboxes function createCheckbox() for i, data in ipairs(ref_buttonData.checkbox) do --Sets up reference function local buttonNumber = spawnedButtonCount local funcName = "checkbox"..i local func = function() click_checkbox(i, buttonNumber) end self.setVar(funcName, func) --Sets up label local label = "" if data.state==true then label=string.char(10008) end --Creates button and counts it self.createButton({ label=label, click_function=funcName, function_owner=self, position=data.pos, height=data.size, width=data.size, font_size=data.size, scale=buttonScale, color=buttonColor, font_color=buttonFontColor }) spawnedButtonCount = spawnedButtonCount + 1 end end --Makes counters function createCounter() for i, data in ipairs(ref_buttonData.counter) do --Sets up display local displayNumber = spawnedButtonCount --Sets up label local label = data.value --Sets height/width for display local size = data.size if data.hideBG == true then size = 0 end --Creates button and counts it self.createButton({ label=label, click_function="click_none", function_owner=self, position=data.pos, height=size, width=size, font_size=data.size, scale=buttonScale, color=buttonColor, font_color=buttonFontColor }) spawnedButtonCount = spawnedButtonCount + 1 --Sets up add 1 local funcName = "counterAdd"..i local func = function() click_counter(i, displayNumber, 1) end self.setVar(funcName, func) --Sets up label local label = "+" --Sets up position local offsetDistance = (data.size/2 + data.size/4) * (buttonScale[1] * 0.002) local pos = {data.pos[1] + offsetDistance, data.pos[2], data.pos[3]} --Sets up size local size = data.size / 2 --Creates button and counts it self.createButton({ label=label, click_function=funcName, function_owner=self, position=pos, height=size, width=size, font_size=size, scale=buttonScale, color=buttonColor, font_color=buttonFontColor }) spawnedButtonCount = spawnedButtonCount + 1 --Sets up subtract 1 local funcName = "counterSub"..i local func = function() click_counter(i, displayNumber, -1) end self.setVar(funcName, func) --Sets up label local label = "-" --Set up position local pos = {data.pos[1] - offsetDistance, data.pos[2], data.pos[3]} --Creates button and counts it self.createButton({ label=label, click_function=funcName, function_owner=self, position=pos, height=size, width=size, font_size=size, scale=buttonScale, color=buttonColor, font_color=buttonFontColor }) spawnedButtonCount = spawnedButtonCount + 1 end end function createTextbox() for i, data in ipairs(ref_buttonData.textbox) do --Sets up reference function local funcName = "textbox"..i local func = function(_,_,val,sel) click_textbox(i,val,sel) end self.setVar(funcName, func) self.createInput({ input_function = funcName, function_owner = self, label = data.label, alignment = data.alignment, position = data.pos, scale = buttonScale, width = data.width, height = (data.font_size*data.rows)+24, font_size = data.font_size, color = buttonColor, font_color = buttonFontColor, value = data.value, }) end end