/obj/item/mod/construction desc = "A part used in MOD construction. You could insert it into a MOD shell." icon = 'icons/obj/clothing/modsuit/mod_construction.dmi' icon_state = "rack_parts" /obj/item/mod/construction/helmet name = "MOD helmet" desc = "You could insert it into a MOD shell." icon_state = "helmet" /obj/item/mod/construction/chestplate name = "MOD chestplate" icon_state = "chestplate" /obj/item/mod/construction/gauntlets name = "MOD gauntlets" icon_state = "gauntlets" /obj/item/mod/construction/boots name = "MOD boots" icon_state = "boots" /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) . = ..() . += "You could repair it with a screwdriver..." /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/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/standard /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 /obj/item/mod/construction/plating/rescue //I want to add a way to get the rarer modsuit types, that is limited. A low chance for traders to have plating for it seems interesting theme = /datum/mod_theme/rescue /obj/item/mod/construction/plating/safeguard //Continued from above, none of these are steal objectives, and only the CE or RD one comes pre-installed with modules. You are getting the protection / speed / looks of these hardsuits, but no special modules. theme = /datum/mod_theme/safeguard /obj/item/mod/construction/plating/advanced //This may be a bad idea. I think this is an interesting idea. And you still need robotics to build it, and traders can charge as much for it as they want. Also with ones like the CE modsuit, it is the flagship mod. That means it is sold a lot. theme = /datum/mod_theme/advanced /obj/item/mod/construction/plating/research //Don't think people will want the RD one though, it is as slow as shit. Anyway, here it is. Surely this will not end poorly. theme = /datum/mod_theme/research #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" desc = "A MOD shell." icon_state = "mod-construction_start" var/obj/item/core var/obj/item/helmet var/obj/item/chestplate var/obj/item/gauntlets var/obj/item/boots var/construction_step = START_STEP /obj/item/mod/construction/shell/examine(mob/user) . = ..() var/display_text switch(construction_step) if(START_STEP) display_text = "It looks like it's missing a MOD core..." if(CORE_STEP) display_text = "The core seems loose..." if(SCREWED_CORE_STEP) display_text = "It looks like it's missing a helmet..." if(HELMET_STEP) display_text = "It looks like it's missing a chestplate..." if(CHESTPLATE_STEP) display_text = "It looks like it's missing gauntlets..." if(GAUNTLETS_STEP) display_text = "It looks like it's missing boots..." if(BOOTS_STEP) display_text = "The assembly seems unsecured..." if(WRENCHED_ASSEMBLY_STEP) display_text = "The assembly seems loose..." if(SCREWED_ASSEMBLY_STEP) display_text = "All it's missing is external plating..." . += "[display_text]" /obj/item/mod/construction/shell/attackby(obj/item/part, mob/user, params) . = ..() switch(construction_step) if(START_STEP) if(!istype(part, /obj/item/mod/core)) return if(!user.drop_item()) to_chat(user, "[part] is stuck to you and cannot be placed into [src].") return playsound(src, 'sound/machines/click.ogg', 30, TRUE) to_chat(user, "Core inserted.") core = part core.forceMove(src) construction_step = CORE_STEP if(CORE_STEP) if(part.tool_behaviour == TOOL_SCREWDRIVER) //Construct if(part.use_tool(src, user, 0, volume = 30)) to_chat(user, "Core screwed.") construction_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()) to_chat(user, "Core removed.") construction_step = START_STEP if(SCREWED_CORE_STEP) if(istype(part, /obj/item/mod/construction/helmet)) //Construct if(!user.drop_item()) to_chat(user, "[part] is stuck to you and cannot be placed into [src].") return playsound(src, 'sound/machines/click.ogg', 30, TRUE) to_chat(user, "Helmet added.") helmet = part helmet.forceMove(src) construction_step = HELMET_STEP else if(part.tool_behaviour == TOOL_SCREWDRIVER) //Deconstruct if(part.use_tool(src, user, 0, volume = 30)) to_chat(user, "Core unscrewed.") construction_step = CORE_STEP if(HELMET_STEP) if(istype(part, /obj/item/mod/construction/chestplate)) //Construct if(!user.drop_item()) to_chat(user, "[part] is stuck to you and cannot be placed into [src].") return playsound(src, 'sound/machines/click.ogg', 30, TRUE) to_chat(user, "Chestplate added.") forceMove(src) chestplate = part chestplate.forceMove(src) construction_step = CHESTPLATE_STEP else if(part.tool_behaviour == TOOL_CROWBAR) //Deconstruct if(part.use_tool(src, user, 0, volume = 30)) helmet.forceMove(drop_location()) to_chat(user, "Helmet removed.") helmet = null construction_step = SCREWED_CORE_STEP if(CHESTPLATE_STEP) if(istype(part, /obj/item/mod/construction/gauntlets)) //Construct if(!user.drop_item()) to_chat(user, "[part] is stuck to you and cannot be placed into [src].") return playsound(src, 'sound/machines/click.ogg', 30, TRUE) to_chat(user, "Gauntlets added.") gauntlets = part gauntlets.forceMove(src) construction_step = GAUNTLETS_STEP else if(part.tool_behaviour == TOOL_CROWBAR) //Deconstruct if(part.use_tool(src, user, 0, volume = 30)) chestplate.forceMove(drop_location()) to_chat(user, "Chestplate removed.") chestplate = null construction_step = HELMET_STEP if(GAUNTLETS_STEP) if(istype(part, /obj/item/mod/construction/boots)) //Construct if(!user.drop_item()) to_chat(user, "[part] is stuck to you and cannot be placed into [src].") return playsound(src, 'sound/machines/click.ogg', 30, TRUE) to_chat(user, "Boots added.") boots = part boots.forceMove(src) construction_step = BOOTS_STEP else if(part.tool_behaviour == TOOL_CROWBAR) //Deconstruct if(part.use_tool(src, user, 0, volume = 30)) gauntlets.forceMove(drop_location()) to_chat(user, "Gauntlets removed.") gauntlets = null construction_step = CHESTPLATE_STEP if(BOOTS_STEP) if(part.tool_behaviour == TOOL_WRENCH) //Construct if(part.use_tool(src, user, 0, volume = 30)) to_chat(user, "Assembly secured.") construction_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()) to_chat(user, "Boots removed.") boots = null construction_step = GAUNTLETS_STEP if(WRENCHED_ASSEMBLY_STEP) if(part.tool_behaviour == TOOL_SCREWDRIVER) //Construct if(part.use_tool(src, user, 0, volume = 30)) to_chat(user, "Assembly screwed.") construction_step = SCREWED_ASSEMBLY_STEP else if(part.tool_behaviour == TOOL_WRENCH) //Deconstruct if(part.use_tool(src, user, 0, volume = 30)) to_chat(user, "Assembly unsecured.") construction_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.drop_item()) 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(external_plating) qdel(src) user.put_in_hands(mod) to_chat(user, "Suit finished!") else if(part.tool_behaviour == TOOL_SCREWDRIVER) //Construct if(part.use_tool(src, user, 0, volume = 30)) to_chat(user, "Assembly unscrewed.") construction_step = SCREWED_ASSEMBLY_STEP update_icon_state() /obj/item/mod/construction/shell/update_icon_state() . = ..() icon_state = "mod-construction_[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