9614ebcb37
Added featured content section containing featured fan campaigns. also updated date on release notes. Note that this commit has many files added as part of the two fan campaigns, as they have been "pre-downloaded"
511 lines
16 KiB
Plaintext
511 lines
16 KiB
Plaintext
--[[ 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)
|
|
]]
|
|
--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)
|
|
]]
|
|
--1st Player Experience
|
|
{
|
|
pos = {-1.080,0.1,-1.010},
|
|
size = 800,
|
|
value = 0,
|
|
hideBG = true
|
|
},
|
|
--1st Player Physical Trauma
|
|
{
|
|
pos = {-1.270,0.1,-0.790},
|
|
size = 600,
|
|
value = 0,
|
|
hideBG = true
|
|
},
|
|
--1st Player Mental Trauma
|
|
{
|
|
pos = {-1.000,0.1,-0.790},
|
|
size = 600,
|
|
value = 0,
|
|
hideBG = true
|
|
},
|
|
--2nd Player Experience
|
|
{
|
|
pos = {-0.251,0.1,-1.010},
|
|
size = 800,
|
|
value = 0,
|
|
hideBG = true
|
|
},
|
|
--2nd Player Physical Trauma
|
|
{
|
|
pos = {-0.441,0.1,-0.790},
|
|
size = 600,
|
|
value = 0,
|
|
hideBG = true
|
|
},
|
|
--2nd Player Mental Trauma
|
|
{
|
|
pos = {-0.171,0.1,-0.790},
|
|
size = 600,
|
|
value = 0,
|
|
hideBG = true
|
|
},
|
|
--3rd Player Experience
|
|
{
|
|
pos = {0.579,0.1,-1.010},
|
|
size = 800,
|
|
value = 0,
|
|
hideBG = true
|
|
},
|
|
--3rd Player Physical Trauma
|
|
{
|
|
pos = {0.389,0.1,-0.790},
|
|
size = 600,
|
|
value = 0,
|
|
hideBG = true
|
|
},
|
|
--3rd Player Mental Trauma
|
|
{
|
|
pos = {0.659,0.1,-0.790},
|
|
size = 600,
|
|
value = 0,
|
|
hideBG = true
|
|
},
|
|
--4th Player Experience
|
|
{
|
|
pos = {1.407,0.1,-1.010},
|
|
size = 800,
|
|
value = 0,
|
|
hideBG = true
|
|
},
|
|
--4th Player Physical Trauma
|
|
{
|
|
pos = {1.217,0.1,-0.790},
|
|
size = 600,
|
|
value = 0,
|
|
hideBG = true
|
|
},
|
|
--4th Player Mental Trauma
|
|
{
|
|
pos = {1.487,0.1,-0.790},
|
|
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)
|
|
]]
|
|
--1st Player Name
|
|
{
|
|
pos = {-1.265,0.1,-1.390},
|
|
rows = 1,
|
|
width = 3800,
|
|
font_size = 300,
|
|
label = "Empty",
|
|
value = "",
|
|
alignment = 2
|
|
},
|
|
--1st Player Investigator
|
|
{
|
|
pos = {-1.265,0.1,-1.195},
|
|
rows = 1,
|
|
width = 3800,
|
|
font_size = 300,
|
|
label = "Empty",
|
|
value = "",
|
|
alignment = 2
|
|
},
|
|
--1st Player Story Assets/Weaknesses
|
|
{
|
|
pos = {-1.265,0.1,-0.420},
|
|
rows = 7,
|
|
width = 3800,
|
|
font_size = 300,
|
|
label = "Empty",
|
|
value = "",
|
|
alignment = 2
|
|
},
|
|
--2nd Player Name
|
|
{
|
|
pos = {-0.436,0.1,-1.390},
|
|
rows = 1,
|
|
width = 3800,
|
|
font_size = 300,
|
|
label = "Empty",
|
|
value = "",
|
|
alignment = 2
|
|
},
|
|
--2nd Player Investigator
|
|
{
|
|
pos = {-0.436,0.1,-1.195},
|
|
rows = 1,
|
|
width = 3800,
|
|
font_size = 300,
|
|
label = "Empty",
|
|
value = "",
|
|
alignment = 2
|
|
},
|
|
--2nd Player Story Assets/Weaknesses
|
|
{
|
|
pos = {-0.436,0.1,-0.420},
|
|
rows = 7,
|
|
width = 3800,
|
|
font_size = 300,
|
|
label = "Empty",
|
|
value = "",
|
|
alignment = 2
|
|
},
|
|
--3rd Player Name
|
|
{
|
|
pos = {0.394,0.1,-1.390},
|
|
rows = 1,
|
|
width = 3800,
|
|
font_size = 300,
|
|
label = "Empty",
|
|
value = "",
|
|
alignment = 2
|
|
},
|
|
--3rd Player Investigator
|
|
{
|
|
pos = {0.394,0.1,-1.195},
|
|
rows = 1,
|
|
width = 3800,
|
|
font_size = 300,
|
|
label = "Empty",
|
|
value = "",
|
|
alignment = 2
|
|
},
|
|
--3rd Player Story Assets/Weaknesses
|
|
{
|
|
pos = {0.394,0.1,-0.420},
|
|
rows = 7,
|
|
width = 3800,
|
|
font_size = 300,
|
|
label = "Empty",
|
|
value = "",
|
|
alignment = 2
|
|
},
|
|
--4th Player Name
|
|
{
|
|
pos = {1.222,0.1,-1.390},
|
|
rows = 1,
|
|
width = 3800,
|
|
font_size = 300,
|
|
label = "Empty",
|
|
value = "",
|
|
alignment = 2
|
|
},
|
|
--4th Player Investigator
|
|
{
|
|
pos = {1.222,0.1,-1.195},
|
|
rows = 1,
|
|
width = 3800,
|
|
font_size = 300,
|
|
label = "Empty",
|
|
value = "",
|
|
alignment = 2
|
|
},
|
|
--4th Player Story Assets/Weaknesses
|
|
{
|
|
pos = {1.222,0.1,-0.420},
|
|
rows = 7,
|
|
width = 3800,
|
|
font_size = 300,
|
|
label = "Empty",
|
|
value = "",
|
|
alignment = 2
|
|
},
|
|
--Campaign Notes 1
|
|
{
|
|
pos = {-0.930,0.1,0.930},
|
|
rows = 27,
|
|
width = 7800,
|
|
font_size = 300,
|
|
label = "Empty",
|
|
value = "",
|
|
alignment = 2
|
|
},
|
|
--Campaign Notes 2
|
|
{
|
|
pos = {0.820,0.1,0.707},
|
|
rows = 20,
|
|
width = 7800,
|
|
font_size = 300,
|
|
label = "Empty",
|
|
value = "",
|
|
alignment = 2
|
|
},
|
|
--Killed and Insane Investigators
|
|
{
|
|
pos = {1.010,0.1,1.700},
|
|
rows = 5,
|
|
width = 7400,
|
|
font_size = 300,
|
|
label = "Empty",
|
|
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
|
|
|