From 39554806309283e54ffd6d07dbb9fdd16031b64b Mon Sep 17 00:00:00 2001 From: Chinsky Date: Fri, 4 Jan 2013 06:20:48 +0400 Subject: [PATCH 01/15] Added ability to unload shells and clips from projectile weapons. --- code/modules/projectiles/guns/projectile.dm | 31 ++++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index c7141e741d8..cabad829839 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -1,3 +1,7 @@ +#define SPEEDLOADER 0 +#define FROM_BOX 1 +#define MAGAZINE 2 + /obj/item/weapon/gun/projectile desc = "A classic revolver. Uses 357 ammo" name = "revolver" @@ -10,7 +14,7 @@ var/ammo_type = "/obj/item/ammo_casing/a357" var/list/loaded = list() var/max_shells = 7 - var/load_method = 0 //0 = Single shells or quick loader, 1 = box, 2 = magazine + var/load_method = SPEEDLOADER //0 = Single shells or quick loader, 1 = box, 2 = magazine var/obj/item/ammo_magazine/empty_mag = null @@ -45,7 +49,7 @@ var/num_loaded = 0 if(istype(A, /obj/item/ammo_magazine)) - if((load_method == 2) && loaded.len) return + if((load_method == MAGAZINE) && loaded.len) return var/obj/item/ammo_magazine/AM = A for(var/obj/item/ammo_casing/AC in AM.stored_ammo) if(loaded.len >= max_shells) @@ -55,11 +59,11 @@ AM.stored_ammo -= AC loaded += AC num_loaded++ - if(load_method == 2) + if(load_method == MAGAZINE) user.remove_from_mob(AM) empty_mag = AM empty_mag.loc = src - if(istype(A, /obj/item/ammo_casing) && !load_method) + if(istype(A, /obj/item/ammo_casing) && load_method == SPEEDLOADER) var/obj/item/ammo_casing/AC = A if(AC.caliber == caliber && loaded.len < max_shells) user.drop_item() @@ -72,6 +76,25 @@ update_icon() return +/obj/item/weapon/gun/projectile/attack_self(mob/user as mob) + if (loaded.len) + if (load_method == SPEEDLOADER) + var/obj/item/ammo_casing/AC = loaded[1] + loaded -= AC + AC.loc = get_turf(src) //Eject casing onto ground. + user << "\blue You unload shell from \the [src]!" + if (load_method == MAGAZINE) + var/obj/item/ammo_magazine/AM = empty_mag + for (var/obj/item/ammo_casing/AC in loaded) + AM.stored_ammo += AC + loaded -= AC + AM.loc = get_turf(src) + empty_mag = null + user << "\blue You unload magazine from \the [src]!" + else + user << "\red Nothing loaded in \the [src]!" + + /obj/item/weapon/gun/projectile/examine() ..() From 764fa03a17a66bd10cfc6e975440f2d08ad9a1fc Mon Sep 17 00:00:00 2001 From: Chinsky Date: Sat, 16 Feb 2013 18:58:43 +0400 Subject: [PATCH 02/15] Fix for negative miss chance modificators working. --- code/modules/mob/mob_helpers.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 18b317cb4fb..ab563934ad6 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -171,7 +171,7 @@ proc/hasorgans(A) // you can only miss if your target is standing and not restrained if(!target.buckled && !target.lying) - var/miss_chance = max(10 + miss_chance_mod, 0) + var/miss_chance = 10 switch(zone) if("head") miss_chance = 40 @@ -191,6 +191,7 @@ proc/hasorgans(A) miss_chance = 50 if("r_foot") miss_chance = 50 + miss_chance = max(miss_chance + miss_chance_mod, 0) if(prob(miss_chance)) if(prob(70)) return null From 106018ca3be726fea729a7a49e2c26a786d51ed1 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Sat, 16 Feb 2013 19:00:49 +0400 Subject: [PATCH 03/15] Fix for firing distance calculation. 'original' var is not a starting point of projectile, but an atom it was fired at initially. 'starting' is turf where projectile was fired from. --- code/modules/projectiles/projectile.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index cbeb12baaef..5bdecb79e34 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -74,7 +74,7 @@ loc = A.loc return 0// nope.avi - var/distance = get_dist(original,loc) + var/distance = get_dist(starting,loc) //Lower accurancy/longer range tradeoff. Distance matters a lot here, so at // close distance, actually RAISE the chance to hit. def_zone = get_zone_with_miss_chance(def_zone, M, -30 + 8*distance) From 9c43050ba7b03801595ddf3c27ab920967c18762 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Sat, 16 Feb 2013 19:01:48 +0400 Subject: [PATCH 04/15] Change to check_zone proc. It makes possible to target hands/feet/groin. Not sure what side effects would this change have. --- code/modules/mob/mob_helpers.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index ab563934ad6..29b2bfeac3c 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -134,7 +134,7 @@ proc/hasorgans(A) zone = "head" if("mouth") zone = "head" - if("l_hand") +/* if("l_hand") zone = "l_arm" if("r_hand") zone = "r_arm" @@ -144,6 +144,7 @@ proc/hasorgans(A) zone = "r_leg" if("groin") zone = "chest" +*/ return zone From 226a96b38fbd8796174454deafc7c2de4df9ae48 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Sat, 16 Feb 2013 21:02:38 +0400 Subject: [PATCH 05/15] If bullet misses someone it does not disappear, but continues on its way. --- code/modules/projectiles/projectile.dm | 28 +++++++++++--------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 5bdecb79e34..ffb1bd13d7d 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -79,27 +79,23 @@ // close distance, actually RAISE the chance to hit. def_zone = get_zone_with_miss_chance(def_zone, M, -30 + 8*distance) - if(silenced) - if(def_zone) - M << "\red You've been shot in the [parse_zone(def_zone)] by the [src.name]!" + if(!def_zone) + visible_message("\blue \The [src] misses [M] narrowly!") + forcedodge = 1 else - if(!def_zone) - visible_message("\The [src] misses [M] narrowly.") - del(src) - return if(silenced) M << "\red You've been shot in the [parse_zone(def_zone)] by the [src.name]!" else visible_message("\red [A.name] is hit by the [src.name] in the [parse_zone(def_zone)]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter - if(istype(firer, /mob)) - M.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [M]/[M.ckey] with a [src.type]" - firer.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [M]/[M.ckey] with a [src.type]" - log_attack("[firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src.type]") - msg_admin_attack("ATTACK: [firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src]") //BS12 EDIT ALG - else - M.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [M]/[M.ckey] with a [src]" - log_attack("UNKNOWN shot [M] ([M.ckey]) with a [src.type]") - msg_admin_attack("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a [src]") //BS12 EDIT ALG + if(istype(firer, /mob)) + M.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [M]/[M.ckey] with a [src.type]" + firer.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [M]/[M.ckey] with a [src.type]" + log_attack("[firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src.type]") + msg_admin_attack("ATTACK: [firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src]") //BS12 EDIT ALG + else + M.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [M]/[M.ckey] with a [src]" + log_attack("UNKNOWN shot [M] ([M.ckey]) with a [src.type]") + msg_admin_attack("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a [src]") //BS12 EDIT ALG spawn(0) if(A) From 3202ac4ccfe2bcbf13b62033e6d10499fd244705 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Wed, 20 Feb 2013 00:38:43 +0400 Subject: [PATCH 06/15] Fixes runtime with burn wounds not having enough stages. --- code/datums/organs/organ_external.dm | 1 + code/datums/organs/wound.dm | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/code/datums/organs/organ_external.dm b/code/datums/organs/organ_external.dm index e45a6a15014..70f41d37cb6 100644 --- a/code/datums/organs/organ_external.dm +++ b/code/datums/organs/organ_external.dm @@ -208,6 +208,7 @@ if(BURN) size_names = typesof(/datum/wound/burn/) - /datum/wound/burn/ + size = min(size,size_names.len) var/wound_type = size_names[size] W = new wound_type(damage) diff --git a/code/datums/organs/wound.dm b/code/datums/organs/wound.dm index 4e4c5d73a9d..b90ddfca81a 100644 --- a/code/datums/organs/wound.dm +++ b/code/datums/organs/wound.dm @@ -172,24 +172,25 @@ datum/wound/cut/massive /datum/wound/bruise/monumental // implement sub-paths by starting at a later stage -/datum/wound/bruise/huge - current_stage = 1 -/datum/wound/bruise/large - current_stage = 2 - -/datum/wound/bruise/moderate - current_stage = 3 +/datum/wound/bruise/tiny + current_stage = 5 needs_treatment = 0 /datum/wound/bruise/small current_stage = 4 needs_treatment = 0 -/datum/wound/bruise/tiny - current_stage = 5 +/datum/wound/bruise/moderate + current_stage = 3 needs_treatment = 0 +/datum/wound/bruise/large + current_stage = 2 + +/datum/wound/bruise/huge + current_stage = 1 + /** BURNS **/ /datum/wound/burn/moderate stages = list("ripped burn" = 10, "moderate burn" = 5, "moderate salved burn" = 2, "fresh skin" = 0) From 65d79e6ec12a9e1e87b6752d40529224f91a562d Mon Sep 17 00:00:00 2001 From: Chinsky Date: Wed, 20 Feb 2013 08:58:09 +0400 Subject: [PATCH 07/15] Fixed runtime in traitor equip. --- code/game/gamemodes/traitor/traitor.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 895c579b1f7..020fb720922 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -294,6 +294,6 @@ // Tell them about people they might want to contact. var/mob/living/carbon/human/M = get_nt_opposed() - if(M != traitor_mob) + if(M && M != traitor_mob) traitor_mob << "We have received credible reports that [M.real_name] might be willing to help our cause. If you need assistance, consider contacting them." traitor_mob.mind.store_memory("Potential Collaborator: [M.real_name]") \ No newline at end of file From eb03e35296de7a3c5f8e779b55303c00b31f5fbb Mon Sep 17 00:00:00 2001 From: Chinsky Date: Wed, 20 Feb 2013 09:15:27 +0400 Subject: [PATCH 08/15] Fixes issue #2384 Uplink now spawns proper implanters. Fixed missing icon for compressed matter implant. --- code/game/gamemodes/game_mode.dm | 4 ++-- .../items/weapons/implants/implanter.dm | 8 ++++---- .../items/weapons/storage/uplink_kits.dm | 19 ++++++++---------- icons/obj/items.dmi | Bin 57847 -> 58089 bytes 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index f948f769061..94b9c03811f 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -64,8 +64,8 @@ Whitespace:Seperator; Implants; /obj/item/weapon/storage/box/syndie_kit/imp_freedom:3:Freedom Implant; /obj/item/weapon/storage/box/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals); -/obj/item/weapon/implant/explosive:6:Explosive Implant (DANGER!); -/obj/item/weapon/implant/compressed:4:Compressed Matter Implant;Whitespace:Seperator; +/obj/item/weapon/storage/box/syndie_kit/imp_explosive:6:Explosive Implant (DANGER!); +/obj/item/weapon/storage/box/syndie_kit/imp_compress:4:Compressed Matter Implant;Whitespace:Seperator; (Pointless) Badassery; /obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"} diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index ae21beff2d4..785997a3db8 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -83,7 +83,7 @@ /obj/item/weapon/implanter/compressed name = "implanter (C)" - icon_state = "cimplanter0" + icon_state = "cimplanter1" /obj/item/weapon/implanter/compressed/New() imp = new /obj/item/weapon/implant/compressed( src ) @@ -95,11 +95,11 @@ if (imp) var/obj/item/weapon/implant/compressed/c = imp if(!c.scanned) - icon_state = "cimplanter0" - else icon_state = "cimplanter1" + else + icon_state = "cimplanter2" else - icon_state = "cimplanter2" + icon_state = "cimplanter0" return /obj/item/weapon/implanter/compressed/attack(mob/M as mob, mob/user as mob) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 3653d1322e9..646fc4d244c 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -83,24 +83,21 @@ O.update() return -/*/obj/item/weapon/storage/box/syndie_kit/imp_compress - name = "Compressed Matter Implant (with injector)" +/obj/item/weapon/storage/box/syndie_kit/imp_compress + name = "box (C)" -/obj/item/weapon/storage/syndie_kit/imp_compress/New() +/obj/item/weapon/storage/box/syndie_kit/imp_compress/New() new /obj/item/weapon/implanter/compressed(src) ..() return -/obj/item/weapon/storage/syndie_kit/imp_explosive - name = "Explosive Implant (with injector)" +/obj/item/weapon/storage/box/syndie_kit/imp_explosive + name = "box (E)" -/obj/item/weapon/storage/syndie_kit/imp_explosive/New() - var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src) - O.imp = new /obj/item/weapon/implant/explosive(O) - O.name = "(BIO-HAZARD) BIO-detpack" - O.update() +/obj/item/weapon/storage/box/syndie_kit/imp_explosive/New() + new /obj/item/weapon/implanter/explosive(src) ..() - return*/ + return /obj/item/weapon/storage/box/syndie_kit/imp_uplink name = "Uplink Implant (with injector)" diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index b0a67761b709ad5d9b8ee6bf673a278fbc1c1790..a8f3633eccd1516cb1215e6022b4bc5f72f0152a 100644 GIT binary patch delta 19469 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 m`gucdz=nt delta 19263 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 B=ZOFS From 41f09299c909d8bc2c07acc0c7795ea3c6bc5b07 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Wed, 20 Feb 2013 09:17:41 +0400 Subject: [PATCH 09/15] Compressed implant item now will be put in hands instead of the floor. --- code/game/objects/items/weapons/implants/implant.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index deddad910b2..d5875a9b9c5 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -440,7 +440,7 @@ the implant may become unstable and either pre-maturely inject the subject or si activate() var/turf/t = get_turf(src) - src.scanned.loc = t + put_in_hands(t) del src implanted(mob/source as mob) From fa1d81fbae6b20915d1fce1c23704bce8ea34c52 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Wed, 20 Feb 2013 10:38:36 +0400 Subject: [PATCH 10/15] Fixed derp. Compile errors because I am retarded. --- code/game/objects/items/weapons/implants/implant.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index d5875a9b9c5..c123ebde2bb 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -440,7 +440,10 @@ the implant may become unstable and either pre-maturely inject the subject or si activate() var/turf/t = get_turf(src) - put_in_hands(t) + if (imp_in) + imp_in.put_in_hands(scanned) + else + scanned.loc = t del src implanted(mob/source as mob) From a23fd751e52bef6ab555768349f87964246738cb Mon Sep 17 00:00:00 2001 From: Chinsky Date: Wed, 20 Feb 2013 11:12:01 +0400 Subject: [PATCH 11/15] Fixes PACMAN infinite loop on map again. --- maps/tgstation.2.1.0.0.1.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps/tgstation.2.1.0.0.1.dmm b/maps/tgstation.2.1.0.0.1.dmm index dbe1139788e..952f0c05287 100644 --- a/maps/tgstation.2.1.0.0.1.dmm +++ b/maps/tgstation.2.1.0.0.1.dmm @@ -4921,7 +4921,7 @@ "bQG" = (/obj/structure/rack{dir = 1},/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bQH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2; name = "hazard door south"},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) "bQI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2; name = "hazard door south"},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/toxins/xenobiology) -"bQJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/obj/machinery/light{dir = 1},/obj/machinery/power/port_gen/pacman,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{icon_state = "yellow"},/area/engine/engineering) +"bQJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/obj/machinery/light{dir = 1},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor{icon_state = "yellow"},/area/engine/engineering) "bQK" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/asmaint2) "bQL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bQM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) From 4a6f719f352d84f9e638b386df94558206a38633 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Wed, 20 Feb 2013 15:57:50 +0400 Subject: [PATCH 12/15] Added crowbar as alternative to retractor. --- code/modules/surgery/generic.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index 132fdbf67ff..39593d05ee1 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -85,7 +85,7 @@ /datum/surgery_step/generic/retract_skin required_tool = /obj/item/weapon/retractor - allowed_tools = list(/obj/item/weapon/kitchen/utensil/fork) + allowed_tools = list(/obj/item/weapon/crowbar,/obj/item/weapon/kitchen/utensil/fork) min_duration = 30 max_duration = 40 From b649ab5a4489cd3358ed9079025b03f30b099c56 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Wed, 20 Feb 2013 17:33:48 +0400 Subject: [PATCH 13/15] Fixes projectiles still applying effects even if they missed. --- code/modules/projectiles/projectile.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index ffb1bd13d7d..97825c60da9 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -81,7 +81,7 @@ if(!def_zone) visible_message("\blue \The [src] misses [M] narrowly!") - forcedodge = 1 + forcedodge = -1 else if(silenced) M << "\red You've been shot in the [parse_zone(def_zone)] by the [src.name]!" @@ -99,8 +99,9 @@ spawn(0) if(A) - var/permutation = A.bullet_act(src, def_zone) // searches for return value - if(permutation == -1 || forcedodge) // the bullet passes through a dense object! + if (!forcedodge) + forcedodge = A.bullet_act(src, def_zone) // searches for return value + if(forcedodge == -1) // the bullet passes through a dense object! bumped = 0 // reset bumped variable! if(istype(A, /turf)) loc = A @@ -114,7 +115,6 @@ O.bullet_act(src) for(var/mob/M in A) M.bullet_act(src, def_zone) - density = 0 invisibility = 101 del(src) From 4e35fccdb709a52969543f031e188fac8c364f09 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Wed, 20 Feb 2013 19:30:13 +0400 Subject: [PATCH 14/15] Fixed issue with laser beams freezing forever in case they missed the mob. --- code/modules/projectiles/projectile/beams.dm | 70 +++++++++++--------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index fbd08538b86..f513c83da33 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -20,50 +20,56 @@ var/list/beam_master = list() process() var/reference = "\ref[src]" //So we do not have to recalculate it a ton var/first = 1 //So we don't make the overlay in the same tile as the firer + spawn while(src) //Move until we hit something - spawn(0) - while(!bumped) //Move until we hit something - step_towards(src, current) //Move~ + if((!( current ) || loc == current)) //If we pass our target + current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z) + if((x == 1 || x == world.maxx || y == 1 || y == world.maxy)) + del(src) //Delete if it passes the world edge + return + step_towards(src, current) //Move~ - for(var/mob/living/M in loc) - Bump(M) //Bump anyone we touch + if(kill_count < 1) + del(src) + kill_count-- - if((!( current ) || loc == current)) //If we pass our target - current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z) + if(!bumped && !isturf(original)) + if(loc == get_turf(original)) + if(!(original in permutated)) + Bump(original) - if((x == 1 || x == world.maxx || y == 1 || y == world.maxy)) - del(src) //Delete if it passes the world edge - return + if(!first) //Add the overlay as we pass over tiles + var/target_dir = get_dir(src, current) //So we don't call this too much - if(!first) //Add the overlay as we pass over tiles - var/target_dir = get_dir(src, current) //So we don't call this too much + //If the icon has not been added yet + if( !("[icon_state][target_dir]" in beam_master) ) + var/image/I = image(icon,icon_state,10,target_dir) //Generate it. + beam_master["[icon_state][target_dir]"] = I //And cache it! - //If the icon has not been added yet - if( !("[icon_state][target_dir]" in beam_master) ) - var/image/I = image(icon,icon_state,10,target_dir) //Generate it. - beam_master["[icon_state][target_dir]"] = I //And cache it! + //Finally add the overlay + src.loc.overlays += beam_master["[icon_state][target_dir]"] - //Finally add the overlay - src.loc.overlays += beam_master["[icon_state][target_dir]"] - - //Add the turf to a list in the beam master so they can be cleaned up easily. - if(reference in beam_master) - var/list/turf_master = beam_master[reference] - if("[icon_state][target_dir]" in turf_master) - var/list/turfs = turf_master["[icon_state][target_dir]"] - turfs += loc - else - turf_master["[icon_state][target_dir]"] = list(loc) + //Add the turf to a list in the beam master so they can be cleaned up easily. + if(reference in beam_master) + var/list/turf_master = beam_master[reference] + if("[icon_state][target_dir]" in turf_master) + var/list/turfs = turf_master["[icon_state][target_dir]"] + turfs += loc else - var/list/turfs = list() - turfs["[icon_state][target_dir]"] = list(loc) - beam_master[reference] = turfs + turf_master["[icon_state][target_dir]"] = list(loc) else - first = 0 - + var/list/turfs = list() + turfs["[icon_state][target_dir]"] = list(loc) + beam_master[reference] = turfs + else + first = 0 cleanup(reference) return + Del() + cleanup("\ref[src]") + ..() + proc/cleanup(reference) //Waits .3 seconds then removes the overlay. src = null sleep(3) From 6015df71784efecb1c1b3fb51463204f359540d5 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Wed, 20 Feb 2013 20:00:01 +0400 Subject: [PATCH 15/15] Tweaks to side effects. Removed itch one. Caused lots of whining, since it's quite counterintuitive to take drugs to treat itch instead of scratching it or removing bandage. Made side effects contracting probability-based, probability higher the stronger chemical is. --- code/WorkInProgress/Cib/MedicalSideEffects.dm | 4 ++-- code/game/objects/items/stacks/medical.dm | 2 +- html/changelog.html | 10 ++++++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/code/WorkInProgress/Cib/MedicalSideEffects.dm b/code/WorkInProgress/Cib/MedicalSideEffects.dm index ea828276837..a61d9cf4f50 100644 --- a/code/WorkInProgress/Cib/MedicalSideEffects.dm +++ b/code/WorkInProgress/Cib/MedicalSideEffects.dm @@ -24,11 +24,11 @@ side_effects += M /mob/living/carbon/human/proc/handle_medical_side_effects() - if(src.reagents.has_reagent("bicaridine") || src.reagents.has_reagent("tricordrazine") || src.reagents.has_reagent("cryoxadone")) + if(src.reagents.has_reagent("bicaridine") && prob(40) || src.reagents.has_reagent("tricordrazine") && prob(10) || src.reagents.has_reagent("cryoxadone") && prob(20)) src.add_side_effect("Headache") - if(src.reagents.has_reagent("kelotane") || src.reagents.has_reagent("dermaline")) + if(src.reagents.has_reagent("kelotane") && prob(20) || src.reagents.has_reagent("dermaline") && prob(40)) src.add_side_effect("Bad Stomach") // One full cycle(in terms of strength) every 10 minutes diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 3c66e61d80a..d79a76507a5 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -48,7 +48,7 @@ if (W.current_stage <= W.max_bleeding_stage) user.visible_message( "\blue [user] bandages [W.desc] on [M]'s [affecting.display_name].", \ "\blue You bandage [W.desc] on [M]'s [affecting.display_name]." ) - H.add_side_effect("Itch") + //H.add_side_effect("Itch") else if (istype(W,/datum/wound/bruise)) user.visible_message( "\blue [user] places bruise patch over [W.desc] on [M]'s [affecting.display_name].", \ "\blue You place bruise patch over [W.desc] on [M]'s [affecting.display_name]." ) diff --git a/html/changelog.html b/html/changelog.html index 0578670796c..7a6ebff0b4c 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -59,10 +59,16 @@ should be listed in the changelog upon commit though. Thanks. -->
-

18.02.13

+

20/02/2013

Chinsky updated:

    -
  • Added new surgery: putting items inside people. After you use retractor to keep incision open, just click with any item to put it inside. But be wary, if you try to fit something too big, you might rip the veins. To remove items, use implant removal surgery.
  • +
  • Added new surgery: putting items inside people. After you use retractor to keep incision open, just click with any item to put it inside. But be wary, if you try to fit something too big, you might rip the veins. To remove items, use implant removal surgery.
  • +
  • Crowbar can be used as alternative to retractor.
  • +
  • Can now unload guns by clicking them in hand.
  • +
  • Fixed distance calculation in bullet missing chance computation, it was always assuming 1 or 0 tiles. Now distace REALLY matters when you shoot.
  • +
  • To add more FUN to previous thing, bullets missed to not disappear but keep going until they hit something else.
  • +
  • Compressed Matter and Explosive implants spawn properly now.
  • +
  • Tweaks to medical effects: removed itch caused by bandages. Chemical effects now have non-100 chance of appearing, the stronger medicine, the more probality it'll have side effects.