From a2fddc0fc1e0ba1b9040fbe9fec9a4b00767eb17 Mon Sep 17 00:00:00 2001 From: NicholasDV Date: Thu, 13 Jun 2013 18:22:05 -0400 Subject: [PATCH 01/26] Adds in the Kida Adds in the Kida Race to all parts. --- code/datums/datacore.dm | 3 ++- code/datums/datumvars.dm | 2 +- code/modules/admin/admin_verbs.dm | 2 +- code/modules/client/preferences.dm | 8 ++++++-- code/modules/mob/living/carbon/human/human.dm | 8 +++++++- .../modules/mob/living/carbon/human/update_icons.dm | 4 +++- code/modules/mob/living/say.dm | 13 +++++++++++-- code/modules/mob/mob_defines.dm | 13 +++++++------ code/modules/mob/new_player/new_player.dm | 4 ++++ code/modules/mob/new_player/preferences_setup.dm | 3 ++- code/modules/mob/new_player/sprite_accessories.dm | 5 ++--- code/modules/mob/say.dm | 4 +++- code/modules/organs/organ_external.dm | 3 ++- code/modules/projectiles/projectile/change.dm | 2 +- code/stylesheet.dm | 1 + 15 files changed, 53 insertions(+), 22 deletions(-) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index e3f69881daa..9afd8543295 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -122,9 +122,10 @@ proc/get_id_photo(var/mob/living/carbon/human/H) icobase = 'icons/mob/human_races/r_lizard.dmi' if("Skrell") icobase = 'icons/mob/human_races/r_skrell.dmi' - if("Vox") icobase = 'icons/mob/human_races/r_vox.dmi' + if("Kidan") + icobase = 'icons/mob/human_races/r_kidan.dmi' else icobase = 'icons/mob/human_races/r_human.dmi' diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 81abf92546a..df3a72391f7 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -730,7 +730,7 @@ client usr << "This can only be done to instances of type /mob/living/carbon/human" return - var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow","tajaran","skrell","vox") + var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow","tajaran","skrell","vox","kidan") switch(new_mutantrace) if(null) return diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index c36a0ab99d2..acb7e3b2283 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -647,7 +647,7 @@ var/list/admin_verbs_mod = list( if(!istype(M, /mob/living/carbon/human)) usr << "\red You can only do this to humans!" return - switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi, Vox and Tajaran can result in unintended consequences.",,"Yes","No")) + switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi, Vox, Kida, and Tajara can result in unintended consequences.",,"Yes","No")) if("No") return var/new_facial = input("Please select facial hair color.", "Character Generation") as color diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 8d5376c3131..75ead11e4c5 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -792,18 +792,22 @@ datum/preferences if(is_alien_whitelisted(user, "Skrell")) //Check for Skrell and admins new_species += "Skrell" whitelisted = 1 - if(is_alien_whitelisted(user, "Vox")) //Check for Skrell and admins + if(is_alien_whitelisted(user, "Vox")) //Check for Vox and admins new_species += "Vox" whitelisted = 1 - + if(is_alien_whitelisted(user, "Kidan")) // Check for Kidan and admins + new_species += "Kidan" + whitelisted = 1 if(!whitelisted) alert(user, "You cannot change your species as you need to be whitelisted. If you wish to be whitelisted contact an admin in-game, on the forums, or on IRC.") + else //Not using the whitelist? Aliens for everyone! new_species += "Tajaran" new_species += "Unathi" new_species += "Skrell" new_species += "Vox" + new_species += "Kidan" species = input("Please select a species", "Character Generation", null) in new_species if(prev_species != species) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 63d685bfbdd..77811f9c81f 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -817,6 +817,8 @@ return "Mobile vegetation" if("golem") return "Animated Construct" + if("kidan") + return "Kidan" else return "Human" @@ -829,7 +831,9 @@ else if(src.dna.mutantrace == "tajaran") return "Tajaran" else if(src.dna.mutantrace == "vox") - return "vox" + return "Vox" + else if(src.dna.mutantrace == "kidan") + return "Kidan" /mob/living/carbon/proc/update_mutantrace_languages() if(src.dna) @@ -841,6 +845,8 @@ src.tajaran_talk_understand = 1 else if(src.dna.mutantrace == "vox") src.vox_talk_understand = 1 + else if(src.dna.mutantrace == "kidan") + src.kidan_talk_understand = 1 /mob/living/carbon/human/proc/play_xylophone() if(!src.xylophone) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 9d29d317c80..f10120d66c6 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -444,10 +444,12 @@ proc/get_damage_icon_part(damage_state, body_part) if("skrell") race_icon = 'icons/mob/human_races/r_skrell.dmi' deform_icon = 'icons/mob/human_races/r_def_skrell.dmi' - if("vox") race_icon = 'icons/mob/human_races/r_vox.dmi' deform_icon = 'icons/mob/human_races/r_def_vox.dmi' + if("kidan") + race_icon = 'icons/mob/human_races/r_kidan.dmi' + deform_icon = 'icons/mob/human_races/r_def_kidan.dmi' else race_icon = 'icons/mob/human_races/r_human.dmi' diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 420e20a1b92..838187f62ed 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -19,6 +19,7 @@ var/list/department_radio_keys = list( ":j" = "tajaran", "#j" = "tajaran", ".j" = "tajaran", ":o" = "soghun", "#o" = "soghun", ".o" = "soghun", ":v" = "vox", "#v" = "vox", ".v" = "vox", + ":q" = "kidan", "#q" = "kidan", ".q" = "kidan", ":R" = "right hand", "#R" = "right hand", ".R" = "right hand", ":L" = "left hand", "#L" = "left hand", ".L" = "left hand", @@ -39,6 +40,7 @@ var/list/department_radio_keys = list( ":J" = "tajaran", "#J" = "tajaran", ".J" = "tajaran", ":O" = "soghun", "#O" = "soghun", ".O" = "soghun", ":V" = "vox", "#V" = "vox", ".V" = "vox", + ":Q" = "kidan", "#Q" = "kidan", ".Q" = "kidan", //kinda localization -- rastaf0 //same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding. @@ -188,6 +190,7 @@ var/list/department_radio_keys = list( var/is_speaking_soghun = 0 var/is_speaking_taj = 0 var/is_speaking_vox = 0 + var/is_speaking_kidan = 0 var/is_speaking_radio = 0 switch (message_mode) @@ -290,6 +293,10 @@ var/list/department_radio_keys = list( if(vox_talk_understand || universal_speak) is_speaking_vox = 1 + if ("kidan") + if(kidan_talk_understand || universal_speak) + is_speaking_kidan = 1 + if("changeling") if(mind && mind.changeling) for(var/mob/Changeling in mob_list) @@ -388,6 +395,8 @@ var/list/department_radio_keys = list( heard_a += M else if(is_speaking_vox && (M:vox_talk_understand || M:universal_speak)) heard_a += M + else if(is_speaking_kidan && (M:kidan_talk_understand || M:universal_speak)) + heard_a += M else heard_b += M else @@ -403,7 +412,7 @@ var/list/department_radio_keys = list( var/rendered = null if (length(heard_a)) - var/message_a = say_quote(message,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox) + var/message_a = say_quote(message,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox,is_speaking_kidan) if (italics) message_a = "[message_a]" @@ -428,7 +437,7 @@ var/list/department_radio_keys = list( message_b = voice_message else message_b = stars(message) - message_b = say_quote(message_b,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox) + message_b = say_quote(message_b,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox,is_speaking_kidan) if (italics) message_b = "[message_b]" diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 9715e6ed20c..8f1868b7168 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -206,12 +206,13 @@ //Whether or not mobs can understand other mobtypes. These stay in /mob so that ghosts can hear everything. var/universal_speak = 0 // Set to 1 to enable the mob to speak to everyone -- TLE - var/robot_talk_understand = 0 - var/alien_talk_understand = 0 - var/tajaran_talk_understand = 0 - var/soghun_talk_understand = 0 - var/skrell_talk_understand = 0 - var/vox_talk_understand = 0 + var/robot_talk_understand = 0 + var/alien_talk_understand = 0 + var/tajaran_talk_understand = 0 + var/soghun_talk_understand = 0 + var/skrell_talk_understand = 0 + var/vox_talk_understand = 0 + var/kidan_talk_understand = 0 var/has_limbs = 1 //Whether this mob have any limbs he can move with var/can_stand = 1 //Whether this mob have ability to stand diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 686007c7173..f2859af519d 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -353,6 +353,10 @@ if(is_alien_whitelisted(src, "Vox"|| !config.usealienwhitelist)) new_character.dna.mutantrace = "vox" new_character.vox_talk_understand = 1 + if(client.prefs.species == "Kidan") + if(is_alien_whitelisted(src, "Vox"|| !config.usealienwhitelist)) + new_character.dna.mutantrace = "kidan" + new_character.kidan_talk_understand = 1 if(ticker.random_players) new_character.gender = pick(MALE, FEMALE) diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index f7c965d2fdf..821a95e4b61 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -144,9 +144,10 @@ datum/preferences icobase = 'icons/mob/human_races/r_lizard.dmi' if("Skrell") icobase = 'icons/mob/human_races/r_skrell.dmi' - if("Vox") icobase = 'icons/mob/human_races/r_vox.dmi' + if("Kidan") + icobase = 'icons/mob/human_races/r_vox.dmi' else icobase = 'icons/mob/human_races/r_human.dmi' diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 4d4baf0ba18..9a321f20382 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -285,7 +285,6 @@ icon_state = "hair_e" gender = MALE // turnoff! - bald name = "Bald" icon_state = "bald" @@ -306,7 +305,7 @@ name = "Shaved" icon_state = "bald" gender = NEUTER - species_allowed = list("Human","Unathi","Tajaran","Skrell","Vox") + species_allowed = list("Human","Unathi","Tajaran","Skrell","Vox","Kidan") watson name = "Watson Mustache" @@ -484,7 +483,7 @@ species_allowed = list("Tajaran") taj_ears_spiky - name = "Tajara Spiky" + name = "Tajara Spiky" icon_state = "hair_tajspiky" species_allowed = list("Tajaran") diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 9f3660eb7c5..a0b765d8d43 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -69,7 +69,7 @@ return 1 return 0 -/mob/proc/say_quote(var/text,var/is_speaking_soghun,var/is_speaking_skrell,var/is_speaking_tajaran,var/is_speaking_vox) +/mob/proc/say_quote(var/text,var/is_speaking_soghun,var/is_speaking_skrell,var/is_speaking_tajaran,var/is_speaking_vox,var/is_speaking_kidan) if(!text) return "says, \"...\""; //not the best solution, but it will stop a large number of runtimes. The cause is somewhere in the Tcomms code //tcomms code is still runtiming somewhere here @@ -82,6 +82,8 @@ return "mrowls, \"[text]\""; if (is_speaking_vox) return "chirps, \"[text]\""; + if (is_speaking_kidan) + return "chitters, \"[text]\""; //Needs Virus2 // if (src.disease_symptoms & DISEASE_HOARSE) // return "rasps, \"[text]\""; diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index d166dccd38c..5e1fba994c7 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -740,9 +740,10 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H) base = new('icons/mob/human_races/r_lizard.dmi') if("skrell") base = new('icons/mob/human_races/r_skrell.dmi') - if("vox") base = new('icons/mob/human_races/r_vox.dmi') + if("kidan") + base = new('icons/mob/human_races/r_kidan.dmi') else base = new('icons/mob/human_races/r_human.dmi') diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm index 2b4b4c457d8..604cf5428b9 100644 --- a/code/modules/projectiles/projectile/change.dm +++ b/code/modules/projectiles/projectile/change.dm @@ -74,7 +74,7 @@ var/mob/living/carbon/human/H = new_mob if(H.dna) - H.dna.mutantrace = pick("lizard","tajaran","skrell","golem","slime","plant","vox",4;"") + H.dna.mutantrace = pick("lizard","tajaran","skrell","golem","slime","plant","vox","kidan",4;"") else return diff --git a/code/stylesheet.dm b/code/stylesheet.dm index 902160e9ef9..5eb0ec9991a 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -56,6 +56,7 @@ h1.alert, h2.alert {color: #000000;} .skrell {color: #00CED1;} .soghun {color: #228B22;} .vox {color: #AA00AA;} +.kidan {color: #cc9900;} .say_quote {font-family: Georgia, Verdana, sans-serif;} .interface {color: #330033;} From 1f886448b65ef61ab90c98e8b4a77887da12843f Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Thu, 13 Jun 2013 18:20:42 -0700 Subject: [PATCH 02/26] Fixes a runtime involving ZAS zones lose their air datum. (I have no fucking idea why that happens) Fixes #3059 --- code/ZAS/Functions.dm | 47 ++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/code/ZAS/Functions.dm b/code/ZAS/Functions.dm index 7b4ea8dff86..ce24513418e 100644 --- a/code/ZAS/Functions.dm +++ b/code/ZAS/Functions.dm @@ -81,28 +81,43 @@ proc/ZMerge(zone/A,zone/B) if(!istype(A) || !istype(B)) return - //Merges two zones so that they are one. - var/a_size = A.air.group_multiplier - var/b_size = B.air.group_multiplier - var/c_size = a_size + b_size var/new_contents = A.contents + B.contents - //Set air multipliers to one so air represents gas per tile. - A.air.group_multiplier = 1 - B.air.group_multiplier = 1 - - //Remove some air proportional to the size of this zone. - A.air.remove_ratio(a_size/c_size) - B.air.remove_ratio(b_size/c_size) - - //Merge the gases and set the multiplier to the sum of the old ones. - A.air.merge(B.air) - A.air.group_multiplier = c_size - //Set all the zone vars. for(var/turf/simulated/T in B.contents) T.zone = A + if(istype(A.air) && istype(B.air)) + //Merges two zones so that they are one. + var/a_size = A.air.group_multiplier + var/b_size = B.air.group_multiplier + var/c_size = a_size + b_size + + //Set air multipliers to one so air represents gas per tile. + A.air.group_multiplier = 1 + B.air.group_multiplier = 1 + + //Remove some air proportional to the size of this zone. + A.air.remove_ratio(a_size/c_size) + B.air.remove_ratio(b_size/c_size) + + //Merge the gases and set the multiplier to the sum of the old ones. + A.air.merge(B.air) + A.air.group_multiplier = c_size + + //I hate when the air datum somehow disappears. + // Try to make it sorta work anyways. Fakit + else if(istype(B.air)) + A.air = B.air + A.air.group_multiplier = A.contents.len + + else if(istype(A.air)) + A.air.group_multiplier = A.contents.len + + //Doublefakit. + else + A.air = new + //Check for connections to merge into the new zone. for(var/connection/C in B.connections) //The Cleanup proc will delete the connection if the zones are the same. From 6b73b8ec2f4438d8487e9d4951e32674e4435328 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Thu, 13 Jun 2013 20:46:09 -0700 Subject: [PATCH 03/26] Adjusted kitchen knives. Added projectile pinning. Various tweaks. --- code/game/objects/items/weapons/kitchen.dm | 1 + code/game/objects/items/weapons/weaponry.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 7 +++- code/modules/mob/living/living_defense.dm | 34 ++++++++++++++++- code/modules/mob/living/living_defines.dm | 1 - code/modules/mob/mob.dm | 37 +++++++++++-------- code/modules/mob/mob_defines.dm | 1 + code/modules/mob/mob_movement.dm | 5 ++- .../projectiles/guns/projectile/bow.dm | 9 ++++- .../projectiles/guns/projectile/pneumatic.dm | 2 +- 10 files changed, 76 insertions(+), 23 deletions(-) diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index a68276a3100..6fbdba918ed 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -153,6 +153,7 @@ icon_state = "knife" desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come." flags = FPRINT | TABLEPASS | CONDUCT + sharp = 1 force = 10.0 w_class = 3.0 throwforce = 6.0 diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 08af5cda280..92e6b78d754 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -146,5 +146,5 @@ item_state = "harpoon" force = 20 throwforce = 15 - w_class = 2 + w_class = 3 attack_verb = list("jabbed","stabbed","ripped") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 63d685bfbdd..fc93d905b63 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -45,7 +45,7 @@ if(istype(tmob, /mob/living/carbon/human)) for(var/mob/M in range(tmob, 1)) - if( ((M.pulling == tmob && ( tmob.restrained() && !( M.restrained() ) && M.stat == 0)) || locate(/obj/item/weapon/grab, tmob.grabbed_by.len)) ) + if(tmob.pinned.len || ((M.pulling == tmob && ( tmob.restrained() && !( M.restrained() ) && M.stat == 0)) || locate(/obj/item/weapon/grab, tmob.grabbed_by.len)) ) if ( !(world.time % 5) ) src << "\red [tmob] is restrained, you cannot push past" now_pushing = 0 @@ -1153,6 +1153,11 @@ affected.implants -= selection shock_stage+=10 + for(var/obj/item/weapon/O in pinned) + if(O == selection) + pinned -= O + src.anchored = 0 + if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-. var/datum/wound/internal_bleeding/I = new (15) affected.wounds += I diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index a3bc884c171..f7b2caecae3 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -61,7 +61,7 @@ P.on_hit(src, absorb) return absorb -/mob/living/hitby(atom/movable/AM as mob|obj,var/speed)//Standardization and logging -Sieve +/mob/living/hitby(atom/movable/AM as mob|obj,var/speed = 5)//Standardization and logging -Sieve if(istype(AM,/obj/)) var/obj/O = AM var/zone = ran_zone("chest",75)//Hits a random part of the body, geared towards the chest @@ -73,11 +73,43 @@ var/armor = run_armor_check(zone, "melee", "Your armor has protected your [zone].", "Your armor has softened hit to your [zone].") if(armor < 2) apply_damage(O.throwforce*(speed/5), dtype, zone, armor, O.sharp, O) + if(!O.fingerprintslast) return + var/client/assailant = directory[ckey(O.fingerprintslast)] if(assailant && assailant.mob && istype(assailant.mob,/mob)) var/mob/M = assailant.mob src.attack_log += text("\[[time_stamp()]\] Has been hit with [O], last touched by [M.name] ([assailant.ckey])") M.attack_log += text("\[[time_stamp()]\] Hit [src.name] ([src.ckey]) with [O]") log_attack("[src.name] ([src.ckey]) was hit by [O], last touched by [M.name] ([assailant.ckey])") + + // Begin BS12 momentum-transfer code. + + if(speed > 20) + var/obj/item/weapon/W = O + var/momentum = speed/2 + var/dir = get_dir(M,src) + visible_message("\red [src] staggers under the impact!","\red You stagger under the impact!") + + src.throw_at(get_edge_target_turf(src,dir),1,momentum) + + if(near_wall(dir,2) && W.w_class >= 3 && W.sharp) //If they're close to a wall and the projectile is suitable. + visible_message("[src] is pinned to the wall by [O]!","You are pinned to the wall by [O]!") + src.anchored = 1 + src.pinned += O + + +/mob/living/proc/near_wall(var/direction,var/distance=1) + var/turf/T = get_step(get_turf(src),direction) + var/i = 1 + while(i>0 && i<=distance) + if(T.density) //Turf is a wall! + return 1 + i++ + T = get_step(T,direction) + + return 0 + + +// End BS12 momentum-transfer code. \ No newline at end of file diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 19d94b42f5a..8d76b47513c 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -24,7 +24,6 @@ //Allows mobs to move through dense areas without restriction. For instance, in space or out of holder objects. var/incorporeal_move = 0 //0 is off, 1 is normal, 2 is for ninjas. - var/t_plasma = null var/t_oxygen = null var/t_sl_gas = null diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 253e4ee43dc..6e9beda1bad 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -583,24 +583,31 @@ var/list/slot_equipment_priority = list( \ pulling = null /mob/proc/start_pulling(var/atom/movable/AM) + if ( !AM || !usr || src==AM || !isturf(src.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort! return - if (!( AM.anchored )) - if(pulling) - var/pulling_old = pulling - stop_pulling() - // Are we pulling the same thing twice? Just stop pulling. - if(pulling_old == AM) - return - src.pulling = AM - AM.pulledby = src - if(ismob(AM)) - var/mob/M = AM - if(!iscarbon(src)) - M.LAssailant = null - else - M.LAssailant = usr + if (AM.anchored) + return + + var/mob/M = AM + if(ismob(AM)) + if(!iscarbon(src)) + M.LAssailant = null + else + M.LAssailant = usr + if (M.pinned.len) + usr << "They're pinned, gtfo." + return + + if(pulling) + var/pulling_old = pulling + stop_pulling() + // Are we pulling the same thing twice? Just stop pulling. + if(pulling_old == AM) + return + src.pulling = AM + AM.pulledby = src /mob/proc/can_use_hands() return diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 9715e6ed20c..140e5b63572 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -85,6 +85,7 @@ var/lastpuke = 0 var/unacidable = 0 var/small = 0 + var/list/pinned = list() //List of things pinning this creature to walls (see living_defense.dm) var/name_archive //For admin things like possession diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index cec9b06861a..80d55c0a041 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -256,7 +256,6 @@ if(!mob.canmove) return - //if(istype(mob.loc, /turf/space) || (mob.flags & NOGRAV)) // if(!mob.Process_Spacemove(0)) return 0 @@ -279,6 +278,10 @@ src << "\blue You're restrained! You can't move!" return 0 + if(mob.pinned.len) + src << "\blue You're pinned to a wall by [mob.pinned[1]]!" + return 0 + move_delay = world.time//set move delay mob.last_move_intent = world.time + 10 switch(mob.m_intent) diff --git a/code/modules/projectiles/guns/projectile/bow.dm b/code/modules/projectiles/guns/projectile/bow.dm index a052f198422..25f4276d9a0 100644 --- a/code/modules/projectiles/guns/projectile/bow.dm +++ b/code/modules/projectiles/guns/projectile/bow.dm @@ -7,7 +7,7 @@ item_state = "bolt" flags = FPRINT | TABLEPASS throwforce = 12 - w_class = 2.0 + w_class = 3.0 sharp = 1 /obj/item/weapon/arrow/proc/removed() //Helper for metal rods falling apart.. @@ -33,7 +33,7 @@ icon = 'icons/obj/weapons.dmi' icon_state = "crossbow" item_state = "crossbow-solid" - w_class = 4.0 + w_class = 5.0 flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY slot_flags = SLOT_BELT | SLOT_BACK @@ -59,6 +59,7 @@ var/obj/item/stack/rods/R = W R.use(1) arrow = new /obj/item/weapon/arrow/rod(src) + arrow.fingerprintslast = src.fingerprintslast arrow.loc = src user.visible_message("[user] haphazardly jams [arrow] into [src].","You jam [arrow] into [src].") if(cell) @@ -156,6 +157,10 @@ else if(target == user) return + if(!tension) + user << "You haven't drawn back the bolt!" + return 0 + if (!arrow) user << "You have no arrow nocked to [src]!" return 0 diff --git a/code/modules/projectiles/guns/projectile/pneumatic.dm b/code/modules/projectiles/guns/projectile/pneumatic.dm index 7d2f0c3b498..fe6c2651bd5 100644 --- a/code/modules/projectiles/guns/projectile/pneumatic.dm +++ b/code/modules/projectiles/guns/projectile/pneumatic.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/gun.dmi' icon_state = "pneumatic" item_state = "pneumatic" - w_class = 4.0 + w_class = 5.0 flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY slot_flags = SLOT_BELT max_w_class = 3 From 9139a70d8cbe4fc3fbe568162628b7fdf07cb265 Mon Sep 17 00:00:00 2001 From: NicholasDV Date: Fri, 14 Jun 2013 00:06:45 -0400 Subject: [PATCH 04/26] Adds in the icon files for Kidan and fixes issue SkyMarshal caught a small issue, and I realized that I never did include the kidan icon files. This is the fix! --- code/modules/mob/new_player/preferences_setup.dm | 2 +- icons/mob/human_races/r_def_kidan.dmi | Bin 0 -> 2587 bytes icons/mob/human_races/r_kidan.dmi | Bin 0 -> 2550 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 icons/mob/human_races/r_def_kidan.dmi create mode 100644 icons/mob/human_races/r_kidan.dmi diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 821a95e4b61..36cf966566d 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -147,7 +147,7 @@ datum/preferences if("Vox") icobase = 'icons/mob/human_races/r_vox.dmi' if("Kidan") - icobase = 'icons/mob/human_races/r_vox.dmi' + icobase = 'icons/mob/human_races/r_kidan.dmi' else icobase = 'icons/mob/human_races/r_human.dmi' diff --git a/icons/mob/human_races/r_def_kidan.dmi b/icons/mob/human_races/r_def_kidan.dmi new file mode 100644 index 0000000000000000000000000000000000000000..0d7b050b7ce2d1ef88132c060b44c53f70cce170 GIT binary patch literal 2587 zcmZWo2{hDe8~;nqFtSu`!j+M-WSwLwF-(NQD5^<|zDAZTV;N*?uH_nT7$xpS8d;)* z%8d-y)P%S(%06Su+H96#%w(CFZ#wtuoO{mqp7XxX@A;kcEbse1zYGs|CwYh(1ONbe z7iWia03ZeZzGb8V0MNdA?UlqF^KkWYeEaq-LJN3-0%A@8er7=CDZuh);F1v#YXe+1 z2ByM+aSU+J84#0Ch#L=x+nm>{0P#yjNmMcVWT_;H6!x6ECtx=};wN!fab75_!_7!^ zL|_;;5EBXjw;yH=OhPEoeLI$e5+RoapUI=4rRnK>$N|O^-#xZ9jD^U^7uED8&uCNXTzUpw2QQ; zYUdRD>xOezat;KZuS_ycf318)_iN?eVW4vL$qog)-hDS2S(y|RL|Hnle|jEsE2~eh zh^Q7((X!#ZnJKuG5ak_pB$=M&mLbm<5(T- z=k@Sc=cxFPR%b8 z6m5oVUvf}cTUQ_Qswdym{ohG5qHV8h{nOyT&$@&7y{Tydtm=!V!J@{C;l?-4Ae~0f z?>D*pH1a?XI#|7wpp%TM4!?1%#uuvQT;LmFm?i|4jV`y2^HLCilUu+TfC_p98>J^MRA?x%cxsHy>52r@AI;N0B#Z zmL!)ZY8s?A^(sg$H8_!aDIkvDPG3lK_KEwy{(jkmJ^qa$Ho8$>dqoDLd|?VtVr^SV ziZRxre7vz)TRmaND$bK}ST4EE-L^XQ8JhNa7!HzMQqER#tH&UkQG9503&h{~xzA{& z_}(dmb(>?5dlDyZ+*H1=9&z>J$y0yEr01IPFPba;Q~H-AkU+b(OopeRdK%&;17ycW)!6)H)-F^4k1NpyS`3k_*gfk+Tq7dZ)vBaisU*Y_i0h@ zBr2Sl6u1fbQYEhQRu$6fHP{R^Nw<(0O^Pu);w^ky;^$HR%{1}PVAOhp!@65cZ0}Ko zFhez6SvFT+4Rk+d4sKiSDId?_a^F>ghlz!~$Vf08PUB@fxN!6(v%Gsv4)g-Fr9?d> znUi=vd$!axxM0h@Mwry+Ejz{mMzk^y-qZyc2h%;N7d>ENQbWqgivnY?F zGsN!`^fP#+xM^wI_%)nNWT$&a$YO)bj3x#Sf&9KaJ z=EKc7w}C$7mL@$+tNC;@n`rfGS^?gtfuP#&5lIlAWV<_1gZ2vdz>Ix&Vv`z=1lL>j ztUT~({xp45zzb1%1tL{Rt15a&Th9x#UxT0Gu^lNSIYs;0i$+}ByomotD;8FXn|^ZF zde&wTK@Smhb8!K}P&u{yg_78l3>CFbR(_@wopx+!|7_o&Rpu?T#ID&v_@G>mjdO2e zzzmGcGc_KcodP=;*>- zgL)6R7<`*FF4}cg2OT&`Luw}I)KEr8jIPDuh6g4FFVRCcCO9hERExvLk(<;zg$fD@ z>~C-fx<)K}{mLlh&}D;fL|eJoyKQ5wtD5k6``|6j3a6Xo;JLO=-SF0K7sso* zYz8(}@FV@Pd9Cn#PVbP~e;)a*H{wqS@i%9&mYY!J_}BZol{@FF-mX0L;^y zMEQ{BoHQbi2(yt_?>i-yUS1!g{yt%)@$R|F@d8l_lK9{xnHOXe@HPBqAUfyyz09h| zW7R8$9Q}DuT8HP-e)6pMQ+=++wE@EG~0?;a{y?YH(6ajq9kpSQ}(@G N7e{x8TEz9_{{oDG3jhEB literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/r_kidan.dmi b/icons/mob/human_races/r_kidan.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c8be5e21ed18e3a9e05d60c18a58cb2c34c48a50 GIT binary patch literal 2550 zcmZWp2{hE(AOAgCra{w7kDkPsUbaYtiFpj+S!c)+ro?N6iA;<&>*NVVLkfw8p^nySPBdPfS9?N zu`K}n1pVGY!T`mUidv{(A_}d8x{vGf*3ncylz@-6aRUlLkxO5sA z_X9@oK#Cc_r~S@<4dXYNZ9fP2FCl`cY^)JQkmRQTTeKZuFw^fLSg>!|I|UeDBVhe; zHv@2ZUjPWnO8PVgZh#)$yX+kScK*ho4f#^y<2S*uS*p9Ze#z_tf$(?H;9I+`g>c=j zSBK(yw{7oDE;P8_p@?Mn-y8979vEV|uX)sre~{`MwAWTIbYCrp70zDpqaJVO$#qHD zLVC;kQdg5Aj&;d}46ZnYm&EAO_{PmsawMdkn!EF>-rQ)!$Q5)?|%;$sdo5n#v2#amj>hcaGv4%oDMnhOHjaC$4G2SX#Ik!*!t=+F)&vxAp1`Njp{TjcLqyLC_@pr|? zL|d&@{QD#+H=@ru5>k1EuZ7FiOgb=l$Azet`-W4S50^CVG0LDF_4iB~< zP*X(>X4s|b`pG`YZKqm(77eI!WW>}GDR*2c>G4J61`&KXySUD&lYPwyQsXm^WxAJV zf33sl{zuRc_y~%>(4=LA=Au{}hpWeq7SRev4cxD29#73p59d7T=TsP}$*k~1&+*p&NQsbQEMK0U&{hGDrkMHE=-X4nfvXc~7(afrjyCI4lLZsK7{6A^$7?;dLD-s;B znMg|#68*qxox12Ym=5WOe=%^WC8BeX>b1lPJw>w&3_O`?m^isd=tyTKQIWXcgk<=D z$5dKYmhNLZjQaHQ&00Okf5uM^gh-!FP)7AeO3pwB`-7Vjji3&xKh8xN_;M8TcN_~7 z<(O5Rdstm>pH?-CW6WYg14RqBL>a&K2p)Yg%C8vzr{@-_e)vd6w5y$5?=e3U{|t@4 zC3@Iu_c!2lr*;Ez9}fLV(VMSScRE|`U<#i6CVx)P%!0P*FDs%~Ok0)Zo!Ur`Ym$Q{ zQqWRH5t6CtqK$Vc^yW{T&OFt-?W|9(k5E4&K`vqKO%6NVt66$a7sc|6x8n@W&e%*_ zZ|hXY`9N2ED6`AD7;Z@_f_GufUN-8v=0>aRcT-$H8Ovkt5!_r*x|Fk^fG-EHJ{7N? zb>7mM(n+lMsL+qwKOqgQs<$cy`c(Fuyw6JWqRz3{SKZ4w1Vg#DJimF|Xr+o1&XTfA zsj2nI%;9}Fw@Lv0sbSKUQmf48onE;9*A3FQV12!6-f(#M7Gi7VJ(c9XD~)yUZQmMG zI|@Cz?9!heUxI{BZjCP`^U0{-FBmfMRCL3uKBmH0vp%x1MKWE+CCbi;PIg5Q#rtb|H8=juE+XZb4Ed|}d$tXzJlB??pe9p?82uF+u?eUg||pG=AY>F{v>*rN7Y>6$fB-@7txeZ#XQsWK4UiCLc9cN zJEirK^Q7lDhOGH&rV|&1o7gbDTPu%=vdawNrl^!9^o>1~$M8>d2(lbohnwV{yxIn@s86>s7JdHkHI=%^)I1Vs8`CY=hC5w9ofL>n0g7AIbt+VmRUuL%TA}1iv^u zXlJBZo+}P_8HO(5B+7gJyQTSYr%z$&<T6|bAYUH-+(b&Bme&k6mM zAT}j?MUuOFc2V!d*D-(zql>RF`Vt0JmPmn?SkkWsu02|kEP!mW^Q@|;d9f4TAL{Pb!X`1$2g+ov7V zs?CKzz;vO@sBIQ|S~d1N*vq`w)qG~i8Ed94_1w;!ds|Wz?TDA@(qD#l7m<}lxe33if^tk0WW zlP_TmTJ1dDAN!$9Qmv@&9% z=)aBv02{4AFm~mawjTRyIWMI0mO77*y+*Wkcd_5E^Uq>JWt}X^jG!PgZ4I&T(KNsN zas9VV2$fI1z}WYYez3nN99y;ij-)%~#(`&6=O=QSf>!IZ(;^=S?5U`qb>l!X^$Y)s zWOd)7w=8rFwm_XvJhm}<>oDy+U}t4FK(!n9-E8cbF|0+0UE+9jhzP+#T2S5t`c Date: Thu, 13 Jun 2013 22:18:26 -0700 Subject: [PATCH 05/26] Adjusted yank verb to apply to others as well as yourself. --- code/modules/mob/living/carbon/human/human.dm | 109 ++++++++++++------ .../projectiles/guns/projectile/bow.dm | 1 + 2 files changed, 76 insertions(+), 34 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index fc93d905b63..d0dd7f8e388 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1113,56 +1113,97 @@ del(feet_blood_DNA) return 1 -/mob/living/carbon/human/verb/yank_out_object() - set name = "Yank out object" +mob/living/carbon/human/verb/yank_out_object_test() + set category = "IC" + set name = "Yank out object (test)" set desc = "Remove an embedded item at the cost of bleeding and pain." - set category = "Object" + set src in view(1) if(!isliving(usr) || usr.next_move > world.time) return usr.next_move = world.time + 20 - var/list/valid_objects = get_visible_implants(1) + if(usr.stat == 1) + usr << "You are unconcious and cannot do that!" + return + + if(usr.restrained()) + usr << "You are restrained and cannot do that!" + return + +// /* + var/list/valid_objects = list() var/datum/organ/external/affected = null + var/mob/living/carbon/human/S = src + var/mob/living/carbon/human/U = usr - if(!valid_objects.len) - src << "You have nothing stuck in your wounds that is large enough to remove without surgery." - return + if(S == U) // Removing something from yourself. + valid_objects = get_visible_implants(1) - if(src.stat == 1) - src << "You are unconcious and cannot do that!" - return + if(!valid_objects.len) + src << "You have nothing stuck in your wounds that is large enough to remove without surgery." + return - if(src.restrained()) - src << "You are restrained and cannot do that!" - return + var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects - var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects + for(var/datum/organ/external/organ in organs) //Grab the organ holding the implant. Messy as Hell, TBD: fix. + for(var/obj/item/weapon/O in organ.implants) + if(O == selection) + affected = organ - for(var/datum/organ/external/organ in src.organs) //Grab the organ holding the implant. Messy as Hell, TBD: fix. - for(var/obj/item/weapon/O in organ.implants) - if(O == selection) - affected = organ + src << "You attempt to get a good grip on the [selection] in your [affected] with bloody fingers." + bloody_hands(S) - src << "You attempt to get a good grip on the [selection] in your [affected] with bloody fingers." - bloody_hands(src) + spawn(80) + visible_message("[src] rips [selection] out of their [affected] in a welter of blood.","You rip [selection] out of your [affected] in a welter of blood.") + selection.loc = get_turf(src) + affected.implants -= selection + shock_stage+=10 - spawn(80) - visible_message("[src] rips [selection] out of their [affected] in a welter of blood.","You rip [selection] out of your [affected] in a welter of blood.") - selection.loc = get_turf(src) - affected.implants -= selection - shock_stage+=10 + for(var/obj/item/weapon/O in pinned) + if(O == selection) + pinned -= O + anchored = 0 - for(var/obj/item/weapon/O in pinned) - if(O == selection) - pinned -= O - src.anchored = 0 + if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-. + var/datum/wound/internal_bleeding/I = new (15) + affected.wounds += I + custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) + return 1 - if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-. - var/datum/wound/internal_bleeding/I = new (15) - affected.wounds += I - src.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) - return 1 + else // Removing something from someone else. + valid_objects = src.get_visible_implants(1) + + if(!valid_objects.len) + U << "[src] has nothing stuck in their wounds that is large enough to remove without surgery." + return + + var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects + + for(var/datum/organ/external/organ in src.organs) //Grab the organ holding the implant. Messy as Hell, TBD: fix. + for(var/obj/item/weapon/O in organ.implants) + if(O == selection) + affected = organ + + U << "You attempt to get a good grip on the [selection] in [S]'s [affected] with bloody fingers." + U.bloody_hands(S) + + spawn(80) + visible_message("[usr] rips [selection] out of [src]'s [affected] in a welter of blood.","[src] rips [selection] out of your [affected] in a welter of blood.") + selection.loc = get_turf(usr) + affected.implants -= selection + src.shock_stage+=10 + + for(var/obj/item/weapon/O in S.pinned) + if(O == selection) + S.pinned -= O + S.anchored = 0 + + if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-. + var/datum/wound/internal_bleeding/I = new (15) + affected.wounds += I + custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) + return 1 /mob/living/carbon/human/proc/get_visible_implants(var/class = 0) diff --git a/code/modules/projectiles/guns/projectile/bow.dm b/code/modules/projectiles/guns/projectile/bow.dm index 25f4276d9a0..4c5c0c0b1c2 100644 --- a/code/modules/projectiles/guns/projectile/bow.dm +++ b/code/modules/projectiles/guns/projectile/bow.dm @@ -61,6 +61,7 @@ arrow = new /obj/item/weapon/arrow/rod(src) arrow.fingerprintslast = src.fingerprintslast arrow.loc = src + icon_state = "crossbow-nocked" user.visible_message("[user] haphazardly jams [arrow] into [src].","You jam [arrow] into [src].") if(cell) if(cell.charge >= 500) From b30b1569506e2b42ce696c35fda857518bad80be Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Thu, 13 Jun 2013 22:59:13 -0700 Subject: [PATCH 06/26] Melee embedding fix. --- code/modules/mob/living/carbon/human/human_damage.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 1cf951c53b8..5d4e1da9b69 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -226,12 +226,16 @@ //Embedded projectile code. if(!organ) return if(istype(used_weapon,/obj/item/weapon)) - var/obj/item/weapon/W = used_weapon + var/obj/item/weapon/W = used_weapon //Sharp objects will always embed if they do enough damage. if(damage > (5*W.w_class) && (prob(damage/W.w_class) || sharp)) //The larger it is, the harder it needs to hit to stick. - W.loc = src //Sharp objects will always embed if they do enough damage. organ.implants += W visible_message("\The [W] sticks in the wound!") W.add_blood(src) + if(ismob(W.loc)) + var/mob/living/H = W.loc + H.drop_item() + W.loc = src + else if(istype(used_weapon,/obj/item/projectile)) //We don't want to use the actual projectile item, so we spawn some shrapnel. if(prob(50) && damagetype == BRUTE) var/obj/item/weapon/shard/shrapnel/S = new() From 89766706fef2e15361ee57d8fcd45969d2a63562 Mon Sep 17 00:00:00 2001 From: Jamini Date: Fri, 14 Jun 2013 02:22:27 -0400 Subject: [PATCH 07/26] Alien Monkeys - Farwa, Stok, Aenera Signed-off-by: Jamini --- code/datums/supplypacks.dm | 23 ++++ code/game/dna.dm | 12 +- .../objects/items/weapons/storage/boxes.dm | 34 +++++ .../mob/living/carbon/monkey/monkey.dm | 102 ++++++++++++++- .../mob/living/carbon/monkey/update_icons.dm | 12 +- code/modules/mob/transform_procs.dm | 117 ++++++++++++++--- .../reagent_containers/food/snacks.dm | 120 ++++++++++++++++++ icons/mob/monkey.dmi | Bin 23252 -> 26123 bytes 8 files changed, 395 insertions(+), 25 deletions(-) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index d435e55f793..57ddf7817e5 100755 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -66,6 +66,29 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Monkey crate" group = "Hydroponics" +/datum/supply_packs/farwa + name = "Farwa crate" + contains = list (/obj/item/weapon/storage/box/farwacubes) + cost = 30 + containertype = /obj/structure/closet/crate/freezer + containername = "Farwa crate" + group = "Hydroponics" + +/datum/supply_packs/skrell + name = "Neaera crate" + contains = list (/obj/item/weapon/storage/box/neaeracubes) + cost = 30 + containertype = /obj/structure/closet/crate/freezer + containername = "Neaera crate" + group = "Hydroponics" + +/datum/supply_packs/stok + name = "Stok crate" + contains = list (/obj/item/weapon/storage/box/stokcubes) + cost = 30 + containertype = /obj/structure/closet/crate/freezer + containername = "Stok crate" + group = "Hydroponics" /datum/supply_packs/beanbagammo name = "Beanbag shells" diff --git a/code/game/dna.dm b/code/game/dna.dm index c652140d96c..cb58013e016 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -548,7 +548,17 @@ sleep(48) del(animation) - var/mob/living/carbon/monkey/O = new(src) + + var/mob/living/carbon/monkey/O = null + switch(M.dna.mutantrace) + if("tajaran") + O = new /mob/living/carbon/monkey/tajara(src) + if("lizard") + O = new /mob/living/carbon/monkey/unathi(src) + if("skrell") + O = new /mob/living/carbon/monkey/skrell(src) + else + O = new /mob/living/carbon/monkey(src) if(M) if (M.dna) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index b89cfd6a7fd..f1b9319f954 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -277,7 +277,41 @@ ..() for(var/i = 1; i <= 5; i++) new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src) +/obj/item/weapon/storage/box/farwacubes + name = "farwa cube box" + desc = "Drymate brand farwa cubes. Just add water!" + icon = 'icons/obj/food.dmi' + icon_state = "monkeycubebox" + storage_slots = 7 + can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/farwacube") + New() + ..() + for(var/i = 1; i <= 5; i++) + new /obj/item/weapon/reagent_containers/food/snacks/farwacube/wrapped(src) +/obj/item/weapon/storage/box/stokcubes + name = "stok cube box" + desc = "Drymate brand stok cubes. Just add water!" + icon = 'icons/obj/food.dmi' + icon_state = "monkeycubebox" + storage_slots = 7 + can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/stokcube") + New() + ..() + for(var/i = 1; i <= 5; i++) + new /obj/item/weapon/reagent_containers/food/snacks/stokcube/wrapped(src) + +/obj/item/weapon/storage/box/neaeracubes + name = "neaera cube box" + desc = "Drymate brand neaera cubes. Just add water!" + icon = 'icons/obj/food.dmi' + icon_state = "monkeycubebox" + storage_slots = 7 + can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/stokcube") + New() + ..() + for(var/i = 1; i <= 5; i++) + new /obj/item/weapon/reagent_containers/food/snacks/neaeracube/wrapped(src) /obj/item/weapon/storage/box/ids name = "spare IDs" diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 5dcc1158545..3b0240fe39c 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -3,13 +3,113 @@ voice_name = "monkey" voice_message = "chimpers" say_message = "chimpers" - icon = 'icons/mob/monkey.dmi' icon_state = "monkey1" + icon = 'icons/mob/monkey.dmi' gender = NEUTER pass_flags = PASSTABLE update_icon = 0 ///no need to call regenerate_icon var/obj/item/weapon/card/id/wear_id = null // Fix for station bounced radios -- Skie +/mob/living/carbon/monkey/tajara + name = "farwa" + voice_name = "farwa" + voice_message = "mews" + say_message = "mews" + icon_state = "tajkey1" + +/mob/living/carbon/monkey/skrell + name = "neaera" + voice_name = "neaera" + voice_message = "squicks" + say_message = "squicks" + icon_state = "skrellkey1" +/mob/living/carbon/monkey/unathi + name = "stok" + voice_name = "stok" + voice_message = "hisses" + say_message = "hisses" + icon_state = "stok1" + +/mob/living/carbon/monkey/unathi/New() + var/datum/reagents/R = new/datum/reagents(1000) + reagents = R + R.my_atom = src + + if(name == "stok") + name = text("stok ([rand(1, 1000)])") + real_name = name + if (!(dna)) + if(gender == NEUTER) + gender = pick(MALE, FEMALE) + dna = new /datum/dna( null ) + dna.real_name = real_name + dna.uni_identity = "000000000000000000DC0000066000" + dna.struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6" + dna.unique_enzymes = md5(name) + dna.mutantrace = "lizard" + //////////blah + var/gendervar + if (gender == MALE) + gendervar = add_zero2(num2hex((rand(1,2049)),1), 3) + else + gendervar = add_zero2(num2hex((rand(2051,4094)),1), 3) + dna.uni_identity += gendervar + dna.uni_identity += "044" + dna.uni_identity += "C5D" + ..() +/mob/living/carbon/monkey/skrell/New() + var/datum/reagents/R = new/datum/reagents(1000) + reagents = R + R.my_atom = src + if(name == "neaera") + name = text("neaera ([rand(1, 1000)])") + real_name = name + if (!(dna)) + if(gender == NEUTER) + gender = pick(MALE, FEMALE) + dna = new /datum/dna( null ) + dna.real_name = real_name + dna.uni_identity = "000000000000000000DC0000066000" + dna.struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6" + dna.unique_enzymes = md5(name) + dna.mutantrace = "skrell" + //////////blah + var/gendervar + if (gender == MALE) + gendervar = add_zero2(num2hex((rand(1,2049)),1), 3) + else + gendervar = add_zero2(num2hex((rand(2051,4094)),1), 3) + dna.uni_identity += gendervar + dna.uni_identity += "01C" + dna.uni_identity += "C92" + ..() +/mob/living/carbon/monkey/tajara/New() + var/datum/reagents/R = new/datum/reagents(1000) + reagents = R + R.my_atom = src + + if(name == "farwa") + name = text("farwa ([rand(1, 1000)])") + real_name = name + if (!(dna)) + if(gender == NEUTER) + gender = pick(MALE, FEMALE) + dna = new /datum/dna( null ) + dna.real_name = real_name + dna.uni_identity = "000000000000000000DC0000066000" + dna.struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6" + dna.unique_enzymes = md5(name) + dna.mutantrace = "tajaran" + //////////blah + var/gendervar + if (gender == MALE) + gendervar = add_zero2(num2hex((rand(1,2049)),1), 3) + else + gendervar = add_zero2(num2hex((rand(2051,4094)),1), 3) + dna.uni_identity += gendervar + dna.uni_identity += "0A0" + dna.uni_identity += "E00" + ..() /mob/living/carbon/monkey/New() var/datum/reagents/R = new/datum/reagents(1000) diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm index 9dd3e416410..c6895db0070 100644 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ b/code/modules/mob/living/carbon/monkey/update_icons.dm @@ -28,12 +28,20 @@ update_hud() lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again overlays.Cut() + var/ico = "monkey" + switch(src.dna.mutantrace) //On monkey spawn, check the DNA of the mob. If alien, change to appropriate alien monkey sprite + if("tajaran") + ico = "tajkey" + if("lizard") + ico = "stok" + if("skrell") + icon_state = "skrellkey" if(lying) - icon_state = "monkey0" + icon_state = ico + "0" for(var/image/I in overlays_lying) overlays += I else - icon_state = "monkey1" + icon_state = ico + "1" for(var/image/I in overlays_standing) overlays += I diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 9e3ed4b3a11..0da452cd318 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -20,29 +20,104 @@ flick("h2monkey", animation) sleep(48) //animation = null - var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( loc ) - del(animation) - O.name = "monkey" - O.dna = dna - dna = null - O.dna.uni_identity = "00600200A00E0110148FC01300B009" - //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" - O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8" - O.loc = loc - O.viruses = viruses - viruses = list() - for(var/datum/disease/D in O.viruses) - D.affected_mob = O + var/mob/living/carbon/monkey/O = null + + switch(dna.mutantrace) + if("tajara") + O = new /mob/living/carbon/monkey/tajara( loc ) + O.name = "farwa" + O.dna = dna + dna = null + O.dna.uni_identity = "000000000000000000DC00000660004DA0A0E00" + //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" + O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8" + O.loc = loc + O.viruses = viruses + viruses = list() + for(var/datum/disease/D in O.viruses) + D.affected_mob = O + + if (client) + client.mob = O + if(mind) + mind.transfer_to(O) + O << "You are now a farwa. " + O.a_intent = "hurt" + spawn(0)//To prevent the proc from returning null. + del(src) + del(animation) + if("lizard") + O = new /mob/living/carbon/monkey/unathi( loc ) + O.name = "stok" + O.dna = dna + dna = null + O.dna.uni_identity = "000000000000000000DC00000660002A8044C5D" + //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" + O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8" + O.loc = loc + O.viruses = viruses + viruses = list() + for(var/datum/disease/D in O.viruses) + D.affected_mob = O + + if (client) + client.mob = O + if(mind) + mind.transfer_to(O) + O << "You are now a stok. " + O.a_intent = "hurt" + spawn(0)//To prevent the proc from returning null. + del(src) + del(animation) + if("skrell") + O = new /mob/living/carbon/monkey/unathi( loc ) + O.name = "neaera" + O.dna = dna + dna = null + O.dna.uni_identity = "000000000000000000DC00000660002A8044C5D" + //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" + O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8" + O.loc = loc + O.viruses = viruses + viruses = list() + for(var/datum/disease/D in O.viruses) + D.affected_mob = O + + if (client) + client.mob = O + if(mind) + mind.transfer_to(O) + O << "You are now a neaera. " + O.a_intent = "hurt" + spawn(0)//To prevent the proc from returning null. + del(src) + del(animation) + else + O = new /mob/living/carbon/monkey( loc ) + O.name = "monkey" + O.dna = dna + dna = null + O.dna.uni_identity = "00600200A00E0110148FC01300B009" + //O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8" + O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8" + O.loc = loc + O.viruses = viruses + viruses = list() + for(var/datum/disease/D in O.viruses) + D.affected_mob = O + + if (client) + client.mob = O + if(mind) + mind.transfer_to(O) + O << "You are now a monkey." + O.a_intent = "hurt" + spawn(0)//To prevent the proc from returning null. + del(src) + del(animation) + - if (client) - client.mob = O - if(mind) - mind.transfer_to(O) - O.a_intent = "hurt" - O << "You are now a monkey." - spawn(0)//To prevent the proc from returning null. - del(src) return O /mob/new_player/AIize() diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index a5985618ec5..f15c3410947 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -1367,6 +1367,126 @@ icon_state = "monkeycubewrap" wrapped = 1 +/obj/item/weapon/reagent_containers/food/snacks/farwacube + name = "farwa cube" + desc = "Just add water!" + icon_state = "monkeycube" + bitesize = 12 + var/wrapped = 0 + + New() + ..() + reagents.add_reagent("nutriment",10) + + afterattack(obj/O as obj, mob/user as mob) + if(istype(O,/obj/structure/sink) && !wrapped) + user << "You place [name] under a stream of water..." + loc = get_turf(O) + return Expand() + ..() + + attack_self(mob/user as mob) + if(wrapped) + Unwrap(user) + + proc/Expand() + for(var/mob/M in viewers(src,7)) + M << "\red The farwa cube expands!" + new /mob/living/carbon/monkey/tajara(get_turf(src)) + del(src) + + proc/Unwrap(mob/user as mob) + icon_state = "monkeycube" + desc = "Just add water!" + user << "You unwrap the cube." + wrapped = 0 + return + +/obj/item/weapon/reagent_containers/food/snacks/stokcube + name = "stok cube" + desc = "Just add water!" + icon_state = "monkeycube" + bitesize = 12 + var/wrapped = 0 + + New() + ..() + reagents.add_reagent("nutriment",10) + + afterattack(obj/O as obj, mob/user as mob) + if(istype(O,/obj/structure/sink) && !wrapped) + user << "You place [name] under a stream of water..." + loc = get_turf(O) + return Expand() + ..() + + attack_self(mob/user as mob) + if(wrapped) + Unwrap(user) + + proc/Expand() + for(var/mob/M in viewers(src,7)) + M << "\red The stok cube expands!" + new /mob/living/carbon/monkey/unathi(get_turf(src)) + del(src) + + proc/Unwrap(mob/user as mob) + icon_state = "monkeycube" + desc = "Just add water!" + user << "You unwrap the cube." + wrapped = 0 + return +/obj/item/weapon/reagent_containers/food/snacks/neaeracube + name = "neaera cube" + desc = "Just add water!" + icon_state = "monkeycube" + bitesize = 12 + var/wrapped = 0 + + New() + ..() + reagents.add_reagent("nutriment",10) + + afterattack(obj/O as obj, mob/user as mob) + if(istype(O,/obj/structure/sink) && !wrapped) + user << "You place [name] under a stream of water..." + loc = get_turf(O) + return Expand() + ..() + + attack_self(mob/user as mob) + if(wrapped) + Unwrap(user) + + proc/Expand() + for(var/mob/M in viewers(src,7)) + M << "\red The neaera cube expands!" + new /mob/living/carbon/monkey/skrell(get_turf(src)) + del(src) + + proc/Unwrap(mob/user as mob) + icon_state = "monkeycube" + desc = "Just add water!" + user << "You unwrap the cube." + wrapped = 0 + return + +/obj/item/weapon/reagent_containers/food/snacks/neaeracube/wrapped + desc = "Still wrapped in some paper." + icon_state = "monkeycubewrap" + wrapped = 1 +/obj/item/weapon/reagent_containers/food/snacks/stokcube/wrapped + desc = "Still wrapped in some paper." + icon_state = "monkeycubewrap" + wrapped = 1 + + +/obj/item/weapon/reagent_containers/food/snacks/farwacube/wrapped + desc = "Still wrapped in some paper." + icon_state = "monkeycubewrap" + wrapped = 1 + + /obj/item/weapon/reagent_containers/food/snacks/spellburger name = "Spell Burger" diff --git a/icons/mob/monkey.dmi b/icons/mob/monkey.dmi index 437ba085b15aaccb370d7cacd426ea925f2be92a..75ce4c4596d6015aa112132370584a6156a3e6dd 100644 GIT binary patch delta 6594 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 delta 3701 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 Date: Fri, 14 Jun 2013 14:17:12 +0400 Subject: [PATCH 08/26] Fixes unticked file. No idea why some files get randomly unticked. --- baystation12.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/baystation12.dme b/baystation12.dme index 828007b0de8..b553a7a35bf 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -197,6 +197,7 @@ #include "code\game\communications.dm" #include "code\game\dna.dm" #include "code\game\hud.dm" +#include "code\game\response_team.dm" #include "code\game\shuttle_engines.dm" #include "code\game\skincmd.dm" #include "code\game\smoothwall.dm" From 084b1414c3efef47f723b277b63820c29a9f1f06 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 14 Jun 2013 12:42:25 -0700 Subject: [PATCH 09/26] Bloody footprint resprites. --- icons/effects/footprints.dmi | Bin 2391 -> 12508 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/effects/footprints.dmi b/icons/effects/footprints.dmi index ede9c8e17d65338ff60e108aeefb62c6e011c179..b849de00fff38637dc85b5fdd75c71bb722164b0 100644 GIT binary patch literal 12508 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 JPDHLkV1jStReS&d From 7a19d6165bc96d98a42ba58ea532da78b171fe2b Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 14 Jun 2013 13:03:03 -0700 Subject: [PATCH 10/26] Projectile shrapnel tweak for ease of forensics identification. --- code/modules/mob/living/carbon/human/human_damage.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 5d4e1da9b69..78038f5c84a 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -238,7 +238,10 @@ else if(istype(used_weapon,/obj/item/projectile)) //We don't want to use the actual projectile item, so we spawn some shrapnel. if(prob(50) && damagetype == BRUTE) + var/obj/item/projectile/P = used_weapon var/obj/item/weapon/shard/shrapnel/S = new() + S.name = "[P.name] shrapnel" + S.desc = "[S.desc] It looks like it was fired from [P.shot_from]." S.loc = src organ.implants += S visible_message("The projectile sticks in the wound!") From 73d35bcd4f0e7d9bdc7851f2ffc6f57b93095391 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 14 Jun 2013 13:17:21 -0700 Subject: [PATCH 11/26] Minor changes/sanity checks in yank-out verb. --- code/modules/mob/living/carbon/human/human.dm | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index d0dd7f8e388..ff3b6508ce6 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1113,9 +1113,9 @@ del(feet_blood_DNA) return 1 -mob/living/carbon/human/verb/yank_out_object_test() +mob/living/carbon/human/verb/yank_out_object() set category = "IC" - set name = "Yank out object (test)" + set name = "Yank out object" set desc = "Remove an embedded item at the cost of bleeding and pain." set src in view(1) @@ -1154,7 +1154,10 @@ mob/living/carbon/human/verb/yank_out_object_test() src << "You attempt to get a good grip on the [selection] in your [affected] with bloody fingers." bloody_hands(S) - spawn(80) + do_after(80) + if(!selection || !affected || !S || !U) + return + visible_message("[src] rips [selection] out of their [affected] in a welter of blood.","You rip [selection] out of your [affected] in a welter of blood.") selection.loc = get_turf(src) affected.implants -= selection @@ -1188,7 +1191,10 @@ mob/living/carbon/human/verb/yank_out_object_test() U << "You attempt to get a good grip on the [selection] in [S]'s [affected] with bloody fingers." U.bloody_hands(S) - spawn(80) + do_after(80) + if(!selection || !affected || !S || !U) + return + visible_message("[usr] rips [selection] out of [src]'s [affected] in a welter of blood.","[src] rips [selection] out of your [affected] in a welter of blood.") selection.loc = get_turf(usr) affected.implants -= selection From 030290d3a753c6719593702892929ee5d56af475 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 14 Jun 2013 13:25:20 -0700 Subject: [PATCH 12/26] Learn to test compile when using new procs, idiot. --- code/modules/mob/living/carbon/human/human.dm | 64 ++++++++++--------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index ff3b6508ce6..551783798ae 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1154,24 +1154,26 @@ mob/living/carbon/human/verb/yank_out_object() src << "You attempt to get a good grip on the [selection] in your [affected] with bloody fingers." bloody_hands(S) - do_after(80) - if(!selection || !affected || !S || !U) - return + if(!do_after(80)) + return - visible_message("[src] rips [selection] out of their [affected] in a welter of blood.","You rip [selection] out of your [affected] in a welter of blood.") - selection.loc = get_turf(src) - affected.implants -= selection - shock_stage+=10 + if(!selection || !affected || !S || !U) + return - for(var/obj/item/weapon/O in pinned) - if(O == selection) - pinned -= O - anchored = 0 + visible_message("[src] rips [selection] out of their [affected] in a welter of blood.","You rip [selection] out of your [affected] in a welter of blood.") + selection.loc = get_turf(src) + affected.implants -= selection + shock_stage+=10 - if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-. - var/datum/wound/internal_bleeding/I = new (15) - affected.wounds += I - custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) + for(var/obj/item/weapon/O in pinned) + if(O == selection) + pinned -= O + anchored = 0 + + if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-. + var/datum/wound/internal_bleeding/I = new (15) + affected.wounds += I + custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) return 1 else // Removing something from someone else. @@ -1191,24 +1193,26 @@ mob/living/carbon/human/verb/yank_out_object() U << "You attempt to get a good grip on the [selection] in [S]'s [affected] with bloody fingers." U.bloody_hands(S) - do_after(80) - if(!selection || !affected || !S || !U) - return + if(!do_after(80)) + return - visible_message("[usr] rips [selection] out of [src]'s [affected] in a welter of blood.","[src] rips [selection] out of your [affected] in a welter of blood.") - selection.loc = get_turf(usr) - affected.implants -= selection - src.shock_stage+=10 + if(!selection || !affected || !S || !U) + return - for(var/obj/item/weapon/O in S.pinned) - if(O == selection) - S.pinned -= O - S.anchored = 0 + visible_message("[usr] rips [selection] out of [src]'s [affected] in a welter of blood.","[src] rips [selection] out of your [affected] in a welter of blood.") + selection.loc = get_turf(usr) + affected.implants -= selection + src.shock_stage+=10 - if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-. - var/datum/wound/internal_bleeding/I = new (15) - affected.wounds += I - custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) + for(var/obj/item/weapon/O in S.pinned) + if(O == selection) + S.pinned -= O + S.anchored = 0 + + if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-. + var/datum/wound/internal_bleeding/I = new (15) + affected.wounds += I + custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) return 1 /mob/living/carbon/human/proc/get_visible_implants(var/class = 0) From 52433df15486235f7d3f1ba5fd090236b2c68ba6 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 14 Jun 2013 13:41:06 -0700 Subject: [PATCH 13/26] Runtime fix (argh) and removal of vox from the station race whitelist. --- code/modules/client/preferences.dm | 6 +----- code/modules/mob/living/carbon/human/human.dm | 4 ++-- code/modules/mob/new_player/new_player.dm | 4 ---- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 8d5376c3131..754e65924d7 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -792,10 +792,6 @@ datum/preferences if(is_alien_whitelisted(user, "Skrell")) //Check for Skrell and admins new_species += "Skrell" whitelisted = 1 - if(is_alien_whitelisted(user, "Vox")) //Check for Skrell and admins - new_species += "Vox" - whitelisted = 1 - if(!whitelisted) alert(user, "You cannot change your species as you need to be whitelisted. If you wish to be whitelisted contact an admin in-game, on the forums, or on IRC.") @@ -803,7 +799,7 @@ datum/preferences new_species += "Tajaran" new_species += "Unathi" new_species += "Skrell" - new_species += "Vox" + species = input("Please select a species", "Character Generation", null) in new_species if(prev_species != species) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 551783798ae..b59c0d2bcd2 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1154,7 +1154,7 @@ mob/living/carbon/human/verb/yank_out_object() src << "You attempt to get a good grip on the [selection] in your [affected] with bloody fingers." bloody_hands(S) - if(!do_after(80)) + if(!do_after(U, 80)) return if(!selection || !affected || !S || !U) @@ -1193,7 +1193,7 @@ mob/living/carbon/human/verb/yank_out_object() U << "You attempt to get a good grip on the [selection] in [S]'s [affected] with bloody fingers." U.bloody_hands(S) - if(!do_after(80)) + if(!do_after(U, 80)) return if(!selection || !affected || !S || !U) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 686007c7173..5ba8a959b9c 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -349,10 +349,6 @@ if(is_alien_whitelisted(src, "Skrell"|| !config.usealienwhitelist)) new_character.dna.mutantrace = "skrell" new_character.skrell_talk_understand = 1 - if(client.prefs.species == "Vox") - if(is_alien_whitelisted(src, "Vox"|| !config.usealienwhitelist)) - new_character.dna.mutantrace = "vox" - new_character.vox_talk_understand = 1 if(ticker.random_players) new_character.gender = pick(MALE, FEMALE) From 1e1426fa8ae5839f1b43306650d4eb187c8ec01c Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 14 Jun 2013 16:36:55 -0700 Subject: [PATCH 14/26] Minor vox sprite fix, added vox to Create Admin verb. --- baystation12.dme | 1 + code/modules/admin/topic.dm | 20 +++-- code/modules/admin/verbs/one_click_antag.dm | 95 +++++++++++++++++++- code/modules/admin/verbs/vox_raiders.dm | 66 ++++++++++++++ icons/mob/human_races/r_def_vox.dmi | Bin 2013 -> 2036 bytes icons/mob/human_races/r_vox.dmi | Bin 2013 -> 2033 bytes 6 files changed, 172 insertions(+), 10 deletions(-) create mode 100644 code/modules/admin/verbs/vox_raiders.dm diff --git a/baystation12.dme b/baystation12.dme index 68d5ab3d3d0..78f58149999 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -710,6 +710,7 @@ #include "code\modules\admin\verbs\striketeam_syndicate.dm" #include "code\modules\admin\verbs\ticklag.dm" #include "code\modules\admin\verbs\tripAI.dm" +#include "code\modules\admin\verbs\vox_raiders.dm" #include "code\modules\assembly\assembly.dm" #include "code\modules\assembly\bomb.dm" #include "code\modules\assembly\helpers.dm" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 292327ca274..6303e8d0da0 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -11,31 +11,31 @@ if("1") log_admin("[key_name(usr)] has spawned a traitor.") if(!src.makeTraitors()) - usr << "\red Unfortunatly there were no candidates available" + usr << "\red Unfortunately there weren't enough candidates available." if("2") log_admin("[key_name(usr)] has spawned a changeling.") if(!src.makeChanglings()) - usr << "\red Unfortunatly there were no candidates available" + usr << "\red Unfortunately there weren't enough candidates available." if("3") log_admin("[key_name(usr)] has spawned revolutionaries.") if(!src.makeRevs()) - usr << "\red Unfortunatly there were no candidates available" + usr << "\red Unfortunately there weren't enough candidates available." if("4") log_admin("[key_name(usr)] has spawned a cultists.") if(!src.makeCult()) - usr << "\red Unfortunatly there were no candidates available" + usr << "\red Unfortunately there weren't enough candidates available." if("5") log_admin("[key_name(usr)] has spawned a malf AI.") if(!src.makeMalfAImode()) - usr << "\red Unfortunatly there were no candidates available" + usr << "\red Unfortunately there weren't enough candidates available." if("6") log_admin("[key_name(usr)] has spawned a wizard.") if(!src.makeWizard()) - usr << "\red Unfortunatly there were no candidates available" + usr << "\red Unfortunately there weren't enough candidates available." if("7") log_admin("[key_name(usr)] has spawned a nuke team.") if(!src.makeNukeTeam()) - usr << "\red Unfortunatly there were no candidates available" + usr << "\red Unfortunately there weren't enough candidates available." if("8") log_admin("[key_name(usr)] has spawned a ninja.") src.makeSpaceNinja() @@ -44,8 +44,10 @@ src.makeAliens() if("10") log_admin("[key_name(usr)] has spawned a death squad.") - if(!src.makeDeathsquad()) - usr << "\red Unfortunatly there were no candidates available" + if("11") + log_admin("[key_name(usr)] has spawned vox raiders.") + if(!src.makeVoxRaiders()) + usr << "\red Unfortunately there weren't enough candidates available." else if(href_list["dbsearchckey"] || href_list["dbsearchadmin"]) var/adminckey = href_list["dbsearchadmin"] var/playerckey = href_list["dbsearchckey"] diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 8ef53eb0232..823d1adc2f0 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -17,6 +17,7 @@ client/proc/one_click_antag() Make Cult
Make Malf AI
Make Wizard (Requires Ghosts)
+ Make Vox Raiders (Requires Ghosts)
"} /* These dont work just yet Ninja, aliens and deathsquad I have not looked into yet @@ -429,4 +430,96 @@ client/proc/one_click_antag() ticker.mode.traitors += new_syndicate_commando.mind new_syndicate_commando.equip_syndicate_commando(syndicate_leader_selected) - return new_syndicate_commando \ No newline at end of file + return new_syndicate_commando + +/datum/admins/proc/makeVoxRaiders() + + var/list/mob/dead/observer/candidates = list() + var/mob/dead/observer/theghost = null + var/time_passed = world.time + var/input = "Disregard shinies, acquire hardware." + + var/leader_chosen = 0 //when the leader is chosen. The last person spawned. + + //Generates a list of candidates from active ghosts. The admin picks which players to respawn as the vox. + for(var/mob/dead/observer/G in player_list) + spawn(0) + if(is_alien_whitelisted(src, "Vox") || !config.usealienwhitelist) + switch(alert(G,"Do you wish to be considered for a vox raiding party arriving on the station?","Please answer in 30 seconds!","Yes","No")) + if("Yes") + if((world.time-time_passed)>300)//If more than 30 game seconds passed. + return + candidates += G + if("No") + return + else + return + + sleep(300) //Debug. + + for(var/mob/dead/observer/G in candidates) + if(!G.key) + candidates.Remove(G) + + if(candidates.len) + var/raiders = 1 + //Spawns vox raiders and equips them. Two raiders, two engineers. + for (var/obj/effect/landmark/L in world) + if(L.name == "Response Team") + if(raiders<=0) + break + + var/mob/living/carbon/human/new_vox = create_vox_raider(L, leader_chosen) + + while((!theghost || !theghost.client) && candidates.len) + theghost = pick(candidates) + candidates.Remove(theghost) + + if(!theghost) + del(new_vox) + break + + new_vox.key = theghost.key + new_vox << "\blue You are a Vox Primalis, fresh out of the Shoal. Your crew has arrived at the NSV Exodus to begin pillaging! Your current goal is: \red [input]" + new_vox << "\red Don't forget to turn on your nitrogen internals!" + + raiders-- + if(raiders >= 4) + return 0 + else + return 0 + return 1 + +/datum/admins/proc/create_vox_raider(obj/spawn_location, leader_chosen = 0) + var/mob/living/carbon/human/new_vox = new(spawn_location.loc) + + new_vox.gender = pick(MALE, FEMALE) + var/datum/preferences/A = new() //Randomize appearance for the raider. + A.randomize_appearance_for(new_vox) + new_vox.h_style = "Short Vox Quills" + new_vox.regenerate_icons() + + var/sounds = rand(2,10) + var/i = 0 + var/newname = "" + + while(i<=sounds) + i++ + newname += pick(list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah")) + + new_vox.real_name = capitalize(newname) + new_vox.name = new_vox.real_name + new_vox.age = rand(12,20) + + new_vox.dna.ready_dna(new_vox) // Creates DNA. + new_vox.dna.mutantrace = "vox" // Actually makes the vox! How about that. + new_vox.mind_initialize() + new_vox.mind.assigned_role = "MODE" + new_vox.mind.special_role = "Vox Raider" + + //Adds them to current traitor list. Which is really the extra antagonist list. + ticker.mode.traitors += new_vox.mind + new_vox.equip_vox_raider() + + usr << "\red Returning vox." + return new_vox \ No newline at end of file diff --git a/code/modules/admin/verbs/vox_raiders.dm b/code/modules/admin/verbs/vox_raiders.dm new file mode 100644 index 00000000000..4aa9b323a97 --- /dev/null +++ b/code/modules/admin/verbs/vox_raiders.dm @@ -0,0 +1,66 @@ +/mob/living/carbon/human/proc/equip_vox_raider() + + var/obj/item/device/radio/R = new /obj/item/device/radio/headset/syndicate(src) + R.set_frequency(SYND_FREQ) //Same frequency as the syndicate team in Nuke mode. + equip_to_slot_or_del(R, slot_ears) + + equip_to_slot_or_del(new /obj/item/clothing/under/vox/vox_robes(src), slot_w_uniform) + equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(src), slot_shoes) // REPLACE THESE WITH CODED VOX ALTERNATIVES. + equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(src), slot_gloves) // AS ABOVE. + + switch(rand(1,4)) // Come up with a better way of doing this - ticker of some sort maybe. + if(1) // Vox raider! + equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/carapace(src), slot_wear_suit) + equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/carapace(src), slot_head) + equip_to_slot_or_del(new /obj/item/weapon/melee/telebaton(src), slot_belt) + equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE. + equip_to_slot_or_del(new /obj/item/device/chameleon(src), slot_l_store) + + var/obj/item/weapon/crossbow/W = new(src) + W.cell = new /obj/item/weapon/cell/crap(W) + W.cell.charge = 500 + equip_to_slot_or_del(W, slot_r_hand) + + if(2) // Vox engineer! + equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/pressure(src), slot_wear_suit) + equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/pressure(src), slot_head) + equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(src), slot_belt) + equip_to_slot_or_del(new /obj/item/clothing/glasses/meson(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE. + equip_to_slot_or_del(new /obj/item/weapon/storage/box/emps(src), slot_l_store) + + equip_to_slot_or_del(new /obj/item/weapon/pickaxe/plasmacutter(src), slot_r_hand) + + if(3) // Vox saboteur! + equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/carapace(src), slot_wear_suit) + equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/carapace(src), slot_head) + equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(src), slot_belt) + equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE. + equip_to_slot_or_del(new /obj/item/weapon/card/emag(src), slot_l_store) + + var/obj/item/weapon/storage/pneumatic/W = new(src) + W.tank = new /obj/item/weapon/tank/nitrogen(W) + equip_to_slot_or_del(W, slot_r_hand) + + if(4) // Vox medic! + equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/pressure(src), slot_wear_suit) + equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/pressure(src), slot_head) + equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(src), slot_belt) // Who needs actual surgical tools? + equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE. + equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray(src), slot_l_store) + + equip_to_slot_or_del(new /obj/item/weapon/circular_saw(src), slot_l_hand) + equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/toxin(src), slot_r_hand) + + equip_to_slot_or_del(new /obj/item/clothing/mask/breath/vox(src), slot_wear_mask) + equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(src), slot_back) + equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_r_store) + + var/obj/item/weapon/card/id/syndicate/W = new(src) + W.name = "[real_name]'s Legitimate Human ID Card" + W.icon_state = "id" + W.access = list(access_cent_general, access_cent_specops, access_cent_living, access_cent_storage, access_syndicate) + W.assignment = "Trader" + W.registered_name = real_name + equip_to_slot_or_del(W, slot_wear_id) + + return 1 \ No newline at end of file diff --git a/icons/mob/human_races/r_def_vox.dmi b/icons/mob/human_races/r_def_vox.dmi index 4dad2129d5081210cc8b17f09b135559b390776b..2024f52583b50e825812a2bc3ec746d95564adb2 100644 GIT binary patch delta 1774 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 MGu{pN#GaJ;7t?4TGynhq From e3acd6e72811a90948749faf414271850b006114 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 14 Jun 2013 16:38:36 -0700 Subject: [PATCH 15/26] Minor tweak to previous commit. --- code/modules/admin/verbs/one_click_antag.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 823d1adc2f0..80e58110e43 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -462,8 +462,8 @@ client/proc/one_click_antag() candidates.Remove(G) if(candidates.len) - var/raiders = 1 - //Spawns vox raiders and equips them. Two raiders, two engineers. + var/raiders = 4 + //Spawns vox raiders and equips them. for (var/obj/effect/landmark/L in world) if(L.name == "Response Team") if(raiders<=0) From 4ea1e16863cb4ef49478f680d73395f02dbf271d Mon Sep 17 00:00:00 2001 From: MisterBook Date: Fri, 14 Jun 2013 21:24:28 -0500 Subject: [PATCH 16/26] With a brand new spanking BEF pull. --- code/modules/mob/living/carbon/monkey/life.dm | 17 ++++++++++++++++- code/modules/mob/living/damage_procs.dm | 4 ++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 45e57a3da77..5e215b6966e 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -438,21 +438,36 @@ if(!reagents.has_reagent("inaprovaline")) adjustOxyLoss(1) Paralyse(3) + if(halloss > 100) + src << "You're in too much pain to keep going..." + for(var/mob/O in oviewers(src, null)) + O.show_message("[src] slumps to the ground, too weak to continue fighting.", 1) + Paralyse(10) + setHalLoss(99) if(paralysis) AdjustParalysis(-1) blinded = 1 stat = UNCONSCIOUS + if(halloss > 0) + adjustHalLoss(-6) else if(sleeping) + handle_dreams() + adjustHalLoss(-6) sleeping = max(sleeping-1, 0) blinded = 1 stat = UNCONSCIOUS - if( prob(10) && health ) + if( prob(10) && health && !hal_crit ) spawn(0) emote("snore") + else if(resting) + if(halloss > 0) + adjustHalLoss(-6) //CONSCIOUS else stat = CONSCIOUS + if(halloss > 0) + adjustHalLoss(-2) //Eyes if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 78b04c9245d..333cc07380b 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -28,7 +28,7 @@ return 1 -/mob/living/proc/apply_damages(var/brute = 0, var/burn = 0, var/tox = 0, var/oxy = 0, var/clone = 0, var/def_zone = null, var/blocked = 0, var/halloss = 0) +/mob/living/proc/apply_damages(var/brute = 0, var/burn = 0, var/tox = 0, var/oxy = 0, var/clone = 0, var/halloss = 0, var/def_zone = null, var/blocked = 0) if(blocked >= 2) return 0 if(brute) apply_damage(brute, BRUTE, def_zone, blocked) if(burn) apply_damage(burn, BURN, def_zone, blocked) @@ -64,7 +64,7 @@ return 1 -/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/irradiate = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/blocked = 0, var/agony = 0) +/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/irradiate = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/agony = 0, var/blocked = 0) if(blocked >= 2) return 0 if(stun) apply_effect(stun, STUN, blocked) if(weaken) apply_effect(weaken, WEAKEN, blocked) From 04be69a0b42a6d561bc1a78c954c9f706af7581c Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 14 Jun 2013 20:07:16 -0700 Subject: [PATCH 17/26] Magboots and gloves for vox, removed a debug string, tweaked vox. --- code/modules/admin/verbs/one_click_antag.dm | 2 - code/modules/admin/verbs/vox_raiders.dm | 4 +- code/modules/clothing/spacesuits/alien.dm | 54 ++++++++++++++++++- code/modules/mob/living/carbon/human/life.dm | 10 ++-- code/modules/mob/say.dm | 2 +- icons/mob/feet.dmi | Bin 5873 -> 6074 bytes icons/mob/hands.dmi | Bin 10854 -> 11257 bytes icons/obj/clothing/gloves.dmi | Bin 9828 -> 10117 bytes icons/obj/clothing/shoes.dmi | Bin 7080 -> 7657 bytes 9 files changed, 61 insertions(+), 11 deletions(-) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 80e58110e43..099443ade48 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -517,9 +517,7 @@ client/proc/one_click_antag() new_vox.mind.assigned_role = "MODE" new_vox.mind.special_role = "Vox Raider" - //Adds them to current traitor list. Which is really the extra antagonist list. ticker.mode.traitors += new_vox.mind new_vox.equip_vox_raider() - usr << "\red Returning vox." return new_vox \ No newline at end of file diff --git a/code/modules/admin/verbs/vox_raiders.dm b/code/modules/admin/verbs/vox_raiders.dm index 4aa9b323a97..93f6af6eb5a 100644 --- a/code/modules/admin/verbs/vox_raiders.dm +++ b/code/modules/admin/verbs/vox_raiders.dm @@ -5,8 +5,8 @@ equip_to_slot_or_del(R, slot_ears) equip_to_slot_or_del(new /obj/item/clothing/under/vox/vox_robes(src), slot_w_uniform) - equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(src), slot_shoes) // REPLACE THESE WITH CODED VOX ALTERNATIVES. - equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(src), slot_gloves) // AS ABOVE. + equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/vox(src), slot_shoes) // REPLACE THESE WITH CODED VOX ALTERNATIVES. + equip_to_slot_or_del(new /obj/item/clothing/gloves/yellow/vox(src), slot_gloves) // AS ABOVE. switch(rand(1,4)) // Come up with a better way of doing this - ticker of some sort maybe. if(1) // Vox raider! diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index 3a8824e644e..c17f1b5aeaf 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -104,4 +104,56 @@ desc = "Weird and flowing!" icon_state = "vox-casual-2" color = "vox-casual-2" - item_state = "vox-casual-2" \ No newline at end of file + item_state = "vox-casual-2" + +/obj/item/clothing/gloves/yellow/vox + desc = "These bizarre gauntlets seem to be fitted for... bird claws?" + name = "insulated gauntlets" + icon_state = "gloves-vox" + item_state = "gloves-vox" + siemens_coefficient = 0 + permeability_coefficient = 0.05 + color="gloves-vox" + +/obj/item/clothing/gloves/yellow/vox/mob_can_equip(M as mob, slot) + var/mob/living/carbon/human/U = M + if(U.dna.mutantrace != "vox") + U << "This clearly isn't designed for your species!" + return 0 + return ..() + +/obj/item/clothing/shoes/magboots/vox + + desc = "A pair of heavy, jagged armoured foot pieces, seemingly suitable for a velociraptor." + name = "vox boots" + item_state = "boots-vox" + icon_state = "boots-vox" + + toggle() + name = "Toggle Floor Grip" + + if(src.magpulse) + src.flags &= ~NOSLIP + src.magpulse = 0 + usr << "You relax your deathgrip on the flooring." + else + src.flags |= NOSLIP + src.magpulse = 1 + usr << "You dig your claws deeply into the flooring, bracing yourself." + + + examine() + set src in view() + ..() + var/state = "loosely" + if(src.flags&NOSLIP) + state = "tightly" + usr << "The wearer seems to be gripping the floor [state]." + + +/obj/item/clothing/shoes/magboots/vox/mob_can_equip(M as mob, slot) + var/mob/living/carbon/human/U = M + if(U.dna.mutantrace != "vox") + U << "This clearly isn't designed for your species!" + return 0 + return ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 5d8dc1055b0..0db1f949c5f 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -470,7 +470,7 @@ reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) toxins_alert = max(toxins_alert, 1) else if(O2_pp > vox_oxygen_max && src.dna.mutantrace=="vox") //Oxygen is toxic to vox. - var/ratio = (breath.oxygen/vox_oxygen_max) * 10 + var/ratio = (breath.oxygen/vox_oxygen_max) * 1000 adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) toxins_alert = max(toxins_alert, 1) else @@ -490,7 +490,7 @@ if( (abs(310.15 - breath.temperature) > 50) && !(COLD_RESISTANCE in mutations)) // Hot air hurts :( if(status_flags & GODMODE) return 1 //godmode - if(breath.temperature < 260.15) + if(breath.temperature < 260.15 && dna.mutantrace != "vox") //Vox are resistant to cold. if(prob(20)) src << "\red You feel your face freezing and an icicle forming in your lungs!" else if(breath.temperature > 360.15) @@ -501,10 +501,10 @@ if(-INFINITY to 120) apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Cold") fire_alert = max(fire_alert, 1) - if(120 to 200) + if(120 to 200 && dna.mutantrace != "vox") //Vox are resistant to cold. apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Cold") fire_alert = max(fire_alert, 1) - if(200 to 260) + if(200 to 260 && dna.mutantrace != "vox") //Vox are resistant to cold. apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Cold") fire_alert = max(fire_alert, 1) if(360 to 400) @@ -602,7 +602,7 @@ if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE) pressure_alert = -1 else - if( !(COLD_RESISTANCE in mutations) && src.dna.mutantrace!="vox") + if( !(COLD_RESISTANCE in mutations) && src.dna.mutantrace!="vox") //Vox are resistant to pressure loss. adjustBruteLoss( LOW_PRESSURE_DAMAGE ) pressure_alert = -2 else diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 9f3660eb7c5..4f2ab37106d 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -81,7 +81,7 @@ if (is_speaking_tajaran) return "mrowls, \"[text]\""; if (is_speaking_vox) - return "chirps, \"[text]\""; + return "shrieks, \"[text]\""; //Needs Virus2 // if (src.disease_symptoms & DISEASE_HOARSE) // return "rasps, \"[text]\""; diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index 81c75323041f2ad1bcf93cf25fe95362f1420486..d994f6a63c1375660e24683ddbdaffbe73ca54e5 100644 GIT binary patch delta 5500 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 delta 5297 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 diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index 44dfaabf477477bc3ff18d35db2a75a52bb078af..6e2862349be97143bf9e31b9f91b40ebff7e48e2 100644 GIT binary patch literal 11257 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 literal 10854 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 AO8@`> diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index 9a8ee374dd349c3a0f2461ba8a3f09977a4e5790..8160eefd314b6a8f80642f58cfa7d660b9fd4e40 100644 GIT binary patch literal 10117 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 J3aNKr{sTkL*<=6! literal 9828 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 Ms;Hq*A!ioy9|~}0*#H0l literal 7080 zcmb7pXH-+sw)F`Kz4tCnsz?zO5D)@VMS4?uuL6P;si6tdElBTOAoSjwbP<`ARQEh z)Q%XcT2E%L-5^EN&~mT3I`v%gm9e+k{d`YiRbMhJWkMoee^XT`LOR z*Kw1kpQ$C|InJJZ9^kskjxF&OBzF`~{>vvm;fv;!+@#XulgxT^f9KCvIkDQa2b0Od z+k;nPsufCv>D-A7LT+#Jl_)3fOY&ABu;yD-tCmIofDNlchd51pmD+xhN5o0=F-HX6 z2)-OU$RGCf9BoXydeaj!LEAP0jXb#+jUIv0Ql3l}td+@3$2ZT@hHGZqBxR3@e~gVI z^m>wAU?Xr|-!&$p(rQi9*1=uAK*^D4n0J@5QZu@!%2ckiyfN===~0NEY_7f$NI!$C>FeOeaWxa_t>w6e_;lE zaUq&LLm$yA&JD=A>UFwj=J-6&Oh`n0U6|eM?9w@k%5H53Fl-hRU_pibB6{D`r+ zxj7*#D}H1|&A_B|Dr$4n_Jx9`j!w_e&`_&0F6o`Ho)uXY75t&$VH2-%{pbJ`a*z*e zwBjdX$pyH~knLVRenaDF7%vgo4Z;sVcVD=&Yp zPd>0KQ$}unE${e+jGM^{^UGNtfy6d3$ENr+GVa;aX+oY6BBN{zEiJ9CUUQA-&%@`O z71h;AMr>1m4I`TN)HU>Q1+ zBBG>!+-AGGMDJUhDj-xwQ-F(I&B0}lgb|*YM99Sl3mPO_q z?7uGx;`I}fBe(@vf8x7u$_)H{j+SmWY+uOk#7dN6FD@=N7qK02lWurf4!{ZvxjOEc z@ryCUYVsvkpU>EfI`2%E!?#|R(*Tv;`=+-SE6U3i92`pc(Pz&3HPjx9V;Y8GC@}Z6 zpMRBqzYNUJ)_j0W2Ha*!3JeSl5jZBLy{F_}Jy_{!+%8OWTOS}#%92HzL)!36ZxT|e zHE8aL)k{c)uzc(itd{MoTp&Xg8(=bZbbJiLb9E_Rrq$w06k>=KMq#j&<>y0SWV1OT zX8EdVv@d}&uPA!IFo=Lieg|ddhyOR{s|I^ zgBa}DUGekv%|$N#2_k=R__Sr`MQs!ZLLRKx80BVF$H-Uxu6Tgny#9)6CgfGrP80@YtyR+1>BU5k&+s zfFhIeYRTBP*n2fExj|&0*Wyg#{^ym}FIZaytN3q2n(??A-@!ruV(u?#o#r4{%m`IpXQAP{&J^l+tLAP8rAtJ(l@+<8Ti?ectgzc zD*fWy{g9Q-fV$N3cVr05fom3+EASbdEadsM)CFZ=wjy1ZI>;M>8Qv;9#R>rML$d;R zu(=Td>c*Zgux!_x!G}Rc0_Ia6DY%O8zVN^3uCA%+q6?K{W2$dyVU(7Z9vB#qg+hZ% zU97A)z6h8Mg}i6Y2S~2;N2Sg{0IX(FZGr@#tG)5{yXNE$dn#?)!9YbI;TIIE z*t1GS5L37CLFN^MSC)7%eU0skj7RIFd=S?1_vXjH{^F(Aiod)$Bru18X14A^U3cZ* zuGpMkMZE=J{_)K$%oq14C^oMDJY*o&;i3AoyW97fSI4}{P{?VTpNNR)d}?avR9Q`p z2sI1Ec4L(libmEf5(&2NF19!uz8rBGwwtZ2O*V;QCzCjiMKN^Jjx8^tpw6^i?I_Bt zSI4$$mscKFO70I-T{;#86;KTq7d}%fof^5GJS$5g)UEoZ3WIPna}Dh(>!@=j*SS~? zjWhEhpSQL%?PxRKZO&vhuG)r%yxQ8IV>ee9#}=Xt!VVMpm2oU5{4&nk%k}=753wnH z1G-4gHR4@{y*u`_X}dIQP79I@2d^#wScYpGcA+M0V@v*QyNIU=VQQ#24&2mYl5?LZQAY!X^I&mKr?MzzdsA#&sFg+}J@L%Qc=iuKmsZ zhF>9YxIntJ-y?oge2)3y&pUzZ6>vNnaVyvR{vS;P>dI?U*77%qA2?$sd0x#g2i3 zp(VOsx=)KHq10V(dXvu2eN<#Do8@_Lbc)pbes=A!W~gt?i?EWho#6skNp0Y{0EvbB z`=%BgP|Vy2P&^(*k=RX*fg$q5_>_FO;fCI@S=?)hqfI853GL_Sr}Q(Z7^&mf%PN{- zJkra0mOg_^5ZGy=K?Nm++AZ~j$2=( zDNJ}DSJboVC%tC}jx=T*67Fv#B{dYtL$HfauqOW9?s@y%+D^fED25M2*6Swnw@?-$oc=F+iGR?| zKW#P?H-bX&*~tFMbYYNKsPBESr>T$k&OwBWHPDE?A7 zTt93GqGo*6TCW?Qrnk2hK`eVA^5P?Ml(^u0-k!*}wHRXV+dQ%#)L3Gbzb3F#b@q;* zH3_r5;Z2(iJ~$mbIER77{_zl&petc;7|}pxZC#y(`26Duv};ufy~~NvENs)OGuHw9 zpmpbW8J2z?&2X%6zT)TZlQ;DD=(yLNb&2){evEI0wXqDSzwfD4*)vWst4HRZUPz`e zu?tC?d`U@%c}#y?vKY&h24H%n`fN^148RmTmQ1SeVBV>sYGXL5AK^Fr<-TbMrdZE5 zzRv5OAp!LC^yDe<3X6sxEJ=t^X9doOgcDZu!%ec9hiC*^19^<&_-=s8wLZp!`0Fh5 zZ@(Db#`3bVo2K#*`1{pv_&XYh46*Mxd0>G!x}5E#I{m=rdcjJSheDtyORHw|y0te^ z?Rj-zQtDKv+Yf_ ztOmJgA}d-~??IeyG*5qU?3%69q@_0b`ZE6bMZok3bhZTe%qx&E!ZsENty*vrhDbX) zbwd*`OFr^ecLa)(_LpA|wD8LwUEz(}ixNdi!k%XH?FPhX0ZJODKJSSV?y&7Ou8~~r z&3kB}kVJuFFcNEAnCH%P6{h7YGirz%WDEKG*Aa&Y1k9+Z9XQ^kh{(~bH=cZwpO(ix zHq$-54=gWoPe#~;`S?{@b-b-!@H)0$_HKa<&i(cR1{iU#E?r!OFDc$YFvv&&OwI|D zSxif(a?O{l?4QWMT8CGy7(n^G-p{YcgcU)8AL`~a=osTo{bVROi!8JKSG@C1k!+oI`7(vxc9<=M7_nh{A)+ z`0m}K2XsfKt=#Ju+AZwZ+VgZ*%__>N6+@w^M!|KiSoboC(lcfFLFd)pZlPhCf8IR4 z%f*#jUHu^U+gR#DCq%W)Fq1Yrr3}Q6MLuoueaGFgGru&J?0gZccOw$IyX9gS#YmW$ znZ-ReiF|#1f6UF{NB6Dj38o{n93(?yX;Xs8g$L3Wf}K7sb$x(qJNOxu>^wvg(i+E? znqvQMqEmuthB2`D<8u{{f2$dLG7PLp5+7D=c|`YxXiC>|2LuF=nsM8_ zQ=7$tWitVL2u9W^{%^G2zvXB4?*we#fnFhWD(p0{Ul((EIjyZyh#0aDwl*B+?Cc;S zg+Qb-KGju8Ns0MLM=?gh4c-rVkTE#+!P5Dw_2Sv4&7eT%L#~@^dJ64=MX40dAi2s# z8}u$qX@biQ>C&f;YbOr-n|EZp@ydYHCxIT3a>`0RICI+ScfSogvxNZq%x$kEVor<} za(kQ+8BHl*@n5oVKe2Y&u`ai%>4pB1&11^wj$B!vkF2c?-@lV&_s2DkIN#k=_n6v! zbxGkpUH3pjq4JyVw+Vt(>BXM$m0lRL@?f0&rKq>%ylV%duj1vtwR@DgcglMca>3dq z{FO=)J6vCLB}L;$1Qd(Au83=jpq84%L0+u9k{IdjNi>p#8{x$&DM`W?kKDlwustpL z!Ycu(bQktqdaG*tsB5|Y;&VY}f8o#LKre|~b!J&vR9M*U{D^~_8`rjGPLEqafW)?j z{!tn+rql(KP*Y?0o9zjR?vGOUb3Hn7C%O3%2_D}w;r*ys*;hBAn!TLEduAVi%0P2t zJ*?*E;6_JvhV*!Rl!)3vvEN?T%S!9Fk|wu}=?56-WNkW(Fa3_til2i=W$8f6bu56W zBV|_*ezRL~$qFiL2aTwx^jLY^MHbEKM6dhgT;l^2>3|o`6R)RObWvA`oLj_%n}qb) zM*K7e9}6&oa(!!SZGL;w#0K_bhcQ->CvhnGDoVM)z9OX>&{=xPo02BFA6qegGy1yM zEK|%HE%QP%6qz`I65+pmOuE~T`jE=KgeGc7+s*KI8tD`)+$jE@5uXZTqFjrBUq5u^ z?~EG;x86*4D0ZxguYQ8ud`IiI(ypJA-w$<}eGy44NqE@L(fyribvHJi;IK$g_4O=d z-DIyFB`gi6}xHyg(AH`djV33M^KQI?g}_C zKC+9%Py)ETN}~l z$2Ccd49z(?LUcqJt#Od{`+Qz{I8l`oL)qHe+LlNb9*{FD>i9*hEKT-g8?3kYDeJeN ztsgFfvbB`eO8uY_Wxc(Ii%N)~)#KP?Ja1Hx_{grSKbi?vfSEmR!5()d$mYE-lA)|CLg#txFAhsc#R2)$i-|<8ylOIL<3W;$oPf% zd9s1&>1mvD{Zhj!OKeIOrJc0K6MSA+>+3x!MB!v7hN^E__OnTTpJmtA1sVC@kmdI0 zosvPZrT|3vGb97+VM7bp7;_ch9v4FmVhH}Hea_P8fSfDt=Vb2Cxg30Wj#((h|LijT zTju#^0jZH^xU6{OYkQ;cvfv@?QtBK;-iKlc#ui%3VhKcGB*@jR8+A=Aw0(WtQ&gzj zGC1@}M&`->FOM;4_}NW|f#5;S#k@CSmJMZ>J#KGkW5WsX;IJrdaIDtyVCq>}S=q?2 z7sjg*XCmncE5LXrDCF)ZJqT9-{k=xj0sk^Lg8DcCZUhOdpEgrrz)S`UdRWkJe17w@ z9wffPZ0i(S5#*o8o_wt>PjpgSEBeM0TSIE+g@!u0y(q&Y?>%DxrdklvW!{OtMzKY) ziistGU~|qS+amlROn^aP;D@)zn>ld!_X-znZHmp2lr>+02tbs9_?a?ri36N92^{g zWllf?syr2~08oHNiEu&<4#qMhY55XWKcuA%|J~U+RE{Pfb__eAcPGdnx1XIZH!>OP zi)r;c+e=i_DxY%HGBS#un9v>w)(t$z_He2^qMhLF?m)AX_G=(H1eG$c&b6r)A2WZM z+>)Eu8*-Lv4`lwN1G%SPhUXU~3ixa!8sr}BN))I(dnWJe`*>n+%f@MUA5$jGQUAz^9TsMQ_SmnN6e^cX132j-%T9I+RK+f=MN+E`TzEj zC<4*8a(*^Sdb@9zYbrA3P1U7R?^kX0C#@cpy|)*CLnJXr*;7r5jd{_@1hyJ{Jr4=N zGGN7$#bEdrLr+;{E;Tqf*fnKf7W?rd#mws--eV%PVYPg;XmO5DzC!rrrSJOY=7X{9 z8>^gzOMf>4Dy;*sg(*ZSHH#U*7?IhN+X%df@NeG~W9UV2Fw+Nu=m|42GQ{22BWI3f zZB{SdbA(ljg-G3EScgSDOdc&RD+`-*{>E{ikAK`rs3A}QM=-K#R~4+Q87`ihmW`Fb zA>*f^p)t!XLWSP=6Z~{qrd^B86gN^Qz$XfZ%Ds130REz}E_10}ft#^XY0qmaM*tZQI_eKDqT`Vl861DTD13<4YEq{cWf|1 z(ca!(lS$h5^Juz+$1M8%dadOr8U=<7be^v+;Qk@qekz-LsdF`+r!?0cP6z^SYhWIE zi`Q-lPe^VqI}SihOk9n-6u+-6qF2~(Uqm6;s+>r|K^86E&{hJje1lC3x~7YB?PdV^ zgPXs8B~Z*8zjuyVv3NCeF_`;pMHzDZCy9zTBnFlCz0b}|ROB?b@SOjoO;wM>eF3 zuGns4VSKFv{Bg>B6X3w^Lqn#H5Eh|L&0OS+saxqtHL<-gaw%^Q%+mzOVblvICVp1=Vr M3hGbca^@lb0bcn}w*UYD From b41b1fc2f3c101e83176a7bab53a65b489b526bf Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 15 Jun 2013 04:09:49 -0700 Subject: [PATCH 18/26] Armalis simple_animal/sprite. --- baystation12.dme | 1 + code/datums/mind.dm | 4 ++ code/modules/client/preferences.dm | 4 -- code/modules/mob/living/simple_animal/vox.dm | 54 ++++++++++++++++++ code/modules/mob/new_player/new_player.dm | 6 +- code/modules/mob/say.dm | 2 +- .../projectiles/guns/projectile/bow.dm | 9 +++ icons/mob/vox.dmi | Bin 0 -> 4156 bytes 8 files changed, 70 insertions(+), 10 deletions(-) create mode 100644 code/modules/mob/living/simple_animal/vox.dm create mode 100644 icons/mob/vox.dmi diff --git a/baystation12.dme b/baystation12.dme index 78f58149999..f002ef969d2 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1002,6 +1002,7 @@ #include "code\modules\mob\living\simple_animal\parrot.dm" #include "code\modules\mob\living\simple_animal\shade.dm" #include "code\modules\mob\living\simple_animal\simple_animal.dm" +#include "code\modules\mob\living\simple_animal\vox.dm" #include "code\modules\mob\living\simple_animal\worm.dm" #include "code\modules\mob\living\simple_animal\friendly\cat.dm" #include "code\modules\mob\living\simple_animal\friendly\corgi.dm" diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 175e622788a..4984b982839 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1220,5 +1220,9 @@ datum/mind mind.assigned_role = "Juggernaut" mind.special_role = "Cultist" +/mob/living/simple_animal/vox/armalis/mind_initialize() + ..() + mind.assigned_role = "Armalis" + mind.special_role = "Vox Raider" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 75ead11e4c5..e6a76d88e8e 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -792,9 +792,6 @@ datum/preferences if(is_alien_whitelisted(user, "Skrell")) //Check for Skrell and admins new_species += "Skrell" whitelisted = 1 - if(is_alien_whitelisted(user, "Vox")) //Check for Vox and admins - new_species += "Vox" - whitelisted = 1 if(is_alien_whitelisted(user, "Kidan")) // Check for Kidan and admins new_species += "Kidan" whitelisted = 1 @@ -806,7 +803,6 @@ datum/preferences new_species += "Tajaran" new_species += "Unathi" new_species += "Skrell" - new_species += "Vox" new_species += "Kidan" species = input("Please select a species", "Character Generation", null) in new_species diff --git a/code/modules/mob/living/simple_animal/vox.dm b/code/modules/mob/living/simple_animal/vox.dm new file mode 100644 index 00000000000..e73249f2bc8 --- /dev/null +++ b/code/modules/mob/living/simple_animal/vox.dm @@ -0,0 +1,54 @@ +/mob/living/simple_animal/vox/armalis/ + + name = "serpentine alien" + real_name = "serpentine alien" + desc = "A one-eyed, serpentine creature, half-machine, easily nine feet from tail to beak!" + icon = 'icons/mob/vox.dmi' + icon_state = "armalis" + icon_living = "armalis" + maxHealth = 500 + health = 500 + response_harm = "flails ineffectually at the" + harm_intent_damage = 0 + melee_damage_lower = 30 + melee_damage_upper = 40 + attacktext = "slammed its enormous claws into" + speed = -1 + wall_smash = 1 + attack_sound = 'sound/weapons/bladeslice.ogg' + status_flags = 0 + +/mob/living/simple_animal/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(O.force) + if(O.force >= 25) + var/damage = O.force + if (O.damtype == HALLOSS) + damage = 0 + health -= damage + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") + else + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("\red \b The [O] bounces harmlessly off of [src]. ") + else + usr << "\red This weapon is ineffective, it does no damage." + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("\red [user] gently taps [src] with the [O]. ") + +/mob/living/simple_animal/vox/armalis/verb/fire_quill(mob/target as mob in oview()) + + set name = "Fire quill" + set desc = "Fires a viciously pointed quill at a high speed." + set category = "Alien" + + src << "\red You launch a razor-sharp quill at [target]!" + for(var/mob/O in oviewers()) + if ((O.client && !( O.blinded ))) + O << "\red [src] launches a razor-sharp quill at [target]!" + + var/obj/item/weapon/arrow/quill/Q = new(loc) + Q.fingerprintslast = src + Q.throw_at(target,10,15) \ No newline at end of file diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index f2859af519d..7f1dbc9f31a 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -349,12 +349,8 @@ if(is_alien_whitelisted(src, "Skrell"|| !config.usealienwhitelist)) new_character.dna.mutantrace = "skrell" new_character.skrell_talk_understand = 1 - if(client.prefs.species == "Vox") - if(is_alien_whitelisted(src, "Vox"|| !config.usealienwhitelist)) - new_character.dna.mutantrace = "vox" - new_character.vox_talk_understand = 1 if(client.prefs.species == "Kidan") - if(is_alien_whitelisted(src, "Vox"|| !config.usealienwhitelist)) + if(is_alien_whitelisted(src, "Kidan"|| !config.usealienwhitelist)) new_character.dna.mutantrace = "kidan" new_character.kidan_talk_understand = 1 diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index a0b765d8d43..2ed7f47a101 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -81,7 +81,7 @@ if (is_speaking_tajaran) return "mrowls, \"[text]\""; if (is_speaking_vox) - return "chirps, \"[text]\""; + return "shrieks, \"[text]\""; if (is_speaking_kidan) return "chitters, \"[text]\""; //Needs Virus2 diff --git a/code/modules/projectiles/guns/projectile/bow.dm b/code/modules/projectiles/guns/projectile/bow.dm index 4c5c0c0b1c2..5981ae05c49 100644 --- a/code/modules/projectiles/guns/projectile/bow.dm +++ b/code/modules/projectiles/guns/projectile/bow.dm @@ -13,6 +13,15 @@ /obj/item/weapon/arrow/proc/removed() //Helper for metal rods falling apart.. return +/obj/item/weapon/arrow/quill + + name = "vox quill" + desc = "A wickedly barbed quill from some bizarre animal." + icon = 'icons/mob/vox.dmi' + icon_state = "quill" + item_state = "quill" + throwforce = 15 + /obj/item/weapon/arrow/rod name = "metal rod" diff --git a/icons/mob/vox.dmi b/icons/mob/vox.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6f0172bba7013eb7333b0debc4a8f8a1fe9a9e9b GIT binary patch literal 4156 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 Date: Sat, 15 Jun 2013 14:18:40 -0700 Subject: [PATCH 19/26] SHUT UP SPAMCAT. Bow fix, vox raider message fix. --- code/modules/admin/verbs/one_click_antag.dm | 2 +- code/modules/projectiles/guns/projectile/bow.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 099443ade48..8bb15c1cb3b 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -480,7 +480,7 @@ client/proc/one_click_antag() break new_vox.key = theghost.key - new_vox << "\blue You are a Vox Primalis, fresh out of the Shoal. Your crew has arrived at the NSV Exodus to begin pillaging! Your current goal is: \red [input]" + new_vox << "\blue You are a Vox Primalis, fresh out of the Shoal. Your ship has arrived at the Tau Ceti system hosting the NSV Exodus... or was it the Luna? NSS? Utopia? Nobody is really sure, but everyong is raring to start pillaging! Your current goal is: \red [input]" new_vox << "\red Don't forget to turn on your nitrogen internals!" raiders-- diff --git a/code/modules/projectiles/guns/projectile/bow.dm b/code/modules/projectiles/guns/projectile/bow.dm index 5981ae05c49..6a8c3510f8e 100644 --- a/code/modules/projectiles/guns/projectile/bow.dm +++ b/code/modules/projectiles/guns/projectile/bow.dm @@ -77,7 +77,7 @@ user << "[arrow] plinks and crackles as it begins to glow red-hot." arrow.throwforce = 20 arrow.icon_state = "metal-rod-superheated" - + cell.charge -= 500 return if(istype(W, /obj/item/weapon/cell)) From 71e47fcd1c892dec4beb51e32a91e8467c52b1ad Mon Sep 17 00:00:00 2001 From: Chinsky Date: Sat, 15 Jun 2013 15:36:55 +0400 Subject: [PATCH 20/26] Added Local OOC verb. Visible to those in view and all admins. --- code/game/verbs/ooc.dm | 62 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 275d4b7dbf3..7a76a2c9685 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -84,3 +84,65 @@ var/global/normal_ooc_colour = "#002eb8" set desc = "Set to yellow for eye burning goodness." set category = "Fun" normal_ooc_colour = newColor + + +/client/verb/looc(msg as text) + set name = "LOOC" //Gave this shit a shorter name so you only have to time out "ooc" rather than "ooc message" to use it --NeoFite + set desc = "Local OOC, seen only by those in view." + set category = "OOC" + + if(say_disabled) //This is here to try to identify lag problems + usr << "\red Speech is currently admin-disabled." + return + + if(!mob) return + if(IsGuestKey(key)) + src << "Guests may not use OOC." + return + + msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) + if(!msg) return + + if(!(prefs.toggles & CHAT_OOC)) + src << "\red You have OOC muted." + return + + if(!holder) + if(!ooc_allowed) + src << "\red OOC is globally muted" + return + if(!dooc_allowed && (mob.stat == DEAD)) + usr << "\red OOC for dead mobs has been turned off." + return + if(prefs.muted & MUTE_OOC) + src << "\red You cannot use OOC (muted)." + return + if(handle_spam_prevention(msg,MUTE_OOC)) + return + if(findtext(msg, "byond://")) + src << "Advertising other servers is not allowed." + log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]") + message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]") + return + + log_ooc("(LOCAL) [mob.name]/[key] : [msg]") + + for(var/mob/M in hearers()) + if(!M.client) + continue + var/client/C = M.client + if (C in admins) + continue //they are handled after that + + if(C.prefs.toggles & CHAT_OOC) + var/display_name = src.key + if(holder) + if(holder.fakekey) + if(C.holder) + display_name = "[holder.fakekey]/([src.key])" + else + display_name = holder.fakekey + C << "LOOC: [display_name]: [msg]" + for(var/client/C in admins) + if(C.prefs.toggles & CHAT_OOC) + C << "LOOC: [src.key]: [msg]" \ No newline at end of file From 198fc21337436ef20063733c663851a040b543b6 Mon Sep 17 00:00:00 2001 From: jack-fractal Date: Sun, 16 Jun 2013 01:03:37 -0400 Subject: [PATCH 21/26] - adding Malsquando's cryobag reskin --- icons/obj/cryobag.dmi | Bin 3399 -> 1339 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/cryobag.dmi b/icons/obj/cryobag.dmi index fe543fad642e06a19fd2ec546c87169f60a413a0..68255b8b2c3207d43840b79772a390855989d93d 100644 GIT binary patch delta 1331 zcmV-31|NqSY z|HkV5b8~ZjeSL$2gOHGr0RI3p%x3=pGt4tHz`(#+!TE8?`G32+yQrwBN4oeeu=fj@ z<`AXzC9L%amEa+(^+>w+VZ!*5*7~BNqE)~7H?;SK(fXjEpoWHqcgy*dl$4Q?k)xxd zuCA`Ft*!i_Qu+V@00DGTPE!Ct=GbNc004}7R9JLGWpiV4X>fFDZ*Bkpc$`yKaB_9` z^iy#0_2eo`Eq^M`%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5DJegt zGAS`VJ~=19I5ovkiHkEOv#1y-W5~ssR+N~V3SncYPs`6qNlhVIImCFPmFE|v<`J#9 z6pzWu3a)-G;D7-DM&VVAiJqHc000A;Nkl&B}HMwcUSyA{n2BA^&S?RY!iJGziu$HN@B#T;0w6}W`}U=QK;yf=~@mvg`i z_Qo*Fm}DdjNluXVY8QE)ssqjOXhj`V%cuhqiP@Lyz|)lsv*wlT$x?3M4*=EV zs48R($2KZixS_wtSIhI7&0PX?FS@JgMMOrDchffh`WVn1iI7t073V=4{~V*1s{X{f zaH2I}{L}cGZo28FhPv)o9PmvYCr#5VOMgFvD0M@)6cp{zSSrgLrzHY>sXCYtF`2-% zre{3hIN%?K;dDBi&5^KZH*sp*?K|9KmLalc=~w6_PG`=0xkBar^Td9!G| zPmTLMTZ8fl&X!0V zOSk4OLPGHNb~@oseSOCTYE@`?9VFO~f=tX8bFi9H|>dT+ABS~P%LV0Z(s`N p0k$OOUmn+zVV-EdU!MQ}slV7%eRFB}3!?x4002ovPDHLkV1f>ingsv= literal 3399 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 From 23299809f6113ebecc68aa2f754f214e739f791d Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 16 Jun 2013 00:38:40 -0700 Subject: [PATCH 22/26] Armalis sprites, simple animal/mob yank-out verb and embedding. --- code/modules/mob/living/carbon/human/human.dm | 107 +++++++----------- code/modules/mob/living/living_defense.dm | 12 +- .../mob/living/simple_animal/simple_animal.dm | 2 +- code/modules/mob/living/simple_animal/vox.dm | 36 +++++- code/modules/mob/mob.dm | 63 +++++++++++ code/modules/mob/mob_defines.dm | 1 + .../projectiles/guns/projectile/bow.dm | 4 +- icons/mob/vox.dmi | Bin 4156 -> 2676 bytes icons/obj/weapons.dmi | Bin 18680 -> 19612 bytes 9 files changed, 150 insertions(+), 75 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 05f4b222a8e..02fffec17b4 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1119,8 +1119,8 @@ del(feet_blood_DNA) return 1 -mob/living/carbon/human/verb/yank_out_object() - set category = "IC" +mob/living/carbon/human/yank_out_object() + set category = "Object" set name = "Yank out object" set desc = "Remove an embedded item at the cost of bleeding and pain." set src in view(1) @@ -1137,89 +1137,62 @@ mob/living/carbon/human/verb/yank_out_object() usr << "You are restrained and cannot do that!" return -// /* var/list/valid_objects = list() var/datum/organ/external/affected = null var/mob/living/carbon/human/S = src var/mob/living/carbon/human/U = usr + var/self = null - if(S == U) // Removing something from yourself. - valid_objects = get_visible_implants(1) + if(S == U) + self = 1 // Removing object from yourself. - if(!valid_objects.len) + valid_objects = get_visible_implants(1) + + if(!valid_objects.len) + if(self) src << "You have nothing stuck in your wounds that is large enough to remove without surgery." - return - - var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects - - for(var/datum/organ/external/organ in organs) //Grab the organ holding the implant. Messy as Hell, TBD: fix. - for(var/obj/item/weapon/O in organ.implants) - if(O == selection) - affected = organ - - src << "You attempt to get a good grip on the [selection] in your [affected] with bloody fingers." - bloody_hands(S) - - if(!do_after(U, 80)) - return - - if(!selection || !affected || !S || !U) - return - - visible_message("[src] rips [selection] out of their [affected] in a welter of blood.","You rip [selection] out of your [affected] in a welter of blood.") - selection.loc = get_turf(src) - affected.implants -= selection - shock_stage+=10 - - for(var/obj/item/weapon/O in pinned) - if(O == selection) - pinned -= O - anchored = 0 - - if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-. - var/datum/wound/internal_bleeding/I = new (15) - affected.wounds += I - custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) - return 1 - - else // Removing something from someone else. - valid_objects = src.get_visible_implants(1) - - if(!valid_objects.len) + else U << "[src] has nothing stuck in their wounds that is large enough to remove without surgery." - return + return - var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects - - for(var/datum/organ/external/organ in src.organs) //Grab the organ holding the implant. Messy as Hell, TBD: fix. - for(var/obj/item/weapon/O in organ.implants) - if(O == selection) - affected = organ + var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects + for(var/datum/organ/external/organ in organs) //Grab the organ holding the implant. + for(var/obj/item/weapon/O in organ.implants) + if(O == selection) + affected = organ + if(self) + src << "You attempt to get a good grip on the [selection] in your [affected] with bloody fingers." + else U << "You attempt to get a good grip on the [selection] in [S]'s [affected] with bloody fingers." - U.bloody_hands(S) - if(!do_after(U, 80)) - return + if(istype(U,/mob/living/carbon/human/)) U.bloody_hands(S) + + if(!do_after(U, 80)) + return if(!selection || !affected || !S || !U) return - + if(self) + visible_message("[src] rips [selection] out of their [affected] in a welter of blood.","You rip [selection] out of your [affected] in a welter of blood.") + else visible_message("[usr] rips [selection] out of [src]'s [affected] in a welter of blood.","[src] rips [selection] out of your [affected] in a welter of blood.") - selection.loc = get_turf(usr) - affected.implants -= selection - src.shock_stage+=10 - for(var/obj/item/weapon/O in S.pinned) - if(O == selection) - S.pinned -= O - S.anchored = 0 + selection.loc = get_turf(src) + affected.implants -= selection + shock_stage+=10 - if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-. - var/datum/wound/internal_bleeding/I = new (15) - affected.wounds += I - custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) - return 1 + for(var/obj/item/weapon/O in pinned) + if(O == selection) + pinned -= O + if(!pinned.len) + anchored = 0 + + if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-. + var/datum/wound/internal_bleeding/I = new (15) + affected.wounds += I + custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) + return 1 /mob/living/carbon/human/proc/get_visible_implants(var/class = 0) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index f7b2caecae3..14137f0e844 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -77,8 +77,10 @@ if(!O.fingerprintslast) return + visible_message("Debug: checking client for [O.fingerprintslast]") var/client/assailant = directory[ckey(O.fingerprintslast)] if(assailant && assailant.mob && istype(assailant.mob,/mob)) + visible_message("Assailant has client: [assailant]") var/mob/M = assailant.mob src.attack_log += text("\[[time_stamp()]\] Has been hit with [O], last touched by [M.name] ([assailant.ckey])") M.attack_log += text("\[[time_stamp()]\] Hit [src.name] ([src.ckey]) with [O]") @@ -96,8 +98,14 @@ if(near_wall(dir,2) && W.w_class >= 3 && W.sharp) //If they're close to a wall and the projectile is suitable. visible_message("[src] is pinned to the wall by [O]!","You are pinned to the wall by [O]!") - src.anchored = 1 - src.pinned += O + if(!istype(src,/mob/living/carbon/human)) + O.loc = src + src.embedded += O + src.anchored = 1 + src.pinned += O + else + src.anchored = 1 + src.pinned += O /mob/living/proc/near_wall(var/direction,var/distance=1) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index f7154694f7e..74bd81ca934 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -96,7 +96,7 @@ AdjustParalysis(-1) //Movement - if(!client && !stop_automated_movement && wander) + if(!client && !stop_automated_movement && wander && !anchored) if(isturf(src.loc) && !resting && !buckled && canmove) //This is so it only moves if it's not inside a closet, gentics machine, etc. turns_since_move++ if(turns_since_move >= turns_per_move) diff --git a/code/modules/mob/living/simple_animal/vox.dm b/code/modules/mob/living/simple_animal/vox.dm index e73249f2bc8..55226823cfa 100644 --- a/code/modules/mob/living/simple_animal/vox.dm +++ b/code/modules/mob/living/simple_animal/vox.dm @@ -8,7 +8,7 @@ icon_living = "armalis" maxHealth = 500 health = 500 - response_harm = "flails ineffectually at the" + response_harm = "flails ineffectually at the" harm_intent_damage = 0 melee_damage_lower = 30 melee_damage_upper = 40 @@ -50,5 +50,35 @@ O << "\red [src] launches a razor-sharp quill at [target]!" var/obj/item/weapon/arrow/quill/Q = new(loc) - Q.fingerprintslast = src - Q.throw_at(target,10,15) \ No newline at end of file + Q.fingerprintslast = src.ckey + Q.throw_at(target,10,15) + +/mob/living/simple_animal/vox/armalis/verb/message_mob() + set category = "Alien" + set name = "Commune with creature" + set desc = "Send a telepathic message to an unlucky recipient." + + var/list/targets = list() + var/target = null + var/text = null + + targets += getmobs() //Fill list, prompt user with list + target = input("Select a creature!", "Speak to creature", null, null) as null|anything in targets + text = input("What would you like to say?", "Speak to creature", null, null) + + if (!target || !text) + return + + var/mob/M = targets[target] + + if(istype(M, /mob/dead/observer) || M.stat == DEAD) + src << "Not even the armalis can speak to the dead." + return + + M << "\blue Like lead slabs crashing into the ocean, alien thoughts drop into your mind: [text]" + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.dna.mutantrace == "vox") + return + H << "\red Your nose begins to bleed..." + H.drip(1) \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 6e9beda1bad..8a7a63cf550 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -895,3 +895,66 @@ note dizziness decrements automatically in the mob's Life() proc. /mob/proc/flash_weak_pain() flick("weak_pain",pain) + +mob/verb/yank_out_object() + set category = "Object" + set name = "Yank out object" + set desc = "Remove an embedded item at the cost of bleeding and pain." + set src in view(1) + + if(!isliving(usr) || usr.next_move > world.time) + return + usr.next_move = world.time + 20 + + if(usr.stat == 1) + usr << "You are unconcious and cannot do that!" + return + + if(usr.restrained()) + usr << "You are restrained and cannot do that!" + return + + var/mob/S = src + var/mob/U = usr + var/list/valid_objects = list() + var/self = null + + if(S == U) + self = 1 // Removing object from yourself. + + for(var/obj/item/weapon/W in embedded) + if(W.w_class >= 2) + valid_objects += W + + if(!valid_objects.len) + if(self) + src << "You have nothing stuck in your body that is large enough to remove." + else + U << "[src] has nothing stuck in their wounds that is large enough to remove." + return + + var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects + + if(self) + src << "You attempt to get a good grip on the [selection] in your body." + else + U << "You attempt to get a good grip on the [selection] in [S]'s body." + + if(!do_after(U, 80)) + return + if(!selection || !S || !U) + return + + if(self) + visible_message("[src] rips [selection] out of their body.","You rip [selection] out of your body.") + else + visible_message("[usr] rips [selection] out of [src]'s body.","[src] rips [selection] out of your body.") + + selection.loc = get_turf(src) + + for(var/obj/item/weapon/O in pinned) + if(O == selection) + pinned -= O + if(!pinned.len) + anchored = 0 + return 1 diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index c83909fd8a9..0a41d0d60ce 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -86,6 +86,7 @@ var/unacidable = 0 var/small = 0 var/list/pinned = list() //List of things pinning this creature to walls (see living_defense.dm) + var/list/embedded = list() //Embedded items, since simple mobs don't have organs. var/name_archive //For admin things like possession diff --git a/code/modules/projectiles/guns/projectile/bow.dm b/code/modules/projectiles/guns/projectile/bow.dm index 6a8c3510f8e..ee2e0e20db5 100644 --- a/code/modules/projectiles/guns/projectile/bow.dm +++ b/code/modules/projectiles/guns/projectile/bow.dm @@ -10,14 +10,14 @@ w_class = 3.0 sharp = 1 -/obj/item/weapon/arrow/proc/removed() //Helper for metal rods falling apart.. +/obj/item/weapon/arrow/proc/removed() //Helper for metal rods falling apart. return /obj/item/weapon/arrow/quill name = "vox quill" desc = "A wickedly barbed quill from some bizarre animal." - icon = 'icons/mob/vox.dmi' + icon = 'icons/obj/weapons.dmi' icon_state = "quill" item_state = "quill" throwforce = 15 diff --git a/icons/mob/vox.dmi b/icons/mob/vox.dmi index 6f0172bba7013eb7333b0debc4a8f8a1fe9a9e9b..6abba5c9e0346d2624f49a6cee4a21cf3491b16f 100644 GIT binary patch literal 2676 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 R(HH;#002ovPDHLkV1lP6u3Z2C From b7c260d6ea1a8e70a719f9b01f1434749c8b63d1 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 16 Jun 2013 00:45:03 -0700 Subject: [PATCH 23/26] Removed some debug strings. --- code/modules/mob/living/living_defense.dm | 2 -- code/modules/mob/mob.dm | 2 -- 2 files changed, 4 deletions(-) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 14137f0e844..17e912e2b0e 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -77,10 +77,8 @@ if(!O.fingerprintslast) return - visible_message("Debug: checking client for [O.fingerprintslast]") var/client/assailant = directory[ckey(O.fingerprintslast)] if(assailant && assailant.mob && istype(assailant.mob,/mob)) - visible_message("Assailant has client: [assailant]") var/mob/M = assailant.mob src.attack_log += text("\[[time_stamp()]\] Has been hit with [O], last touched by [M.name] ([assailant.ckey])") M.attack_log += text("\[[time_stamp()]\] Hit [src.name] ([src.ckey]) with [O]") diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 8a7a63cf550..02ea1aa4e7f 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -596,8 +596,6 @@ var/list/slot_equipment_priority = list( \ M.LAssailant = null else M.LAssailant = usr - if (M.pinned.len) - usr << "They're pinned, gtfo." return if(pulling) From 2f8ef8f455b2482271d7edc2626afc2768238dd6 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 16 Jun 2013 13:14:58 -0700 Subject: [PATCH 24/26] Minor detective scanner resprite/flashing addition. --- code/modules/detectivework/scanner.dm | 16 +++++++++++++++- icons/obj/device.dmi | Bin 17886 -> 18563 bytes 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index 7bafd4a31fc..35371f16f92 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -34,9 +34,11 @@ attack(mob/living/carbon/human/M as mob, mob/user as mob) if (!ishuman(M)) user << "\red [M] is not human and cannot have the fingerprints." + flash_icon("forensic0") return 0 if (( !( istype(M.dna, /datum/dna) ) || M.gloves) ) user << "\blue No fingerprints found on [M]" + flash_icon("forensic0") return 0 else if (src.amount < 1) @@ -71,6 +73,7 @@ return if(istype(A,/obj/item/weapon/f_card)) user << "The scanner displays on the screen: \"ERROR 43: Object on Excluded Object List.\"" + flash_icon("forensic0") return add_fingerprint(user) @@ -81,6 +84,7 @@ if(!isnull(A.blood_DNA)) for(var/blood in A.blood_DNA) user << "\blue Blood type: [A.blood_DNA[blood]]\nDNA: [blood]" + flash_icon("forensic2") return //General @@ -88,10 +92,12 @@ user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.gender == MALE ? "him" : "her"] humming[prob(70) ? " gently." : "."]" ,\ "\blue Unable to locate any fingerprints, materials, fibers, or blood on [A]!",\ "You hear a faint hum of electrical equipment.") + flash_icon("forensic0") return 0 if(add_data(A)) user << "\blue Object already in internal memory. Consolidating data..." + flash_icon("forensic2") return @@ -116,6 +122,7 @@ //FIBERS if(A.suit_fibers) user << "\blue Fibers/Materials Data Stored: Scan with Hi-Res Forensic Scanner to retrieve." + flash_icon("forensic2") //Blood if (A.blood_DNA) @@ -127,11 +134,13 @@ user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.gender == MALE ? "him" : "her"] humming[prob(70) ? " gently." : "."]" ,\ "You finish scanning \the [A].",\ "You hear a faint hum of electrical equipment.") + flash_icon("forensic2") return 0 else user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.gender == MALE ? "him" : "her"] humming[prob(70) ? " gently." : "."]\n[user.gender == MALE ? "He" : "She"] seems to perk up slightly at the readout." ,\ "The results of the scan pique your interest.",\ "You hear a faint hum of electrical equipment, and someone making a thoughtful noise.") + flash_icon("forensic2") return 0 return @@ -170,4 +179,9 @@ sum_list[3] = A.blood_DNA ? A.blood_DNA.Copy() : null sum_list[4] = "\The [A] in \the [get_area(A)]" stored["\ref [A]"] = sum_list - return 0 \ No newline at end of file + return 0 + + proc/flash_icon(var/ficon) + if(ficon) + icon_state = ficon + spawn(5) icon_state = initial(icon_state) \ No newline at end of file diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 1e9f1c1efb44708895ab4df1d6a2d809b4798bf3..003bf5c9f10455108b282a68478ea1e8ad37fafa 100644 GIT binary patch literal 18563 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 From 94c3c7ef49a990cf564dd4c642390fcf0c2fe79c Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 16 Jun 2013 13:17:20 -0700 Subject: [PATCH 25/26] Armalis additions, tweaks. --- code/modules/mob/living/living_defense.dm | 2 +- code/modules/mob/living/simple_animal/vox.dm | 83 +++++++++++++++++- .../projectiles/guns/projectile/bow.dm | 10 +-- icons/obj/clothing/suits.dmi | Bin 69629 -> 70090 bytes 4 files changed, 86 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 17e912e2b0e..4107b30d877 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -86,7 +86,7 @@ // Begin BS12 momentum-transfer code. - if(speed > 20) + if(speed >= 20) var/obj/item/weapon/W = O var/momentum = speed/2 var/dir = get_dir(M,src) diff --git a/code/modules/mob/living/simple_animal/vox.dm b/code/modules/mob/living/simple_animal/vox.dm index 55226823cfa..2ea43707ba8 100644 --- a/code/modules/mob/living/simple_animal/vox.dm +++ b/code/modules/mob/living/simple_animal/vox.dm @@ -8,7 +8,7 @@ icon_living = "armalis" maxHealth = 500 health = 500 - response_harm = "flails ineffectually at the" + response_harm = "slashes at the" harm_intent_damage = 0 melee_damage_lower = 30 melee_damage_upper = 40 @@ -17,6 +17,22 @@ wall_smash = 1 attack_sound = 'sound/weapons/bladeslice.ogg' status_flags = 0 + universal_speak = 1 + vox_talk_understand = 1 + + var/armour = null + var/amp = null + var/quills = 3 + +/mob/living/simple_animal/vox/armalis/Die() + + living_mob_list -= src + dead_mob_list += src + stat = DEAD + visible_message("\red [src] shudders violently and explodes!","\red You feel your body rupture!") + explosion(get_turf(loc), -1, -1, 3, 5) + src.gib() + return /mob/living/simple_animal/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob) if(O.force) @@ -44,6 +60,9 @@ set desc = "Fires a viciously pointed quill at a high speed." set category = "Alien" + if(quills<=0) + return + src << "\red You launch a razor-sharp quill at [target]!" for(var/mob/O in oviewers()) if ((O.client && !( O.blinded ))) @@ -51,7 +70,12 @@ var/obj/item/weapon/arrow/quill/Q = new(loc) Q.fingerprintslast = src.ckey - Q.throw_at(target,10,15) + Q.throw_at(target,10,20) + quills-- + + spawn(100) + src << "\red You feel a fresh quill slide into place." + quills++ /mob/living/simple_animal/vox/armalis/verb/message_mob() set category = "Alien" @@ -81,4 +105,57 @@ if(H.dna.mutantrace == "vox") return H << "\red Your nose begins to bleed..." - H.drip(1) \ No newline at end of file + H.drip(1) + +/mob/living/simple_animal/vox/armalis/verb/shriek() + set category = "Alien" + set name = "Shriek" + set desc = "Give voice to a psychic shriek." + +/mob/living/simple_animal/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(istype(O,/obj/item/vox/armalis_armour)) + user.drop_item() + armour = O + speed = 1 + maxHealth += 200 + health += 200 + O.loc = src + visible_message("\blue [src] is quickly outfitted in [O] by [user].","\blue You quickly outfit [src] in [O].") + regenerate_icons() + return + if(istype(O,/obj/item/vox/armalis_amp)) + user.drop_item() + amp = O + O.loc = src + visible_message("\blue [src] is quickly outfitted in [O] by [user].","\blue You quickly outfit [src] in [O].") + regenerate_icons() + return + return ..() + +/mob/living/simple_animal/vox/armalis/regenerate_icons() + + overlays = list() + if(armour) + var/icon/armour = image('icons/mob/vox.dmi',"armour") + speed = 1 + overlays += armour + if(amp) + var/icon/amp = image('icons/mob/vox.dmi',"amplifier") + overlays += amp + return + +/obj/item/vox/armalis_armour + + name = "strange armour" + desc = "Hulking reinforced armour for something huge." + icon = 'icons/obj/clothing/suits.dmi' + icon_state = "armalis_armour" + item_state = "armalis_armour" + +/obj/item/vox/armalis_amp + + name = "strange lenses" + desc = "A series of metallic lenses and chains." + icon = 'icons/obj/clothing/hats.dmi' + icon_state = "amp" + item_state = "amp" \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/bow.dm b/code/modules/projectiles/guns/projectile/bow.dm index ee2e0e20db5..aa113e86599 100644 --- a/code/modules/projectiles/guns/projectile/bow.dm +++ b/code/modules/projectiles/guns/projectile/bow.dm @@ -6,7 +6,7 @@ icon_state = "bolt" item_state = "bolt" flags = FPRINT | TABLEPASS - throwforce = 12 + throwforce = 8 w_class = 3.0 sharp = 1 @@ -20,7 +20,7 @@ icon = 'icons/obj/weapons.dmi' icon_state = "quill" item_state = "quill" - throwforce = 15 + throwforce = 5 /obj/item/weapon/arrow/rod @@ -29,7 +29,7 @@ icon_state = "metal-rod" /obj/item/weapon/arrow/rod/removed(mob/user) - if(throwforce == 20) // The rod has been superheated - we don't want it to be useable when removed from the bow. + if(throwforce == 15) // The rod has been superheated - we don't want it to be useable when removed from the bow. user << "[src] shatters into a scattering of overstressed metal shards as it leaves the crossbow." var/obj/item/weapon/shard/shrapnel/S = new() S.loc = get_turf(src) @@ -75,7 +75,7 @@ if(cell) if(cell.charge >= 500) user << "[arrow] plinks and crackles as it begins to glow red-hot." - arrow.throwforce = 20 + arrow.throwforce = 15 arrow.icon_state = "metal-rod-superheated" cell.charge -= 500 return @@ -89,7 +89,7 @@ if(arrow) if(istype(arrow,/obj/item/weapon/arrow/rod) && cell.charge >= 500) user << "[arrow] plinks and crackles as it begins to glow red-hot." - arrow.throwforce = 20 + arrow.throwforce = 15 arrow.icon_state = "metal-rod-superheated" cell.charge -= 500 else diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 29487a42863115ede76789c895e852a5005c2575..cf9c6d511d6413ff09857d611494301c87deba8c 100644 GIT binary patch delta 15048 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 delta 14583 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 From 9e369ebf31a4124536e6031f7f876360049ffec3 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sun, 16 Jun 2013 22:30:30 -0700 Subject: [PATCH 26/26] Apparently flick() is a thing, thanks Chinsky. --- code/modules/detectivework/scanner.dm | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index 35371f16f92..448425e454d 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -34,11 +34,11 @@ attack(mob/living/carbon/human/M as mob, mob/user as mob) if (!ishuman(M)) user << "\red [M] is not human and cannot have the fingerprints." - flash_icon("forensic0") + flick("forensic0",src) return 0 if (( !( istype(M.dna, /datum/dna) ) || M.gloves) ) user << "\blue No fingerprints found on [M]" - flash_icon("forensic0") + flick("forensic0",src) return 0 else if (src.amount < 1) @@ -73,7 +73,7 @@ return if(istype(A,/obj/item/weapon/f_card)) user << "The scanner displays on the screen: \"ERROR 43: Object on Excluded Object List.\"" - flash_icon("forensic0") + flick("forensic0",src) return add_fingerprint(user) @@ -84,7 +84,7 @@ if(!isnull(A.blood_DNA)) for(var/blood in A.blood_DNA) user << "\blue Blood type: [A.blood_DNA[blood]]\nDNA: [blood]" - flash_icon("forensic2") + flick("forensic2",src) return //General @@ -92,12 +92,12 @@ user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.gender == MALE ? "him" : "her"] humming[prob(70) ? " gently." : "."]" ,\ "\blue Unable to locate any fingerprints, materials, fibers, or blood on [A]!",\ "You hear a faint hum of electrical equipment.") - flash_icon("forensic0") + flick("forensic0",src) return 0 if(add_data(A)) user << "\blue Object already in internal memory. Consolidating data..." - flash_icon("forensic2") + flick("forensic2",src) return @@ -122,7 +122,7 @@ //FIBERS if(A.suit_fibers) user << "\blue Fibers/Materials Data Stored: Scan with Hi-Res Forensic Scanner to retrieve." - flash_icon("forensic2") + flick("forensic2",src) //Blood if (A.blood_DNA) @@ -134,13 +134,13 @@ user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.gender == MALE ? "him" : "her"] humming[prob(70) ? " gently." : "."]" ,\ "You finish scanning \the [A].",\ "You hear a faint hum of electrical equipment.") - flash_icon("forensic2") + flick("forensic2",src) return 0 else user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.gender == MALE ? "him" : "her"] humming[prob(70) ? " gently." : "."]\n[user.gender == MALE ? "He" : "She"] seems to perk up slightly at the readout." ,\ "The results of the scan pique your interest.",\ "You hear a faint hum of electrical equipment, and someone making a thoughtful noise.") - flash_icon("forensic2") + flick("forensic2",src) return 0 return @@ -179,9 +179,4 @@ sum_list[3] = A.blood_DNA ? A.blood_DNA.Copy() : null sum_list[4] = "\The [A] in \the [get_area(A)]" stored["\ref [A]"] = sum_list - return 0 - - proc/flash_icon(var/ficon) - if(ficon) - icon_state = ficon - spawn(5) icon_state = initial(icon_state) \ No newline at end of file + return 0 \ No newline at end of file