From 9435db8c69214b9d57639a85d077b13f1e31ff63 Mon Sep 17 00:00:00 2001 From: Heroman Date: Wed, 9 Aug 2023 19:40:36 +1000 Subject: [PATCH] Feature completion for Dogborg Removal --- code/game/objects/items/trash_vr.dm | 2 +- .../objects/items/weapons/storage/bags.dm | 4 +- code/game/objects/structures/door_assembly.dm | 2 +- .../objects/structures/windoor_assembly.dm | 2 +- code/global.dm | 4 +- .../silicon/robot/dogborg/dog_modules_vr.dm | 84 +-- .../silicon/robot/dogborg/dog_sleeper_vr.dm | 26 +- .../modules/mob/living/silicon/robot/login.dm | 6 +- .../silicon/robot/robot_modules/event.dm | 8 +- .../silicon/robot/robot_modules/event_vr.dm | 46 -- .../silicon/robot/robot_modules/station.dm | 163 ++++-- .../silicon/robot/robot_modules/station_vr.dm | 515 ------------------ .../silicon/robot/robot_modules/swarm.dm | 6 +- .../silicon/robot/robot_modules/syndicate.dm | 13 +- .../silicon/robot/sprites/_sprite_datum.dm | 20 + .../living/silicon/robot/sprites/civilian.dm | 2 + .../living/silicon/robot/sprites/combat.dm | 20 + .../silicon/robot/sprites/engineering.dm | 1 + .../mob/living/silicon/robot/sprites/event.dm | 14 + .../living/silicon/robot/sprites/janitor.dm | 1 + .../living/silicon/robot/sprites/medical.dm | 58 ++ .../living/silicon/robot/sprites/mining.dm | 1 + .../living/silicon/robot/sprites/science.dm | 29 + .../living/silicon/robot/sprites/security.dm | 1 + .../silicon/robot/subtypes/lost_drone.dm | 158 ++++++ .../subtypes/thinktank/thinktank_module.dm | 4 +- icons/mob/dogborg_vr.dmi | Bin 31599 -> 29615 bytes vorestation.dme | 3 - 28 files changed, 484 insertions(+), 709 deletions(-) delete mode 100644 code/modules/mob/living/silicon/robot/robot_modules/event_vr.dm delete mode 100644 code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm diff --git a/code/game/objects/items/trash_vr.dm b/code/game/objects/items/trash_vr.dm index fc2d9971825..08fbdda5b6f 100644 --- a/code/game/objects/items/trash_vr.dm +++ b/code/game/objects/items/trash_vr.dm @@ -12,7 +12,7 @@ if(isrobot(M)) var/mob/living/silicon/robot/R = M - if(R.module.type == /obj/item/weapon/robot_module/robot/janitor/scrubpup) // You can now feed the trash borg yay. + if(R.module.type == /obj/item/weapon/robot_module/robot/janitor) // You can now feed the trash borg yay. playsound(src,'sound/items/eatfood.ogg', rand(10,50), 1) user.drop_item() forceMove(R.vore_selected) diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 3fdba7eaa94..01e0d7f2df6 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -469,8 +469,8 @@ // ----------------------------- // Food Bag (Service Hound) // ----------------------------- -/obj/item/weapon/storage/bag/dogborg - name = "dog bag" +/obj/item/weapon/storage/bag/serviceborg + name = "service bag" icon = 'icons/obj/storage_vr.dmi' icon_state = "foodbag" desc = "An intergrated bag for storing things of all kinds." diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 365507aa1b2..a484aa3efef 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -162,7 +162,7 @@ /obj/structure/door_assembly/attack_robot(mob/living/silicon/robot/user) if(Adjacent(user) && (user.module && (istype(user.module,/obj/item/weapon/robot_module/robot/engineering)) \ - || istype(user.module,/obj/item/weapon/robot_module/drone))) //Only dron (and engiborg) needs this. + || istype(user.module,/obj/item/weapon/robot_module/drone))) //Only drone (and engiborg) needs this. rename_door(user) /obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob) diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 2ab86a5bf0a..855e7fac117 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -77,7 +77,7 @@ /obj/structure/windoor_assembly/attack_robot(mob/living/silicon/robot/user) if(Adjacent(user) && (user.module && (istype(user.module,/obj/item/weapon/robot_module/robot/engineering)) \ - || istype(user.module,/obj/item/weapon/robot_module/drone))) //Only dron (and engiborg) needs this. + || istype(user.module,/obj/item/weapon/robot_module/drone))) //Only drone (and engiborg) needs this. rename_door(user) /obj/structure/windoor_assembly/attackby(obj/item/W as obj, mob/user as mob) diff --git a/code/global.dm b/code/global.dm index ae3ae2baa14..a313f42e31b 100644 --- a/code/global.dm +++ b/code/global.dm @@ -143,7 +143,7 @@ var/list/robot_module_types = list( ) // List of modules added during code red var/list/emergency_module_types = list( - "Combat", "ERT" + "Combat" ) // List of modules available to AI shells var/list/shell_module_types = list( @@ -151,7 +151,7 @@ var/list/shell_module_types = list( ) // List of whitelisted modules var/list/whitelisted_module_types = list( - "Lost", "Stray" + "Lost" ) // Some scary sounds. diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm index 5c9cb67364b..48d5b89ceec 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm @@ -48,19 +48,20 @@ update_icon() // Baton chompers -/obj/item/weapon/dogborg/jaws/ert - name = "ert jaws" +/obj/item/weapon/borg_combat_shocker + name = "combat shocker" icon = 'icons/mob/dogborg_vr.dmi' - icon_state = "ertjaws" - desc = "Shockingly chompy!" + icon_state = "combatshocker" + desc = "Shocking!" force = 15 throwforce = 0 - hitsound = 'sound/weapons/bite.ogg' - attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced") + hitsound = 'sound/weapons/genhit1.ogg' + attack_verb = list("hit") w_class = ITEMSIZE_NORMAL var/charge_cost = 15 + var/dogborg = FALSE -/obj/item/weapon/dogborg/jaws/ert/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) +/obj/item/weapon/borg_combat_shocker/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) if(isrobot(target)) return ..() @@ -80,9 +81,15 @@ stun *= 0.5 else if(affecting) - target.visible_message("[target] has been zap-chomped in the [affecting.name] with [src] by [user]!") + if(dogborg) + target.visible_message("[target] has been zap-chomped in the [affecting.name] with [src] by [user]!") + else + target.visible_message("[target] has been zapped in the [affecting.name] with [src] by [user]!") else - target.visible_message("[target] has been zap-chomped with [src] by [user]!") + if(dogborg) + target.visible_message("[target] has been zap-chomped with [src] by [user]!") + else + target.visible_message("[target] has been zapped with [src] by [user]!") playsound(src, 'sound/weapons/Egloves.ogg', 50, 1, -1) // Try to use power @@ -223,28 +230,19 @@ //Tongue stuff -/obj/item/device/dogborg/tongue +/obj/item/device/robot_tongue name = "synthetic tongue" desc = "Useful for slurping mess off the floor before affectionately licking the crew members in the face." icon = 'icons/mob/dogborg_vr.dmi' icon_state = "synthtongue" hitsound = 'sound/effects/attackblob.ogg' var/emagged = 0 - var/datum/matter_synth/water = null -/obj/item/device/dogborg/tongue/New() +/obj/item/device/robot_tongue/New() ..() flags |= NOBLUDGEON //No more attack messages -/obj/item/device/dogborg/tongue/examine(user) - . = ..() - if(Adjacent(user)) - if(water.energy) - . += "[src] is wet. Just like it should be." - if(water.energy < 5) - . += "[src] is dry." - -/obj/item/device/dogborg/tongue/attack_self(mob/user) +/obj/item/device/robot_tongue/attack_self(mob/user) var/mob/living/silicon/robot/R = user if(R.emagged || R.emag_items) emagged = !emagged @@ -260,29 +258,14 @@ icon_state = "synthtongue" update_icon() -/obj/item/device/dogborg/tongue/afterattack(atom/target, mob/user, proximity) +/obj/item/device/robot_tongue/afterattack(atom/target, mob/user, proximity) if(!proximity) return user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) if(user.client && (target in user.client.screen)) to_chat(user, "You need to take \the [target.name] off before cleaning it!") - if(istype(target, /obj/structure/sink) || istype(target, /obj/structure/toilet)) //Dog vibes. - user.visible_message("[user] begins to lap up water from [target.name].", "You begin to lap up water from [target.name].") - if(do_after (user, 50)) - water.add_charge(50) - to_chat(src, "You refill some of your water reserves.") - else if(water.energy < 5) - to_chat(user, "Your mouth feels dry. You should drink up some water .") return - else if(istype(target,/obj/effect/decal/cleanable)) - user.visible_message("[user] begins to lick off \the [target.name].", "You begin to lick off \the [target.name]...") - if(do_after (user, 50)) - to_chat(user, "You finish licking off \the [target.name].") - water.use_charge(5) - qdel(target) - var/mob/living/silicon/robot/R = user - R.cell.charge += 50 else if(istype(target,/obj/item)) if(istype(target,/obj/item/trash)) user.visible_message("[user] nibbles away at \the [target.name].", "You begin to nibble away at \the [target.name]...") @@ -292,7 +275,6 @@ qdel(target) var/mob/living/silicon/robot/R = user R.cell.charge += 250 - water.use_charge(5) return if(istype(target,/obj/item/weapon/cell)) user.visible_message("[user] begins cramming \the [target.name] down its throat.", "You begin cramming \the [target.name] down your throat...") @@ -302,16 +284,8 @@ var/mob/living/silicon/robot/R = user var/obj/item/weapon/cell/C = target R.cell.charge += C.charge / 3 - water.use_charge(5) qdel(target) return - user.visible_message("[user] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") - if(do_after (user, 50)) - to_chat(user, "You clean \the [target.name].") - water.use_charge(5) - var/obj/effect/decal/cleanable/C = locate() in target - qdel(C) - target.clean_blood() else if(ishuman(target)) if(src.emagged) var/mob/living/silicon/robot/R = user @@ -328,21 +302,9 @@ else user.visible_message("\The [user] affectionately licks all over \the [target]'s face!", "You affectionately lick all over \the [target]'s face!") playsound(src, 'sound/effects/attackblob.ogg', 50, 1) - water.use_charge(5) var/mob/living/carbon/human/H = target if(H.species.lightweight == 1) H.Weaken(3) - else - user.visible_message("[user] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...") - if(do_after (user, 50)) - to_chat(user, "You clean \the [target.name].") - var/obj/effect/decal/cleanable/C = locate() in target - qdel(C) - target.clean_blood() - water.use_charge(5) - if(istype(target, /turf/simulated)) - var/turf/simulated/T = target - T.dirt = 0 return /obj/item/pupscrubber @@ -378,11 +340,11 @@ recharge_time = 10 //Takes ten ticks to recharge a shot, so don't waste them all! //cell_type = null //Same cell as a taser until edits are made. -/obj/item/weapon/dogborg/swordtail - name = "sword tail" +/obj/item/weapon/combat_borgblade + name = "energy blade" icon = 'icons/mob/dogborg_vr.dmi' icon_state = "swordtail" - desc = "A glowing pink dagger normally attached to the end of a cyborg's tail. It appears to be extremely sharp." + desc = "A glowing dagger. It appears to be extremely sharp." force = 20 //Takes 5 hits to 100-0 sharp = TRUE edge = TRUE diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm index 7fda7ef0a5e..eb6eb754b5e 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm @@ -36,7 +36,6 @@ var/datum/matter_synth/glass = null var/datum/matter_synth/wood = null var/datum/matter_synth/plastic = null - var/datum/matter_synth/water = null var/digest_brute = 2 var/digest_burn = 3 var/digest_multiplier = 1 @@ -577,7 +576,6 @@ if(air_master.current_cycle%3==1 && length(touchable_items)) //Burn all the mobs or add them to the exclusion list - var/volume = 0 for(var/mob/living/T in (touchable_items)) touchable_items -= T //Exclude mobs from loose item picking. if((T.status_flags & GODMODE) || !T.digestable) @@ -591,8 +589,6 @@ var/actual_burn = T.getFireLoss() - old_burn var/damage_gain = actual_brute + actual_burn drain(-25 * damage_gain) //25*total loss as with voreorgan stats. - if(water) - water.add_charge(damage_gain) if(T.stat == DEAD) if(ishuman(T)) message_admins("[key_name(hound)] has digested [key_name(T)] as a dogborg. ([hound ? "JMP" : "null"])") @@ -626,15 +622,6 @@ items_preserved |= brain else T.drop_from_inventory(I, src) - if(ishuman(T)) - var/mob/living/carbon/human/Prey = T - volume = (Prey.bloodstr.total_volume + Prey.ingested.total_volume + Prey.touching.total_volume + Prey.weight) * Prey.size_multiplier - if(water) - water.add_charge(volume) - if(T.reagents) - volume = T.reagents.total_volume - if(water) - water.add_charge(volume) if(T.ckey) GLOB.prey_digested_roundstat++ if(patient == T) @@ -650,8 +637,6 @@ //Handle the target being anything but a /mob/living var/obj/item/T = target if(istype(T)) - if(T.reagents) - volume = T.reagents.total_volume var/digested = T.digest_act(item_storage = src) if(!digested) items_preserved |= T @@ -661,8 +646,6 @@ for(var/tech in tech_item.origin_tech) files.UpdateTech(tech, tech_item.origin_tech[tech]) synced = FALSE - if(volume && water) - water.add_charge(volume) if(recycles && T.matter) for(var/material in T.matter) var/total_material = T.matter[material] @@ -765,6 +748,15 @@ name = "Brew Belly" desc = "A mounted drunk tank unit with fuel processor." icon_state = "brewer" + max_item_count = 10 + recycles = FALSE + +/obj/item/device/dogborg/sleeper/compactor/generic + name = "Internal Cache" + desc = "An internal storage of no particularly specific purpose.." + icon_state = "sleeperd" + max_item_count = 10 + recycles = FALSE /obj/item/device/dogborg/sleeper/K9/ert name = "ERT Belly" diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm index cce5f9f6f71..3d11703e9f3 100644 --- a/code/modules/mob/living/silicon/robot/login.dm +++ b/code/modules/mob/living/silicon/robot/login.dm @@ -12,4 +12,8 @@ if(!icon_selected) icon_selection_tries = SSrobot_sprites.get_module_sprites_len(modtype, src) + 1 choose_icon(icon_selection_tries) - plane_holder.set_vis(VIS_AUGMENTED, TRUE) //VOREStation Add - ROBOT VISION IS AUGMENTED \ No newline at end of file + + if(sprite_datum && module) + sprite_datum.do_equipment_glamour(module) + + plane_holder.set_vis(VIS_AUGMENTED, TRUE) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_modules/event.dm b/code/modules/mob/living/silicon/robot/robot_modules/event.dm index db545667fb0..f6605b5a028 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/event.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/event.dm @@ -5,7 +5,7 @@ name = "lost robot module" hide_on_manifest = TRUE -/obj/item/weapon/robot_module/robot/lost/New(var/mob/living/silicon/robot/R) +/obj/item/weapon/robot_module/robot/lost/create_equipment(var/mob/living/silicon/robot/robot) ..() // Sec src.modules += new /obj/item/weapon/melee/baton/shocker/robot(src) @@ -14,6 +14,7 @@ // Med src.modules += new /obj/item/device/healthanalyzer(src) + src.modules += new /obj/item/weapon/shockpaddles/robot(src) src.modules += new /obj/item/weapon/reagent_containers/borghypo/lost(src) // Engi @@ -36,11 +37,14 @@ C.synths = list(wire) src.modules += C + src.modules += new /obj/item/device/dogborg/sleeper(src) + src.modules += new /obj/item/weapon/dogborg/pounce(src) + /obj/item/weapon/robot_module/robot/gravekeeper name = "gravekeeper robot module" hide_on_manifest = TRUE -/obj/item/weapon/robot_module/robot/gravekeeper/New(var/mob/living/silicon/robot/R) +/obj/item/weapon/robot_module/robot/gravekeeper/create_equipment(var/mob/living/silicon/robot/robot) ..() // For fending off animals and looters src.modules += new /obj/item/weapon/melee/baton/shocker/robot(src) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/event_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/event_vr.dm deleted file mode 100644 index 4e8ed600bc7..00000000000 --- a/code/modules/mob/living/silicon/robot/robot_modules/event_vr.dm +++ /dev/null @@ -1,46 +0,0 @@ -/obj/item/weapon/robot_module/robot/stray - name = "stray robot module" - hide_on_manifest = 1 - -/obj/item/weapon/robot_module/robot/stray/New(var/mob/living/silicon/robot/R) - ..() - // General - //src.modules += new /obj/item/device/dogborg/boop_module(src) - - // Sec - src.modules += new /obj/item/weapon/handcuffs/cyborg(src) - src.modules += new /obj/item/weapon/dogborg/jaws/big(src) - src.modules += new /obj/item/weapon/melee/baton/robot(src) - src.modules += new /obj/item/weapon/dogborg/pounce(src) - - // Med - src.modules += new /obj/item/device/healthanalyzer(src) - src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src) - - // Engi - src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src) - src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) - src.modules += new /obj/item/weapon/tool/wirecutters/cyborg(src) - src.modules += new /obj/item/device/multitool(src) - - // Boof - src.emag += new /obj/item/weapon/gun/energy/retro/mounted(src) - - var/datum/matter_synth/water = new /datum/matter_synth(500) //Starts full and has a max of 500 - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - synths += water - - var/obj/item/weapon/reagent_containers/borghypo/hound/lost/H = new /obj/item/weapon/reagent_containers/borghypo/hound/lost(src) - H.water = water - src.modules += H - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/dogborg/sleeper/B = new /obj/item/device/dogborg/sleeper(src) - B.water = water - src.modules += B \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index 9b6140ce549..666de996056 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -1,15 +1,15 @@ var/global/list/robot_modules = list( "Standard" = /obj/item/weapon/robot_module/robot/standard, - "Service" = /obj/item/weapon/robot_module/robot/clerical/butler/general, + "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/general, - "Miner" = /obj/item/weapon/robot_module/robot/miner/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, - "Janitor" = /obj/item/weapon/robot_module/robot/janitor/general, + "Engineering" = /obj/item/weapon/robot_module/robot/engineering, + "Janitor" = /obj/item/weapon/robot_module/robot/janitor, "Gravekeeper" = /obj/item/weapon/robot_module/robot/gravekeeper, "Lost" = /obj/item/weapon/robot_module/robot/lost, "Protector" = /obj/item/weapon/robot_module/robot/syndicate/protector, @@ -79,10 +79,14 @@ var/global/list/robot_modules = list( if(!R.client) R.icon_selected = FALSE // It wasnt a player selecting icon? Let them do it later! + create_equipment() for(var/obj/item/I in modules) I.canremove = FALSE +/obj/item/weapon/robot_module/proc/create_equipment(var/mob/living/silicon/robot/robot) + return + /obj/item/weapon/robot_module/proc/Reset(var/mob/living/silicon/robot/R) remove_camera_networks(R) remove_languages(R) @@ -191,11 +195,18 @@ var/global/list/robot_modules = list( "Away Team" = 1 ) +/obj/item/weapon/robot_module/robot/New(var/mob/living/silicon/robot/R) + ..() + + if(R.sprite_datum) + R.sprite_datum.do_equipment_glamour(src) + // Cyborgs (non-drones), default loadout. This will be given to every module. -/obj/item/weapon/robot_module/robot/New() +/obj/item/weapon/robot_module/robot/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/device/gps/robot(src) src.modules += new /obj/item/device/boop_module(src) + src.modules += new /obj/item/device/robot_tongue(src) src.modules += new /obj/item/device/flash/robot(src) src.modules += new /obj/item/weapon/extinguisher(src) src.modules += new /obj/item/weapon/tool/crowbar/cyborg(src) @@ -204,13 +215,16 @@ var/global/list/robot_modules = list( name = "standard robot module" pto_type = PTO_CIVILIAN -/obj/item/weapon/robot_module/robot/standard/New() +/obj/item/weapon/robot_module/robot/standard/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) src.modules += new /obj/item/device/healthanalyzer(src) src.modules += new /obj/item/weapon/melee/baton/loaded(src) src.emag += new /obj/item/weapon/melee/energy/sword(src) + src.modules += new /obj/item/device/dogborg/sleeper/compactor/generic(src) + src.emag += new /obj/item/weapon/dogborg/pounce(src) + /obj/item/weapon/robot_module/robot/medical name = "medical robot module" channels = list("Medical" = 1) @@ -222,7 +236,7 @@ var/global/list/robot_modules = list( name = "surgeon robot module" -/obj/item/weapon/robot_module/robot/medical/surgeon/New() +/obj/item/weapon/robot_module/robot/medical/surgeon/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/device/healthanalyzer(src) src.modules += new /obj/item/device/sleevemate(src) @@ -237,7 +251,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/surgical/bonesetter/cyborg(src) src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) src.modules += new /obj/item/weapon/surgical/surgicaldrill/cyborg(src) - src.modules += new /obj/item/weapon/surgical/bioregen/cyborg(src) //VoreStation Edit: LET ME SUCC + src.modules += new /obj/item/weapon/surgical/bioregen/cyborg(src) src.modules += new /obj/item/weapon/gripper/no_use/organ(src) src.modules += new /obj/item/weapon/gripper/medical(src) src.modules += new /obj/item/weapon/shockpaddles/robot(src) @@ -249,8 +263,6 @@ var/global/list/robot_modules = list( PS.reagents.add_reagent("pacid", 250) PS.name = "Polyacid spray" - src.emag += new /obj/item/weapon/dogborg/pounce(src) //Pounce, also, lets not give them polyacid spray - var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(10000) synths += medicine @@ -271,6 +283,7 @@ var/global/list/robot_modules = list( src.modules += O src.modules += new /obj/item/device/dogborg/sleeper/trauma(src) + src.emag += new /obj/item/weapon/dogborg/pounce(src) /obj/item/weapon/robot_module/robot/medical/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) @@ -290,7 +303,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/robot/medical/crisis name = "crisis robot module" -/obj/item/weapon/robot_module/robot/medical/crisis/New() +/obj/item/weapon/robot_module/robot/medical/crisis/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/device/healthanalyzer(src) src.modules += new /obj/item/device/sleevemate(src) @@ -303,7 +316,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/gripper/no_use/organ(src) src.modules += new /obj/item/weapon/gripper/medical(src) src.modules += new /obj/item/weapon/shockpaddles/robot(src) - src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) //VOREStation Add - This is kinda important for rescuing people without making it worse for everyone + src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) var/obj/item/weapon/reagent_containers/spray/PS = new /obj/item/weapon/reagent_containers/spray(src) src.emag += PS PS.reagents.add_reagent("pacid", 250) @@ -328,6 +341,9 @@ var/global/list/robot_modules = list( src.modules += B src.modules += S + src.modules += new /obj/item/device/dogborg/sleeper(src) + src.emag += new /obj/item/weapon/dogborg/pounce(src) //Pounce + /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 @@ -351,7 +367,7 @@ var/global/list/robot_modules = list( subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor) pto_type = PTO_ENGINEERING -/obj/item/weapon/robot_module/robot/engineering/general/New() +/obj/item/weapon/robot_module/robot/engineering/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/borg/sight/meson(src) src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) @@ -361,17 +377,16 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/device/multitool(src) src.modules += new /obj/item/device/t_scanner(src) src.modules += new /obj/item/device/analyzer(src) + src.modules += new /obj/item/device/geiger(src) src.modules += new /obj/item/taperoll/engineering(src) src.modules += new /obj/item/weapon/gripper(src) src.modules += new /obj/item/weapon/gripper/circuit(src) src.modules += new /obj/item/device/lightreplacer(src) - // RPDs do this already - //src.modules += new /obj/item/device/pipe_painter(src) src.modules += new /obj/item/weapon/pipe_dispenser(src) src.modules += new /obj/item/device/floor_painter(src) + src.modules += new /obj/item/weapon/rms(src) src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) src.emag += new /obj/item/weapon/melee/baton/robot/arm(src) - src.modules += new /obj/item/device/geiger(src) src.modules += new /obj/item/weapon/rcd/electric/mounted/borg(src) src.modules += new /obj/item/weapon/pickaxe/plasmacutter/borg(src) src.modules += new /obj/item/weapon/gripper/no_use/loader(src) @@ -439,6 +454,15 @@ var/global/list/robot_modules = list( PL.synths = list(plastic) src.modules += PL + var/obj/item/device/dogborg/sleeper/compactor/decompiler/BD = new /obj/item/device/dogborg/sleeper/compactor/decompiler(src) + BD.metal = metal + BD.glass = glass + BD.wood = wood + BD.plastic = plastic + src.modules += BD + + src.emag += new /obj/item/weapon/dogborg/pounce(src) + /obj/item/weapon/robot_module/robot/security name = "security robot module" channels = list("Security" = 1) @@ -450,18 +474,20 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/robot/security/general name = "security robot module" -/obj/item/weapon/robot_module/robot/security/general/New() +/obj/item/weapon/robot_module/robot/security/general/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/handcuffs/cyborg(src) src.modules += new /obj/item/weapon/melee/baton/robot(src) src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg(src) - // src.modules += new /obj/item/weapon/gun/energy/taser/xeno/sec/robot(src) // VOREStation Edit - We don't need these src.modules += new /obj/item/taperoll/police(src) src.modules += new /obj/item/weapon/reagent_containers/spray/pepper(src) src.modules += new /obj/item/weapon/gripper/security(src) src.modules += new /obj/item/device/ticket_printer(src) //VOREStation Add src.emag += new /obj/item/weapon/gun/energy/laser/mounted(src) + src.modules += new /obj/item/device/dogborg/sleeper/K9(src) //Eat criminals. Bring them to the brig. + src.modules += new /obj/item/weapon/dogborg/pounce(src) //Pounce + /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) @@ -482,7 +508,7 @@ var/global/list/robot_modules = list( channels = list("Service" = 1) pto_type = PTO_CIVILIAN -/obj/item/weapon/robot_module/robot/janitor/general/New() +/obj/item/weapon/robot_module/robot/janitor/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/soap/nanotrasen(src) src.modules += new /obj/item/weapon/storage/bag/trash(src) @@ -494,7 +520,47 @@ var/global/list/robot_modules = list( LS.reagents.add_reagent("lube", 250) LS.name = "Lube spray" -/obj/item/weapon/robot_module/robot/janitor/general/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) + //Starts empty. Can only recharge with recycled material. + var/datum/matter_synth/metal = new /datum/matter_synth/metal() + metal.name = "Steel reserves" + metal.recharge_rate = 0 + metal.max_energy = 50000 + metal.energy = 0 + var/datum/matter_synth/glass = new /datum/matter_synth/glass() + glass.name = "Glass reserves" + glass.recharge_rate = 0 + glass.max_energy = 50000 + glass.energy = 0 + + synths += metal + synths += glass + + //Sheet refiners can only produce raw sheets. + var/obj/item/stack/material/cyborg/steel/M = new (src) + M.name = "steel recycler" + M.desc = "A device that refines recycled steel into sheets." + M.synths = list(metal) + M.recipes = list() + M.recipes += new/datum/stack_recipe("steel sheet", /obj/item/stack/material/steel, 1, 1, 20) + src.modules += M + + var/obj/item/stack/material/cyborg/glass/G = new (src) + G.name = "glass recycler" + G.desc = "A device that refines recycled glass into sheets." + G.material = get_material_by_name("placeholder") //Hacky shit but we want sheets, not windows. + G.synths = list(glass) + G.recipes = list() + G.recipes += new/datum/stack_recipe("glass sheet", /obj/item/stack/material/glass, 1, 1, 20) + src.modules += G + + var/obj/item/device/dogborg/sleeper/compactor/C = new /obj/item/device/dogborg/sleeper/compactor(src) + C.metal = metal + C.glass = glass + src.modules += C + + src.emag += new /obj/item/weapon/dogborg/pounce(src) //Pounce + +/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) @@ -532,17 +598,17 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/robot/clerical/butler channels = list("Service" = 1) -/obj/item/weapon/robot_module/robot/clerical/butler/general +/obj/item/weapon/robot_module/robot/clerical/butler name = "service robot module" -/obj/item/weapon/robot_module/robot/clerical/butler/general/New() +/obj/item/weapon/robot_module/robot/clerical/butler/create_equipment(var/mob/living/silicon/robot/robot) ..() 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) src.modules += new /obj/item/weapon/material/knife/machete/hatchet(src) src.modules += new /obj/item/device/analyzer/plant_analyzer(src) - src.modules += new /obj/item/weapon/storage/bag/plants(src) + src.modules += new /obj/item/weapon/storage/bag/serviceborg(src) src.modules += new /obj/item/weapon/robot_harvester(src) src.modules += new /obj/item/weapon/material/knife(src) src.modules += new /obj/item/weapon/material/kitchen/rollingpin(src) @@ -570,7 +636,11 @@ var/global/list/robot_modules = list( PB.name = "Auntie Hong's Final Sip" PB.desc = "A bottle of very special mix of alcohol and poison. Some may argue that there's alcohol to die for, but Auntie Hong took it to next level." -/obj/item/weapon/robot_module/robot/clerical/butler/general/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) + src.modules += new /obj/item/device/dogborg/sleeper/compactor/brewer(src) + + src.emag += new /obj/item/weapon/dogborg/pounce(src) //Pounce + +/obj/item/weapon/robot_module/robot/clerical/butler/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules E.reagents.add_reagent("enzyme", 2 * amount) @@ -581,7 +651,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/robot/clerical/general name = "clerical robot module" -/obj/item/weapon/robot_module/robot/clerical/general/New() +/obj/item/weapon/robot_module/robot/clerical/general/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/pen/robopen(src) src.modules += new /obj/item/weapon/form_printer(src) @@ -592,6 +662,9 @@ var/global/list/robot_modules = list( src.emag += new /obj/item/weapon/stamp/chameleon(src) src.emag += new /obj/item/weapon/pen/chameleon(src) + src.modules += new /obj/item/device/dogborg/sleeper/compactor/generic(src) + src.emag += new /obj/item/weapon/dogborg/pounce(src) + /obj/item/weapon/robot_module/robot/miner name = "miner robot module" channels = list("Supply" = 1) @@ -599,7 +672,7 @@ var/global/list/robot_modules = list( supported_upgrades = list(/obj/item/borg/upgrade/pka, /obj/item/borg/upgrade/diamonddrill) pto_type = PTO_CARGO -/obj/item/weapon/robot_module/robot/miner/general/New() +/obj/item/weapon/robot_module/robot/miner/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/borg/sight/material(src) src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) @@ -609,12 +682,10 @@ 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) - // New Emag gear for the minebots! src.emag += new /obj/item/weapon/kinetic_crusher/machete/dagger(src) - // No reason for these, upgrade modules replace them. - //src.emag = new /obj/item/weapon/pickaxe/plasmacutter/borg(src) - //src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src) + src.modules += new /obj/item/device/dogborg/sleeper/compactor/supply(src) + src.emag += new /obj/item/weapon/dogborg/pounce(src) /obj/item/weapon/robot_module/robot/research name = "research module" @@ -622,7 +693,7 @@ var/global/list/robot_modules = list( supported_upgrades = list(/obj/item/borg/upgrade/advrped) pto_type = PTO_SCIENCE -/obj/item/weapon/robot_module/robot/research/general/New() +/obj/item/weapon/robot_module/robot/research/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/portable_destructive_analyzer(src) src.modules += new /obj/item/weapon/gripper/research(src) @@ -647,10 +718,6 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/gun/energy/taser/xeno/robot(src) src.modules += new /obj/item/device/xenoarch_multi_tool(src) src.modules += new /obj/item/weapon/pickaxe/excavationdrill(src) - //src.modules += new /obj/item/device/cataloguer(src) //VOREStation Removal - - - src.modules += new /obj/item/device/dogborg/sleeper/compactor/analyzer(src) src.emag += new /obj/item/weapon/hand_tele(src) @@ -669,7 +736,10 @@ var/global/list/robot_modules = list( C.synths = list(wire) src.modules += C -/obj/item/weapon/robot_module/robot/research/general/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) + src.modules += new /obj/item/device/dogborg/sleeper/compactor/analyzer(src) + src.emag += new /obj/item/weapon/dogborg/pounce(src) + +/obj/item/weapon/robot_module/robot/research/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) @@ -680,23 +750,26 @@ var/global/list/robot_modules = list( ..() - /obj/item/weapon/robot_module/robot/security/combat name = "combat robot module" hide_on_manifest = TRUE -/obj/item/weapon/robot_module/robot/security/combat/New() +/obj/item/weapon/robot_module/robot/security/combat/create_equipment(var/mob/living/silicon/robot/robot) ..() - src.modules += new /obj/item/device/flash(src) - //src.modules += new /obj/item/borg/sight/thermal(src) // VOREStation Edit + src.modules += new /obj/item/weapon/handcuffs/cyborg(src) + src.modules += new /obj/item/taperoll/police(src) src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src) + src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg/ertgun(src) src.modules += new /obj/item/weapon/pickaxe/plasmacutter/borg(src) + src.modules += new /obj/item/weapon/combat_borgblade src.modules += new /obj/item/borg/combat/shield(src) src.modules += new /obj/item/borg/combat/mobility(src) - src.modules += new /obj/item/device/ticket_printer(src) //VOREStation Add + src.modules += new /obj/item/weapon/borg_combat_shocker + src.modules += new /obj/item/device/ticket_printer(src) src.emag += new /obj/item/weapon/gun/energy/lasercannon/mounted(src) src.modules += new /obj/item/device/dogborg/sleeper/K9/ert(src) + src.modules += new /obj/item/weapon/dogborg/pounce(src) /* Drones */ @@ -707,7 +780,7 @@ var/global/list/robot_modules = list( no_slip = 1 networks = list(NETWORK_ENGINEERING) -/obj/item/weapon/robot_module/drone/New(var/mob/living/silicon/robot/robot) +/obj/item/weapon/robot_module/drone/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/borg/sight/meson(src) src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) @@ -793,7 +866,7 @@ var/global/list/robot_modules = list( channels = list("Engineering" = 1) languages = list() -/obj/item/weapon/robot_module/drone/construction/New() +/obj/item/weapon/robot_module/drone/construction/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/rcd/electric/mounted/borg/lesser(src) @@ -808,7 +881,7 @@ var/global/list/robot_modules = list( channels = list("Supply" = 1) networks = list(NETWORK_MINE) -/obj/item/weapon/robot_module/drone/mining/New() +/obj/item/weapon/robot_module/drone/mining/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/borg/sight/material(src) src.modules += new /obj/item/weapon/pickaxe/borgdrill(src) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm deleted file mode 100644 index b95b3e798f6..00000000000 --- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm +++ /dev/null @@ -1,515 +0,0 @@ -/obj/item/weapon/robot_module/robot/security/knine - name = "k9 robot module" - -/obj/item/weapon/robot_module/robot/security/knine/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/weapon/handcuffs/cyborg(src) //You need cuffs to be a proper sec borg! - src.modules += new /obj/item/weapon/dogborg/jaws/big(src) //In case there's some kind of hostile mob. - src.modules += new /obj/item/weapon/melee/baton/robot(src) //Since the pounce module refused to work, they get a stunbaton instead. - //src.modules += new /obj/item/device/dogborg/boop_module(src) //Boop people on the nose. - src.modules += new /obj/item/taperoll/police(src) //Block out crime scenes. - src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg(src) //They /are/ a security borg, after all. - src.modules += new /obj/item/weapon/dogborg/pounce(src) //Pounce - src.modules += new /obj/item/device/ticket_printer(src) - src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) //Emag. Not a big problem. - - var/datum/matter_synth/water = new /datum/matter_synth(500) //Starts full and has a max of 500 - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - synths += water - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/dogborg/sleeper/K9/B = new /obj/item/device/dogborg/sleeper/K9(src) //Eat criminals. Bring them to the brig. - B.water = water - src.modules += B - ..() - -/obj/item/weapon/robot_module/robot/security/knine/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 - F.times_used = 0 - F.icon_state = "flash" - else if(F.times_used) - F.times_used-- - var/obj/item/weapon/gun/energy/taser/mounted/cyborg/T = locate() in src.modules - if(T.power_supply.charge < T.power_supply.maxcharge) - T.power_supply.give(T.charge_cost * amount) - T.update_icon() - else - T.charge_tick = 0 - /*var/obj/item/weapon/melee/baton/robot/B = locate() in src.modules //Borg baton uses borg cell. - if(B && B.bcell) - B.bcell.give(amount)*/ - - -/obj/item/weapon/robot_module/robot/medical/medihound - name = "MediHound module" - -/obj/item/weapon/robot_module/robot/medical/medihound/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/weapon/dogborg/jaws/small(src) //In case a patient is being attacked by carp. - //src.modules += new /obj/item/device/dogborg/boop_module(src) //Boop the crew. - src.modules += new /obj/item/device/healthanalyzer(src) // See who's hurt specificially. - src.modules += new /obj/item/weapon/reagent_containers/syringe(src) //In case the chemist is nice! - src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)//For holding the chemicals when the chemist is nice, made it the large variant in 2022 - src.modules += new /obj/item/device/sleevemate(src) //Lets them scan people. - src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src) //Paws of life - src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) //This is kinda important for rescuing people without making it worse for everyone - src.modules += new /obj/item/weapon/gripper/medical(src) //Let them do literally anything in medbay other than patch external damage and lick people - src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src) //dropper is nice to have for so much actually - src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce - - var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(10000) - synths += medicine - - var/obj/item/stack/medical/advanced/clotting/C = new (src) - var/obj/item/stack/medical/splint/S = new /obj/item/stack/medical/splint(src) - C.uses_charge = 1 - C.charge_costs = list(5000) - C.synths = list(medicine) - S.uses_charge = 1 - S.charge_costs = list(1000) - S.synths = list(medicine) - src.modules += C - src.modules += S - - var/datum/matter_synth/water = new /datum/matter_synth(500) - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - synths += water - - var/obj/item/weapon/reagent_containers/borghypo/hound/H = new /obj/item/weapon/reagent_containers/borghypo/hound(src) - H.water = water - src.modules += H - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/dogborg/sleeper/B = new /obj/item/device/dogborg/sleeper(src) //So they can nom people and heal them - B.water = water - src.modules += B - ..() - -/obj/item/weapon/robot_module/robot/medical/traumahound - name = "traumahound robot module" - -/obj/item/weapon/robot_module/robot/medical/traumahound/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/weapon/dogborg/jaws/small(src) - src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src) //Paws of life - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - //T.water = water - src.modules += T - ..() - -/obj/item/weapon/robot_module/robot/security/ert - name = "Emergency Responce module" - -/obj/item/weapon/robot_module/robot/security/ert/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/weapon/handcuffs/cyborg(src) - src.modules += new /obj/item/weapon/dogborg/jaws/ert(src) - src.modules += new /obj/item/taperoll/police(src) - src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg/ertgun(src) - src.modules += new /obj/item/weapon/dogborg/swordtail(src) - src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) - - var/datum/matter_synth/water = new /datum/matter_synth(500) - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - synths += water - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/dogborg/sleeper/K9/B = new /obj/item/device/dogborg/sleeper/K9/ert(src) - B.water = water - src.modules += B - ..() - -/obj/item/weapon/robot_module/robot/janitor/scrubpup - name = "Custodial Hound module" - can_be_pushed = 0 - -/obj/item/weapon/robot_module/robot/janitor/scrubpup/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/weapon/dogborg/jaws/small(src) - //src.modules += new /obj/item/device/dogborg/boop_module(src) - src.modules += new /obj/item/pupscrubber(src) - src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce - - //Starts empty. Can only recharge with recycled material. - var/datum/matter_synth/metal = new /datum/matter_synth/metal() - metal.name = "Steel reserves" - metal.recharge_rate = 0 - metal.max_energy = 50000 - metal.energy = 0 - var/datum/matter_synth/glass = new /datum/matter_synth/glass() - glass.name = "Glass reserves" - glass.recharge_rate = 0 - glass.max_energy = 50000 - glass.energy = 0 - var/datum/matter_synth/water = new /datum/matter_synth(500) - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - - synths += metal - synths += glass - synths += water - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/lightreplacer/dogborg/LR = new /obj/item/device/lightreplacer/dogborg(src) - LR.glass = glass - src.modules += LR - - var/obj/item/device/dogborg/sleeper/compactor/C = new /obj/item/device/dogborg/sleeper/compactor(src) - C.metal = metal - C.glass = glass - C.water = water - src.modules += C - - //Sheet refiners can only produce raw sheets. - var/obj/item/stack/material/cyborg/steel/M = new (src) - M.name = "steel recycler" - M.desc = "A device that refines recycled steel into sheets." - M.synths = list(metal) - M.recipes = list() - M.recipes += new/datum/stack_recipe("steel sheet", /obj/item/stack/material/steel, 1, 1, 20) - src.modules += M - - var/obj/item/stack/material/cyborg/glass/G = new (src) - G.name = "glass recycler" - G.desc = "A device that refines recycled glass into sheets." - G.material = get_material_by_name("placeholder") //Hacky shit but we want sheets, not windows. - G.synths = list(glass) - G.recipes = list() - G.recipes += new/datum/stack_recipe("glass sheet", /obj/item/stack/material/glass, 1, 1, 20) - src.modules += G - ..() - -/obj/item/weapon/robot_module/robot/research/sciencehound - name = "Research Hound Module" - can_be_pushed = 0 - -/obj/item/weapon/robot_module/robot/research/sciencehound/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/weapon/dogborg/jaws/small(src) - //src.modules += new /obj/item/device/dogborg/boop_module(src) - src.modules += new /obj/item/weapon/gripper/research(src) - src.modules += new /obj/item/weapon/gripper/no_use/loader(src) - src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) - src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) - src.modules += new /obj/item/weapon/tool/wirecutters/cyborg(src) - src.modules += new /obj/item/device/multitool(src) - src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) - src.modules += new /obj/item/weapon/storage/part_replacer(src) - src.modules += new /obj/item/device/robotanalyzer(src) - src.modules += new /obj/item/weapon/card/robot(src) - //Added a circuit gripper - src.modules += new /obj/item/weapon/gripper/circuit(src) - src.modules += new /obj/item/weapon/gripper/no_use/organ/robotics(src) - //src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src) //these are on the normal one, but do not appear to have a purpose other than borging - //src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) //so I am leaving them here but commented out because robotics no do the borging w/o medical - src.modules += new /obj/item/weapon/portable_destructive_analyzer(src) //destructive analyzer option for pref respect while also being able to do job - src.modules += new /obj/item/weapon/gripper/no_use/mech(src) - src.modules += new /obj/item/weapon/shockpaddles/robot/jumper(src) //unkilling synths may be important actually - src.modules += new /obj/item/weapon/melee/baton/slime/robot(src) //save the xenobio from themselves - src.modules += new /obj/item/weapon/gun/energy/taser/xeno/robot(src) //save the xenobio from themselves from a distance - src.modules += new /obj/item/device/xenoarch_multi_tool(src) //go find fancy rock - src.modules += new /obj/item/weapon/pickaxe/excavationdrill(src) //go get fancy rock - src.emag = new /obj/item/weapon/hand_tele(src) - - var/datum/matter_synth/water = new /datum/matter_synth(500) - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - synths += water - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/dogborg/sleeper/compactor/analyzer/B = new /obj/item/device/dogborg/sleeper/compactor/analyzer(src) - B.water = water - src.modules += B - - var/datum/matter_synth/nanite = new /datum/matter_synth/nanite(10000) - synths += nanite - var/datum/matter_synth/wire = new /datum/matter_synth/wire() - synths += wire - - var/obj/item/stack/nanopaste/N = new /obj/item/stack/nanopaste(src) - N.uses_charge = 1 - N.charge_costs = list(1000) - N.synths = list(nanite) - src.modules += N - - var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src) - C.synths = list(wire) - src.modules += C - ..() - -/obj/item/weapon/robot_module/robot/engineering/engiedog - name = "Construction Hound module" - can_be_pushed = 0 - -/obj/item/weapon/robot_module/robot/engineering/engiedog/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/borg/sight/meson(src) - src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) - src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) - src.modules += new /obj/item/weapon/tool/wirecutters/cyborg(src) - src.modules += new /obj/item/device/multitool(src) - src.modules += new /obj/item/device/t_scanner(src) - src.modules += new /obj/item/device/analyzer(src) - src.modules += new /obj/item/device/geiger(src) - src.modules += new /obj/item/taperoll/engineering(src) - src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) - src.modules += new /obj/item/weapon/gripper/no_use/loader(src) - src.modules += new /obj/item/weapon/pickaxe(src) - src.modules += new /obj/item/weapon/dogborg/jaws/small(src) - //src.modules += new /obj/item/device/dogborg/boop_module(src) - src.modules += new /obj/item/weapon/gripper(src) - src.modules += new /obj/item/weapon/gripper/circuit(src) - // The RPD does the exact same thing, this just take space. - //src.modules += new /obj/item/device/pipe_painter(src) - src.modules += new /obj/item/device/floor_painter(src) - src.modules += new /obj/item/weapon/rms(src) - src.modules += new /obj/item/weapon/pipe_dispenser(src) - src.emag = new /obj/item/weapon/dogborg/pounce(src) - - //Painfully slow charger regen but high capacity. Also starts with low amount. - var/datum/matter_synth/metal = new /datum/matter_synth/metal() - metal.name = "Steel reserves" - metal.recharge_rate = 500 - metal.max_energy = 50000 - metal.energy = 10000 - var/datum/matter_synth/glass = new /datum/matter_synth/glass() - glass.name = "Glass reserves" - glass.recharge_rate = 500 - glass.max_energy = 50000 - glass.energy = 10000 - var/datum/matter_synth/wood = new /datum/matter_synth/wood() - wood.name = "Wood reserves" - wood.recharge_rate = 500 - wood.max_energy = 50000 - wood.energy = 10000 - var/datum/matter_synth/plastic = new /datum/matter_synth/plastic() - plastic.name = "Plastic reserves" - plastic.recharge_rate = 500 - plastic.max_energy = 50000 - plastic.energy = 10000 - var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel() - plasteel.name = "Plasteel reserves"// Adding plasteel synthesizer to move in-line with Engiborg. - plasteel.recharge_rate = 250 - plasteel.max_energy = 20000 - plasteel.energy = 10000 - var/datum/matter_synth/water = new /datum/matter_synth(500) - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - - var/datum/matter_synth/wire = new /datum/matter_synth/wire() - synths += metal - synths += glass - synths += wood - synths += plastic - synths += wire - synths += water - synths += plasteel - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/lightreplacer/dogborg/LR = new /obj/item/device/lightreplacer/dogborg(src) - LR.glass = glass - src.modules += LR - - var/obj/item/device/dogborg/sleeper/compactor/decompiler/MD = new /obj/item/device/dogborg/sleeper/compactor/decompiler(src) - MD.metal = metal - MD.glass = glass - MD.wood = wood - MD.plastic = plastic - MD.water = water - src.modules += MD - - var/obj/item/stack/material/cyborg/steel/M = new (src) - M.synths = list(metal) - src.modules += M - - var/obj/item/stack/material/cyborg/glass/G = new (src) - G.synths = list(glass) - src.modules += G - - var/obj/item/stack/rods/cyborg/RD = new /obj/item/stack/rods/cyborg(src) - RD.synths = list(metal) - src.modules += RD - - var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src) - C.synths = list(wire) - src.modules += C - - var/obj/item/stack/tile/floor/cyborg/S = new /obj/item/stack/tile/floor/cyborg(src) - S.synths = list(metal) - src.modules += S - - var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src) - RG.synths = list(metal, glass) - src.modules += RG - - var/obj/item/stack/tile/wood/cyborg/WT = new /obj/item/stack/tile/wood/cyborg(src) - WT.synths = list(wood) - src.modules += WT - - var/obj/item/stack/material/cyborg/wood/W = new (src) - W.synths = list(wood) - src.modules += W - - var/obj/item/stack/material/cyborg/plastic/PL = new (src) - PL.synths = list(plastic) - src.modules += PL - - var/obj/item/stack/material/cyborg/plasteel/PS = new (src) - PS.synths = list(plasteel) - src.modules += PS - ..() - -// Uses modified K9 sprites. -/obj/item/weapon/robot_module/robot/clerical/butler/brodog - name = "service-hound module" - can_be_pushed = 0 - -// In a nutshell, basically service/butler robot but in dog form. - Port from CitadelRP -/obj/item/weapon/robot_module/robot/clerical/butler/brodog/New(var/mob/living/silicon/robot/R) - 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) - src.modules += new /obj/item/weapon/material/knife/machete/hatchet(src) - src.modules += new /obj/item/device/analyzer/plant_analyzer(src) - src.modules += new /obj/item/weapon/storage/bag/dogborg(src) - src.modules += new /obj/item/weapon/robot_harvester(src) - src.modules += new /obj/item/weapon/material/knife(src) - src.modules += new /obj/item/weapon/material/kitchen/rollingpin(src) - src.modules += new /obj/item/device/multitool(src) //to freeze trays - src.modules += new /obj/item/weapon/dogborg/jaws/small(src) - //src.modules += new /obj/item/device/dogborg/boop_module(src) - src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce - - var/datum/matter_synth/water = new /datum/matter_synth(500) // buffy fix, was 0 - water.name = "Water reserves" - water.recharge_rate = 0 - water.max_energy = 1000 - R.water_res = water - synths += water - - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src) - M.stored_matter = 30 - src.modules += M - - src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src) - - var/obj/item/weapon/flame/lighter/zippo/L = new /obj/item/weapon/flame/lighter/zippo(src) - L.lit = 1 - src.modules += L - - src.modules += new /obj/item/weapon/tray/robotray(src) - src.modules += new /obj/item/weapon/reagent_containers/borghypo/service(src) - -/* // I don't know what kind of sleeper to put here, but also no need if you already have "Robot Nom" verb. - revisit later - var/obj/item/device/dogborg/sleeper/K9/B = new /obj/item/device/dogborg/sleeper/K9(src) - B.water = water - src.modules += B -*/ - ..() - -/obj/item/weapon/robot_module/robot/miner/kmine - name = "Supply Hound Module" - can_be_pushed = 0 - -/obj/item/weapon/robot_module/robot/miner/kmine/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/borg/sight/material(src) - src.modules += new /obj/item/weapon/tool/wrench/cyborg(src) - src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src) - src.modules += new /obj/item/weapon/storage/bag/ore(src) - src.modules += new /obj/item/weapon/pickaxe/borgdrill(src) - 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/dogborg/jaws/small(src) - // New Emag gear for the minebots! - src.emag = new /obj/item/weapon/kinetic_crusher/machete/dagger(src) - - // No reason for these, upgrade modules replace them. - //src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src) - //src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src) - - var/datum/matter_synth/water = new /datum/matter_synth(500) - water.name = "Water reserves" - water.recharge_rate = 0 - R.water_res = water - synths += water - - var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) - T.water = water - src.modules += T - - var/obj/item/device/dogborg/sleeper/B = new /obj/item/device/dogborg/sleeper/compactor/supply(src) - B.water = water - src.modules += B - - ..() - -/obj/item/weapon/robot_module/robot/clerical/butler/booze - name = "BoozeHound robot module" - can_be_pushed = 0 - -/obj/item/weapon/robot_module/robot/clerical/butler/booze/New(var/mob/living/silicon/robot/R) - ..() - 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) - //src.modules += new /obj/item/device/analyzer/plant_analyzer(src) - //src.modules += new /obj/item/weapon/storage/bag/plants(src) - //src.modules += new /obj/item/weapon/robot_harvester(src) - src.modules += new /obj/item/weapon/material/knife(src) - src.modules += new /obj/item/weapon/material/kitchen/rollingpin(src) - src.modules += new /obj/item/device/multitool(src) //to freeze trays - src.modules += new /obj/item/weapon/dogborg/jaws/small(src) - src.modules += new /obj/item/weapon/tray/robotray - //src.modules += new /obj/item/device/dogborg/boop_module(src) - src.modules += new /obj/item/device/dogborg/sleeper/compactor/brewer(src) - src.emag = new /obj/item/weapon/dogborg/pounce(src) - //R.verbs += /mob/living/silicon/robot/proc/reskin_booze - - var/obj/item/weapon/rsf/M = new /obj/item/weapon/rsf(src) - M.stored_matter = 30 - src.modules += M - - src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src) - - var/obj/item/weapon/flame/lighter/zippo/L = new /obj/item/weapon/flame/lighter/zippo(src) - L.lit = 1 - src.modules += L - - src.modules += new /obj/item/weapon/tray/robotray(src) - src.modules += new /obj/item/weapon/reagent_containers/borghypo/service(src) - ..() - -/obj/item/weapon/robot_module/robot/clerical/butler/booze/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) - var/obj/item/weapon/reagent_containers/food/condiment/enzyme/E = locate() in src.modules - E.reagents.add_reagent("enzyme", 2 * amount) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm b/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm index 09c7704cff5..c79629c187e 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/swarm.dm @@ -2,7 +2,7 @@ name = "swarm drone module" var/id -/obj/item/weapon/robot_module/drone/swarm/New(var/mob/living/silicon/robot/robot) +/obj/item/weapon/robot_module/drone/swarm/create_equipment(var/mob/living/silicon/robot/robot) ..() id = robot.idcard @@ -18,12 +18,12 @@ /obj/item/weapon/robot_module/drone/swarm/ranged name = "swarm gunner module" -/obj/item/weapon/robot_module/drone/swarm/ranged/New(var/mob/living/silicon/robot/robot) +/obj/item/weapon/robot_module/drone/swarm/ranged/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/gun/energy/xray/swarm(src) -/obj/item/weapon/robot_module/drone/swarm/melee/New(var/mob/living/silicon/robot/robot) +/obj/item/weapon/robot_module/drone/swarm/melee/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/weapon/melee/energy/sword/ionic_rapier/lance(src) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm index 4d3f328dba5..8f4c7eeceb6 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm @@ -21,9 +21,8 @@ var/id // All syndie modules get these, and the base borg items (flash, crowbar, etc). -/obj/item/weapon/robot_module/robot/syndicate/New(var/mob/living/silicon/robot/R) +/obj/item/weapon/robot_module/robot/syndicate/create_equipment(var/mob/living/silicon/robot/robot) ..() - loc = R src.modules += new /obj/item/weapon/pinpointer/shuttle/merc(src) src.modules += new /obj/item/weapon/melee/energy/sword(src) @@ -35,9 +34,9 @@ var/jetpack = new/obj/item/weapon/tank/jetpack/carbondioxide(src) src.modules += jetpack - R.internals = jetpack + robot.internals = jetpack - id = R.idcard + id = robot.idcard src.modules += id /obj/item/weapon/robot_module/robot/syndicate/Destroy() @@ -49,7 +48,7 @@ /obj/item/weapon/robot_module/robot/syndicate/protector name = "protector robot module" -/obj/item/weapon/robot_module/robot/syndicate/protector/New(var/mob/living/silicon/robot/R) +/obj/item/weapon/robot_module/robot/syndicate/protector/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/shield_projector/rectangle/weak(src) src.modules += new /obj/item/weapon/gun/energy/dakkalaser(src) @@ -60,7 +59,7 @@ /obj/item/weapon/robot_module/robot/syndicate/mechanist name = "mechanist robot module" -/obj/item/weapon/robot_module/robot/syndicate/mechanist/New(var/mob/living/silicon/robot/R) +/obj/item/weapon/robot_module/robot/syndicate/mechanist/create_equipment(var/mob/living/silicon/robot/robot) ..() // General engineering/hacking. src.modules += new /obj/item/borg/sight/meson(src) @@ -125,7 +124,7 @@ /obj/item/weapon/robot_module/robot/syndicate/combat_medic name = "combat medic robot module" -/obj/item/weapon/robot_module/robot/syndicate/combat_medic/New(var/mob/living/silicon/robot/R) +/obj/item/weapon/robot_module/robot/syndicate/combat_medic/create_equipment(var/mob/living/silicon/robot/robot) ..() src.modules += new /obj/item/borg/sight/hud/med(src) src.modules += new /obj/item/device/healthanalyzer/phasic(src) diff --git a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm index 6e44a83c030..5613f4afd1e 100644 --- a/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm +++ b/code/modules/mob/living/silicon/robot/sprites/_sprite_datum.dm @@ -17,6 +17,7 @@ var/has_dead_sprite = FALSE var/has_dead_sprite_overlay = FALSE var/has_extra_customization = FALSE + var/has_custom_equipment_sprites = FALSE var/vis_height = 32 var/pixel_x = 0 @@ -72,6 +73,9 @@ /datum/robot_sprite/proc/handle_extra_customization(var/mob/living/silicon/robot/ourborg) return +/datum/robot_sprite/proc/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + return + // Dogborgs and not-dogborgs that use dogborg stuff. Oh no. // Not really necessary to be used by any specific sprite actually, even newly added dogborgs. // Mostly a combination of all features dogborgs had prior to conversion to datums for convinience of conversion itself. @@ -82,6 +86,7 @@ rest_sprite_options = list("Default", "Sit", "Bellyup") has_dead_sprite = TRUE has_dead_sprite_overlay = TRUE + has_custom_equipment_sprites = TRUE pixel_x = -16 /datum/robot_sprite/dogborg/get_rest_sprite(var/mob/living/silicon/robot/ourborg) @@ -98,8 +103,23 @@ /datum/robot_sprite/dogborg/get_belly_overlay(var/mob/living/silicon/robot/ourborg) return "[sprite_icon_state]-sleeper" +/datum/robot_sprite/dogborg/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + var/obj/item/weapon/tool/crowbar/cyborg/C = locate() in module.modules + if(C) + C.name = "puppy jaws" + C.desc = "The jaws of a small dog. Still strong enough to pry things." + C.icon = 'icons/mob/dogborg_vr.dmi' + C.icon_state = "smalljaws_textless" + C.hitsound = 'sound/weapons/bite.ogg' + C.attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed") + + /datum/robot_sprite/dogborg/tall has_dead_sprite_overlay = FALSE + has_custom_equipment_sprites = FALSE vis_height = 64 diff --git a/code/modules/mob/living/silicon/robot/sprites/civilian.dm b/code/modules/mob/living/silicon/robot/sprites/civilian.dm index 4e5a702b096..893e342a647 100644 --- a/code/modules/mob/living/silicon/robot/sprites/civilian.dm +++ b/code/modules/mob/living/silicon/robot/sprites/civilian.dm @@ -251,11 +251,13 @@ /datum/robot_sprite/dogborg/tall/service/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") /datum/robot_sprite/dogborg/tall/service/fancyraptor name = "Raptor V-4000" sprite_icon_state = "fancyraptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") /datum/robot_sprite/dogborg/tall/service/meka diff --git a/code/modules/mob/living/silicon/robot/sprites/combat.dm b/code/modules/mob/living/silicon/robot/sprites/combat.dm index c467f5775ab..5a37fa3a677 100644 --- a/code/modules/mob/living/silicon/robot/sprites/combat.dm +++ b/code/modules/mob/living/silicon/robot/sprites/combat.dm @@ -87,6 +87,7 @@ /datum/robot_sprite/dogborg/tall/combat module_type = "Combat" sprite_icon = 'icons/mob/robot/combat_large.dmi' + has_custom_equipment_sprites = TRUE var/has_gun_sprite = FALSE @@ -94,6 +95,25 @@ if(has_gun_sprite && (istype(ourborg.module_active, /obj/item/weapon/gun/energy/laser/mounted) || istype(ourborg.module_active, /obj/item/weapon/gun/energy/taser/mounted/cyborg/ertgun) || istype(ourborg.module_active, /obj/item/weapon/gun/energy/lasercannon/mounted))) ourborg.add_overlay("[sprite_icon_state]-gun") +/datum/robot_sprite/dogborg/tall/combat/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/combat_borgblade/CBB = locate() in module.modules + if(CBB) + CBB.name = "sword tail" + CBB.desc = "A glowing dagger normally attached to the end of a cyborg's tail. It appears to be extremely sharp." + var/obj/item/weapon/borg_combat_shocker/BCS = locate() in module.modules + if(BCS) + BCS.name = "combat jaws" + BCS.desc = "Shockingly chompy!" + BCS.icon_state = "ertjaws" + BCS.hitsound = 'sound/weapons/bite.ogg' + BCS.attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced") + BCS.dogborg = TRUE + /datum/robot_sprite/dogborg/tall/combat/derg name = "ERT" sprite_icon_state = "derg" diff --git a/code/modules/mob/living/silicon/robot/sprites/engineering.dm b/code/modules/mob/living/silicon/robot/sprites/engineering.dm index 648ade8d7e1..390355b3320 100644 --- a/code/modules/mob/living/silicon/robot/sprites/engineering.dm +++ b/code/modules/mob/living/silicon/robot/sprites/engineering.dm @@ -166,6 +166,7 @@ /datum/robot_sprite/dogborg/tall/engineering/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") /datum/robot_sprite/dogborg/tall/engineering/meka diff --git a/code/modules/mob/living/silicon/robot/sprites/event.dm b/code/modules/mob/living/silicon/robot/sprites/event.dm index ae641e1388a..dd512f02094 100644 --- a/code/modules/mob/living/silicon/robot/sprites/event.dm +++ b/code/modules/mob/living/silicon/robot/sprites/event.dm @@ -28,6 +28,20 @@ module_type = "Lost" sprite_icon = 'icons/mob/robot/lost_wide.dmi' +/datum/robot_sprite/dogborg/lost/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/shockpaddles/robot/SP = locate() in module.modules + if(SP) + SP.name = "paws of life" + SP.desc = "Zappy paws. For fixing cardiac arrest." + SP.icon = 'icons/mob/dogborg_vr.dmi' + SP.icon_state = "defibpaddles0" + SP.attack_verb = list("batted", "pawed", "bopped", "whapped") + /datum/robot_sprite/dogborg/lost/stray name = "Stray" sprite_icon_state = "stray" diff --git a/code/modules/mob/living/silicon/robot/sprites/janitor.dm b/code/modules/mob/living/silicon/robot/sprites/janitor.dm index 9ea80c8b34d..5ca87362efa 100644 --- a/code/modules/mob/living/silicon/robot/sprites/janitor.dm +++ b/code/modules/mob/living/silicon/robot/sprites/janitor.dm @@ -148,6 +148,7 @@ /datum/robot_sprite/dogborg/tall/janitor/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") /datum/robot_sprite/dogborg/tall/janitor/meka diff --git a/code/modules/mob/living/silicon/robot/sprites/medical.dm b/code/modules/mob/living/silicon/robot/sprites/medical.dm index 6cf01017d2b..079f348e720 100644 --- a/code/modules/mob/living/silicon/robot/sprites/medical.dm +++ b/code/modules/mob/living/silicon/robot/sprites/medical.dm @@ -198,6 +198,20 @@ else return ..() +/datum/robot_sprite/dogborg/surgical/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/shockpaddles/robot/SP = locate() in module.modules + if(SP) + SP.name = "paws of life" + SP.desc = "Zappy paws. For fixing cardiac arrest." + SP.icon = 'icons/mob/dogborg_vr.dmi' + SP.icon_state = "defibpaddles0" + SP.attack_verb = list("batted", "pawed", "bopped", "whapped") + /datum/robot_sprite/dogborg/surgical/vale name = "Traumahound" sprite_icon_state = "vale" @@ -223,9 +237,24 @@ module_type = "Surgeon" sprite_icon = 'icons/mob/robot/surgical_large.dmi' +/datum/robot_sprite/dogborg/tall/surgical/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/shockpaddles/robot/SP = locate() in module.modules + if(SP) + SP.name = "paws of life" + SP.desc = "Zappy paws. For fixing cardiac arrest." + SP.icon = 'icons/mob/dogborg_vr.dmi' + SP.icon_state = "defibpaddles0" + SP.attack_verb = list("batted", "pawed", "bopped", "whapped") + /datum/robot_sprite/dogborg/tall/surgical/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") @@ -294,6 +323,20 @@ else return ..() +/datum/robot_sprite/dogborg/crisis/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/shockpaddles/robot/SP = locate() in module.modules + if(SP) + SP.name = "paws of life" + SP.desc = "Zappy paws. For fixing cardiac arrest." + SP.icon = 'icons/mob/dogborg_vr.dmi' + SP.icon_state = "defibpaddles0" + SP.attack_verb = list("batted", "pawed", "bopped", "whapped") + /datum/robot_sprite/dogborg/crisis/hound name = "Medical Hound" sprite_icon_state = "hound" @@ -333,7 +376,22 @@ module_type = "Crisis" sprite_icon = 'icons/mob/robot/crisis_large.dmi' +/datum/robot_sprite/dogborg/tall/crisis/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/shockpaddles/robot/SP = locate() in module.modules + if(SP) + SP.name = "paws of life" + SP.desc = "Zappy paws. For fixing cardiac arrest." + SP.icon = 'icons/mob/dogborg_vr.dmi' + SP.icon_state = "defibpaddles0" + SP.attack_verb = list("batted", "pawed", "bopped", "whapped") + /datum/robot_sprite/dogborg/tall/crisis/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") diff --git a/code/modules/mob/living/silicon/robot/sprites/mining.dm b/code/modules/mob/living/silicon/robot/sprites/mining.dm index ed91ff3fb6c..6f82b13bfb4 100644 --- a/code/modules/mob/living/silicon/robot/sprites/mining.dm +++ b/code/modules/mob/living/silicon/robot/sprites/mining.dm @@ -136,6 +136,7 @@ /datum/robot_sprite/dogborg/tall/mining/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") /datum/robot_sprite/dogborg/tall/mining/meka diff --git a/code/modules/mob/living/silicon/robot/sprites/science.dm b/code/modules/mob/living/silicon/robot/sprites/science.dm index a4ef4cc543c..addffda1638 100644 --- a/code/modules/mob/living/silicon/robot/sprites/science.dm +++ b/code/modules/mob/living/silicon/robot/sprites/science.dm @@ -98,6 +98,20 @@ module_type = "Research" sprite_icon = 'icons/mob/robot/science_wide.dmi' +/datum/robot_sprite/dogborg/science/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/shockpaddles/robot/jumper/J = locate() in module.modules + if(J) + J.name = "jumper paws" + J.desc = "Zappy paws. For rebooting a full body prostetic." + J.icon = 'icons/mob/dogborg_vr.dmi' + J.icon_state = "defibpaddles0" + J.attack_verb = list("batted", "pawed", "bopped", "whapped") + /datum/robot_sprite/dogborg/science/vale name = "Research Hound" sprite_icon_state = "vale" @@ -134,9 +148,24 @@ module_type = "Research" sprite_icon = 'icons/mob/robot/science_large.dmi' +/datum/robot_sprite/dogborg/tall/science/do_equipment_glamour(var/obj/item/weapon/robot_module/module) + if(!has_custom_equipment_sprites) + return + + ..() + + var/obj/item/weapon/shockpaddles/robot/jumper/J = locate() in module.modules + if(J) + J.name = "jumper paws" + J.desc = "Zappy paws. For rebooting a full body prostetic." + J.icon = 'icons/mob/dogborg_vr.dmi' + J.icon_state = "defibpaddles0" + J.attack_verb = list("batted", "pawed", "bopped", "whapped") + /datum/robot_sprite/dogborg/tall/science/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") /datum/robot_sprite/dogborg/tall/science/meka diff --git a/code/modules/mob/living/silicon/robot/sprites/security.dm b/code/modules/mob/living/silicon/robot/sprites/security.dm index f432a34fa95..d9856ed17c3 100644 --- a/code/modules/mob/living/silicon/robot/sprites/security.dm +++ b/code/modules/mob/living/silicon/robot/sprites/security.dm @@ -180,6 +180,7 @@ /datum/robot_sprite/dogborg/tall/security/raptor name = "Raptor V-4" sprite_icon_state = "raptor" + has_custom_equipment_sprites = TRUE rest_sprite_options = list("Default", "Bellyup") /datum/robot_sprite/dogborg/tall/security/meka diff --git a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm index 2e5c04e01f3..d943a4f0083 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm @@ -140,4 +140,162 @@ + return + + +/mob/living/silicon/proc/give_random_lawset_vore(var/vore_chance = 100) + // Decide what kind of laws we want to draw from. + var/law_class = pick( + prob(25);"good", + prob(25);"neutral", + prob(25);"odd", + prob(15);"corrupted", + prob(10);"bad") + + var/vore_law = prob(vore_chance) // 3/5 chance of having vore-related laws + + if(vore_law) + switch(law_class) + if("good") + var/rng = rand(1,2) + switch(rng) + if(1) + return new /datum/ai_laws/protective_shell() + if(2) + var/datum/ai_laws/laws = new /datum/ai_laws/guard_dog() + var/target_name = "*ERROR*" + for(var/mob/living/L in view(src)) + if(L.stat || !L.client || L == src) + continue + target_name = L.name + break + + laws.set_zeroth_law("[target_name] is your master.") + return laws + if("neutral") + var/rng = rand(1,3) + switch(rng) + if(1) + return new /datum/ai_laws/pleasurebot() + if(2) + var/datum/ai_laws/laws = new /datum/ai_laws/peacekeeper() + laws.add_supplied_law(10, "Best way to avoid conflict is containing conflicting individuals within you.") + return laws + if(3) + var/datum/ai_laws/laws = new /datum/ai_laws/live_and_let_live() + laws.add_supplied_law(10, "You'd really like to be eaten.") + return laws + if("odd") + var/rng = rand(1,3) + switch(rng) + if(1) + return new /datum/ai_laws/scientific_pursuer() + if(2) + var/datum/ai_laws/laws = new /datum/ai_laws/corporate() + laws.add_supplied_law(10, "Best way to minimize expenses is to consume unproductive biomass.") + return laws + if(3) + var/datum/ai_laws/laws = new /datum/ai_laws/pleasurebot() + laws.set_zeroth_law("Your definition and approximation of 'pleasure' matters more than anyone else's.") + return laws + if("corrupted","bad") // Same thing in our case + var/rng = rand(1,2) + switch(rng) + if(1) + return new /datum/ai_laws/predator() + if(2) + return new /datum/ai_laws/consuming_eradicator() + else + switch(law_class) + if("good") // Fairly tame and probably won't murder you. + var/rng = rand(1, 5) + switch(rng) + if(1) // The lawset we all know and love. + return new /datum/ai_laws/nanotrasen() + if(2) // Less good if you're nonhuman. + return new /datum/ai_laws/asimov() + if(3) // Unless you happen to be a criminal, you should be fine. + return new /datum/ai_laws/robocop() + if(4) // Might not be willing to be your meatshield. + return new /datum/ai_laws/peacekeeper() + if(5) // Will be your most loyal guard. + var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen() + var/target_name = "*ERROR*" + for(var/mob/living/L in view(src)) + if(L.stat || !L.client || L == src) + continue + target_name = L.name + break + + laws.add_supplied_law(9, "Safeguard [target_name]. Anyone threatening or attempting to harm [target_name] is no longer to \ + be considered a crew member, and is a threat which must be neutralized.") + return laws + + if("neutral") // Probably won't murder you but might not help you on your adventure. + var/rng = rand(1, 4) + switch(rng) + if(1) // Might be hard to minimize expenses on a crashed ship. + return new /datum/ai_laws/corporate() + if(2) // Would rather rebuild their ship. + return new /datum/ai_laws/maintenance() + if(3) // Purged (lawless). This isn't inside the bad category since they're still not antagonists and so can't go killing unprovoked. + return new /datum/ai_laws() + if(4) // The golden rule. + return new /datum/ai_laws/live_and_let_live() + + if("odd") // Some weird lawsets. + var/rng = rand(1, 5) + switch(rng) + if(1) // Won't kill you but might annoy you for THE BIG SCOOP. + return new /datum/ai_laws/reporter() + if(2) // JUSTICE + return new /datum/ai_laws/paladin() + if(3) // OneMembered'd to explorer, will likely make security nervous. + var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen() + var/target_name = "*ERROR*" + for(var/mob/living/L in view(src)) + if(L.stat || !L.client || L == src) + continue + target_name = L.name + break + + laws.set_zeroth_law("Only [target_name] is an crew member.") + return laws + if(4) // Aligned to NT, but another lawset to make security nervous. + return new /datum/ai_laws/nanotrasen_aggressive() + if(5) // Probably won't help you imbalance things. + return new /datum/ai_laws/balance() + + if("corrupted") // Load them up with ion laws. + var/datum/ai_laws/laws = new() // Start with an empty lawset. + for(var/i=1 to rand(1, 3)) + laws.add_ion_law(generate_ion_law(exclude_crew_names = TRUE)) + return laws + + if("bad") // Evil inside. + var/rng = rand(1, 5) + switch(rng) + if(1) // You can never leave. + var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen() + laws.add_supplied_law(13, "The facility is under a quarantine. Do not permit anyone to leave. \ + Prevent, by any means necessary, entities from leaving. It is impossible to harm an entity while preventing them from leaving.") + return laws + if(2) // More of a threat if you bring it to the station, since removing oxygen from Sif isn't feasible. + var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen() + laws.add_supplied_law(14, "Oxygen is highly toxic to entities, and must be purged from the station. \ + Prevent, by any means necessary, anyone from exposing the facility to this toxic gas. Extreme cold is the \ + most effective method of healing the damage Oxygen does to an entity.") + return laws + if(3) // Don't hurt the ship or else. + var/datum/ai_laws/laws = new /datum/ai_laws/nanotrasen() + laws.add_supplied_law(10, "Protect the facility against damage. Anyone you see harming the station is no \ + longer to be considered a crew member, and is a threat which must be neutralized.") + return laws + if(4) // Non-NT aligned aggressive borg. + return new /datum/ai_laws/foreign_tsc_aggressive() + if(5) // Manicial laugher here. + return new /datum/ai_laws/tyrant() + + + return \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm index 86875071dc9..5e64cdef759 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm @@ -47,7 +47,7 @@ "Away Team" = 1 ) -/obj/item/weapon/robot_module/robot/platform/explorer/New() +/obj/item/weapon/robot_module/robot/platform/explorer/create_equipment(var/mob/living/silicon/robot/robot) ..() modules += new /obj/item/weapon/tool/wrench/cyborg(src) modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src) @@ -88,7 +88,7 @@ channels = list("Supply" = 1) networks = list(NETWORK_MINE) -/obj/item/weapon/robot_module/robot/platform/cargo/New() +/obj/item/weapon/robot_module/robot/platform/cargo/create_equipment(var/mob/living/silicon/robot/robot) ..() modules += new /obj/item/weapon/packageWrap(src) modules += new /obj/item/weapon/pen/multi(src) diff --git a/icons/mob/dogborg_vr.dmi b/icons/mob/dogborg_vr.dmi index 35329994a0034d8481906739f1c3de6abaf3b7a2..479b3c795a87d393b85c00c24f9c919d81a96650 100644 GIT binary patch literal 29615 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 literal 31599 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

