diff --git a/code/WorkInProgress/Chemistry-Holder.dm b/code/WorkInProgress/Chemistry-Holder.dm index 07c4798548..cfac34e7bb 100644 --- a/code/WorkInProgress/Chemistry-Holder.dm +++ b/code/WorkInProgress/Chemistry-Holder.dm @@ -281,6 +281,10 @@ datum var/list/that = data["viruses"] this += that // combine the two + for(var/datum/disease/D in this) // makes sure no two viruses are in the reagent at the same time + for(var/datum/disease/d in this) + d.cure(0) + return 0 for(var/A in typesof(/datum/reagent) - /datum/reagent) diff --git a/code/WorkInProgress/Chemistry-Tools.dm b/code/WorkInProgress/Chemistry-Tools.dm index 3e56f46eb6..4fe85b99db 100644 --- a/code/WorkInProgress/Chemistry-Tools.dm +++ b/code/WorkInProgress/Chemistry-Tools.dm @@ -769,6 +769,9 @@ return if(ismob(target))//Blood! + if(istype(src, /mob/living/carbon/metroid)) + user << "\red You are unable to locate any blood." + return if(src.reagents.has_reagent("blood")) user << "\red There is already a blood sample in this syringe" return @@ -795,7 +798,7 @@ B.data["viruses"] = list() - B.data["virus"] += new D.type + B.data["viruses"] += new D.type B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0) if(T.resistances&&T.resistances.len) diff --git a/code/defines/mob/living/carbon/metroid.dm b/code/defines/mob/living/carbon/metroid.dm index fd3a34b195..5ef947841b 100644 --- a/code/defines/mob/living/carbon/metroid.dm +++ b/code/defines/mob/living/carbon/metroid.dm @@ -1,9 +1,34 @@ -/mob/living/carbon/alien/larva/metroid + +///mob/living/carbon/alien/larva/metroid + +/mob/living/carbon/metroid name = "baby metroid" icon = 'mob.dmi' - icon_state = "metroid" + icon_state = "baby metroid" pass_flags = PASSTABLE + voice_message = "chatters" + say_message = "says" health = 250 + gender = NEUTER + + update_icon = 0 + nutrition = 100 + + var/amount_grown = 0// controls how long the metroid has been overfed, if 10, grows into an adult + // if adult: if 10: reproduces + var/powerlevel = 0 // 1-10 controls how much electricity they are generating + + var/mob/living/Victim = null // the person the metroid is currently feeding on + +/mob/living/carbon/metroid/adult + name = "adult metroid" + icon = 'mob.dmi' + icon_state = "adult metroid" + + health = 300 + gender = NEUTER + + update_icon = 0 + nutrition = 100 - update_icon = 0 \ No newline at end of file diff --git a/code/game/machinery/kitchen/processor.dm b/code/game/machinery/kitchen/processor.dm index 72a71c23c4..3267822e7d 100644 --- a/code/game/machinery/kitchen/processor.dm +++ b/code/game/machinery/kitchen/processor.dm @@ -56,7 +56,7 @@ metroid - input = /mob/living/carbon/alien/larva/metroid + input = /mob/living/carbon/metroid output = /obj/item/weapon/reagent_containers/food/drinks/jar monkey diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index f9cde1d05c..5eeab8afd4 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -323,30 +323,26 @@ Neutralize All Unidentified Life Signs: []
"}, if(emagged) // if emagged, HOLY SHIT EVERYONE IS DANGEROUS beep boop beep targets += C else - if((stun_all && !src.allowed(C)) || attacked && !src.allowed(C)) - // if the turret has been attacked or is angry, target all non-sec people - targets += C - else - if (C.stat || C.handcuffed) // if the perp is handcuffed or dead/dying, no need to bother really - continue // move onto next potential victim! + if (C.stat || C.handcuffed) // if the perp is handcuffed or dead/dying, no need to bother really + continue // move onto next potential victim! - if (C.lying) // if the perp is lying down, it's still a target but a less-important target - secondarytargets += C + if (C.lying) // if the perp is lying down, it's still a target but a less-important target + secondarytargets += C - if (istype(C, /mob/living/carbon/human)) // if the target is a human, analyze threat level - if(src.assess_perp(C)<4) - continue // if threat level < 4, keep going + if (istype(C, /mob/living/carbon/human)) // if the target is a human, analyze threat level + if(src.assess_perp(C)<4) + continue // if threat level < 4, keep going - else if ((istype(C, /mob/living/carbon/monkey)) && (C.client) && (ticker.mode.name == "monkey")) - continue // WHY WOULD YOU TARGET MONKIES???? Skip all monkies, jesus, don't waste your time bro + else if ((istype(C, /mob/living/carbon/monkey)) && (C.client) && (ticker.mode.name == "monkey")) + continue // WHY WOULD YOU TARGET MONKIES???? Skip all monkies, jesus, don't waste your time bro - var/dst = get_dist(src, C) // if it's too far away, why bother? - if (dst > 12) - continue + var/dst = get_dist(src, C) // if it's too far away, why bother? + if (dst > 12) + continue - targets += C // if the perp has passed all previous tests, congrats, it is now a "shoot-me!" nominee + targets += C // if the perp has passed all previous tests, congrats, it is now a "shoot-me!" nominee if (targets.len>0) // if there are targets to shoot @@ -412,6 +408,11 @@ Neutralize All Unidentified Life Signs: []
"}, if(src.emagged) return 10 // if emagged, always return 10. + if((stun_all && !src.allowed(perp)) || attacked && !src.allowed(perp)) + // if the turret has been attacked or is angry, target all non-sec people + if(!src.allowed(perp)) + return 10 + if(auth_weapons) // check for weapon authorization if((isnull(perp:wear_id)) || (istype(perp:wear_id, /obj/item/weapon/card/id/syndicate))) @@ -692,12 +693,12 @@ Neutralize All Unidentified Life Signs: []
"}, if(!installation) return build_step = 3 - user << "You remove \the [installation] from the turret frame." var/obj/item/weapon/gun/energy/Gun = new installation(src.loc) Gun.power_supply.charge=gun_charge Gun.update_icon() installation = null gun_charge = 0 + user << "You remove \the [Gun] from the turret frame." if(5) user << "You remove the prox sensor from the turret frame." @@ -729,7 +730,36 @@ Neutralize All Unidentified Life Signs: []
"}, // The below code is pretty much just recoded from the initial turret object. It's necessary but uncommented because it's exactly the same! /obj/machinery/porta_turret_cover/attack_ai(mob/user as mob) - return attack_hand(user) + . = ..() + if (.) + return + var/dat + + dat += text({" +Automatic Portable Turret Installation

+Status: []
+Behaviour controls are [Parent_Turret.locked ? "locked" : "unlocked"]"}, + +"[Parent_Turret.on ? "On" : "Off"]" ) + + + dat += text({"
+Check for Weapon Authorization: []
+Check Security Records: []
+Neutralize Identified Criminals: []
+Neutralize All Non-Security and Non-Command Personnel: []
+Neutralize All Unidentified Life Signs: []
"}, + +"[Parent_Turret.auth_weapons ? "Yes" : "No"]", +"[Parent_Turret.check_records ? "Yes" : "No"]", +"[Parent_Turret.criminals ? "Yes" : "No"]", +"[Parent_Turret.stun_all ? "Yes" : "No"]" , +"[Parent_Turret.check_anomalies ? "Yes" : "No"]" ) + + + user << browse("Automatic Portable Turret Installation[dat]", "window=autosec") + onclose(user, "autosec") + return /obj/machinery/porta_turret_cover/attack_hand(mob/user as mob) . = ..() diff --git a/code/game/objects/gibs.dm b/code/game/objects/gibs.dm index 9a2506cb5a..e9304b2d51 100644 --- a/code/game/objects/gibs.dm +++ b/code/game/objects/gibs.dm @@ -50,9 +50,9 @@ gib.viruses += viruus viruus.holder = gib viruus.spread_type = CONTACT_FEET - var/list/directions = gibdirections[i] - if(directions.len) - gib.streak(directions) + var/list/directions = gibdirections[i] + if(directions.len) + gib.streak(directions) del(src) diff --git a/code/game/objects/kitchen.dm b/code/game/objects/kitchen.dm index f60d21209e..a4b02ed632 100644 --- a/code/game/objects/kitchen.dm +++ b/code/game/objects/kitchen.dm @@ -20,7 +20,7 @@ else user << "\red The spike already has something on it, finish collecting its meat first!" - else if(istype(G.affecting, /mob/living/carbon/alien) && !istype(G.affecting, /mob/living/carbon/alien/larva/metroid)) + else if(istype(G.affecting, /mob/living/carbon/alien)) if(src.occupied == 0) src.icon_state = "spikebloodygreen" src.occupied = 1 diff --git a/code/modules/mob/living/carbon/alien/larva/death.dm b/code/modules/mob/living/carbon/alien/larva/death.dm index 331e138463..bd2f5cb218 100644 --- a/code/modules/mob/living/carbon/alien/larva/death.dm +++ b/code/modules/mob/living/carbon/alien/larva/death.dm @@ -3,8 +3,11 @@ return if(src.healths) src.healths.icon_state = "health6" + + /* if(istype(src,/mob/living/carbon/alien/larva/metroid)) src.icon_state = "metroid_dead" + */ else src.icon_state = "larva_l" src.stat = 2 diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index a2c0fcadb3..9004cd3b38 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -109,7 +109,7 @@ del(src) return //grow!! but not if metroid or dead - if(!istype(src,/mob/living/carbon/alien/larva/metroid) && health>-100) + if(health>-100) amount_grown++ if (radiation) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index bf022afd81..baed44b833 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -245,6 +245,30 @@ new_xeno.a_intent = "hurt" new_xeno << "You are now an alien." + spawn(0)//To prevent the proc from returning null. + del(src) + return + +/mob/living/carbon/human/proc/Metroidize() + if (monkeyizing) + return + for(var/obj/item/W in src) + drop_from_slot(W) + update_clothing() + monkeyizing = 1 + canmove = 0 + icon = null + invisibility = 101 + for(var/t in organs) + del(organs[t]) + + var/mob/living/carbon/metroid/new_metroid = new /mob/living/carbon/metroid (loc) + + new_metroid.mind_initialize(src) + new_metroid.key = key + + new_metroid.a_intent = "hurt" + new_metroid << "You are now a Metroid." spawn(0)//To prevent the proc from returning null. del(src) return \ No newline at end of file diff --git a/icons/misc/old_or_unused.dmi b/icons/misc/old_or_unused.dmi index 3ded88ed69..330dc9132a 100644 Binary files a/icons/misc/old_or_unused.dmi and b/icons/misc/old_or_unused.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 63fe410508..a2b941b8d7 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/mob/screen1_alien.dmi b/icons/mob/screen1_alien.dmi index 353a2e15e0..655d82a1bc 100644 Binary files a/icons/mob/screen1_alien.dmi and b/icons/mob/screen1_alien.dmi differ diff --git a/maps/tgstation.2.0.7.dmm b/maps/tgstation.2.0.7.dmm index 5caa0e101e..d9402f5766 100644 --- a/maps/tgstation.2.0.7.dmm +++ b/maps/tgstation.2.0.7.dmm @@ -5126,7 +5126,7 @@ "bUD" = (/obj/machinery/holopad,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "bUE" = (/obj/item/weapon/paper{name = "Work in Progress"},/obj/machinery/door/window{dir = 8; icon = 'windoor.dmi'; name = "Containment Exterior"; req_access_txt = "55"},/obj/machinery/light,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) "bUF" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "containment"; name = "Xenobiology Blast Doors"; opacity = 0},/obj/machinery/door/window{base_state = "right"; dir = 4; icon = 'windoor.dmi'; icon_state = "right"; name = "Containment Interior"; req_access_txt = "55"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/toxins/xenobiology) -"bUG" = (/obj/landmark{name = "xeno_spawn"; pixel_x = -1},/mob/living/carbon/alien/larva/metroid,/turf/simulated/floor{icon_state = "dark"},/area/toxins/xenobiology) +"bUG" = (/obj/landmark{name = "xeno_spawn"; pixel_x = -1},/mob/living/carbon/metroid,/turf/simulated/floor{icon_state = "dark"},/area/toxins/xenobiology) "bUH" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/plating,/area/maintenance/aft) "bUI" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/device/flash,/obj/item/device/flash,/turf/simulated/floor,/area/assembly/assembly_line) "bUJ" = (/turf/simulated/floor/plating,/area/assembly/assembly_line) @@ -6598,7 +6598,7 @@ "cwT" = (/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) "cwU" = (/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) "cwV" = (/obj/item/weapon/spacecash,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/planet/clown) -"cwW" = (/mob/living/carbon/alien/larva/metroid{desc = "A tamed other thing. Very smart looking."; icon = 'otherthing.dmi'; icon_state = "otherthing"; name = "Tamed Otherthing"; toxloss = 0; voice_message = "gurgles"; voice_name = "otherthing"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"cwW" = (/mob/living/carbon/metroid{desc = "A tamed other thing. Very smart looking."; icon = 'otherthing.dmi'; icon_state = "otherthing"; name = "Tamed Otherthing"; toxloss = 0; voice_message = "gurgles"; voice_name = "otherthing"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) "cwX" = (/obj/grille,/obj/window/reinforced,/obj/window/reinforced{dir = 4},/obj/window/reinforced{dir = 8},/turf/unsimulated/floor,/area/wizard_station) "cwY" = (/obj/stool,/turf/unsimulated/floor{dir = 2; icon_state = "carpetside"},/area/wizard_station) "cwZ" = (/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station) diff --git a/tgstation.dme b/tgstation.dme index 32e74c07d9..7a4fbd3651 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -92,6 +92,7 @@ #define FILE_DIR "code/modules/mob/living/carbon/beast" #define FILE_DIR "code/modules/mob/living/carbon/brain" #define FILE_DIR "code/modules/mob/living/carbon/human" +#define FILE_DIR "code/modules/mob/living/carbon/metroid" #define FILE_DIR "code/modules/mob/living/carbon/monkey" #define FILE_DIR "code/modules/mob/living/silicon" #define FILE_DIR "code/modules/mob/living/silicon/ai" @@ -702,6 +703,13 @@ #include "code\modules\mob\living\carbon\human\savefile.dm" #include "code\modules\mob\living\carbon\human\say.dm" #include "code\modules\mob\living\carbon\human\whisper.dm" +#include "code\modules\mob\living\carbon\metroid\death.dm" +#include "code\modules\mob\living\carbon\metroid\emote.dm" +#include "code\modules\mob\living\carbon\metroid\examine.dm" +#include "code\modules\mob\living\carbon\metroid\hud.dm" +#include "code\modules\mob\living\carbon\metroid\life.dm" +#include "code\modules\mob\living\carbon\metroid\metroid.dm" +#include "code\modules\mob\living\carbon\metroid\powers.dm" #include "code\modules\mob\living\carbon\monkey\death.dm" #include "code\modules\mob\living\carbon\monkey\emote.dm" #include "code\modules\mob\living\carbon\monkey\examine.dm" @@ -814,5 +822,5 @@ #include "code\WorkInProgress\recycling\scrap.dm" #include "code\WorkInProgress\recycling\sortingmachinery.dm" #include "interface\skin.dmf" -#include "maps\tgstation.2.0.7.dmm" +#include "maps\TestingMap.dmm" // END_INCLUDE