diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index ac3e5c3d61..f463c9bd0f 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -110,6 +110,7 @@ slowdown = 1 armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0 + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS /obj/item/clothing/suit/space/cult/cultify() diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index db9d51290f..6387e84399 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -42,6 +42,7 @@ H.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/white(H), slot_head) H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt) H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves) + H.equip_to_slot_or_del(new /obj/item/weapon/weldingtool/experimental(H), slot_r_store) return 1 equip_survival(var/mob/living/carbon/human/H) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index c0f2a284f4..e50688b7a9 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -2,7 +2,7 @@ name = "\improper IV drip" icon = 'icons/obj/iv_drip.dmi' anchored = 0 - density = 1 + density = 0 /obj/machinery/iv_drip/var/mob/living/carbon/human/attached = null diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 8e6e5ca682..fac5e9fb70 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -74,7 +74,7 @@ new /obj/item/clothing/gloves/yellow(src) new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wrench(src) - new /obj/item/weapon/weldingtool(src) + new /obj/item/weapon/weldingtool/experimental(src) new /obj/item/weapon/crowbar(src) new /obj/item/weapon/wirecutters(src) new /obj/item/device/multitool(src) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index c61ee90918..c39053b5aa 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -390,16 +390,21 @@ w_class = ITEMSIZE_NORMAL origin_tech = list(TECH_ENGINEERING = 4, TECH_PHORON = 3) matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120) - var/last_gen = 0 + var/nextrefueltick = 0 +/obj/item/weapon/weldingtool/experimental/New() + processing_objects |= src + ..() +/obj/item/weapon/weldingtool/experimental/Destroy() + processing_objects -= src + ..() -/obj/item/weapon/weldingtool/experimental/proc/fuel_gen()//Proc to make the experimental welder generate fuel, optimized as fuck -Sieve - var/gen_amount = ((world.time-last_gen)/25) - reagents += (gen_amount) - if(reagents > max_fuel) - reagents = max_fuel - +/obj/item/weapon/weldingtool/experimental/process() + ..() + if(get_fuel() < max_fuel && nextrefueltick < world.time) + nextrefueltick = world.time + 10 + reagents.add_reagent("fuel", 1) /* * Crowbar */ diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 28fea14370..df4fcc83f6 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -288,8 +288,8 @@ src.add_fingerprint(user) return -/obj/structure/closet/attack_ai(mob/user) - if(istype(user, /mob/living/silicon/robot) && Adjacent(user)) // Robots can open/close it, but not the AI. +/obj/structure/closet/attack_robot(mob/user) + if(Adjacent(user)) attack_hand(user) /obj/structure/closet/relaymove(mob/user as mob) @@ -317,7 +317,7 @@ if(!usr.canmove || usr.stat || usr.restrained()) return - if(ishuman(usr)) + if(ishuman(usr) || isrobot(usr)) src.add_fingerprint(usr) src.toggle(usr) else diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 49fe7bbdd3..5a6962f710 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -134,7 +134,7 @@ if(!usr.canmove || usr.stat || usr.restrained()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain return - if(ishuman(usr)) + if(ishuman(usr) || isrobot(usr)) src.add_fingerprint(usr) src.togglelock(usr) else diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 931a990085..62a3c64e48 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -177,7 +177,7 @@ if(!usr.canmove || usr.stat || usr.restrained()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain return - if(ishuman(usr)) + if(ishuman(usr) || isrobot(usr)) src.add_fingerprint(usr) src.togglelock(usr) else diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index 8f2d5af598..3891bf0562 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -21,7 +21,7 @@ var/list/gear_datums = list() if(!use_name) error("Loadout - Missing display name: [G]") continue - if(!initial(G.cost)) + if(isnull(initial(G.cost))) error("Loadout - Missing cost: [G]") continue if(!initial(G.path)) diff --git a/code/modules/client/preference_setup/loadout/loadout_utility.dm b/code/modules/client/preference_setup/loadout/loadout_utility.dm index 653f925641..7ce24eb116 100644 --- a/code/modules/client/preference_setup/loadout/loadout_utility.dm +++ b/code/modules/client/preference_setup/loadout/loadout_utility.dm @@ -11,6 +11,7 @@ /datum/gear/utility/communicator display_name = "personal communicator" path = /obj/item/device/communicator + cost = 0 /datum/gear/utility/folder_blue display_name = "folder, blue" diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index c3c30ae381..f4b7101b82 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -76,7 +76,7 @@ body_parts_covered = 0 siemens_coefficient = 0.9 -/obj/item/clothing/suit/space/pirate +/obj/item/clothing/suit/space/pirate //Whhhhyyyyyyy??? name = "pirate coat" desc = "Yarr." icon_state = "pirate" @@ -85,6 +85,7 @@ slowdown = 0 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0.9 + flags_inv = HIDETAIL|HIDEHOLSTER body_parts_covered = UPPER_TORSO|ARMS //Orange emergency space suit diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index d21a86b731..ee6eba13d6 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -12,6 +12,7 @@ var/image/mob_overlay = null var/overlay_state = null var/concealed_holster = 0 + var/mob/living/carbon/human/wearer = null //To check if the wearer changes, so species spritesheets change properly. sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/ties.dmi') //Teshari can into webbing, too! @@ -21,23 +22,27 @@ /obj/item/clothing/accessory/proc/get_inv_overlay() if(!inv_overlay) - if(!mob_overlay) - get_mob_overlay() - var/tmp_icon_state = "[overlay_state? "[overlay_state]" : "[icon_state]"]" if(icon_override) if("[tmp_icon_state]_tie" in icon_states(icon_override)) tmp_icon_state = "[tmp_icon_state]_tie" - inv_overlay = image(icon = mob_overlay.icon, icon_state = tmp_icon_state, dir = SOUTH) + inv_overlay = image(icon = INV_ACCESSORIES_DEF_ICON, icon_state = tmp_icon_state, dir = SOUTH) return inv_overlay /obj/item/clothing/accessory/proc/get_mob_overlay() - if(!mob_overlay) + if(!mob_overlay || has_suit.loc != wearer) var/tmp_icon_state = "[overlay_state? "[overlay_state]" : "[icon_state]"]" + if(ishuman(has_suit.loc)) + wearer = has_suit.loc + else + wearer = null + if(icon_override) if("[tmp_icon_state]_mob" in icon_states(icon_override)) tmp_icon_state = "[tmp_icon_state]_mob" mob_overlay = image("icon" = icon_override, "icon_state" = "[tmp_icon_state]") + else if(wearer && sprite_sheets[wearer.species.get_bodytype(wearer)]) //Teshari can finally into webbing, too! + mob_overlay = image("icon" = sprite_sheets[wearer.species.get_bodytype(wearer)], "icon_state" = "[tmp_icon_state]") else mob_overlay = image("icon" = INV_ACCESSORIES_DEF_ICON, "icon_state" = "[tmp_icon_state]") return mob_overlay diff --git a/code/modules/events/event_dynamic.dm b/code/modules/events/event_dynamic.dm index 99b4855d73..9f8eca869c 100644 --- a/code/modules/events/event_dynamic.dm +++ b/code/modules/events/event_dynamic.dm @@ -196,13 +196,13 @@ var/list/event_last_fired = list() if(istype(M, /mob/living/silicon/robot)) var/mob/living/silicon/robot/R = M if(R.module) - if(istype(R.module, /obj/item/weapon/robot_module/engineering)) + if(istype(R.module, /obj/item/weapon/robot_module/robot/engineering)) active_with_role["Engineer"]++ - else if(istype(R.module, /obj/item/weapon/robot_module/security)) + else if(istype(R.module, /obj/item/weapon/robot_module/robot/security)) active_with_role["Security"]++ - else if(istype(R.module, /obj/item/weapon/robot_module/medical)) + else if(istype(R.module, /obj/item/weapon/robot_module/robot/medical)) active_with_role["Medical"]++ - else if(istype(R.module, /obj/item/weapon/robot_module/research)) + else if(istype(R.module, /obj/item/weapon/robot_module/robot/research)) active_with_role["Scientist"]++ if(M.mind.assigned_role in engineering_positions) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index beb6f29d7d..ec3721b78a 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -343,14 +343,10 @@ else adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS) - if(should_have_organ(O_LUNGS)) + if(breath && should_have_organ(O_LUNGS)) var/obj/item/organ/internal/lungs/L = internal_organs_by_name[O_LUNGS] if(!L.is_bruised() && prob(8)) - if(breath.total_moles) - if(breath.total_moles < BREATH_MOLES / 5 || breath.total_moles > BREATH_MOLES * 5) - rupture_lung() - else - rupture_lung() + rupture_lung() if(should_have_organ("brain")) if(prob(5)) @@ -372,6 +368,9 @@ safe_pressure_min *= 1.5 else if(L.is_bruised()) safe_pressure_min *= 1.25 + else if(breath.total_moles < BREATH_MOLES / 5 || breath.total_moles > BREATH_MOLES * 5) + if (prob(8)) + rupture_lung() var/safe_exhaled_max = 10 var/safe_toxins_max = 0.2 @@ -1672,4 +1671,4 @@ ..() #undef HUMAN_MAX_OXYLOSS -#undef HUMAN_CRIT_MAX_OXYLOSS \ No newline at end of file +#undef HUMAN_CRIT_MAX_OXYLOSS diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 11eaf182da..5010b66cbc 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -470,7 +470,7 @@ var/global/list/damage_icon_parts = list() //vvvvvv UPDATE_INV PROCS vvvvvv /mob/living/carbon/human/update_inv_w_uniform(var/update_icons=1) - if(w_uniform && istype(w_uniform, /obj/item/clothing/under) ) + if( (w_uniform && istype(w_uniform, /obj/item/clothing/under)) && !(wear_suit && istype(wear_suit, /obj/item/clothing/suit/space) && wear_suit.flags_inv & HIDEJUMPSUIT && !istype(wear_suit, /obj/item/clothing/suit/space/rig) )) w_uniform.screen_loc = ui_iclothing //determine the icon to use @@ -793,16 +793,15 @@ var/global/list/damage_icon_parts = list() standing.overlays |= A.get_mob_overlay() overlays_standing[SUIT_LAYER] = standing - update_tail_showing(0) else overlays_standing[SUIT_LAYER] = null - update_tail_showing(0) + //Hide/show other layers if necessary update_collar(0) - - //hide/show shoes if necessary + update_inv_w_uniform(0) update_inv_shoes(0) + update_tail_showing(0) if(update_icons) update_icons() diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm index 7f2102a860..36a7e4511d 100644 --- a/code/modules/mob/living/silicon/robot/emote.dm +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -220,7 +220,7 @@ m_type = 1 if("law") - if (istype(module,/obj/item/weapon/robot_module/security)) + if (istype(module,/obj/item/weapon/robot_module/robot/security)) message = "shows its legal authorization barcode." playsound(src.loc, 'sound/voice/biamthelaw.ogg', 50, 0) @@ -229,7 +229,7 @@ src << "You are not THE LAW, pal." if("halt") - if (istype(module,/obj/item/weapon/robot_module/security)) + if (istype(module,/obj/item/weapon/robot_module/robot/security)) message = "[src]'s speakers skreech, \"Halt! Security!\"." playsound(src.loc, 'sound/voice/halt.ogg', 50, 0) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 2e666cff99..27a98d5d01 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -826,7 +826,7 @@ . = ..() if(module) - if(module.type == /obj/item/weapon/robot_module/janitor) + if(module.type == /obj/item/weapon/robot_module/robot/janitor) var/turf/tile = loc if(isturf(tile)) tile.clean_blood() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 879f3f4cc5..45af995df8 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -1,16 +1,16 @@ var/global/list/robot_modules = list( - "Standard" = /obj/item/weapon/robot_module/standard, - "Service" = /obj/item/weapon/robot_module/clerical/butler, - "Clerical" = /obj/item/weapon/robot_module/clerical/general, - "Research" = /obj/item/weapon/robot_module/research, - "Miner" = /obj/item/weapon/robot_module/miner, - "Crisis" = /obj/item/weapon/robot_module/medical/crisis, - "Surgeon" = /obj/item/weapon/robot_module/medical/surgeon, - "Security" = /obj/item/weapon/robot_module/security/general, - "Combat" = /obj/item/weapon/robot_module/security/combat, - "Engineering" = /obj/item/weapon/robot_module/engineering/general, - "Construction" = /obj/item/weapon/robot_module/engineering/construction, - "Janitor" = /obj/item/weapon/robot_module/janitor + "Standard" = /obj/item/weapon/robot_module/robot/standard, + "Service" = /obj/item/weapon/robot_module/robot/clerical/butler, + "Clerical" = /obj/item/weapon/robot_module/robot/clerical/general, + "Research" = /obj/item/weapon/robot_module/robot/research, + "Miner" = /obj/item/weapon/robot_module/robot/miner, + "Crisis" = /obj/item/weapon/robot_module/robot/medical/crisis, + "Surgeon" = /obj/item/weapon/robot_module/robot/medical/surgeon, + "Security" = /obj/item/weapon/robot_module/robot/security/general, + "Combat" = /obj/item/weapon/robot_module/robot/security/combat, + "Engineering" = /obj/item/weapon/robot_module/robot/engineering/general, + "Construction" = /obj/item/weapon/robot_module/robot/engineering/construction, + "Janitor" = /obj/item/weapon/robot_module/robot/janitor ) /obj/item/weapon/robot_module @@ -149,7 +149,14 @@ var/global/list/robot_modules = list( if(!can_be_pushed) R.status_flags |= CANPUSH -/obj/item/weapon/robot_module/standard +// Cyborgs (non-drones), default loadout. This will be given to every module. +/obj/item/weapon/robot_module/robot/New() + ..() + src.modules += new /obj/item/device/flash(src) + src.modules += new /obj/item/weapon/crowbar(src) + src.modules += new /obj/item/weapon/extinguisher(src) + +/obj/item/weapon/robot_module/robot/standard name = "standard robot module" sprites = list( "Basic" = "robot_old", "Android" = "droid", @@ -157,24 +164,21 @@ var/global/list/robot_modules = list( "Drone" = "drone-standard" ) -/obj/item/weapon/robot_module/standard/New() - src.modules += new /obj/item/device/flash(src) +/obj/item/weapon/robot_module/robot/standard/New() + ..() src.modules += new /obj/item/weapon/melee/baton/loaded(src) - src.modules += new /obj/item/weapon/extinguisher(src) src.modules += new /obj/item/weapon/wrench(src) - src.modules += new /obj/item/weapon/crowbar(src) src.modules += new /obj/item/device/healthanalyzer(src) src.emag = new /obj/item/weapon/melee/energy/sword(src) - ..() -/obj/item/weapon/robot_module/medical +/obj/item/weapon/robot_module/robot/medical name = "medical robot module" channels = list("Medical" = 1) networks = list(NETWORK_MEDICAL) subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor) can_be_pushed = 0 -/obj/item/weapon/robot_module/medical/surgeon +/obj/item/weapon/robot_module/robot/medical/surgeon name = "surgeon robot module" sprites = list( "Basic" = "Medbot", @@ -184,8 +188,8 @@ var/global/list/robot_modules = list( "Drone" = "drone-surgery" ) -/obj/item/weapon/robot_module/medical/surgeon/New() - src.modules += new /obj/item/device/flash(src) +/obj/item/weapon/robot_module/robot/medical/surgeon/New() + ..() src.modules += new /obj/item/device/healthanalyzer(src) src.modules += new /obj/item/weapon/reagent_containers/borghypo(src) src.modules += new /obj/item/weapon/scalpel(src) @@ -198,7 +202,6 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/circular_saw(src) src.modules += new /obj/item/weapon/surgicaldrill(src) src.modules += new /obj/item/weapon/gripper/no_use/organ(src) - src.modules += new /obj/item/weapon/extinguisher/mini(src) src.emag = new /obj/item/weapon/reagent_containers/spray(src) src.emag.reagents.add_reagent("pacid", 250) src.emag.name = "Polyacid spray" @@ -217,15 +220,13 @@ var/global/list/robot_modules = list( src.modules += N src.modules += B - ..() - -/obj/item/weapon/robot_module/medical/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) +/obj/item/weapon/robot_module/medical/robot/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) if(src.emag) var/obj/item/weapon/reagent_containers/spray/PS = src.emag PS.reagents.add_reagent("pacid", 2 * amount) ..() -/obj/item/weapon/robot_module/medical/crisis +/obj/item/weapon/robot_module/robot/medical/crisis name = "crisis robot module" sprites = list( "Basic" = "Medbot", @@ -236,8 +237,8 @@ var/global/list/robot_modules = list( "Drone - Chemistry" = "drone-chemistry" ) -/obj/item/weapon/robot_module/medical/crisis/New() - src.modules += new /obj/item/device/flash(src) +/obj/item/weapon/robot_module/robot/medical/crisis/New() + ..() src.modules += new /obj/item/borg/sight/hud/med(src) src.modules += new /obj/item/device/healthanalyzer(src) src.modules += new /obj/item/device/reagent_scanner/adv(src) @@ -248,7 +249,6 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/reagent_containers/syringe(src) src.modules += new /obj/item/weapon/gripper/no_use/organ(src) src.modules += new /obj/item/weapon/gripper/chemistry(src) - src.modules += new /obj/item/weapon/extinguisher/mini(src) src.emag = new /obj/item/weapon/reagent_containers/spray(src) src.emag.reagents.add_reagent("pacid", 250) src.emag.name = "Polyacid spray" @@ -272,9 +272,7 @@ var/global/list/robot_modules = list( src.modules += B src.modules += S - ..() - -/obj/item/weapon/robot_module/medical/crisis/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) +/obj/item/weapon/robot_module/robot/medical/crisis/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules if(S.mode == 2) @@ -290,7 +288,7 @@ var/global/list/robot_modules = list( ..() -/obj/item/weapon/robot_module/engineering +/obj/item/weapon/robot_module/robot/engineering name = "engineering robot module" channels = list("Engineering" = 1) networks = list(NETWORK_ENGINEERING) @@ -303,18 +301,16 @@ var/global/list/robot_modules = list( "Drone" = "drone-engineer" ) -/obj/item/weapon/robot_module/engineering/construction +/obj/item/weapon/robot_module/robot/engineering/construction name = "construction robot module" no_slip = 1 -/obj/item/weapon/robot_module/engineering/construction/New() - src.modules += new /obj/item/device/flash(src) +/obj/item/weapon/robot_module/robot/engineering/construction/New() + ..() src.modules += new /obj/item/borg/sight/meson(src) - src.modules += new /obj/item/weapon/extinguisher(src) src.modules += new /obj/item/weapon/rcd/borg(src) src.modules += new /obj/item/weapon/screwdriver(src) src.modules += new /obj/item/weapon/wrench(src) - src.modules += new /obj/item/weapon/crowbar(src) src.modules += new /obj/item/weapon/weldingtool/largetank(src) src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) src.modules += new /obj/item/device/pipe_painter(src) @@ -348,16 +344,12 @@ var/global/list/robot_modules = list( RG.synths = list(metal, glass) src.modules += RG +/obj/item/weapon/robot_module/robot/engineering/general/New() ..() - -/obj/item/weapon/robot_module/engineering/general/New() - src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/borg/sight/meson(src) - src.modules += new /obj/item/weapon/extinguisher(src) src.modules += new /obj/item/weapon/weldingtool/largetank(src) src.modules += new /obj/item/weapon/screwdriver(src) src.modules += new /obj/item/weapon/wrench(src) - src.modules += new /obj/item/weapon/crowbar(src) src.modules += new /obj/item/weapon/wirecutters(src) src.modules += new /obj/item/device/multitool(src) src.modules += new /obj/item/device/t_scanner(src) @@ -405,9 +397,7 @@ var/global/list/robot_modules = list( RG.synths = list(metal, glass) src.modules += RG - ..() - -/obj/item/weapon/robot_module/security +/obj/item/weapon/robot_module/robot/security name = "security robot module" channels = list("Security" = 1) networks = list(NETWORK_SECURITY) @@ -415,7 +405,7 @@ var/global/list/robot_modules = list( can_be_pushed = 0 supported_upgrades = list(/obj/item/borg/upgrade/tasercooler) -/obj/item/weapon/robot_module/security/general +/obj/item/weapon/robot_module/robot/security/general sprites = list( "Basic" = "secborg", "Red Knight" = "Security", @@ -425,8 +415,8 @@ var/global/list/robot_modules = list( "Drone" = "drone-sec" ) -/obj/item/weapon/robot_module/security/general/New() - src.modules += new /obj/item/device/flash(src) +/obj/item/weapon/robot_module/robot/security/general/New() + ..() src.modules += new /obj/item/borg/sight/hud/sec(src) src.modules += new /obj/item/weapon/handcuffs/cyborg(src) src.modules += new /obj/item/weapon/melee/baton/robot(src) @@ -434,9 +424,8 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/taperoll/police(src) src.modules += new /obj/item/weapon/reagent_containers/spray/pepper(src) src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) - ..() -/obj/item/weapon/robot_module/security/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) +/obj/item/weapon/robot_module/robot/security/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/device/flash/F = locate() in src.modules if(F.broken) F.broken = 0 @@ -454,7 +443,7 @@ var/global/list/robot_modules = list( if(B && B.bcell) B.bcell.give(amount) -/obj/item/weapon/robot_module/janitor +/obj/item/weapon/robot_module/robot/janitor name = "janitorial robot module" channels = list("Service" = 1) sprites = list( @@ -464,8 +453,8 @@ var/global/list/robot_modules = list( "Drone" = "drone-janitor" ) -/obj/item/weapon/robot_module/janitor/New() - src.modules += new /obj/item/device/flash(src) +/obj/item/weapon/robot_module/robot/janitor/New() + ..() src.modules += new /obj/item/weapon/soap/nanotrasen(src) src.modules += new /obj/item/weapon/storage/bag/trash(src) src.modules += new /obj/item/weapon/mop(src) @@ -473,16 +462,15 @@ var/global/list/robot_modules = list( src.emag = new /obj/item/weapon/reagent_containers/spray(src) src.emag.reagents.add_reagent("lube", 250) src.emag.name = "Lube spray" - ..() -/obj/item/weapon/robot_module/janitor/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) +/obj/item/weapon/robot_module/robot/janitor/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/device/lightreplacer/LR = locate() in src.modules LR.Charge(R, amount) if(src.emag) var/obj/item/weapon/reagent_containers/spray/S = src.emag S.reagents.add_reagent("lube", 2 * amount) -/obj/item/weapon/robot_module/clerical +/obj/item/weapon/robot_module/robot/clerical name = "service robot module" channels = list("Service" = 1) languages = list( @@ -496,7 +484,7 @@ var/global/list/robot_modules = list( LANGUAGE_SCHECHI = 1 ) -/obj/item/weapon/robot_module/clerical/butler +/obj/item/weapon/robot_module/robot/clerical/butler sprites = list( "Waitress" = "Service", "Kent" = "toiletbot", "Bro" = "Brobot", @@ -506,8 +494,8 @@ var/global/list/robot_modules = list( "Drone - Hydro" = "drone-hydro" ) -/obj/item/weapon/robot_module/clerical/butler/New() - src.modules += new /obj/item/device/flash(src) +/obj/item/weapon/robot_module/robot/clerical/butler/New() + ..() src.modules += new /obj/item/weapon/gripper/service(src) src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src) src.modules += new /obj/item/weapon/material/minihoe(src) @@ -537,9 +525,8 @@ var/global/list/robot_modules = list( R.my_atom = src.emag R.add_reagent("beer2", 50) src.emag.name = "Mickey Finn's Special Brew" - ..() -/obj/item/weapon/robot_module/clerical/general +/obj/item/weapon/robot_module/robot/clerical/general name = "clerical robot module" sprites = list( "Waitress" = "Service", @@ -550,8 +537,8 @@ var/global/list/robot_modules = list( "Drone" = "drone-service" ) -/obj/item/weapon/robot_module/clerical/general/New() - src.modules += new /obj/item/device/flash(src) +/obj/item/weapon/robot_module/robot/clerical/general/New() + ..() src.modules += new /obj/item/weapon/pen/robopen(src) src.modules += new /obj/item/weapon/form_printer(src) src.modules += new /obj/item/weapon/gripper/paperwork(src) @@ -568,7 +555,7 @@ var/global/list/robot_modules = list( var/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/B = src.emag B.reagents.add_reagent("beer2", 2 * amount) -/obj/item/weapon/robot_module/miner +/obj/item/weapon/robot_module/robot/miner name = "miner robot module" channels = list("Supply" = 1) networks = list(NETWORK_MINE) @@ -580,8 +567,8 @@ var/global/list/robot_modules = list( ) supported_upgrades = list(/obj/item/borg/upgrade/jetpack) -/obj/item/weapon/robot_module/miner/New() - src.modules += new /obj/item/device/flash(src) +/obj/item/weapon/robot_module/robot/miner/New() + ..() src.modules += new /obj/item/borg/sight/material(src) src.modules += new /obj/item/weapon/wrench(src) src.modules += new /obj/item/weapon/screwdriver(src) @@ -590,11 +577,9 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) src.modules += new /obj/item/weapon/gripper/miner(src) src.modules += new /obj/item/weapon/mining_scanner(src) - src.modules += new /obj/item/weapon/crowbar(src) src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src) - ..() -/obj/item/weapon/robot_module/research +/obj/item/weapon/robot_module/robot/research name = "research module" channels = list("Science" = 1) sprites = list( @@ -602,8 +587,8 @@ var/global/list/robot_modules = list( "Drone" = "drone-science" ) -/obj/item/weapon/robot_module/research/New() - src.modules += new /obj/item/device/flash(src) +/obj/item/weapon/robot_module/robot/research/New() + ..() src.modules += new /obj/item/weapon/portable_destructive_analyzer(src) src.modules += new /obj/item/weapon/gripper/research(src) src.modules += new /obj/item/weapon/gripper/no_use/organ/robotics(src) @@ -614,12 +599,10 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/weldingtool/largetank(src) src.modules += new /obj/item/weapon/screwdriver(src) src.modules += new /obj/item/weapon/wrench(src) - src.modules += new /obj/item/weapon/crowbar(src) src.modules += new /obj/item/weapon/wirecutters(src) src.modules += new /obj/item/device/multitool(src) src.modules += new /obj/item/weapon/scalpel(src) src.modules += new /obj/item/weapon/circular_saw(src) - src.modules += new /obj/item/weapon/extinguisher/mini(src) src.modules += new /obj/item/weapon/reagent_containers/syringe(src) src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) src.emag = new /obj/item/weapon/hand_tele(src) @@ -639,9 +622,7 @@ var/global/list/robot_modules = list( C.synths = list(wire) src.modules += C - ..() - -/obj/item/weapon/robot_module/syndicate +/obj/item/weapon/robot_module/robot/syndicate name = "illegal robot module" hide_on_manifest = 1 languages = list( @@ -659,9 +640,9 @@ var/global/list/robot_modules = list( ) var/id -/obj/item/weapon/robot_module/syndicate/New(var/mob/living/silicon/robot/R) +/obj/item/weapon/robot_module/robot/syndicate/New(var/mob/living/silicon/robot/R) + ..() loc = R - src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/weapon/melee/energy/sword(src) src.modules += new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(src) src.modules += new /obj/item/weapon/card/emag(src) @@ -671,19 +652,19 @@ var/global/list/robot_modules = list( id = R.idcard src.modules += id - ..() -/obj/item/weapon/robot_module/syndicate/Destroy() +/obj/item/weapon/robot_module/robot/syndicate/Destroy() src.modules -= id id = null return ..() -/obj/item/weapon/robot_module/security/combat +/obj/item/weapon/robot_module/robot/security/combat name = "combat robot module" hide_on_manifest = 1 sprites = list("Combat Android" = "droid-combat") -/obj/item/weapon/robot_module/security/combat/New() +/obj/item/weapon/robot_module/robot/security/combat/New() + ..() src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/borg/sight/thermal(src) src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src) @@ -691,7 +672,6 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/borg/combat/shield(src) src.modules += new /obj/item/borg/combat/mobility(src) src.emag = new /obj/item/weapon/gun/energy/lasercannon/mounted(src) - ..() /obj/item/weapon/robot_module/drone name = "drone module" @@ -700,6 +680,7 @@ var/global/list/robot_modules = list( networks = list(NETWORK_ENGINEERING) /obj/item/weapon/robot_module/drone/New(var/mob/living/silicon/robot/robot) + ..() src.modules += new /obj/item/weapon/weldingtool(src) src.modules += new /obj/item/weapon/screwdriver(src) src.modules += new /obj/item/weapon/wrench(src) @@ -774,8 +755,6 @@ var/global/list/robot_modules = list( P.synths = list(plastic) src.modules += P - ..() - /obj/item/weapon/robot_module/drone/construction name = "construction drone module" hide_on_manifest = 1 @@ -783,8 +762,8 @@ var/global/list/robot_modules = list( languages = list() /obj/item/weapon/robot_module/drone/construction/New() - src.modules += new /obj/item/weapon/rcd/borg(src) ..() + src.modules += new /obj/item/weapon/rcd/borg(src) /obj/item/weapon/robot_module/drone/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/device/lightreplacer/LR = locate() in src.modules diff --git a/code/modules/mob/living/silicon/robot/syndicate.dm b/code/modules/mob/living/silicon/robot/syndicate.dm index af46cd6fcf..acd441171b 100644 --- a/code/modules/mob/living/silicon/robot/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/syndicate.dm @@ -20,7 +20,7 @@ laws = new /datum/ai_laws/syndicate_override overlays.Cut() init_id() - new /obj/item/weapon/robot_module/syndicate(src) + new /obj/item/weapon/robot_module/robot/syndicate(src) radio.keyslot = new /obj/item/device/encryptionkey/syndicate(radio) radio.recalculateChannels() diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 4bf97175d1..308cbe4514 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -105,8 +105,13 @@ if(H.species && !H.should_have_organ(O_HEART)) H.reagents.trans_to_obj(src, amount) else + if(ismob(H) && H != user) + if(!do_mob(user, target, time)) + return B = T.take_blood(src, amount) else + if(!do_mob(user, target, time)) + return B = T.take_blood(src,amount) if (B) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 1c72024342..38f3022c9c 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -349,6 +349,7 @@ other types of metals and chemistry for reagents). materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 1000, "diamond" = 2000) build_path = /obj/item/weapon/pickaxe/diamonddrill sort_string = "KAAAE" + /////////////////////////////////// /////////Shield Generators///////// /////////////////////////////////// @@ -731,6 +732,14 @@ other types of metals and chemistry for reagents). build_path = /obj/item/weapon/storage/box/syndie_kit/chameleon sort_string = "VASBA" +/datum/design/item/experimental_welder + name = "Expiermental Welding Tool" + desc = "A welding tool that generate fuel for itself." + id = "expwelder" + req_tech = list(TECH_ENGINEERING = 4, TECH_PHORON = 3, TECH_MATERIAL = 4) + materials = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120, "phoron" = 100) + build_path = /obj/item/weapon/weldingtool/experimental + sort_string = "VASCA" /* CIRCUITS BELOW */ diff --git a/code/unit_tests/loadout_tests.dm b/code/unit_tests/loadout_tests.dm index 7ca778655a..aba7184229 100644 --- a/code/unit_tests/loadout_tests.dm +++ b/code/unit_tests/loadout_tests.dm @@ -9,7 +9,7 @@ if(!initial(G.display_name)) log_unit_test("[G]: Loadout - Missing display name.") failed = 1 - else if(!initial(G.cost)) + else if(isnull(initial(G.cost))) log_unit_test("[G]: Loadout - Missing cost.") failed = 1 else if(!initial(G.path)) diff --git a/html/changelog.html b/html/changelog.html index a5f0b2ec39..ecabd6edf5 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -53,6 +53,24 @@ -->
+

20 November 2016

+

Datraen updated:

+ +

Nerezza updated:

+ +

Yoshax updated:

+ +

18 November 2016

Anewbe updated: