diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm index f1f4306f56c..19ac77d2c77 100644 --- a/code/game/machinery/doors/blast_door.dm +++ b/code/game/machinery/doors/blast_door.dm @@ -23,6 +23,10 @@ var/id = 1.0 dir = 1 explosion_resistance = 25 + + //Most blast doors are infrequently toggled and sometimes used with regular doors anyways, + //turning this off prevents awkward zone geometry in places like medbay lobby, for example. + block_air_zones = 0 // Proc: Bumped() // Parameters: 1 (AM - Atom that tried to walk through this object) @@ -150,6 +154,13 @@ if(stat & BROKEN) stat &= ~BROKEN + +/obj/machinery/door/blast/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) + if(air_group) return 1 + return ..() + + + // SUBTYPE: Regular // Your classical blast door, found almost everywhere. obj/machinery/door/blast/regular diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index f4dfd039c3e..32d2b314dc7 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -31,6 +31,7 @@ var/min_force = 10 //minimum amount of force needed to damage the door with a melee weapon var/hitsound = 'sound/weapons/smash.ogg' //sound door makes when hit with a weapon var/obj/item/stack/sheet/metal/repairing + var/block_air_zones = 1 //If set, air zones cannot merge across the door even when it is opened. //Multi-tile doors dir = EAST @@ -114,7 +115,7 @@ /obj/machinery/door/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group) return 0 + if(air_group) return !block_air_zones if(istype(mover) && mover.checkpass(PASSGLASS)) return !opacity return !density diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 55b392feff6..8799273b930 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -22,6 +22,10 @@ open_layer = DOOR_OPEN_LAYER - 0.01 // Just below doors when open closed_layer = DOOR_CLOSED_LAYER + 0.01 // Just above doors when closed + //These are frequenly used with windows, so make sure zones can pass. + //Generally if a firedoor is at a place where there should be a zone boundery then there will be a regular door underneath it. + block_air_zones = 0 + var/blocked = 0 var/lockdown = 0 // When the door has detected a problem, it locks. var/pdiff_alert = 0 @@ -381,9 +385,9 @@ overlays += "welded_open" return +//These are playing merry hell on ZAS. Sorry fellas :( /obj/machinery/door/firedoor/border_only -//These are playing merry hell on ZAS. Sorry fellas :( /* icon = 'icons/obj/doors/edge_Doorfire.dmi' glass = 1 //There is a glass window so you can see through the door diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 84fa4192657..8661651a396 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -24,7 +24,6 @@ program.process() update_icon() - src.updateDialog() /obj/machinery/embedded_controller/attack_ai(mob/user as mob) src.ui_interact(user) diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index f2bc1c3b881..5de7410fb58 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -118,7 +118,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM reagents.reaction(C) else // else just remove some of the reagents reagents.remove_any(REAGENTS_METABOLISM) - return /obj/item/clothing/mask/smokable/proc/light(var/flavor_text = "[usr] lights the [name].") if(!src.lit) @@ -304,6 +303,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/clothing/mask/smokable/cigarette/cigar/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() + user.update_inv_wear_mask(0) + user.update_inv_l_hand(0) + user.update_inv_r_hand(1) + ///////////////// //SMOKING PIPES// ///////////////// @@ -376,7 +379,24 @@ CIGARETTE PACKETS ARE IN FANCY.DM name = "[G.name]-packed [initial(name)]" del(G) -/obj/item/clothing/mask/smokable/pipe/cobpipe + else if(istype(W, /obj/item/weapon/flame/lighter)) + var/obj/item/weapon/flame/lighter/L = W + if(L.lit) + light("[user] manages to light their [name] with [W].") + + else if(istype(W, /obj/item/weapon/flame/match)) + var/obj/item/weapon/flame/match/M = W + if(M.lit) + light("[user] lights their [name] with their [W].") + + else if(istype(W, /obj/item/device/assembly/igniter)) + light("[user] fiddles with [W], and manages to light their [name] with the power of science.") + + user.update_inv_wear_mask(0) + user.update_inv_l_hand(0) + user.update_inv_r_hand(1) + +/obj/item/clothing/mask/cigarette/pipe/cobpipe name = "corn cob pipe" desc = "A nicotine delivery system popularized by folksy backwoodsmen, kept popular in the modern age and beyond by space hipsters." icon_state = "cobpipeoff" diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 6241bd50518..437daa86bbd 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -71,6 +71,7 @@ name = "purple comb" desc = "A pristine purple comb made from flexible plastic." w_class = 1.0 + icon = 'icons/obj/items.dmi' icon_state = "purplecomb" item_state = "purplecomb" diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 711b0594a1f..653e33b2ddf 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -208,6 +208,7 @@ return 1 //Attemps to remove an object on a mob. Will not move it to another area or such, just removes from the mob. +//It does call u_equip() though. So it can drop items to the floor but only if src is human. /mob/proc/remove_from_mob(var/obj/O) src.u_equip(O) if (src.client) @@ -242,16 +243,7 @@ /** BS12's proc to get the item in the active hand. Couldn't find the /tg/ equivalent. **/ /mob/proc/equipped() - if(issilicon(src)) - if(isrobot(src)) - if(src:module_active) - return src:module_active - else - if (hand) - return l_hand - else - return r_hand - return + return get_active_hand() //TODO: get rid of this proc /mob/living/carbon/human/proc/equip_if_possible(obj/item/W, slot, del_on_fail = 1) // since byond doesn't seem to have pointers, this seems like the best way to do this :/ //warning: icky code diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 8dd2e060670..23f90946bcd 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -116,6 +116,7 @@ if(src.grabbed_by.len || src.buckled || !src.canmove || src==H) accurate = 1 // certain circumstances make it impossible for us to evade punches + rand_damage = 5 // Process evasion and blocking var/miss_type = 0 diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 5493c5d6034..44b212694eb 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -771,13 +771,7 @@ It can still be worn/put on as normal. if(slot_to_process) if(strip_item) //Stripping an item from the mob var/obj/item/W = strip_item - target.u_equip(W) - if (target.client) - target.client.screen -= W - if (W) - W.loc = target.loc - W.layer = initial(W.layer) - W.dropped(target) + target.remove_from_mob(W) W.add_fingerprint(source) if(slot_to_process == slot_l_store) //pockets! Needs to process the other one too. Snowflake code, wooo! It's not like anyone will rewrite this anytime soon. If I'm wrong then... CONGRATULATIONS! ;) if(target.r_store) diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index c98e3788c00..d033e70610d 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm @@ -64,7 +64,7 @@ target.apply_effects(stutter = attack_damage * 2, agony = attack_damage* 3, blocked = armour) if("l_leg", "l_foot", "r_leg", "r_foot") if(!target.lying) - target.visible_message("[src] gives way slightly.") + target.visible_message("[target] gives way slightly.") target.apply_effect(attack_damage*3, AGONY, armour) else if(attack_damage >= 5 && !(target == user) && (stun_chance + attack_damage * 5 >= 100) && armour < 2) // Chance to get the usual throwdown as well (25% standard chance) if(!target.lying) @@ -118,22 +118,28 @@ user.visible_message("[user] slapped [target] across \his cheek!") if(3 to 4) user.visible_message(pick( - 80; "[user] [pick(attack_verb)] [target] in the head!", //striking someone with a 'closed fist' is called punching them. - 20; "[user] struck [target] in the head[pick("", " with a closed fist")]!" + 40; "[user] [pick(attack_verb)] [target] in the head!", + 30; "[user] struck [target] in the head[pick("", " with a closed fist")]!", + 30; "[user] threw a hook against [target]'s head!" )) if(5) user.visible_message(pick( - 10; "[user] gave [target] a resounding slap to the face!", - 90; "[user] smashed \his [pick(attack_noun)] into [target]'s [organ]!" + 30; "[user] gave [target] a resounding [pick("slap", "punch")] to the face!", + 40; "[user] smashed \his [pick(attack_noun)] into [target]'s face!", + 30; "[user] gave a strong blow against [target]'s jaw!" )) else // ----- BODY ----- // switch(attack_damage) - if(1 to 2) user.visible_message("[user] slapped [target]'s [organ]!") - if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!") - if(5) user.visible_message("[user] smashed \his [pick(attack_noun)] into [target]'s [organ]!") + if(1 to 2) user.visible_message("[user] threw a glancing punch at [target]'s [organ]!") + if(1 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!") + if(5) + user.visible_message(pick( + 50; "[user] smashed \his [pick(attack_noun)] into [target]'s [organ]!", + 50; "[user] landed a striking [pick(attack_noun)] on [target]'s [organ]!" + )) else - user.visible_message("[user] [pick("punched", "threw a punch", "struck", "slapped", "slammed their [pick(attack_noun)] into")] [target]'s [organ]!") //why do we have a separate set of verbs for lying targets? + user.visible_message("[user] [pick("punched", "threw a punch against", "struck", "slammed their [pick(attack_noun)] into")] [target]'s [organ]!") //why do we have a separate set of verbs for lying targets? /datum/unarmed_attack/kick attack_verb = list("kicked", "kicked", "kicked", "kneed") @@ -177,7 +183,7 @@ /datum/unarmed_attack/stomp attack_verb = null - attack_noun = list("kick") + attack_noun = list("stomp") attack_sound = "swing_hit" damage = 0 @@ -189,7 +195,7 @@ if(!istype(target)) return 0 - if (!user.lying && (target.lying || zone in list("l_foot", "r_foot"))) + if (!user.lying && (target.lying || (zone in list("l_foot", "r_foot")))) if(target.grabbed_by == user && target.lying) return 0 var/datum/organ/external/E = user.organs_by_name["l_foot"] @@ -214,6 +220,5 @@ attack_damage = Clamp(attack_damage, 1, 5) switch(attack_damage) - if(1 to 2) user.visible_message("[user] [pick("stepped on", "treaded on")] [target]'s [organ]!") //stepped on conveys the same meaning and is more recognizable as an actual word than "clomped" - if(3 to 4) user.visible_message("[pick("[user] stomped on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down onto")] [target]'s [organ]!") + if(1 to 4) user.visible_message("[pick("[user] stomped on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down onto")] [target]'s [organ]!") if(5) user.visible_message("[pick("[user] landed a powerful stomp on", "[user] stomped down hard on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down hard onto")] [target]'s [organ]!") //Devastated lol. No. We want to say that the stomp was powerful or forceful, not that it /wrought devastation/ \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 6b2367724bf..bad642e048c 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -547,16 +547,9 @@ proc/get_damage_icon_part(damage_state, body_part) overlays_standing[UNIFORM_LAYER] = null // This really, really seems like it should not be mixed in the middle of display code... // Automatically drop anything in store / id / belt if you're not wearing a uniform. //CHECK IF NECESARRY - for( var/obj/item/thing in list(r_store, l_store, wear_id, belt) ) // - if(thing) // - u_equip(thing) // - if (client) // - client.screen -= thing // - // - if (thing) // - thing.loc = loc // - thing.dropped(src) // - thing.layer = initial(thing.layer) + for( var/obj/item/thing in list(r_store, l_store, wear_id, belt) ) + if(thing) + remove_from_mob(thing) if(update_icons) update_icons() /mob/living/carbon/human/update_inv_wear_id(var/update_icons=1) diff --git a/code/modules/mob/living/living_powers.dm b/code/modules/mob/living/living_powers.dm index da94c1abdef..b4310d77b5e 100644 --- a/code/modules/mob/living/living_powers.dm +++ b/code/modules/mob/living/living_powers.dm @@ -16,8 +16,8 @@ if(stat == DEAD || paralysis || weakened || stunned || restrained()) return - if (layer != TURF_LAYER+0.2) - layer = TURF_LAYER+0.2 + if (layer != 2.45) + layer = 2.45 //Just above cables with their 2.44 src << text("\blue You are now hiding.") else layer = MOB_LAYER diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 342f61d9462..5c1631aee98 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -183,7 +183,7 @@ var/list/slot_equipment_priority = list( \ if(!istype(W)) return 0 for(var/slot in slot_equipment_priority) - if(equip_to_slot_if_possible(W, slot, 0, 1, 1)) //del_on_fail = 0; disable_warning = 0; redraw_mob = 1 + if(equip_to_slot_if_possible(W, slot, del_on_fail=0, disable_warning=1, redraw_mob=1)) return 1 return 0 diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 25e12ebfbf9..707bceaf2cb 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -596,14 +596,11 @@ Note that amputating the affected organ does in fact remove the infection from t update_damages() var/obj/organ //Dropped limb object + var/list/dropped_items switch(body_part) if(HEAD) - organ= new /obj/item/weapon/organ/head(owner.loc, owner) - owner.u_equip(owner.glasses) - owner.u_equip(owner.head) - owner.u_equip(owner.l_ear) - owner.u_equip(owner.r_ear) - owner.u_equip(owner.wear_mask) + organ = new /obj/item/weapon/organ/head(owner.loc, owner) + dropped_items = list(owner.glasses, owner.head, owner.l_ear, owner.r_ear, owner.wear_mask) if(ARM_RIGHT) if(status & ORGAN_ROBOT) organ = new /obj/item/robot_parts/r_arm(owner.loc) @@ -627,19 +624,22 @@ Note that amputating the affected organ does in fact remove the infection from t if(HAND_RIGHT) if(!(status & ORGAN_ROBOT)) organ= new /obj/item/weapon/organ/r_hand(owner.loc, owner) - owner.u_equip(owner.gloves) + dropped_items = list(owner.gloves) //should probably make it so that you can still wear gloves if you have one hand if(HAND_LEFT) if(!(status & ORGAN_ROBOT)) organ= new /obj/item/weapon/organ/l_hand(owner.loc, owner) - owner.u_equip(owner.gloves) + dropped_items = list(owner.gloves) if(FOOT_RIGHT) if(!(status & ORGAN_ROBOT)) organ= new /obj/item/weapon/organ/r_foot/(owner.loc, owner) - owner.u_equip(owner.shoes) + dropped_items = list(owner.shoes) if(FOOT_LEFT) if(!(status & ORGAN_ROBOT)) organ = new /obj/item/weapon/organ/l_foot(owner.loc, owner) - owner.u_equip(owner.shoes) + dropped_items = list(owner.shoes) + if(dropped_items) + for(var/obj/O in dropped_items) + owner.remove_from_mob(O) destspawn = 1 //Robotic limbs explode if sabotaged. diff --git a/html/changelog.html b/html/changelog.html index cb0920c052e..53ce87b2260 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -91,12 +91,16 @@ should be listed in the changelog upon commit though. Thanks. -->

RavingManiac updated: