mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-09 16:07:40 +00:00
agony
This commit is contained in:
@@ -126,6 +126,7 @@ GLOBAL_LIST_INIT(ai_core_display_screens, list(
|
||||
"Not Malf",
|
||||
"Patriot",
|
||||
"Pirate",
|
||||
"Portrait",
|
||||
"President",
|
||||
"Rainbow",
|
||||
"Clown",
|
||||
|
||||
@@ -285,7 +285,7 @@
|
||||
|
||||
/obj/screen/robot/lamp
|
||||
name = "headlamp"
|
||||
icon_state = "lamp0"
|
||||
icon_state = "lamp_off"
|
||||
var/mob/living/silicon/robot/robot
|
||||
|
||||
/obj/screen/robot/lamp/Click()
|
||||
|
||||
@@ -613,7 +613,7 @@
|
||||
var/mob/chosen = players[1]
|
||||
if (chosen.client)
|
||||
chosen.client.prefs.copy_to(spawnedMob)
|
||||
spawnedMob.key = chosen.key
|
||||
chosen.transfer_ckey(spawnedMob)
|
||||
players -= chosen
|
||||
if (ishuman(spawnedMob) && ispath(humanoutfit, /datum/outfit))
|
||||
var/mob/living/carbon/human/H = spawnedMob
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
update_slab_info()
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
if(is_servant_of_ratvar(M) || isobserver(M))
|
||||
M.playsound_local(M, 'sound/magic/clockwork/scripture_tier_up.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
M.playsound_local(M, 'sound/magic/clockwork/scripture_tier_up.ogg', 20, FALSE, pressure_affected = FALSE)
|
||||
|
||||
/proc/update_slab_info(obj/item/clockwork/slab/set_slab)
|
||||
generate_all_scripture()
|
||||
|
||||
@@ -21,8 +21,10 @@
|
||||
var/recollecting = TRUE //if we're looking at fancy recollection. tutorial enabled by default
|
||||
var/recollection_category = "Default"
|
||||
|
||||
var/list/quickbound = list(/datum/clockwork_scripture/spatial_gateway, \
|
||||
/datum/clockwork_scripture/ranged_ability/kindle, /datum/clockwork_scripture/ranged_ability/hateful_manacles) //quickbound scripture, accessed by index
|
||||
var/list/quickbound = list(
|
||||
/datum/clockwork_scripture/spatial_gateway,
|
||||
/datum/clockwork_scripture/ranged_ability/kindle,
|
||||
/datum/clockwork_scripture/ranged_ability/hateful_manacles) //quickbound scripture, accessed by index
|
||||
var/maximum_quickbound = 5 //how many quickbound scriptures we can have
|
||||
|
||||
var/obj/structure/destructible/clockwork/trap/linking //If we're linking traps together, which ones we're doing
|
||||
@@ -326,6 +328,7 @@
|
||||
"requirement" = "Unlock powerful equipment and structures by converting five servants or if [DisplayPower(JUDGEMENT_UNLOCK_THRESHOLD)] of power is reached..",
|
||||
"ready" = SSticker.scripture_states[SCRIPTURE_JUDGEMENT]
|
||||
)
|
||||
// no need to learn shit, ratvar is free
|
||||
.["recollection_categories"] = list()
|
||||
if(GLOB.ratvar_awakens)
|
||||
return
|
||||
@@ -340,19 +343,25 @@
|
||||
)
|
||||
.["rec_section"] = get_recollection(recollection_category)
|
||||
generate_all_scripture()
|
||||
//needs a new place to live, preferably when clockcult unlocks/downgrades a tier. Smart enough to earlyreturn.
|
||||
//needs a new place to live, preferably when clockcult unlocks/downgrades a tier.
|
||||
//comsig maybe?
|
||||
|
||||
/obj/item/clockwork/slab/ui_act(action, params)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
switch(action)
|
||||
if("toggle")
|
||||
recollecting = !recollecting
|
||||
. = TRUE
|
||||
if("recite")
|
||||
INVOKE_ASYNC(src, .proc/recite_scripture, text2path(params["script"]), usr, FALSE)
|
||||
. = TRUE
|
||||
if("bind")
|
||||
var/datum/clockwork_scripture/path = text2path(params["script"]) //we need a path and not a string
|
||||
if(!ispath(path, /datum/clockwork_scripture) || !initial(path.quickbind) || initial(path.tier) == SCRIPTURE_PERIPHERAL) //fuck you href bus
|
||||
to_chat(usr, "<span class='warning'>Nice try using href exploits</span>")
|
||||
return
|
||||
return FALSE
|
||||
var/found_index = quickbound.Find(path)
|
||||
if(found_index) //hey, we already HAVE this bound
|
||||
if(LAZYLEN(quickbound) == found_index) //if it's the last scripture, remove it instead of leaving a null
|
||||
@@ -361,6 +370,7 @@
|
||||
quickbound[found_index] = null //otherwise, leave it as a null so the scripture maintains position
|
||||
update_quickbind()
|
||||
else
|
||||
// todo: async this due to ((input)) but its fine for now
|
||||
var/target_index = input("Position of [initial(path.name)], 1 to [maximum_quickbound]?", "Input") as num|null
|
||||
if(isnum(target_index) && target_index > 0 && target_index <= maximum_quickbound && !..())
|
||||
var/datum/clockwork_scripture/S
|
||||
@@ -368,10 +378,11 @@
|
||||
S = quickbound[target_index]
|
||||
if(S != path)
|
||||
quickbind_to_slot(path, target_index)
|
||||
. = TRUE
|
||||
if("rec_category")
|
||||
recollection_category = params["category"]
|
||||
update_static_data()
|
||||
return TRUE
|
||||
. = TRUE
|
||||
|
||||
/obj/item/clockwork/slab/proc/quickbind_to_slot(datum/clockwork_scripture/scripture, index) //takes a typepath(typecast for initial()) and binds it to a slot
|
||||
if(!ispath(scripture) || !scripture || (scripture in quickbound))
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
locked = FALSE //unlock cover
|
||||
|
||||
update_mobility()
|
||||
if(!QDELETED(builtInCamera) && builtInCamera.status)
|
||||
builtInCamera.toggle_cam(src,0)
|
||||
toggle_headlamp(TRUE) //So borg lights are disabled when killed.
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
/**
|
||||
* @file
|
||||
* @copyright 2021 LetterN (https://github.com/LetterN)
|
||||
* @author Original LetterN (https://github.com/LetterN)
|
||||
* @author Changes arturlang
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
import { useBackend, useSharedState } from '../backend';
|
||||
import { map } from 'common/collections';
|
||||
import { Section, Tabs, Table, Button, Box, NoticeBox, Divider } from '../components';
|
||||
@@ -15,14 +23,9 @@ export const ClockworkSlab = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const {
|
||||
recollection = true,
|
||||
recollection_categories = [],
|
||||
rec_section = null,
|
||||
rec_binds = [],
|
||||
scripture = {},
|
||||
tier_infos = {},
|
||||
power = "0 W",
|
||||
power_unformatted = 0,
|
||||
HONOR_RATVAR = false, // is ratvar free yet?
|
||||
} = data;
|
||||
const [
|
||||
tab,
|
||||
@@ -42,117 +45,7 @@ export const ClockworkSlab = (props, context) => {
|
||||
height={420}>
|
||||
<Window.Content scrollable>
|
||||
{recollection ? ( // tutorial
|
||||
<Section
|
||||
title="Recollection"
|
||||
buttons={(
|
||||
<Button
|
||||
icon="cog"
|
||||
tooltipPosition={"left"}
|
||||
onClick={() => act('toggle')}>
|
||||
Recital
|
||||
</Button>
|
||||
)}>
|
||||
<Box>
|
||||
{HONOR_RATVAR ? (
|
||||
<Box
|
||||
as="span"
|
||||
textColor="#BE8700"
|
||||
fontSize={2}
|
||||
bold>
|
||||
{REC_RATVAR}
|
||||
</Box>
|
||||
) : (
|
||||
<Fragment>
|
||||
<Box
|
||||
as="span"
|
||||
textColor="#BE8700"
|
||||
fontSize={2} // 2rem
|
||||
bold>
|
||||
Chetr nyy hagehguf naq ubabe Ratvar.
|
||||
</Box>
|
||||
<NoticeBox>
|
||||
NOTICE: This information is out of date.
|
||||
Read the Ark & You primer in your backpack
|
||||
or read the wiki page for current info.
|
||||
</NoticeBox>
|
||||
<Box>
|
||||
These pages serve as the archives of Ratvar, the
|
||||
Clockwork Justiciar. This section of your slab
|
||||
has information on being as a Servant, advice
|
||||
for what to do next, and pointers for serving the
|
||||
master well. You should recommended that you check this
|
||||
area for help if you get stuck or need guidance on
|
||||
what to do next.
|
||||
<br /> <br />
|
||||
Disclaimer: Many objects, terms, and phrases, such as
|
||||
Servant, Cache, and Slab, are capitalized like proper
|
||||
nouns. This is a quirk of the Ratvarian language do
|
||||
not let it confuse you! You are free to use the names
|
||||
in pronoun form when speaking in normal languages.
|
||||
</Box>
|
||||
</Fragment>
|
||||
)}
|
||||
</Box>
|
||||
{recollection_categories?.map(cat => (
|
||||
<Fragment key={cat.name}>
|
||||
<br />
|
||||
<Button
|
||||
tooltip={cat.desc}
|
||||
tooltipPosition={'right'}
|
||||
onClick={() => act('rec_category', {
|
||||
"category": cat.name,
|
||||
})} >
|
||||
{cat.name}
|
||||
</Button>
|
||||
</Fragment>
|
||||
))}
|
||||
<Divider />
|
||||
<Box>
|
||||
<Box
|
||||
as={'span'}
|
||||
textColor={'#BE8700'}
|
||||
fontSize={2.3}>
|
||||
{rec_section?.title ? (
|
||||
rec_section.title
|
||||
) : (
|
||||
'500 Slab Internal archives not found.'
|
||||
)}
|
||||
</Box>
|
||||
<br /><br />
|
||||
{rec_section?.info ? (
|
||||
rec_section.info
|
||||
) : (
|
||||
"One of the cogscarabs must've misplaced this section."
|
||||
)}
|
||||
</Box>
|
||||
<br />
|
||||
<Divider />
|
||||
<Box>
|
||||
<Box
|
||||
as={'span'}
|
||||
textColor={'#BE8700'}
|
||||
fontSize={2.3}>
|
||||
Quickbound Scripture
|
||||
</Box>
|
||||
<br />
|
||||
<Box as={'span'} italic>
|
||||
You can have up to five scriptures bound to
|
||||
action buttons for easy use.
|
||||
</Box>
|
||||
<br /><br />
|
||||
{rec_binds?.map(bind => (
|
||||
<Fragment key={bind.name ? bind.name : "none"}>
|
||||
A <b>Quickbind</b> slot ({rec_binds.indexOf(bind)+1}),
|
||||
currently set to
|
||||
<span style={`color:${bind ? bind.color : "#BE8700"}`}>
|
||||
{bind?.name ? bind.name : "None"}
|
||||
</span>
|
||||
.
|
||||
<br />
|
||||
</Fragment>
|
||||
))}
|
||||
</Box>
|
||||
</Section>
|
||||
<CSTutorial />
|
||||
) : (
|
||||
<Section
|
||||
title="Power"
|
||||
@@ -216,54 +109,7 @@ export const ClockworkSlab = (props, context) => {
|
||||
</Box>
|
||||
<Divider />
|
||||
<Table>
|
||||
{scriptInTab?.map(script => (
|
||||
<Table.Row
|
||||
key={script.name}
|
||||
className="candystripe">
|
||||
<Table.Cell
|
||||
italic={!!script.important}
|
||||
color={script.fontcolor}>
|
||||
<b>
|
||||
{script.name}
|
||||
</b>
|
||||
{`
|
||||
${script.descname}
|
||||
${script.invokers || ''}
|
||||
`}
|
||||
</Table.Cell>
|
||||
<Table.Cell
|
||||
collapsing
|
||||
textAlign="right">
|
||||
<Button
|
||||
disabled={
|
||||
script.required_unformatted >= power_unformatted
|
||||
}
|
||||
tooltip={script.tip}
|
||||
tooltipPosition={'left'}
|
||||
onClick={() => act('recite', {
|
||||
'script': script.type,
|
||||
})} >
|
||||
{`Recite ${script.required}`}
|
||||
</Button>
|
||||
</Table.Cell>
|
||||
<Table.Cell
|
||||
collapsing
|
||||
textAlign="center">
|
||||
<Button
|
||||
fluid
|
||||
disabled={!script.quickbind}
|
||||
onClick={() => act('bind', {
|
||||
'script': script.type,
|
||||
})}>
|
||||
content={script.bound ? (
|
||||
`Unbind ${script.bound}`
|
||||
) : (
|
||||
'Quickbind'
|
||||
)}
|
||||
</Button>
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
))}
|
||||
<CSScripture scriptInTab={scriptInTab} />
|
||||
</Table>
|
||||
</Section>
|
||||
</Section>
|
||||
@@ -272,3 +118,187 @@ export const ClockworkSlab = (props, context) => {
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
|
||||
export const CSScripture = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const {
|
||||
power_unformatted = 0,
|
||||
} = data;
|
||||
const {
|
||||
scriptInTab,
|
||||
} = props;
|
||||
|
||||
return (
|
||||
scriptInTab?.map(script => (
|
||||
<Table.Row
|
||||
key={script.name}
|
||||
className="candystripe">
|
||||
<Table.Cell
|
||||
italic={!!script.important}
|
||||
color={script.fontcolor}>
|
||||
<b>
|
||||
{script.name}
|
||||
</b>
|
||||
{`
|
||||
${script.descname}
|
||||
${script.invokers || ''}
|
||||
`}
|
||||
</Table.Cell>
|
||||
<Table.Cell
|
||||
collapsing
|
||||
textAlign="right">
|
||||
<Button
|
||||
disabled={
|
||||
script.required_unformatted >= power_unformatted
|
||||
}
|
||||
tooltip={script.tip}
|
||||
tooltipPosition={'left'}
|
||||
onClick={() => act('recite', {
|
||||
'script': script.type,
|
||||
})} >
|
||||
{`Recite ${script.required}`}
|
||||
</Button>
|
||||
</Table.Cell>
|
||||
<Table.Cell
|
||||
collapsing
|
||||
textAlign="center">
|
||||
<Button
|
||||
fluid
|
||||
disabled={!script.quickbind}
|
||||
onClick={() => act('bind', {
|
||||
'script': script.type,
|
||||
})}>
|
||||
content={script.bound ? (
|
||||
`Unbind ${script.bound}`
|
||||
) : (
|
||||
'Quickbind'
|
||||
)}
|
||||
</Button>
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
))
|
||||
);
|
||||
};
|
||||
|
||||
export const CSTutorial = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const {
|
||||
recollection_categories = [],
|
||||
rec_section = null,
|
||||
rec_binds = [],
|
||||
HONOR_RATVAR = false, // is ratvar free yet?
|
||||
} = data;
|
||||
return (
|
||||
<Section
|
||||
title="Recollection"
|
||||
buttons={(
|
||||
<Button
|
||||
icon="cog"
|
||||
tooltipPosition={"left"}
|
||||
onClick={() => act('toggle')}>
|
||||
Recital
|
||||
</Button>
|
||||
)}>
|
||||
<Box>
|
||||
{HONOR_RATVAR ? (
|
||||
<Box
|
||||
as="span"
|
||||
textColor="#BE8700"
|
||||
fontSize={2}
|
||||
bold>
|
||||
{REC_RATVAR}
|
||||
</Box>
|
||||
) : (
|
||||
<Fragment>
|
||||
<Box
|
||||
as="span"
|
||||
textColor="#BE8700"
|
||||
fontSize={2} // 2rem
|
||||
bold>
|
||||
Chetr nyy hagehguf naq ubabe Ratvar.
|
||||
</Box>
|
||||
<NoticeBox warning>
|
||||
NOTICE: This information is out of date.
|
||||
Read the Ark & You primer in your backpack
|
||||
or read the wiki page for current info.
|
||||
</NoticeBox>
|
||||
These pages serve as the archives of Ratvar, the
|
||||
Clockwork Justiciar. This section of your slab
|
||||
has information on being as a Servant, advice
|
||||
for what to do next, and pointers for serving the
|
||||
master well. You should recommended that you check this
|
||||
area for help if you get stuck or need guidance on
|
||||
what to do next.
|
||||
<br /> <br />
|
||||
<NoticeBox info>
|
||||
Disclaimer: Many objects, terms, and phrases, such as
|
||||
Servant, Cache, and Slab, are capitalized like proper
|
||||
nouns. This is a quirk of the Ratvarian language do
|
||||
not let it confuse you! You are free to use the names
|
||||
in pronoun form when speaking in normal languages.
|
||||
</NoticeBox>
|
||||
</Fragment>
|
||||
)}
|
||||
</Box>
|
||||
{recollection_categories?.map(cat => (
|
||||
<Fragment key={cat.name}>
|
||||
<br />
|
||||
<Button
|
||||
tooltip={cat.desc}
|
||||
tooltipPosition={'right'}
|
||||
onClick={() => act('rec_category', {
|
||||
"category": cat.name,
|
||||
})} >
|
||||
{cat.name}
|
||||
</Button>
|
||||
</Fragment>
|
||||
))}
|
||||
<Divider />
|
||||
<Box>
|
||||
<Box
|
||||
as={'span'}
|
||||
textColor={'#BE8700'}
|
||||
fontSize={2.3}>
|
||||
{rec_section?.title ? (
|
||||
rec_section.title
|
||||
) : (
|
||||
'500 Slab Internal archives not found.'
|
||||
)}
|
||||
</Box>
|
||||
<br /><br />
|
||||
{rec_section?.info ? (
|
||||
rec_section.info
|
||||
) : (
|
||||
"One of the cogscarabs must've misplaced this section."
|
||||
)}
|
||||
</Box>
|
||||
<br />
|
||||
<Divider />
|
||||
<Box>
|
||||
<Box
|
||||
as={'span'}
|
||||
textColor={'#BE8700'}
|
||||
fontSize={2.3}>
|
||||
Quickbound Scripture
|
||||
</Box>
|
||||
<br />
|
||||
<Box as={'span'} italic>
|
||||
You can have up to five scriptures bound to
|
||||
action buttons for easy use.
|
||||
</Box>
|
||||
<br /><br />
|
||||
{rec_binds?.map(bind => (
|
||||
<Fragment key={bind.name ? bind.name : "none"}>
|
||||
A <b>Quickbind</b> slot ({rec_binds.indexOf(bind)+1}),
|
||||
currently set to
|
||||
<span style={`color:${bind ? bind.color : "#BE8700"}`}>
|
||||
{bind?.name ? bind.name : "None"}
|
||||
</span>
|
||||
.
|
||||
<br />
|
||||
</Fragment>
|
||||
))}
|
||||
</Box>
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -15,7 +15,7 @@ const SWIPE_NEEDED = "SWIPE_NEEDED";
|
||||
|
||||
const sortByCreditCost = sortBy(shuttle => shuttle.creditCost);
|
||||
|
||||
const AlertButton = (props, context) => {
|
||||
export const AlertButton = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const { alertLevelTick, canSetAlertLevel } = data;
|
||||
const { alertLevel, setShowAlertLevelConfirm } = props;
|
||||
@@ -44,7 +44,7 @@ const AlertButton = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const MessageModal = (props, context) => {
|
||||
export const MessageModal = (props, context) => {
|
||||
const { data } = useBackend(context);
|
||||
const { maxMessageLength } = data;
|
||||
|
||||
@@ -106,7 +106,7 @@ const MessageModal = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const NoConnectionModal = () => {
|
||||
export const NoConnectionModal = () => {
|
||||
return (
|
||||
<Dimmer>
|
||||
<Flex direction="column" textAlign="center" width="300px">
|
||||
@@ -140,7 +140,7 @@ const NoConnectionModal = () => {
|
||||
);
|
||||
};
|
||||
|
||||
const PageBuyingShuttle = (props, context) => {
|
||||
export const PageBuyingShuttle = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
|
||||
return (
|
||||
@@ -196,7 +196,7 @@ const PageBuyingShuttle = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const PageChangingStatus = (props, context) => {
|
||||
export const PageChangingStatus = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const { maxStatusLineLength } = data;
|
||||
|
||||
@@ -294,7 +294,7 @@ const PageChangingStatus = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const PageMain = (props, context) => {
|
||||
export const PageMain = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const {
|
||||
alertLevel,
|
||||
@@ -336,9 +336,9 @@ const PageMain = (props, context) => {
|
||||
return (
|
||||
<Box>
|
||||
<Section title="Emergency Shuttle">
|
||||
{
|
||||
shuttleCalled
|
||||
? <Button.Confirm
|
||||
{shuttleCalled
|
||||
? (
|
||||
<Button.Confirm
|
||||
icon="space-shuttle"
|
||||
content="Recall Emergency Shuttle"
|
||||
color="bad"
|
||||
@@ -353,7 +353,8 @@ const PageMain = (props, context) => {
|
||||
tooltipPosition="bottom-right"
|
||||
onClick={() => act("recallShuttle")}
|
||||
/>
|
||||
: <Button
|
||||
) : (
|
||||
<Button
|
||||
icon="space-shuttle"
|
||||
content="Call Emergency Shuttle"
|
||||
disabled={shuttleCanEvacOrFailReason !== 1}
|
||||
@@ -364,8 +365,7 @@ const PageMain = (props, context) => {
|
||||
}
|
||||
tooltipPosition="bottom-right"
|
||||
onClick={() => setCallingShuttle(true)}
|
||||
/>
|
||||
}
|
||||
/>)}
|
||||
|
||||
{!!shuttleCalledPreviously && (
|
||||
shuttleLastCalled && (
|
||||
@@ -605,7 +605,7 @@ const PageMain = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const PageMessages = (props, context) => {
|
||||
export const PageMessages = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const messages = data.messages || [];
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user