From 9a6391747ddda0003cbcc6650580493a568ee507 Mon Sep 17 00:00:00 2001 From: Kearel Date: Thu, 2 Jul 2015 13:55:27 -0500 Subject: [PATCH 01/16] fix trays Puts pikcup proc before loc is changed. --- code/game/objects/items.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 00693ec0a9..82c878603a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -140,7 +140,7 @@ if(temp && !temp.is_usable()) user << "You try to move your [temp.display_name], but cannot!" return - + src.pickup(user) if (istype(src.loc, /obj/item/weapon/storage)) var/obj/item/weapon/storage/S = src.loc S.remove_from_storage(src) @@ -157,8 +157,6 @@ return user.next_move = max(user.next_move+2,world.time + 2) user.put_in_active_hand(src) - if(src.loc == user) - src.pickup(user) return From fb60cfde4ce10f4006048be649ccccda9c9797e3 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Fri, 3 Jul 2015 16:25:37 +0200 Subject: [PATCH 02/16] Rejuvenation now clears chemicals in mobs. Fixes #9921. --- code/modules/mob/living/carbon/carbon.dm | 6 ++++++ code/modules/mob/living/carbon/human/life.dm | 4 ++++ code/modules/mob/living/living.dm | 10 +++------- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index f59fa5bf56..ab97fb12c0 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -23,6 +23,12 @@ qdel(food) return ..() +/mob/living/carbon/rejuvenate() + bloodstr.clear_reagents() + ingested.clear_reagents() + touching.clear_reagents() + ..() + /mob/living/carbon/Move(NewLoc, direct) . = ..() if(.) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index d603232f40..605ecbed39 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1753,5 +1753,9 @@ if (thermal_protection < 1 && bodytemperature < burn_temperature) bodytemperature += round(BODYTEMP_HEATING_MAX*(1-thermal_protection), 1) +/mob/living/carbon/human/rejuvenate() + restore_blood() + ..() + #undef HUMAN_MAX_OXYLOSS #undef HUMAN_CRIT_MAX_OXYLOSS diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 80902ddaa9..d3e1749876 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -399,6 +399,7 @@ default behaviour is: fire_stacks = 0 /mob/living/proc/rejuvenate() + reagents.clear_reagents() // shut down various types of badness setToxLoss(0) @@ -424,16 +425,11 @@ default behaviour is: ear_damage = 0 heal_overall_damage(getBruteLoss(), getFireLoss()) - // restore all of a human's blood - if(ishuman(src)) - var/mob/living/carbon/human/human_mob = src - human_mob.restore_blood() - // fix all of our organs restore_all_organs() // remove the character from the list of the dead - if(stat == 2) + if(stat == DEAD) dead_mob_list -= src living_mob_list += src tod = null @@ -609,7 +605,7 @@ default behaviour is: /mob/living/proc/escape_inventory(obj/item/weapon/holder/H) if(H != src.loc) return - + var/mob/M = H.loc //Get our mob holder (if any). if(istype(M)) From b8e0015be17fe772d87aa57430b1934fadd53029 Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Sat, 4 Jul 2015 14:47:10 +0100 Subject: [PATCH 03/16] Changes cyborg HUD to not display a superfluous empty row Title. Modules with precisely 8, 16, 24 etc items were showing an extra row, this changes it from floor(X/8)+1 to just ceil(X/8). --- code/_onclick/hud/robot.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 2738cf3a7d..624e7006ee 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -210,7 +210,7 @@ var/obj/screen/robot_inventory if(!r.robot_modules_background) return - var/display_rows = round((r.module.modules.len) / 8) +1 //+1 because round() returns floor of number + var/display_rows = -round(-(r.module.modules.len) / 8) r.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7" r.client.screen += r.robot_modules_background From ef538f2a8c5afc3bb3a585095dd4c7613c71f593 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 4 Jul 2015 10:46:38 -0400 Subject: [PATCH 04/16] Adjusts bullet penetration chance for default machines and structures --- code/modules/projectiles/projectile/bullets.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 06e0a02c1f..f2c10fd8a9 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -53,7 +53,7 @@ else if(istype(A, /obj/structure/girder)) chance = 100 else if(istype(A, /obj/machinery) || istype(A, /obj/structure)) - chance = 25 + chance = damage if(prob(chance)) if(A.opacity) From 8d1e669588bd916587d8de6bcc0f10af66096eb3 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 4 Jul 2015 10:47:56 -0400 Subject: [PATCH 05/16] Shooting while on help intent no longer auto switches to hostage mode --- code/modules/projectiles/gun.dm | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index bf60f4664d..0cc7b38fe6 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -126,12 +126,7 @@ //decide whether to aim or shoot normally var/aiming = 0 if(user && user.client && !(A in aim_targets)) - var/client/C = user.client - //If help intent is on and we have clicked on an eligible target, switch to aim mode automatically - if(user.a_intent == I_HELP && isliving(A) && !C.gun_mode) - C.ToggleGunMode() - - if(C.gun_mode) + if(user.client.gun_mode) aiming = PreFire(A,user,params) //They're using the new gun system, locate what they're aiming at. if (!aiming) From cf5e4a17d6b7a1d983e25e7bf15f069e57c8b07f Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 4 Jul 2015 12:56:26 -0400 Subject: [PATCH 06/16] Adds raider gun type, fixes sawn shotgun inhands Also adds type def to allow spawning sawn shotguns. --- .../projectiles/guns/projectile/pistol.dm | 34 ++++++++++++++++++ .../projectiles/guns/projectile/shotgun.dm | 15 ++++++-- icons/mob/items/lefthand_guns.dmi | Bin 27745 -> 27853 bytes icons/mob/items/righthand_guns.dmi | Bin 29865 -> 29978 bytes 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index d054f4eff8..8a06c4434f 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -164,3 +164,37 @@ icon = 'icons/obj/gun.dmi' icon_state = "silencer" w_class = 2 + +/obj/item/weapon/gun/projectile/pirate + name = "zip gun" + desc = "Little more than a barrel, handle, and firing mechanism, makeshift firearms like this are not uncommon in the frontier systems." + icon_state = "sawnshotgun" + item_state = "sawnshotgun" + handle_casings = CYCLE_CASINGS //player has to take the old casing out manually before reloading + load_method = SINGLE_CASING + max_shells = 1 //literally just a barrel + + var/global/list/ammo_types = list( + /obj/item/ammo_casing/a357 = ".357", + /obj/item/ammo_casing/c9mmf = "9mm", + /obj/item/ammo_casing/c45f = ".45", + /obj/item/ammo_casing/a12mm = "12mm", + /obj/item/ammo_casing/shotgun = "12 gauge", + /obj/item/ammo_casing/shotgun = "12 gauge", + /obj/item/ammo_casing/shotgun/pellet = "12 gauge", + /obj/item/ammo_casing/shotgun/pellet = "12 gauge", + /obj/item/ammo_casing/shotgun/pellet = "12 gauge", + /obj/item/ammo_casing/shotgun/beanbag = "12 gauge", + /obj/item/ammo_casing/shotgun/stunshell = "12 gauge", + /obj/item/ammo_casing/shotgun/flash = "12 gauge", + /obj/item/ammo_casing/a762 = "7.62mm", + /obj/item/ammo_casing/a556 = "5.56mm", + ) + +/obj/item/weapon/gun/projectile/pirate/New() + ammo_type = pick(ammo_types) + desc += " Uses [ammo_types[ammo_type]] rounds." + + var/obj/item/ammo_casing/ammo = ammo_type + caliber = initial(ammo.caliber) + ..() diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 1b3bb21451..47835a7567 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -47,7 +47,6 @@ max_shells = 7 //match the ammo box capacity, also it can hold a round in the chamber anyways, for a total of 8. ammo_type = /obj/item/ammo_casing/shotgun - /obj/item/weapon/gun/projectile/shotgun/doublebarrel name = "double-barreled shotgun" desc = "A true classic." @@ -95,12 +94,22 @@ return if(do_after(user, 30)) //SHIT IS STEALTHY EYYYYY icon_state = "sawnshotgun" + item_state = "sawnshotgun" w_class = 3 - item_state = "gun" + force = 5 slot_flags &= ~SLOT_BACK //you can't sling it on your back slot_flags |= (SLOT_BELT|SLOT_HOLSTER) //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) - or in a holster, why not. name = "sawn-off shotgun" desc = "Omar's coming!" user << "You shorten the barrel of \the [src]!" else - ..() \ No newline at end of file + ..() + +/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn + name = "sawn-off shotgun" + desc = "Omar's coming!" + icon_state = "sawnshotgun" + item_state = "sawnshotgun" + slot_flags = SLOT_BELT|SLOT_HOLSTER + w_class = 3 + force = 5 diff --git a/icons/mob/items/lefthand_guns.dmi b/icons/mob/items/lefthand_guns.dmi index 5e3c059267aa9c0b270b6154d9868f60ae485384..d13b8318111d3c1902019dff847232fc888b19c8 100644 GIT binary patch delta 7333 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 Nt)UP5s&4i2zW`Y#o1Opw diff --git a/icons/mob/items/righthand_guns.dmi b/icons/mob/items/righthand_guns.dmi index e742ca6833781c2e4d281843a77ae4e9871a429a..62958f66f27b77a735bb1444ecd6c7f380281575 100644 GIT binary patch delta 10094 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 delta 10004 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 From fad0a712d81552e1317f894cebfebb9527a2d2a8 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 4 Jul 2015 13:13:13 -0400 Subject: [PATCH 07/16] Expands raider gear list --- code/game/antagonist/outsider/raider.dm | 23 ++++++++++++++++--- .../projectiles/guns/projectile/shotgun.dm | 1 + 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm index e17632dccb..2f61c3db9b 100644 --- a/code/game/antagonist/outsider/raider.dm +++ b/code/game/antagonist/outsider/raider.dm @@ -19,7 +19,9 @@ var/datum/antagonist/raider/raiders /obj/item/clothing/under/pirate, /obj/item/clothing/under/redcoat, /obj/item/clothing/under/serviceoveralls, - /obj/item/clothing/under/captain_fly + /obj/item/clothing/under/captain_fly, + /obj/item/clothing/under/det, + /obj/item/clothing/under/brown, ) var/list/raider_shoes = list( @@ -50,7 +52,9 @@ var/datum/antagonist/raider/raiders /obj/item/clothing/suit/storage/leather_jacket, /obj/item/clothing/suit/storage/toggle/brown_jacket, /obj/item/clothing/suit/storage/toggle/hoodie, - /obj/item/clothing/suit/storage/toggle/hoodie/black + /obj/item/clothing/suit/storage/toggle/hoodie/black, + /obj/item/clothing/suit/unathi/mantle, + /obj/item/clothing/suit/poncho, ) var/list/raider_guns = list( @@ -60,14 +64,27 @@ var/datum/antagonist/raider/raiders /obj/item/weapon/gun/energy/mindflayer, /obj/item/weapon/gun/energy/toxgun, /obj/item/weapon/gun/energy/stunrevolver, + /obj/item/weapon/gun/energy/ionrifle, + /obj/item/weapon/gun/energy/taser, /obj/item/weapon/gun/energy/crossbow/largecrossbow, + /obj/item/weapon/gun/launcher/crossbow, + /obj/item/weapon/gun/launcher/grenade, + /obj/item/weapon/gun/launcher/pneumatic, /obj/item/weapon/gun/projectile/automatic/mini_uzi, /obj/item/weapon/gun/projectile/automatic/c20r, + /obj/item/weapon/gun/projectile/automatic/wt550, + /obj/item/weapon/gun/projectile/automatic/sts35, /obj/item/weapon/gun/projectile/silenced, /obj/item/weapon/gun/projectile/shotgun/pump, /obj/item/weapon/gun/projectile/shotgun/pump/combat, + /obj/item/weapon/gun/projectile/shotgun/doublebarrel, + /obj/item/weapon/gun/projectile/shotgun/doublebarrel/pellet, + /obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn, /obj/item/weapon/gun/projectile/colt, - /obj/item/weapon/gun/projectile/pistol + /obj/item/weapon/gun/projectile/sec, + /obj/item/weapon/gun/projectile/pistol, + /obj/item/weapon/gun/projectile/revolver, + /obj/item/weapon/gun/projectile/pirate ) /datum/antagonist/raider/New() diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 47835a7567..504ce461b3 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -111,5 +111,6 @@ icon_state = "sawnshotgun" item_state = "sawnshotgun" slot_flags = SLOT_BELT|SLOT_HOLSTER + ammo_type = /obj/item/ammo_casing/shotgun/pellet w_class = 3 force = 5 From c1bbc5c3a624f9e65e1b30d85732a700ad391572 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 4 Jul 2015 13:48:44 -0400 Subject: [PATCH 08/16] Fixes issues with raider equipping Fixes raiders not being able to ever spawn with guns that cannot be equipped to the belt, despite those gun types being in the raider_guns list. Fixes raiders spawning with guns for which they have no ammo. Fixes taj/unathi raiders having a 2/3 chance of spawning without any shoes. --- code/game/antagonist/outsider/raider.dm | 82 +++++++++++++++++++++-- code/modules/customitems/item_spawning.dm | 12 +--- code/modules/mob/inventory.dm | 15 +++++ 3 files changed, 95 insertions(+), 14 deletions(-) diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm index 2f61c3db9b..b6adfb82f1 100644 --- a/code/game/antagonist/outsider/raider.dm +++ b/code/game/antagonist/outsider/raider.dm @@ -26,7 +26,8 @@ var/datum/antagonist/raider/raiders var/list/raider_shoes = list( /obj/item/clothing/shoes/jackboots, - /obj/item/clothing/shoes/sandal, + /obj/item/clothing/shoes/workboots, + /obj/item/clothing/shoes/brown, /obj/item/clothing/shoes/laceup ) @@ -42,7 +43,6 @@ var/datum/antagonist/raider/raiders /obj/item/clothing/head/pirate, /obj/item/clothing/head/bandana, /obj/item/clothing/head/hgpiratecap, - /obj/item/clothing/head/flatcap ) var/list/raider_suits = list( @@ -86,6 +86,12 @@ var/datum/antagonist/raider/raiders /obj/item/weapon/gun/projectile/revolver, /obj/item/weapon/gun/projectile/pirate ) + + var/list/raider_holster = list( + /obj/item/clothing/accessory/holster/armpit, + /obj/item/clothing/accessory/holster/waist, + /obj/item/clothing/accessory/holster/hip + ) /datum/antagonist/raider/New() ..() @@ -195,14 +201,18 @@ var/datum/antagonist/raider/raiders var/new_glasses = pick(raider_glasses) var/new_helmet = pick(raider_helmets) var/new_suit = pick(raider_suits) - var/new_gun = pick(raider_guns) player.equip_to_slot_or_del(new new_shoes(player),slot_shoes) + if(!player.shoes) + //If equipping shoes failed, fall back to equipping sandals + var/fallback_type = pick(/obj/item/clothing/shoes/sandal, /obj/item/clothing/shoes/jackboots/unathi) + player.equip_to_slot_or_del(new fallback_type(player), slot_shoes) + player.equip_to_slot_or_del(new new_uniform(player),slot_w_uniform) player.equip_to_slot_or_del(new new_glasses(player),slot_glasses) player.equip_to_slot_or_del(new new_helmet(player),slot_head) player.equip_to_slot_or_del(new new_suit(player),slot_wear_suit) - player.equip_to_slot_or_del(new new_gun(player),slot_belt) + equip_weapons(player) var/obj/item/weapon/card/id/id = create_id("Visitor", player) id.name = "[player.real_name]'s Passport" @@ -215,6 +225,70 @@ var/datum/antagonist/raider/raiders return 1 +/datum/antagonist/raider/proc/equip_weapons(var/mob/living/carbon/human/player) + var/new_gun = pick(raider_guns) + var/new_holster = pick(raider_holster) //raiders don't start with any backpacks, so let's be nice and give them a holster if they can use it. + var/turf/T = get_turf(player) + + var/obj/item/primary = new new_gun(T) + var/obj/item/clothing/accessory/holster/holster = null + + //Give some of the raiders a pirate gun as a secondary + if(prob(60)) + var/obj/item/secondary = new /obj/item/weapon/gun/projectile/pirate(T) + if(!(primary.slot_flags & SLOT_HOLSTER)) + holster = new new_holster(T) + holster.holstered = secondary + secondary.loc = holster + else + player.equip_to_slot_or_del(secondary, slot_belt) + + if(primary.slot_flags & SLOT_HOLSTER) + holster = new new_holster(T) + holster.holstered = primary + primary.loc = holster + else if(!player.belt && (primary.slot_flags & SLOT_BELT)) + player.equip_to_slot_or_del(primary, slot_belt) + else if(!player.back && (primary.slot_flags & SLOT_BACK)) + player.equip_to_slot_or_del(primary, slot_back) + else + player.put_in_any_hand_if_possible(primary) + + //If they got a projectile gun, give them a little bit of spare ammo + equip_ammo(player, primary) + + if(holster) + var/obj/item/clothing/under/uniform = player.w_uniform + if(istype(uniform) && uniform.can_attach_accessory(holster)) + uniform.attackby(holster, player) + else + player.put_in_any_hand_if_possible(holster) + +/datum/antagonist/raider/proc/equip_ammo(var/mob/living/carbon/human/player, var/obj/item/weapon/gun/gun) + if(istype(gun, /obj/item/weapon/gun/projectile)) + var/obj/item/weapon/gun/projectile/bullet_thrower = gun + if(bullet_thrower.magazine_type) + player.equip_to_slot_or_del(new bullet_thrower.magazine_type(player), slot_l_store) + if(prob(20)) //don't want to give them too much + player.equip_to_slot_or_del(new bullet_thrower.magazine_type(player), slot_r_store) + else if(bullet_thrower.ammo_type) + var/obj/item/weapon/storage/box/ammobox = new(get_turf(player.loc)) + for(var/i in 1 to rand(3,5) + rand(0,2)) + new bullet_thrower.ammo_type(ammobox) + player.put_in_any_hand_if_possible(ammobox) + return + if(istype(gun, /obj/item/weapon/gun/launcher/grenade)) + var/list/grenades = list( + /obj/item/weapon/grenade/empgrenade, + /obj/item/weapon/grenade/smokebomb, + /obj/item/weapon/grenade/flashbang + ) + var/obj/item/weapon/storage/box/ammobox = new(get_turf(player.loc)) + for(var/i in 1 to 7) + var/grenade_type = pick(grenades) + new grenade_type(ammobox) + player.put_in_any_hand_if_possible(ammobox) + /datum/antagonist/raider/proc/equip_vox(var/mob/living/carbon/human/player) var/uniform_type = pick(list(/obj/item/clothing/under/vox/vox_robes,/obj/item/clothing/under/vox/vox_casual)) diff --git a/code/modules/customitems/item_spawning.dm b/code/modules/customitems/item_spawning.dm index e81c33626e..b6a8cac9f1 100644 --- a/code/modules/customitems/item_spawning.dm +++ b/code/modules/customitems/item_spawning.dm @@ -174,16 +174,8 @@ if(M.equip_to_appropriate_slot(newitem)) return newitem - if(istype(M.back,/obj/item/weapon/storage)) - var/obj/item/weapon/storage/backpack = M.back - if(backpack.contents.len < backpack.storage_slots) - newitem.loc = M.back - return newitem + if(M.equip_to_storage(newitem)) + return newitem - // Try to place it in any item that can store stuff, on the mob. - for(var/obj/item/weapon/storage/S in M.contents) - if (S.contents.len < S.storage_slots) - newitem.loc = S - return newitem newitem.loc = get_turf(M.loc) return newitem diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index d835ea6446..1115826be8 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -73,6 +73,21 @@ var/list/slot_equipment_priority = list( \ return 0 +/mob/proc/equip_to_storage(obj/item/newitem) + // Try put it in their backpack + if(istype(src.back,/obj/item/weapon/storage)) + var/obj/item/weapon/storage/backpack = src.back + if(backpack.contents.len < backpack.storage_slots) + newitem.loc = src.back + return 1 + + // Try to place it in any item that can store stuff, on the mob. + for(var/obj/item/weapon/storage/S in src.contents) + if (S.contents.len < S.storage_slots) + newitem.loc = S + return 1 + return 0 + //These procs handle putting s tuff in your hand. It's probably best to use these rather than setting l_hand = ...etc //as they handle all relevant stuff like adding it to the player's screen and updating their overlays. From 508827580c33ae5b0089b1432b2e8f227a6c1af8 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 4 Jul 2015 22:37:40 -0400 Subject: [PATCH 09/16] Formatting --- .../projectiles/guns/projectile/pistol.dm | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 8a06c4434f..7e0fdc99a3 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -166,8 +166,8 @@ w_class = 2 /obj/item/weapon/gun/projectile/pirate - name = "zip gun" - desc = "Little more than a barrel, handle, and firing mechanism, makeshift firearms like this are not uncommon in the frontier systems." + name = "zipgun" + desc = "Little more than a barrel, handle, and firing mechanism, cheap makeshift firearms like this one are not uncommon in frontier systems." icon_state = "sawnshotgun" item_state = "sawnshotgun" handle_casings = CYCLE_CASINGS //player has to take the old casing out manually before reloading @@ -175,20 +175,20 @@ max_shells = 1 //literally just a barrel var/global/list/ammo_types = list( - /obj/item/ammo_casing/a357 = ".357", - /obj/item/ammo_casing/c9mmf = "9mm", - /obj/item/ammo_casing/c45f = ".45", - /obj/item/ammo_casing/a12mm = "12mm", - /obj/item/ammo_casing/shotgun = "12 gauge", - /obj/item/ammo_casing/shotgun = "12 gauge", - /obj/item/ammo_casing/shotgun/pellet = "12 gauge", - /obj/item/ammo_casing/shotgun/pellet = "12 gauge", - /obj/item/ammo_casing/shotgun/pellet = "12 gauge", - /obj/item/ammo_casing/shotgun/beanbag = "12 gauge", - /obj/item/ammo_casing/shotgun/stunshell = "12 gauge", - /obj/item/ammo_casing/shotgun/flash = "12 gauge", - /obj/item/ammo_casing/a762 = "7.62mm", - /obj/item/ammo_casing/a556 = "5.56mm", + /obj/item/ammo_casing/a357 = ".357", + /obj/item/ammo_casing/c9mmf = "9mm", + /obj/item/ammo_casing/c45f = ".45", + /obj/item/ammo_casing/a12mm = "12mm", + /obj/item/ammo_casing/shotgun = "12 gauge", + /obj/item/ammo_casing/shotgun = "12 gauge", + /obj/item/ammo_casing/shotgun/pellet = "12 gauge", + /obj/item/ammo_casing/shotgun/pellet = "12 gauge", + /obj/item/ammo_casing/shotgun/pellet = "12 gauge", + /obj/item/ammo_casing/shotgun/beanbag = "12 gauge", + /obj/item/ammo_casing/shotgun/stunshell = "12 gauge", + /obj/item/ammo_casing/shotgun/flash = "12 gauge", + /obj/item/ammo_casing/a762 = "7.62mm", + /obj/item/ammo_casing/a556 = "5.56mm" ) /obj/item/weapon/gun/projectile/pirate/New() From c46f32e8d7a02ccd9ea05525426b3bd9f5ca9f78 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 4 Jul 2015 23:17:20 -0400 Subject: [PATCH 10/16] Airlock controller fixes Fixes airlocks opening their doors before the pumps have turned off. Fixes airlocks getting confused if you mash buttons in quick succession. --- .../embedded_controller/airlock_program.dm | 73 ++++++++----------- 1 file changed, 32 insertions(+), 41 deletions(-) diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm index 8cb3abb998..fabf499dc9 100644 --- a/code/game/machinery/embedded_controller/airlock_program.dm +++ b/code/game/machinery/embedded_controller/airlock_program.dm @@ -109,10 +109,14 @@ var/shutdown_pump = 0 switch(command) if("cycle_ext") - begin_cycle_out() + //only respond to these commands if the airlock isn't already doing something + //prevents the controller from getting confused and doing strange things + if(state == target_state) + begin_cycle_out() if("cycle_int") - begin_cycle_in() + if(state == target_state) + begin_cycle_in() if("cycle_ext_door") cycleDoors(TARGET_OUTOPEN) @@ -122,14 +126,6 @@ if("abort") stop_cycling() - /* - //dont do this. If the airlock can't get enough air to pressurize the person inside is stuck - state = STATE_PRESSURIZE - target_state = TARGET_NONE - memory["target_pressure"] = ONE_ATMOSPHERE - signalPump(tag_airpump, 1, 1, memory["target_pressure"]) - process() - */ if("force_ext") toggleDoor(memory["exterior_status"], tag_exterior_door, memory["secure"], "toggle") @@ -140,11 +136,9 @@ if("purge") memory["purge"] = !memory["purge"] if(memory["purge"]) - toggleDoor(memory["exterior_status"], tag_exterior_door, 1, "close") - toggleDoor(memory["interior_status"], tag_interior_door, 1, "close") - state = STATE_DEPRESSURIZE + close_doors() + state = STATE_PREPARE target_state = TARGET_NONE - signalPump(tag_airpump, 1, 0, 0) if("secure") memory["secure"] = !memory["secure"] @@ -188,12 +182,12 @@ var/target_pressure = memory["target_pressure"] if(memory["purge"]) + //purge apparently means clearing the airlock chamber to vacuum (then refilling, handled later) target_pressure = 0 + state = STATE_DEPRESSURIZE + signalPump(tag_airpump, 1, 0, 0) //send a signal to start depressurizing - if(memory["purge"]) - target_pressure = 0 - - if(chamber_pressure <= target_pressure) + else if(chamber_pressure <= target_pressure) state = STATE_PRESSURIZE signalPump(tag_airpump, 1, 1, target_pressure) //send a signal to start pressurizing @@ -201,40 +195,37 @@ state = STATE_DEPRESSURIZE signalPump(tag_airpump, 1, 0, target_pressure) //send a signal to start depressurizing - //Check for vacuum - this is set after the pumps so the pumps are aiming for 0 - if(!memory["target_pressure"]) - memory["target_pressure"] = ONE_ATMOSPHERE * 0.05 + //Make sure the airlock isn't aiming for pure vacuum - an impossibility + memory["target_pressure"] = max(target_pressure, ONE_ATMOSPHERE * 0.05) if(STATE_PRESSURIZE) if(memory["chamber_sensor_pressure"] >= memory["target_pressure"] * 0.95) - cycleDoors(target_state) - - state = STATE_IDLE - target_state = TARGET_NONE - + //not done until the pump has reported that it's off if(memory["pump_status"] != "off") signalPump(tag_airpump, 0) //send a signal to stop pumping + else + cycleDoors(target_state) + state = STATE_IDLE + target_state = TARGET_NONE if(STATE_DEPRESSURIZE) - if(memory["purge"]) - if(memory["chamber_sensor_pressure"] <= ONE_ATMOSPHERE * 0.05) - state = STATE_PRESSURIZE - signalPump(tag_airpump, 1, 1, memory["target_pressure"]) - - - else if(memory["chamber_sensor_pressure"] <= memory["target_pressure"] * 1.05) - cycleDoors(target_state) - - state = STATE_IDLE - target_state = TARGET_NONE - - //send a signal to stop pumping - if(memory["pump_status"] != "off") + if(memory["chamber_sensor_pressure"] <= memory["target_pressure"] * 1.05) + if(memory["purge"]) + memory["purge"] = 0 + memory["target_pressure"] = memory["internal_sensor_pressure"] + state = STATE_PREPARE + target_state = TARGET_NONE + + else if(memory["pump_status"] != "off") signalPump(tag_airpump, 0) + else + cycleDoors(target_state) + state = STATE_IDLE + target_state = TARGET_NONE - memory["processing"] = state != target_state + memory["processing"] = (state != target_state) return 1 From 6b550f7166c813b027d1814337cee39086218e57 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 5 Jul 2015 01:02:52 -0400 Subject: [PATCH 11/16] Fixes more instances of = instead of += inside loop --- code/ATMOSPHERICS/_atmospherics_helpers.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/ATMOSPHERICS/_atmospherics_helpers.dm b/code/ATMOSPHERICS/_atmospherics_helpers.dm index 47bd739a95..8cf5bcccf9 100644 --- a/code/ATMOSPHERICS/_atmospherics_helpers.dm +++ b/code/ATMOSPHERICS/_atmospherics_helpers.dm @@ -199,7 +199,7 @@ total_unfilterable_moles += source.gas[g] var/ratio = source.gas[g]/source.total_moles //converts the specific power per mole of pure gas to specific power per mole of input gas mix - total_specific_power = specific_power_gas[g]*ratio + total_specific_power += specific_power_gas[g]*ratio //Figure out how much of each gas to filter if (isnull(total_transfer_moles)) @@ -272,7 +272,7 @@ total_unfilterable_moles += source.gas[g] var/ratio = source.gas[g]/source.total_moles //converts the specific power per mole of pure gas to specific power per mole of input gas mix - total_specific_power = specific_power_gas[g]*ratio + total_specific_power += specific_power_gas[g]*ratio //Figure out how much of each gas to filter if (isnull(total_transfer_moles)) From bd59733fdb2216749269bf7ca9dae7872fd63ec0 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 5 Jul 2015 01:18:38 -0400 Subject: [PATCH 12/16] Fixes #9714 Fixes incorrect arguments to calculate_transfer_moles() --- code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm | 4 ++-- code/ATMOSPHERICS/components/unary/vent_pump.dm | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index 086df507b9..1899ee9dfd 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -120,14 +120,14 @@ if(pressure_delta > 0.5) if(pump_direction) //internal -> external if (node1 && (environment.temperature || air1.temperature)) - var/transfer_moles = calculate_transfer_moles(air1, environment) + var/transfer_moles = calculate_transfer_moles(air1, environment, pressure_delta) power_draw = pump_gas(src, air1, environment, transfer_moles, power_rating) if(power_draw >= 0 && network1) network1.update = 1 else //external -> internal if (node2 && (environment.temperature || air2.temperature)) - var/transfer_moles = calculate_transfer_moles(environment, air2, (network2)? network2.volume : 0) + var/transfer_moles = calculate_transfer_moles(environment, air2, pressure_delta, (network2)? network2.volume : 0) //limit flow rate from turfs transfer_moles = min(transfer_moles, environment.total_moles*air2.volume/environment.volume) //group_multiplier gets divided out here diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 4961d22e79..98a6c3baa2 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -169,10 +169,10 @@ if((environment.temperature || air_contents.temperature) && pressure_delta > 0.5) if(pump_direction) //internal -> external - var/transfer_moles = calculate_transfer_moles(air_contents, environment) + var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta) power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) else //external -> internal - var/transfer_moles = calculate_transfer_moles(environment, air_contents, (network)? network.volume : 0) + var/transfer_moles = calculate_transfer_moles(environment, air_contents, pressure_delta, (network)? network.volume : 0) //limit flow rate from turfs transfer_moles = min(transfer_moles, environment.total_moles*air_contents.volume/environment.volume) //group_multiplier gets divided out here From 25a4fb7d9adb5e2900dc1ed757fce9b3e621a1f3 Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Sun, 5 Jul 2015 12:29:46 +0100 Subject: [PATCH 13/16] Adds 'Provisional' to the list of acting rank prefixes --- code/defines/obj.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 65f34ed580..79a84c23be 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -166,7 +166,7 @@ return dat -/var/list/acting_rank_prefixes = list("acting", "temporary", "interim") +/var/list/acting_rank_prefixes = list("acting", "temporary", "interim", "provisional") /proc/make_list_rank(rank) for(var/prefix in acting_rank_prefixes) From 06063d5396b015dfc6b8587691674c1c9edb15dc Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Sun, 5 Jul 2015 12:40:17 +0100 Subject: [PATCH 14/16] Changelog. --- html/changelogs/GinjaNinja32-provisional.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/GinjaNinja32-provisional.yml diff --git a/html/changelogs/GinjaNinja32-provisional.yml b/html/changelogs/GinjaNinja32-provisional.yml new file mode 100644 index 0000000000..06a264e75c --- /dev/null +++ b/html/changelogs/GinjaNinja32-provisional.yml @@ -0,0 +1,5 @@ +author: GinjaNinja32 + +delete-after: True +changes: + - rscadd: "'Provisional' is now also a valid temporary position prefix for manifest sorting." From d32b58790dd79b2632581bcc609798cc10db5a5b Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sun, 5 Jul 2015 17:33:55 +0200 Subject: [PATCH 15/16] A deleted shield generator no longer runtime every tick until force-deleted. --- code/modules/shieldgen/sheldwallgen.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm index 7ca422bed4..708798818a 100644 --- a/code/modules/shieldgen/sheldwallgen.dm +++ b/code/modules/shieldgen/sheldwallgen.dm @@ -80,10 +80,10 @@ return 1 /obj/machinery/shieldwallgen/process() - spawn(100) - power() - if(power) - storedpower -= 2500 //the generator post itself uses some power + power() + if(power) + storedpower -= 2500 //the generator post itself uses some power + if(storedpower >= max_stored_power) storedpower = max_stored_power if(storedpower <= 0) From a775bf1cfce415a89d65ba6a42303a53283cc411 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Mon, 6 Jul 2015 17:32:03 +0200 Subject: [PATCH 16/16] Changelog update. --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 4 ++++ html/changelogs/GinjaNinja32-provisional.yml | 5 ----- 3 files changed, 10 insertions(+), 5 deletions(-) delete mode 100644 html/changelogs/GinjaNinja32-provisional.yml diff --git a/html/changelog.html b/html/changelog.html index 1d4827fbd7..cc75f44d7d 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,12 @@ -->
+

06 July 2015

+

GinjaNinja32 updated:

+
    +
  • 'Provisional' is now also a valid temporary position prefix for manifest sorting.
  • +
+

04 July 2015

PsiOmegaDelta updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 017616fc90..7f03216446 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -1954,3 +1954,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. have increased damage resistance in this state. - bugfix: Crescent portable turrets should no longer act up during attempts to (un)wrench and alter their settings. +2015-07-06: + GinjaNinja32: + - rscadd: '''Provisional'' is now also a valid temporary position prefix for manifest + sorting.' diff --git a/html/changelogs/GinjaNinja32-provisional.yml b/html/changelogs/GinjaNinja32-provisional.yml deleted file mode 100644 index 06a264e75c..0000000000 --- a/html/changelogs/GinjaNinja32-provisional.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: GinjaNinja32 - -delete-after: True -changes: - - rscadd: "'Provisional' is now also a valid temporary position prefix for manifest sorting."