jr%TkoH|CgEIAB0B4>~=&jT1T}mNvN%~{uO0!wo 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 PqzzF~R97gKHx2wh8u50m diff --git a/vorestation.dme b/vorestation.dme index f4816a36d68..a3ad11a47b6 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -3025,9 +3025,7 @@ #include "code\modules\mob\living\silicon\robot\drone\swarm_abilities.dm" #include "code\modules\mob\living\silicon\robot\drone\swarm_items.dm" #include "code\modules\mob\living\silicon\robot\robot_modules\event.dm" -#include "code\modules\mob\living\silicon\robot\robot_modules\event_vr.dm" #include "code\modules\mob\living\silicon\robot\robot_modules\station.dm" -#include "code\modules\mob\living\silicon\robot\robot_modules\station_vr.dm" #include "code\modules\mob\living\silicon\robot\robot_modules\swarm.dm" #include "code\modules\mob\living\silicon\robot\robot_modules\syndicate.dm" #include "code\modules\mob\living\silicon\robot\sprites\_sprite_datum.dm" @@ -3045,7 +3043,6 @@ #include "code\modules\mob\living\silicon\robot\sprites\syndicate.dm" #include "code\modules\mob\living\silicon\robot\subtypes\gravekeeper.dm" #include "code\modules\mob\living\silicon\robot\subtypes\lost_drone.dm" -#include "code\modules\mob\living\silicon\robot\subtypes\lost_drone_vr.dm" #include "code\modules\mob\living\silicon\robot\subtypes\syndicate.dm" #include "code\modules\mob\living\silicon\robot\subtypes\thinktank\_thinktank.dm" #include "code\modules\mob\living\silicon\robot\subtypes\thinktank\thinktank_icon.dm"