Files
Bubberstation/code/modules/mod/mod_construction.dm
Nick 1648bcc47e Plasma flower MOD core from the lavaland patch of eden ruin (#75959)
This PR gives a small update to the patch of eden lavaland ruin, and
adds a new item that can be used as an upgrade to the plasma mod core.
The idea around this item is that it's a flower that has absorbed all
the plasma and bad-vibes in the small area around the ruin, leaving an
area full of plants, and a flower full of energy. This flower can be
taken from the oasis and turned into a functional MOD core using some
wires. As a MOD core, it is the same as the plasma mod core, but has a
higher energy capacity, being equivalent to a super power cell. It also
gives you a cool pollen effect, and spawns butterflies around you while
your suit is active. These butterflies disappear when they get too far
away, or if the suit deactivates. They also don't leave corpses, so they
shouldn't cause too much clutter.
2023-06-14 03:29:00 +00:00

308 lines
10 KiB
Plaintext

/obj/item/mod/construction
desc = "A part used in MOD construction."
icon = 'icons/obj/clothing/modsuit/mod_construction.dmi'
inhand_icon_state = "rack_parts"
/obj/item/mod/construction/helmet
name = "MOD helmet"
icon_state = "helmet"
/obj/item/mod/construction/helmet/examine(mob/user)
. = ..()
. += span_notice("You could insert it into a <b>MOD shell</b>...")
/obj/item/mod/construction/chestplate
name = "MOD chestplate"
icon_state = "chestplate"
/obj/item/mod/construction/chestplate/examine(mob/user)
. = ..()
. += span_notice("You could insert it into a <b>MOD shell</b>...")
/obj/item/mod/construction/gauntlets
name = "MOD gauntlets"
icon_state = "gauntlets"
/obj/item/mod/construction/gauntlets/examine(mob/user)
. = ..()
. += span_notice("You could insert these into a <b>MOD shell</b>...")
/obj/item/mod/construction/boots
name = "MOD boots"
icon_state = "boots"
/obj/item/mod/construction/boots/examine(mob/user)
. = ..()
. += span_notice("You could insert these into a <b>MOD shell</b>...")
/obj/item/mod/construction/broken_core
name = "broken MOD core"
icon_state = "mod-core"
desc = "An internal power source for a Modular Outerwear Device. You don't seem to be able to source any power from this one, though."
/obj/item/mod/construction/broken_core/examine(mob/user)
. = ..()
. += span_notice("You could repair it with a <b>screwdriver</b>...")
/obj/item/mod/construction/broken_core/screwdriver_act(mob/living/user, obj/item/tool)
. = ..()
if(!tool.use_tool(src, user, 5 SECONDS, volume = 30))
return
new /obj/item/mod/core/standard(drop_location())
qdel(src)
/obj/item/mod/construction/lavalandcore
name = "plasma flower"
icon_state = "plasma-flower"
desc = "A strange flower from the desolate wastes of lavaland. It pulses with a bright purple glow. \
Its shape is remarkably similar to that of a MOD core."
light_system = MOVABLE_LIGHT
light_color = "#cc00cc"
light_range = 2
/obj/item/mod/construction/lavalandcore/examine(mob/user)
. = ..()
. += span_notice("You could probably attach some <b>wires</b> to it...")
/obj/item/mod/construction/lavalandcore/attackby(obj/item/weapon, mob/user, params)
if(!istype(weapon, /obj/item/stack/cable_coil))
return
if(!weapon.tool_start_check(user, amount=2))
return
to_chat(user, span_notice("You start pushing the wires into the core..."))
if(!weapon.use_tool(src, user, 5 SECONDS, amount = 2, volume = 30))
return
to_chat(user, span_notice("You add the wires to the core."))
new /obj/item/mod/core/plasma/lavaland(drop_location())
qdel(src)
/obj/item/mod/construction/plating
name = "MOD external plating"
desc = "External plating used to finish a MOD control unit."
icon_state = "standard-plating"
var/datum/mod_theme/theme = /datum/mod_theme
/obj/item/mod/construction/plating/Initialize(mapload)
. = ..()
var/datum/mod_theme/used_theme = GLOB.mod_themes[theme]
name = "MOD [used_theme.name] external plating"
desc = "[desc] [used_theme.desc]"
icon_state = "[used_theme.default_skin]-plating"
/obj/item/mod/construction/plating/engineering
theme = /datum/mod_theme/engineering
/obj/item/mod/construction/plating/atmospheric
theme = /datum/mod_theme/atmospheric
/obj/item/mod/construction/plating/medical
theme = /datum/mod_theme/medical
/obj/item/mod/construction/plating/security
theme = /datum/mod_theme/security
/obj/item/mod/construction/plating/cosmohonk
theme = /datum/mod_theme/cosmohonk
#define START_STEP "start"
#define CORE_STEP "core"
#define SCREWED_CORE_STEP "screwed_core"
#define HELMET_STEP "helmet"
#define CHESTPLATE_STEP "chestplate"
#define GAUNTLETS_STEP "gauntlets"
#define BOOTS_STEP "boots"
#define WRENCHED_ASSEMBLY_STEP "wrenched_assembly"
#define SCREWED_ASSEMBLY_STEP "screwed_assembly"
/obj/item/mod/construction/shell
name = "MOD shell"
icon_state = "mod-construction_start"
desc = "A MOD shell."
var/obj/item/core
var/obj/item/helmet
var/obj/item/chestplate
var/obj/item/gauntlets
var/obj/item/boots
var/step = START_STEP
/obj/item/mod/construction/shell/examine(mob/user)
. = ..()
var/display_text
switch(step)
if(START_STEP)
display_text = "It looks like it's missing a <b>MOD core</b>..."
if(CORE_STEP)
display_text = "The core seems <b>loose</b>..."
if(SCREWED_CORE_STEP)
display_text = "It looks like it's missing a <b>helmet</b>..."
if(HELMET_STEP)
display_text = "It looks like it's missing a <b>chestplate</b>..."
if(CHESTPLATE_STEP)
display_text = "It looks like it's missing <b>gauntlets</b>..."
if(GAUNTLETS_STEP)
display_text = "It looks like it's missing <b>boots</b>..."
if(BOOTS_STEP)
display_text = "The assembly seems <b>unsecured</b>..."
if(WRENCHED_ASSEMBLY_STEP)
display_text = "The assembly seems <b>loose</b>..."
if(SCREWED_ASSEMBLY_STEP)
display_text = "All it's missing is <b>external plating</b>..."
. += span_notice(display_text)
/obj/item/mod/construction/shell/attackby(obj/item/part, mob/user, params)
. = ..()
switch(step)
if(START_STEP)
if(!istype(part, /obj/item/mod/core))
return
if(!user.transferItemToLoc(part, src))
balloon_alert(user, "core stuck to your hand!")
return
playsound(src, 'sound/machines/click.ogg', 30, TRUE)
balloon_alert(user, "core inserted")
core = part
step = CORE_STEP
if(CORE_STEP)
if(part.tool_behaviour == TOOL_SCREWDRIVER) //Construct
if(part.use_tool(src, user, 0, volume=30))
balloon_alert(user, "core screwed")
step = SCREWED_CORE_STEP
else if(part.tool_behaviour == TOOL_CROWBAR) //Deconstruct
if(part.use_tool(src, user, 0, volume=30))
core.forceMove(drop_location())
balloon_alert(user, "core taken out")
step = START_STEP
if(SCREWED_CORE_STEP)
if(istype(part, /obj/item/mod/construction/helmet)) //Construct
if(!user.transferItemToLoc(part, src))
balloon_alert(user, "helmet stuck to your hand!")
return
playsound(src, 'sound/machines/click.ogg', 30, TRUE)
balloon_alert(user, "helmet added")
helmet = part
step = HELMET_STEP
else if(part.tool_behaviour == TOOL_SCREWDRIVER) //Deconstruct
if(part.use_tool(src, user, 0, volume=30))
balloon_alert(user, "core unscrewed")
step = CORE_STEP
if(HELMET_STEP)
if(istype(part, /obj/item/mod/construction/chestplate)) //Construct
if(!user.transferItemToLoc(part, src))
balloon_alert(user, "chestplate stuck to your hand!")
return
playsound(src, 'sound/machines/click.ogg', 30, TRUE)
balloon_alert(user, "chestplate added")
chestplate = part
step = CHESTPLATE_STEP
else if(part.tool_behaviour == TOOL_CROWBAR) //Deconstruct
if(part.use_tool(src, user, 0, volume=30))
helmet.forceMove(drop_location())
balloon_alert(user, "helmet removed")
helmet = null
step = SCREWED_CORE_STEP
if(CHESTPLATE_STEP)
if(istype(part, /obj/item/mod/construction/gauntlets)) //Construct
if(!user.transferItemToLoc(part, src))
balloon_alert(user, "gauntlets stuck to your hand!")
return
playsound(src, 'sound/machines/click.ogg', 30, TRUE)
balloon_alert(user, "gauntlets added")
gauntlets = part
step = GAUNTLETS_STEP
else if(part.tool_behaviour == TOOL_CROWBAR) //Deconstruct
if(part.use_tool(src, user, 0, volume=30))
chestplate.forceMove(drop_location())
balloon_alert(user, "chestplate removed")
chestplate = null
step = HELMET_STEP
if(GAUNTLETS_STEP)
if(istype(part, /obj/item/mod/construction/boots)) //Construct
if(!user.transferItemToLoc(part, src))
balloon_alert(user, "boots added")
return
playsound(src, 'sound/machines/click.ogg', 30, TRUE)
balloon_alert(user, "fit [part.name]")
boots = part
step = BOOTS_STEP
else if(part.tool_behaviour == TOOL_CROWBAR) //Deconstruct
if(part.use_tool(src, user, 0, volume=30))
gauntlets.forceMove(drop_location())
balloon_alert(user, "gauntlets removed")
gauntlets = null
step = CHESTPLATE_STEP
if(BOOTS_STEP)
if(part.tool_behaviour == TOOL_WRENCH) //Construct
if(part.use_tool(src, user, 0, volume=30))
balloon_alert(user, "assembly secured")
step = WRENCHED_ASSEMBLY_STEP
else if(part.tool_behaviour == TOOL_CROWBAR) //Deconstruct
if(part.use_tool(src, user, 0, volume=30))
boots.forceMove(drop_location())
balloon_alert(user, "boots removed")
boots = null
step = GAUNTLETS_STEP
if(WRENCHED_ASSEMBLY_STEP)
if(part.tool_behaviour == TOOL_SCREWDRIVER) //Construct
if(part.use_tool(src, user, 0, volume=30))
balloon_alert(user, "assembly screwed")
step = SCREWED_ASSEMBLY_STEP
else if(part.tool_behaviour == TOOL_WRENCH) //Deconstruct
if(part.use_tool(src, user, 0, volume=30))
balloon_alert(user, "assembly unsecured")
step = BOOTS_STEP
if(SCREWED_ASSEMBLY_STEP)
if(istype(part, /obj/item/mod/construction/plating)) //Construct
var/obj/item/mod/construction/plating/external_plating = part
if(!user.transferItemToLoc(part, src))
return
playsound(src, 'sound/machines/click.ogg', 30, TRUE)
var/obj/item/mod = new /obj/item/mod/control(drop_location(), external_plating.theme, null, core)
core = null
qdel(src)
user.put_in_hands(mod)
mod.balloon_alert(user, "suit finished")
else if(part.tool_behaviour == TOOL_SCREWDRIVER) //Construct
if(part.use_tool(src, user, 0, volume=30))
balloon_alert(user, "assembly unscrewed")
step = SCREWED_ASSEMBLY_STEP
update_icon_state()
/obj/item/mod/construction/shell/update_icon_state()
. = ..()
icon_state = "mod-construction_[step]"
/obj/item/mod/construction/shell/Destroy()
QDEL_NULL(core)
QDEL_NULL(helmet)
QDEL_NULL(chestplate)
QDEL_NULL(gauntlets)
QDEL_NULL(boots)
return ..()
/obj/item/mod/construction/shell/handle_atom_del(atom/deleted_atom)
if(deleted_atom == core)
core = null
if(deleted_atom == helmet)
helmet = null
if(deleted_atom == chestplate)
chestplate = null
if(deleted_atom == gauntlets)
gauntlets = null
if(deleted_atom == boots)
boots = null
return ..()
#undef START_STEP
#undef CORE_STEP
#undef SCREWED_CORE_STEP
#undef HELMET_STEP
#undef CHESTPLATE_STEP
#undef GAUNTLETS_STEP
#undef BOOTS_STEP
#undef WRENCHED_ASSEMBLY_STEP
#undef SCREWED_ASSEMBLY_STEP