diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 77ce768fc8..b54368a75e 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -27,7 +27,7 @@ max_universal_equip = 3 max_special_equip = 4 -/obj/mecha/combat/phazon/New() +/obj/mecha/combat/phazon/equipped/New() ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/rcd ME.attach(src) @@ -40,7 +40,7 @@ spawn() if(can_move) can_move = 0 - flick("phazon-phase", src) + flick("[initial_icon]-phase", src) src.loc = get_step(src,src.dir) src.use_power(phasing_energy_drain) sleep(step_in*3) @@ -63,6 +63,10 @@ set popup_menu = 0 if(usr!=src.occupant) return + + query_damtype() + +/obj/mecha/combat/phazon/proc/query_damtype() var/new_damtype = alert(src.occupant,"Melee Damage Type",null,"Brute","Fire","Toxic") switch(new_damtype) if("Brute") @@ -94,4 +98,77 @@ phasing = !phasing send_byjax(src.occupant,"exosuit.browser","phasing_command","[phasing?"Dis":"En"]able phasing") src.occupant_message("En":"#f00\">Dis"]abled phasing.") - return \ No newline at end of file + return + +/obj/mecha/combat/phazon/janus + name = "Phazon Prototype Janus Class" + desc = "An exosuit which a more crude civilization such as yours might describe as WTF?." + description_fluff = "An incredibly high-tech exosuit constructed out of salvaged alien and cutting-edge modern technology.\ + This machine, theoretically, is capable of travelling through time, however due to the strange nature of its miniaturized \ + supermatter-fueled bluespace drive, it is uncertain how this ability manifests." + icon_state = "janus" + initial_icon = "janus" + step_in = 1 + dir_in = 1 //Facing North. + step_energy_drain = 3 + health = 350 + maxhealth = 350 + deflect_chance = 30 + damage_absorption = list("brute"=0.6,"fire"=0.7,"bullet"=0.7,"laser"=0.9,"energy"=0.7,"bomb"=0.5) + max_temperature = 10000 + infra_luminosity = 3 + wreckage = /obj/effect/decal/mecha_wreckage/janus + internal_damage_threshold = 25 + force = 20 + phasing = FALSE + phasing_energy_drain = 300 + + max_hull_equip = 2 + max_weapon_equip = 1 + max_utility_equip = 2 + max_universal_equip = 2 + max_special_equip = 2 + +/obj/mecha/combat/phazon/janus/take_damage(amount, type="brute") + ..() + if(phasing) + phasing = FALSE + radiation_repository.radiate(get_turf(src), 30) + log_append_to_last("WARNING: BLUESPACE DRIVE INSTABILITY DETECTED. DISABLING DRIVE.",1) + visible_message("The [src.name] appears to flicker, before its silhouette stabilizes!") + return + +/obj/mecha/combat/phazon/janus/dynbulletdamage(var/obj/item/projectile/Proj) + if((Proj.damage && !Proj.nodamage) && !istype(Proj, /obj/item/projectile/beam) && prob(max(1, 33 - round(Proj.damage / 4)))) + src.occupant_message("The armor absorbs the incoming projectile's force, negating it!") + src.visible_message("The [src.name] absorbs the incoming projectile's force, negating it!") + src.log_append_to_last("Armor negated.") + return + else if((Proj.damage && !Proj.nodamage) && istype(Proj, /obj/item/projectile/beam) && prob(max(1, (50 - round((Proj.damage / 2) * damage_absorption["laser"])) * (1 - (Proj.armor_penetration / 100))))) // Base 50% chance to deflect a beam,lowered by half the beam's damage scaled to laser absorption, then multiplied by the remaining percent of non-penetrated armor, with a minimum chance of 1%. + src.occupant_message("The armor reflects the incoming beam, negating it!") + src.visible_message("The [src.name] reflects the incoming beam, negating it!") + src.log_append_to_last("Armor reflected.") + return + + ..() + +/obj/mecha/combat/phazon/janus/dynattackby(obj/item/weapon/W as obj, mob/user as mob) + if(prob(max(1, (50 - round((W.force / 2) * damage_absorption["brute"])) * (1 - (W.armor_penetration / 100))))) + src.occupant_message("The armor absorbs the incoming attack's force, negating it!") + src.visible_message("The [src.name] absorbs the incoming attack's force, negating it!") + src.log_append_to_last("Armor absorbed.") + return + + ..() + +/obj/mecha/combat/phazon/janus/query_damtype() + var/new_damtype = alert(src.occupant,"Gauntlet Phase Emitter Mode",null,"Force","Energy","Stun") + switch(new_damtype) + if("Force") + damtype = "brute" + if("Energy") + damtype = "fire" + if("Stun") + damtype = "halloss" + src.occupant_message("Melee damage type switched to [new_damtype]") + return diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 02b5285d98..58b187670f 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -1,12 +1,12 @@ //DO NOT ADD MECHA PARTS TO THE GAME WITH THE DEFAULT "SPRITE ME" SPRITE! //I'm annoyed I even have to tell you this! SPRITE FIRST, then commit. -#define EQUIP_HULL 1 -#define EQUIP_WEAPON 2 -#define EQUIP_UTILITY 3 -#define EQUIP_SPECIAL 4 +#define EQUIP_HULL "hull" +#define EQUIP_WEAPON "weapon" +#define EQUIP_UTILITY "utility" +#define EQUIP_SPECIAL "core" //VOREStation Addition begin: MICROMECHS -#define EQUIP_MICRO_UTILITY 5 -#define EQUIP_MICRO_WEAPON 6 +#define EQUIP_MICRO_UTILITY "micro_utility" +#define EQUIP_MICRO_WEAPON "micro_weapon" //VOREStation Addition end: MICROMECHS /obj/item/mecha_parts/mecha_equipment @@ -35,6 +35,9 @@ return 1 return 0 +/obj/item/mecha_parts/mecha_equipment/examine(mob/user) + ..() + to_chat(user, "\The [src] will fill [equip_type?"a [equip_type]":"any"] slot.") /obj/item/mecha_parts/mecha_equipment/New() ..() diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index ce5b751e55..9edff107b1 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -1301,4 +1301,570 @@ return 1 /datum/construction/mecha/phazon_chassis/action(obj/item/I,mob/user as mob) - return check_all_steps(I,user) \ No newline at end of file + return check_all_steps(I,user) + +/datum/construction/mecha/phazon_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/phazon(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "phazon0" + const_holder.density = 1 + spawn() + qdel(src) + return + +/datum/construction/reversible/mecha/phazon + result = "/obj/mecha/combat/phazon" + steps = list( + //1 + list("key"=/obj/item/weapon/weldingtool, + "backkey"=IS_WRENCH, + "desc"="External armor is wrenched."), + //2 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="External armor is installed."), + //3 + list("key"=/obj/item/stack/material/plasteel, + "backkey"=/obj/item/weapon/weldingtool, + "desc"="Internal armor is welded."), + //4 + list("key"=/obj/item/weapon/weldingtool, + "backkey"=IS_WRENCH, + "desc"="Internal armor is wrenched"), + //5 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="Internal armor is installed"), + //6 + list("key"=/obj/item/stack/material/steel, + "backkey"=IS_SCREWDRIVER, + "desc"="Hand teleporter is secured"), + //7 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Hand teleporter is installed"), + //8 + list("key"=/obj/item/weapon/hand_tele, + "backkey"=IS_SCREWDRIVER, + "desc"="SMES coil is secured"), + //9 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="SMES coil is installed"), + //10 + list("key"=/obj/item/weapon/smes_coil/super_capacity, + "backkey"=IS_SCREWDRIVER, + "desc"="Targeting module is secured"), + //11 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Targeting module is installed"), + //12 + list("key"=/obj/item/weapon/circuitboard/mecha/phazon/targeting, + "backkey"=IS_SCREWDRIVER, + "desc"="Peripherals control module is secured"), + //13 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Peripherals control module is installed"), + //14 + list("key"=/obj/item/weapon/circuitboard/mecha/phazon/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Central control module is secured"), + //15 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Central control module is installed"), + //16 + list("key"=/obj/item/weapon/circuitboard/mecha/phazon/main, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is adjusted"), + //17 + list("key"=/obj/item/weapon/tool/wirecutters, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is added"), + //18 + list("key"=/obj/item/stack/cable_coil, + "backkey"=IS_SCREWDRIVER, + "desc"="The hydraulic systems are active."), + //19 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, + "desc"="The hydraulic systems are connected."), + //20 + list("key"=IS_WRENCH, + "desc"="The hydraulic systems are disconnected.") + ) + +/datum/construction/reversible/mecha/phazon/action(obj/item/I,mob/user as mob) + return check_step(I,user) + +/datum/construction/reversible/mecha/phazon/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 + + switch(index) + if(20) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "phazon1" + if(19) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "phazon2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "phazon0" + if(18) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "phazon3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + holder.icon_state = "phazon1" + if(17) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "phazon4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) + coil.amount = 4 + holder.icon_state = "phazon2" + if(16) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "phazon5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "phazon3" + if(15) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "phazon6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/phazon/main(get_turf(holder)) + holder.icon_state = "phazon4" + if(14) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "phazon7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "phazon5" + if(13) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "phazon8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/phazon/peripherals(get_turf(holder)) + holder.icon_state = "phazon6" + if(12) + if(diff==FORWARD) + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + qdel(I) + holder.icon_state = "phazon9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "phazon7" + if(11) + if(diff==FORWARD) + user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") + holder.icon_state = "phazon10" + else + user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/phazon/targeting(get_turf(holder)) + holder.icon_state = "phazon8" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs the SMES coil to [holder].", "You install the SMES coil to [holder].") + qdel(I) + holder.icon_state = "phazon11" + else + user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") + holder.icon_state = "phazon9" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the SMES coil.", "You secure the SMES coil.") + holder.icon_state = "phazon12" + else + user.visible_message("[user] removes the SMES coil from [holder].", "You remove the SMES coil from [holder].") + new /obj/item/weapon/smes_coil/super_capacity(get_turf(holder)) + holder.icon_state = "phazon10" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs the hand teleporter to [holder].", "You install the hand teleporter to [holder].") + qdel(I) + holder.icon_state = "phazon13" + else + user.visible_message("[user] unfastens the SMES coil.", "You unfasten the SMES coil.") + holder.icon_state = "phazon11" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the hand teleporter.", "You secure the hand teleporter.") + holder.icon_state = "phazon14" + else + user.visible_message("[user] removes the hand teleporter from [holder].", "You remove the hand teleporter from [holder].") + new /obj/item/weapon/hand_tele(get_turf(holder)) + holder.icon_state = "phazon12" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs the internal armor layer to [holder].", "You install the internal armor layer to [holder].") + holder.icon_state = "phazon19" + else + user.visible_message("[user] unfastens the hand teleporter.", "You unfasten the hand teleporter.") + holder.icon_state = "phazon13" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") + holder.icon_state = "phazon20" + else + user.visible_message("[user] pries the internal armor layer from [holder].", "You pry the internal armor layer from [holder].") + var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) + MS.amount = 5 + holder.icon_state = "phazon14" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds the internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "phazon21" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "phazon19" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs the external reinforced armor layer to [holder].", "You install the external reinforced armor layer to [holder].") + holder.icon_state = "phazon22" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "phazon20" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + holder.icon_state = "phazon23" + else + user.visible_message("[user] pries the external armor layer from [holder].", "You pry external armor layer from [holder].") + var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) + MS.amount = 5 + holder.icon_state = "phazon21" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds the external armor layer to [holder].", "You weld the external armor layer to [holder].") + else + user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") + holder.icon_state = "phazon22" + return 1 + +/datum/construction/reversible/mecha/phazon/spawn_result() + ..() + feedback_inc("mecha_phazon_created",1) + return + +////////////////////// +// Janus +////////////////////// +/datum/construction/mecha/janus_chassis + result = "/obj/mecha/combat/phazon/janus" + steps = list(list("key"=/obj/item/mecha_parts/part/janus_torso),//1 + list("key"=/obj/item/mecha_parts/part/janus_left_arm),//2 + list("key"=/obj/item/mecha_parts/part/janus_right_arm),//3 + list("key"=/obj/item/mecha_parts/part/janus_left_leg),//4 + list("key"=/obj/item/mecha_parts/part/janus_right_leg),//5 + list("key"=/obj/item/mecha_parts/part/janus_head) + ) + +/datum/construction/mecha/janus_chassis/custom_action(step, obj/item/I, mob/user) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]") + holder.overlays += I.icon_state+"+o" + qdel(I) + return 1 + +/datum/construction/mecha/janus_chassis/action(obj/item/I,mob/user as mob) + return check_all_steps(I,user) + +/datum/construction/mecha/janus_chassis/spawn_result() + var/obj/item/mecha_parts/chassis/const_holder = holder + const_holder.construct = new /datum/construction/reversible/mecha/janus(const_holder) + const_holder.icon = 'icons/mecha/mech_construction.dmi' + const_holder.icon_state = "janus0" + const_holder.density = 1 + spawn() + qdel(src) + return + +/datum/construction/reversible/mecha/janus + result = "/obj/mecha/combat/phazon/janus" + steps = list( + //1 + list("key"=/obj/item/weapon/weldingtool, + "backkey"=IS_CROWBAR, + "desc"="External armor is installed."), + //2 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="External armor is attached."), + //3 + list("key"=/obj/item/stack/material/morphium, + "backkey"=/obj/item/weapon/weldingtool, + "desc"="Internal armor is welded"), + //4 + list("key"=/obj/item/weapon/weldingtool, + "backkey"=IS_CROWBAR, + "desc"="Internal armor is wrenched"), + //5 + list("key"=IS_WRENCH, + "backkey"=IS_CROWBAR, + "desc"="Internal armor is attached."), + //6 + list("key"=/obj/item/stack/material/durasteel, + "backkey"=IS_SCREWDRIVER, + "desc"="Durand auxiliary board is secured."), + //7 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Durand auxiliary board is installed"), + //8 + list("key"=/obj/item/weapon/circuitboard/mecha/durand/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Phase coil is secured"), + //9 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Phase coil is installed"), + //10 + list("key"=/obj/item/prop/alien/phasecoil, + "backkey"=IS_SCREWDRIVER, + "desc"="Gygax balance system secured"), + //11 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Gygax balance system installed"), + //12 + list("key"=/obj/item/weapon/circuitboard/mecha/gygax/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Targeting module is secured"), + //13 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Targeting module is installed"), + //14 + list("key"=/obj/item/weapon/circuitboard/mecha/imperion/targeting, + "backkey"=IS_SCREWDRIVER, + "desc"="Peripherals control module is secured"), + //15 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Peripherals control module is installed"), + //16 + list("key"=/obj/item/weapon/circuitboard/mecha/imperion/peripherals, + "backkey"=IS_SCREWDRIVER, + "desc"="Central control module is secured"), + //17 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_CROWBAR, + "desc"="Central control module is installed"), + //18 + list("key"=/obj/item/weapon/circuitboard/mecha/imperion/main, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is adjusted"), + //19 + list("key"=/obj/item/weapon/tool/wirecutters, + "backkey"=IS_SCREWDRIVER, + "desc"="The wiring is added"), + //20 + list("key"=/obj/item/stack/cable_coil, + "backkey"=IS_SCREWDRIVER, + "desc"="The hydraulic systems are active."), + //21 + list("key"=IS_SCREWDRIVER, + "backkey"=IS_WRENCH, + "desc"="The hydraulic systems are connected."), + //22 + list("key"=IS_WRENCH, + "desc"="The hydraulic systems are disconnected.") + ) + +/datum/construction/reversible/mecha/janus/action(obj/item/I,mob/user as mob) + return check_step(I,user) + +/datum/construction/reversible/mecha/janus/custom_action(index, diff, obj/item/I, mob/user) + if(!..()) + return 0 + + switch(index) + if(22) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + holder.icon_state = "janus1" + if(21) + if(diff==FORWARD) + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + holder.icon_state = "janus2" + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + holder.icon_state = "janus0" + if(20) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + holder.icon_state = "janus3" + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + holder.icon_state = "janus1" + if(19) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + holder.icon_state = "janus4" + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) + coil.amount = 4 + holder.icon_state = "janus2" + if(18) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + qdel(I) + holder.icon_state = "janus5" + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + holder.icon_state = "janus3" + if(17) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + holder.icon_state = "janus6" + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + new /obj/item/weapon/circuitboard/mecha/imperion/main(get_turf(holder)) + holder.icon_state = "janus4" + if(16) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + qdel(I) + holder.icon_state = "janus7" + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + holder.icon_state = "janus5" + if(15) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + holder.icon_state = "janus8" + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/imperion/peripherals(get_turf(holder)) + holder.icon_state = "janus6" + if(14) + if(diff==FORWARD) + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + qdel(I) + holder.icon_state = "janus9" + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + holder.icon_state = "janus7" + if(13) + if(diff==FORWARD) + user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") + holder.icon_state = "janus10" + else + user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/imperion/targeting(get_turf(holder)) + holder.icon_state = "janus8" + if(12) + if(diff==FORWARD) + user.visible_message("[user] installs the Gygax control module into [holder].", "You install the Gygax control module into [holder].") + qdel(I) + holder.icon_state = "janus11" + else + user.visible_message("[user] unfastens the Gygax control module.", "You unfasten the Gygax control module.") + holder.icon_state = "janus9" + if(11) + if(diff==FORWARD) + user.visible_message("[user] secures the Gygax control module.", "You secure the Gygax control module.") + holder.icon_state = "janus12" + else + user.visible_message("[user] removes the Gygax control module from [holder].", "You remove the Gygax control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/gygax/peripherals(get_turf(holder)) + holder.icon_state = "janus10" + if(10) + if(diff==FORWARD) + user.visible_message("[user] installs the phase coil into [holder].", "You install the phase coil into [holder].") + qdel(I) + holder.icon_state = "janus13" + else + user.visible_message("[user] unfastens the Gygax control module.", "You unfasten the Gygax control module.") + holder.icon_state = "janus11" + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the phase coil.", "You secure the phase coil.") + holder.icon_state = "janus14" + else + user.visible_message("[user] removes the phase coil from [holder].", "You remove the phase coil from [holder].") + new /obj/item/prop/alien/phasecoil(get_turf(holder)) + holder.icon_state = "janus12" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs the Durand control module into [holder].", "You install the Durand control module into [holder].") + qdel(I) + holder.icon_state = "janus15" + else + user.visible_message("[user] unfastens the phase coil.", "You unfasten the phase coil.") + holder.icon_state = "janus13" + if(7) + if(diff==FORWARD) + user.visible_message("[user] secures the Durand control module.", "You secure the Durand control module.") + holder.icon_state = "janus16" + else + user.visible_message("[user] removes the Durand control module from [holder].", "You remove the Durand control module from [holder].") + new /obj/item/weapon/circuitboard/mecha/durand/peripherals(get_turf(holder)) + holder.icon_state = "janus14" + if(6) + if(diff==FORWARD) + user.visible_message("[user] installs the internal armor layer to [holder].", "You install the internal armor layer to [holder].") + holder.icon_state = "janus17" + else + user.visible_message("[user] unfastens the Durand control module.", "You unfasten the Durand control module.") + holder.icon_state = "janus15" + if(5) + if(diff==FORWARD) + user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") + holder.icon_state = "janus18" + else + user.visible_message("[user] pries the internal armor layer from [holder].", "You pry the internal armor layer from [holder].") + var/obj/item/stack/material/durasteel/MS = new /obj/item/stack/material/durasteel(get_turf(holder)) + MS.amount = 5 + holder.icon_state = "janus16" + if(4) + if(diff==FORWARD) + user.visible_message("[user] welds the internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + holder.icon_state = "janus19" + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + holder.icon_state = "janus17" + if(3) + if(diff==FORWARD) + user.visible_message("[user] installs the external reinforced armor layer to [holder].", "You install the external reinforced armor layer to [holder].") + holder.icon_state = "janus20" + else + user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + holder.icon_state = "janus18" + if(2) + if(diff==FORWARD) + user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") + holder.icon_state = "janus21" + else + user.visible_message("[user] pries the external armor layer from [holder].", "You pry external armor layer from [holder].") + var/obj/item/stack/material/morphium/MS = new /obj/item/stack/material/morphium(get_turf(holder)) + MS.amount = 5 + holder.icon_state = "janus19" + if(1) + if(diff==FORWARD) + user.visible_message("[user] welds the external armor layer to [holder].", "You weld the external armor layer to [holder].") + else + user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") + holder.icon_state = "janus20" + return 1 + +/datum/construction/reversible/mecha/janus/spawn_result() + ..() + feedback_inc("mecha_janus_created",1) + return diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index dc4036294b..07c619b9ff 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -292,3 +292,43 @@ origin_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 3) construction_time = 200 construction_cost = list(DEFAULT_WALL_MATERIAL=15000)*/ + +////////// Janus + +/obj/item/mecha_parts/chassis/janus + name = "Janus Chassis" + origin_tech = list(TECH_MATERIAL = 7) + + New() + ..() + construct = new /datum/construction/mecha/janus_chassis(src) + +/obj/item/mecha_parts/part/janus_torso + name="Imperion Torso" + icon_state = "janus_harness" + origin_tech = list(TECH_DATA = 5, TECH_MATERIAL = 7, TECH_BLUESPACE = 2, TECH_POWER = 6, TECH_PRECURSOR = 2) + +/obj/item/mecha_parts/part/janus_head + name="Imperion Head" + icon_state = "janus_head" + origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 5, TECH_MAGNET = 6, TECH_PRECURSOR = 1) + +/obj/item/mecha_parts/part/janus_left_arm + name="Prototype Gygax Left Arm" + icon_state = "janus_l_arm" + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2) + +/obj/item/mecha_parts/part/janus_right_arm + name="Prototype Gygax Right Arm" + icon_state = "janus_r_arm" + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2) + +/obj/item/mecha_parts/part/janus_left_leg + name="Prototype Durand Left Leg" + icon_state = "janus_l_leg" + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3, TECH_ARCANE = 1) + +/obj/item/mecha_parts/part/janus_right_leg + name="Prototype Durand Right Leg" + icon_state = "janus_r_leg" + origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3, TECH_ARCANE = 1) diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index bc20f25b2e..5a95b9017c 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -212,3 +212,8 @@ /obj/effect/decal/mecha_wreckage/hoverpod name = "Hover pod wreckage" icon_state = "engineering_pod-broken" + +/obj/effect/decal/mecha_wreckage/janus + name = "Janus wreckage" + icon_state = "janus-broken" + description_info = "Due to the incredibly intricate design of this exosuit, it is impossible to salvage components from it." diff --git a/code/game/objects/items/weapons/circuitboards/mecha.dm b/code/game/objects/items/weapons/circuitboards/mecha.dm index ed158a347b..fd351f8587 100644 --- a/code/game/objects/items/weapons/circuitboards/mecha.dm +++ b/code/game/objects/items/weapons/circuitboards/mecha.dm @@ -52,6 +52,23 @@ name = T_BOARD_MECHA("Durand central control") icon_state = "mainboard" +/obj/item/weapon/circuitboard/mecha/phazon + +/obj/item/weapon/circuitboard/mecha/phazon/peripherals + name = T_BOARD_MECHA("Phazon peripherals control") + icon_state = "mcontroller" + origin_tech = list(TECH_DATA = 6, TECH_ILLEGAL = 6) + +/obj/item/weapon/circuitboard/mecha/phazon/targeting + name = T_BOARD_MECHA("Phazon weapon control and targeting") + icon_state = "mcontroller" + origin_tech = list(TECH_DATA = 6, TECH_COMBAT = 7) + +/obj/item/weapon/circuitboard/mecha/phazon/main + name = T_BOARD_MECHA("Phazon central control") + origin_tech = list(TECH_DATA = 6, TECH_BLUESPACE = 5) + icon_state = "mainboard" + /obj/item/weapon/circuitboard/mecha/honker origin_tech = list(TECH_DATA = 4) diff --git a/code/modules/research/mechfab_designs.dm b/code/modules/research/mechfab_designs.dm index c225af1258..bba633c6bc 100644 --- a/code/modules/research/mechfab_designs.dm +++ b/code/modules/research/mechfab_designs.dm @@ -223,6 +223,67 @@ time = 60 materials = list(DEFAULT_WALL_MATERIAL = 37500, "uranium" = 7500) +/datum/design/item/mechfab/janus + category = "Janus" + req_tech = list(TECH_MATERIAL = 7, TECH_BLUESPACE = 5, TECH_MAGNET = 6, TECH_PHORON = 3, TECH_ARCANE = 1, TECH_PRECURSOR = 2) + +/datum/design/item/mechfab/janus/chassis + name = "Janus Chassis" + id = "janus_chassis" + build_path = /obj/item/mecha_parts/chassis/janus + time = 100 + materials = list(MAT_DURASTEEL = 19000, MAT_MORPHIUM = 10500, MAT_PLASTEEL = 5500, MAT_LEAD = 2500) + req_tech = list(TECH_MATERIAL = 7, TECH_BLUESPACE = 5, TECH_MAGNET = 6, TECH_PHORON = 3, TECH_ARCANE = 1, TECH_PRECURSOR = 3) + +/datum/design/item/mechfab/janus/torso + name = "Imperion Torso" + id = "janus_torso" + build_path = /obj/item/mecha_parts/part/janus_torso + time = 300 + materials = list(DEFAULT_WALL_MATERIAL = 30000, MAT_DURASTEEL = 8000, MAT_MORPHIUM = 10000, MAT_GOLD = 5000, MAT_VERDANTIUM = 5000) + +/datum/design/item/mechfab/janus/head + name = "Imperion Head" + id = "janus_head" + build_path = /obj/item/mecha_parts/part/janus_head + time = 200 + materials = list(DEFAULT_WALL_MATERIAL = 30000, MAT_DURASTEEL = 2000, MAT_MORPHIUM = 6000, MAT_GOLD = 5000) + +/datum/design/item/mechfab/janus/left_arm + name = "Prototype Gygax Left Arm" + id = "janus_left_arm" + build_path = /obj/item/mecha_parts/part/janus_left_arm + time = 200 + materials = list(DEFAULT_WALL_MATERIAL = 30000, MAT_METALHYDROGEN = 3000, MAT_DURASTEEL = 2000, MAT_MORPHIUM = 3000, MAT_GOLD = 5000, MAT_DIAMOND = 7000) + +/datum/design/item/mechfab/janus/right_arm + name = "Prototype Gygax Right Arm" + id = "janus_right_arm" + build_path = /obj/item/mecha_parts/part/janus_right_arm + time = 200 + materials = list(DEFAULT_WALL_MATERIAL = 30000, MAT_METALHYDROGEN = 3000, MAT_DURASTEEL = 2000, MAT_MORPHIUM = 3000, MAT_GOLD = 5000, MAT_DIAMOND = 7000) + +/datum/design/item/mechfab/janus/left_leg + name = "Prototype Durand Left Leg" + id = "janus_left_leg" + build_path = /obj/item/mecha_parts/part/janus_left_leg + time = 200 + materials = list(DEFAULT_WALL_MATERIAL = 30000, MAT_METALHYDROGEN = 3000, MAT_DURASTEEL = 2000, MAT_MORPHIUM = 3000, MAT_GOLD = 5000, MAT_URANIUM = 7000) + +/datum/design/item/mechfab/janus/right_leg + name = "Prototype Durand Right Leg" + id = "janus_right_leg" + build_path = /obj/item/mecha_parts/part/janus_right_leg + time = 200 + materials = list(DEFAULT_WALL_MATERIAL = 30000, MAT_METALHYDROGEN = 3000, MAT_DURASTEEL = 2000, MAT_MORPHIUM = 3000, MAT_GOLD = 5000, MAT_URANIUM = 7000) + +/datum/design/item/mechfab/janus/phase_coil + name = "Janus Phase Coil" + id = "janus_coil" + build_path = /obj/item/prop/alien/phasecoil + time = 600 + materials = list(MAT_SUPERMATTER = 2000, MAT_PLASTEEL = 60000, MAT_URANIUM = 3250, MAT_DURASTEEL = 2000, MAT_MORPHIUM = 3000, MAT_GOLD = 5000, MAT_VERDANTIUM = 5000, MAT_DIAMOND = 10000, MAT_LEAD = 15000) + /datum/design/item/mecha build_type = MECHFAB category = "Exosuit Equipment" diff --git a/icons/mecha/mech_construct.dmi b/icons/mecha/mech_construct.dmi index 22b85b0a78..c82a34446b 100644 Binary files a/icons/mecha/mech_construct.dmi and b/icons/mecha/mech_construct.dmi differ diff --git a/icons/mecha/mech_construction.dmi b/icons/mecha/mech_construction.dmi index 225958a7db..d43ef2ede7 100644 Binary files a/icons/mecha/mech_construction.dmi and b/icons/mecha/mech_construction.dmi differ diff --git a/icons/mecha/mecha.dmi b/icons/mecha/mecha.dmi index c681373734..65dfa98237 100644 Binary files a/icons/mecha/mecha.dmi and b/icons/mecha/mecha.dmi differ