From da2f74a9ffc7ea11b0ff97d1fac9a780c630bf92 Mon Sep 17 00:00:00 2001 From: inselc Date: Sun, 6 Nov 2016 19:34:29 +0100 Subject: [PATCH 01/24] Bugfixes: Fax machines, CentCom turrets, Robo-limb emag. New feature for monkey cubes (#1116) Fixes #1059, #131 Resolves #1020 Fixes #1100 Resolves #663 --- code/modules/cciaa/cciaa.dm | 3 +- .../mob/living/carbon/human/human_defense.dm | 4 +- code/modules/paperwork/faxmachine.dm | 113 ++++++++++++++---- .../reagent_containers/food/snacks.dm | 2 +- html/changelogs/inselc-PR-1116.yml | 10 ++ 5 files changed, 106 insertions(+), 26 deletions(-) create mode 100644 html/changelogs/inselc-PR-1116.yml diff --git a/code/modules/cciaa/cciaa.dm b/code/modules/cciaa/cciaa.dm index 732b2d69131..a0db01f4afd 100644 --- a/code/modules/cciaa/cciaa.dm +++ b/code/modules/cciaa/cciaa.dm @@ -154,9 +154,8 @@ M.implant_loyalty(M, 1) - var/obj/item/weapon/card/id/W = new(M) + var/obj/item/weapon/card/id/centcom/W = new(M) W.name = "[M.real_name]'s ID Card" - W.icon_state = "centcom" W.item_state = "id_inv" W.access = get_all_accesses() + get_centcom_access("CCIA Agent") W.assignment = "Central Command Internal Affairs Agent" diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 02b2b70bc14..4b3f4e840c2 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -224,7 +224,7 @@ emp_act if(istype(I,/obj/item/weapon/card/emag)) if(!(affecting.status & ORGAN_ROBOT)) user << "\red That limb isn't robotic." - return + return 0 if(affecting.sabotaged) user << "\red [src]'s [affecting.name] is already sabotaged!" else @@ -232,7 +232,7 @@ emp_act var/obj/item/weapon/card/emag/emag = I emag.uses-- affecting.sabotaged = 1 - return 1 + return 0 if(I.attack_verb.len) visible_message("\red [src] has been [pick(I.attack_verb)] in the [hit_area] with [I.name] by [user]!") diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index 75f7dcf85fd..80c86329c33 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -1,9 +1,7 @@ var/list/obj/machinery/photocopier/faxmachine/allfaxes = list() -var/list/admin_departments = list("Central Command", "Sol Government") -var/list/alldepartments = list() - var/list/arrived_faxes = list() //cache for faxes that have been sent to the admins var/list/sent_faxes = list() //cache for faxes that have been sent by the admins +var/list/alldepartments = list() /obj/machinery/photocopier/faxmachine name = "fax machine" @@ -16,9 +14,17 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins idle_power_usage = 30 active_power_usage = 200 + var/static/const/adminfax_cooldown = 1800 // in 1/10 seconds + var/static/const/normalfax_cooldown = 300 + var/static/const/broadcastfax_cooldown = 3000 + + var/static/const/broadcast_departments = "Stationwide broadcast (WARNING)" + var/static/list/admin_departments = list("Central Command", "Sol Government") + var/obj/item/weapon/card/id/scan = null // identification var/authenticated = 0 - var/sendcooldown = 0 // to avoid spamming fax messages + var/sendtime = 0 // Time when fax was sent + var/sendcooldown = 0 // Delay, before another fax can be sent (in 1/10 second). Used by set_cooldown() and get_remaining_cooldown() var/department = "Unknown" // our department @@ -60,7 +66,7 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins dat += "Remove Item

" if(sendcooldown) - dat += "Transmitter arrays realigning. Please stand by.
" + dat += "Transmitter arrays realigning. Please stand by. [round(get_remaining_cooldown() / 10)] seconds remaining.
" else @@ -71,7 +77,7 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins else if(sendcooldown) dat += "Please insert paper to send via secure connection.

" - dat += "Transmitter arrays realigning. Please stand by.
" + dat += "Transmitter arrays realigning. Please stand by. [round(get_remaining_cooldown() / 10)] seconds remaining.
" else dat += "Please insert paper to send via secure connection.

" @@ -91,19 +97,30 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins user << browse(dat, "window=copier") onclose(user, "copier") + + if (sendcooldown != 0) + spawn(50) + // Auto-refresh every 5 seconds, if cooldown is active + updateUsrDialog() + return /obj/machinery/photocopier/faxmachine/Topic(href, href_list) if(href_list["send"]) + if (sendcooldown > 0) + // Rate-limit sending faxes + usr << "The fax machine isn't ready, yet!" + updateUsrDialog() + return + if(copyitem) if (destination in admin_departments) send_admin_fax(usr, destination) + else if (destination == broadcast_departments) + send_broadcast_fax() else sendfax(destination) - - if (sendcooldown) - spawn(sendcooldown) // cooldown time - sendcooldown = 0 + updateUsrDialog() else if(href_list["remove"]) if(copyitem) @@ -136,7 +153,7 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins if(href_list["dept"]) var/lastdestination = destination - destination = input(usr, "Which department?", "Choose a department", "") as null|anything in (alldepartments + admin_departments) + destination = input(usr, "Which department?", "Choose a department", "") as null|anything in (alldepartments + admin_departments + broadcast_departments) if(!destination) destination = lastdestination if(href_list["auth"]) @@ -169,9 +186,44 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins updateUsrDialog() -/obj/machinery/photocopier/faxmachine/proc/sendfax(var/destination) +/obj/machinery/photocopier/faxmachine/process() + .=..() + /var/static/ui_update_delay = 0 + + var/current_time = world.time + if (current_time > sendtime + sendcooldown) + sendcooldown = 0 + +/* + * Set the send cooldown + * cooldown: duration in ~1/10s + */ +/obj/machinery/photocopier/faxmachine/proc/set_cooldown(var/cooldown) + // Reset send time + sendtime = world.time + + // Set cooldown length + sendcooldown = cooldown + +/* + * Get remaining cooldown duration in ~1/10s + */ +/obj/machinery/photocopier/faxmachine/proc/get_remaining_cooldown() + var/remaining_time = (sendtime + sendcooldown) - world.time + if ((remaining_time < 0) || (sendcooldown == 0)) + // Time is up, but Process() hasn't caught up, yet + // or no cooldown has been set + remaining_time = 0 + return remaining_time + +/* + * Send normal fax message to on-station fax machine + * destination: (string) from /allfaxes + * display_message: (bool) 1=display info text, 0="silent mode" + */ +/obj/machinery/photocopier/faxmachine/proc/sendfax(var/destination, var/display_message = 1) if(stat & (BROKEN|NOPOWER)) - return + return 0 use_power(200) @@ -180,11 +232,14 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins if( F.department == destination ) success = F.recievefax(copyitem) - if (success) - visible_message("[src] beeps, \"Message transmitted successfully.\"") - //sendcooldown = 600 - else - visible_message("[src] beeps, \"Error transmitting message.\"") + if (display_message) + // Normal fax + if (success) + visible_message("[src] beeps, \"Message transmitted successfully.\"") + sendcooldown = normalfax_cooldown + else + visible_message("[src] beeps, \"Error transmitting message.\"") + return success /obj/machinery/photocopier/faxmachine/proc/recievefax(var/obj/item/incoming) if(stat & (BROKEN|NOPOWER)) @@ -212,6 +267,22 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins return 1 +/obj/machinery/photocopier/faxmachine/proc/send_broadcast_fax() + var success = 1 + for (var/dest in (alldepartments - department)) + // Send to everyone except this department + delay(1) + success &= sendfax(dest, 0) // 0: don't display success/error messages + + if(!success)// Stop on first error + break + if (success) + visible_message("[src] beeps, \"Messages transmitted successfully.\"") + set_cooldown(broadcastfax_cooldown) + else + visible_message("[src] beeps, \"Error transmitting messages.\"") + set_cooldown(normalfax_cooldown) + /obj/machinery/photocopier/faxmachine/proc/send_admin_fax(var/mob/sender, var/destination) if(stat & (BROKEN|NOPOWER)) return @@ -240,9 +311,9 @@ var/list/sent_faxes = list() //cache for faxes that have been sent by the admins message_admins(sender, "SOL GOVERNMENT FAX", rcvdcopy, "CentcommFaxReply", "#1F66A0") //message_admins(sender, "SOL GOVERNMENT FAX", rcvdcopy, "SolGovFaxReply", "#1F66A0") - sendcooldown = 1800 - sleep(50) - visible_message("[src] beeps, \"Message transmitted successfully.\"") + set_cooldown(adminfax_cooldown) + spawn(50) + visible_message("[src] beeps, \"Message transmitted successfully.\"") /obj/machinery/photocopier/faxmachine/proc/message_admins(var/mob/sender, var/faxname, var/obj/item/sent, var/reply_type, font_colour="#006100") diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 1b64a6c79e7..0cb69d3faf6 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -1596,7 +1596,7 @@ afterattack(obj/O as obj, var/mob/living/carbon/human/user as mob, proximity) if(!proximity) return - if(istype(O,/obj/structure/sink) && !wrapped) + if(( istype(O, /obj/structure/reagent_dispensers/watertank) || istype(O,/obj/structure/sink) ) && !wrapped) user << "You place \the [name] under a stream of water..." if(istype(user)) user.unEquip(src) diff --git a/html/changelogs/inselc-PR-1116.yml b/html/changelogs/inselc-PR-1116.yml new file mode 100644 index 00000000000..478105bc984 --- /dev/null +++ b/html/changelogs/inselc-PR-1116.yml @@ -0,0 +1,10 @@ +author: inselc + +delete-after: True + +changes: + - bugfix: "Removed animation on emagging robotic limbs." + - bugfix: "Fixed CCIAA turret whitelist." + - bugfix: "Fixed fax machine cooldown." + - rscadd: "Added ability to expand monkey cubes at water tanks." + - rscadd: "Added stationwide fax broadcast." From dacaf6c33ece593f49ec89b713d1d6c85c388fe6 Mon Sep 17 00:00:00 2001 From: skull132 Date: Sun, 6 Nov 2016 13:50:07 -0500 Subject: [PATCH 02/24] Changelogs - 06NOV2016 2 --- html/changelog.html | 5 +++++ html/changelogs/.all_changelog.yml | 5 +++++ html/changelogs/inselc-PR-1116.yml | 10 ---------- 3 files changed, 10 insertions(+), 10 deletions(-) delete mode 100644 html/changelogs/inselc-PR-1116.yml diff --git a/html/changelog.html b/html/changelog.html index 08666df1daa..1e5b5930b05 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -139,6 +139,11 @@

30 October 2016

diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index d274f9d73ea..5677fab4b30 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -2997,3 +2997,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - tweak: Updated PDA Power Monitor UI. - tweak: Sleeper Console now uses fancy NanoUI. Added printout feature. Added sanity checks. + - bugfix: Removed animation on emagging robotic limbs. + - bugfix: Fixed CCIAA turret whitelist. + - bugfix: Fixed fax machine cooldown. + - rscadd: Added ability to expand monkey cubes at water tanks. + - rscadd: Added stationwide fax broadcast. diff --git a/html/changelogs/inselc-PR-1116.yml b/html/changelogs/inselc-PR-1116.yml deleted file mode 100644 index 478105bc984..00000000000 --- a/html/changelogs/inselc-PR-1116.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: inselc - -delete-after: True - -changes: - - bugfix: "Removed animation on emagging robotic limbs." - - bugfix: "Fixed CCIAA turret whitelist." - - bugfix: "Fixed fax machine cooldown." - - rscadd: "Added ability to expand monkey cubes at water tanks." - - rscadd: "Added stationwide fax broadcast." From 096d75a6e639ec8cfe575ccc4351d1ca7b302a52 Mon Sep 17 00:00:00 2001 From: Alberyk Date: Sun, 6 Nov 2016 20:25:12 -0200 Subject: [PATCH 03/24] Jackboot and supply changes (#1124) remove job restrictions from jackboots until more boots are added add glowsticks and illegal gun crates to cargo, which is locked behind the supply contraband system --- code/datums/supplypacks.dm | 29 +++++++++++++++++++++++++ code/modules/client/preferences_gear.dm | 14 ++++++++---- html/changelogs/alberky-PR-1124.yml | 7 ++++++ 3 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 html/changelogs/alberky-PR-1124.yml diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 1d5f059c6e0..274bdecd639 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1648,3 +1648,32 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "security magnetic locks" access = access_security group = "Security" + +/datum/supply_packs/randomised/glowsticks + name = "Glowsticks crate" + num_contained = 4 + contains = list(/obj/item/device/flashlight/glowstick, + /obj/item/device/flashlight/glowstick/red, + /obj/item/device/flashlight/glowstick/blue, + /obj/item/device/flashlight/glowstick/orange, + /obj/item/device/flashlight/glowstick/yellow) + cost = 25 + containertype = /obj/structure/closet/crate + containername = "glowsticks crate" + group = "Operations" + +/datum/supply_packs/randomised/illegalguns + name = "Illegal weapons crate" + num_contained = 2 + contains = list(/obj/item/weapon/gun/projectile/automatic/mini_uzi, + /obj/item/weapon/gun/projectile/boltaction, + /obj/item/weapon/gun/projectile/silenced, + /obj/item/weapon/gun/projectile/pirate, + /obj/item/weapon/gun/projectile/revolver/derringer, + /obj/item/weapon/gun/projectile/dragunov, + /obj/item/weapon/gun/energy/retro) + cost = 120 + containertype = /obj/structure/closet/crate + containername = "Unlabeled crate" + contraband = 1 + group = "Security" diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index 4a675cbb82d..8618d73b0c2 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -1048,6 +1048,12 @@ var/global/list/gear_datums = list() path = /obj/item/clothing/gloves/white/tajara cost = 2 slot = slot_gloves + +/datum/gear/watch + display_name = "watch" + path = /obj/item/clothing/gloves/watch + cost = 2 + slot = slot_gloves // Shoelocker @@ -1056,21 +1062,21 @@ var/global/list/gear_datums = list() path = /obj/item/clothing/shoes/jackboots cost = 1 slot = slot_shoes - allowed_roles = list("Security Cadet","Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain") +// allowed_roles = list("Security Cadet","Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain") /datum/gear/toeless_jackboots display_name = "toe-less jackboots" path = /obj/item/clothing/shoes/jackboots/unathi cost = 1 slot = slot_shoes - allowed_roles = list("Security Cadet","Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain") +// allowed_roles = list("Security Cadet","Security Officer","Head of Security","Warden","Detective","Internal Affairs Agent","Quartermaster","Head of Personnel","Captain") /datum/gear/workboots display_name = "workboots" path = /obj/item/clothing/shoes/workboots cost = 1 slot = slot_shoes - allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice") +// allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice") /datum/gear/sandal display_name = "sandals" @@ -1448,4 +1454,4 @@ var/global/list/gear_datums = list() display_name = "neck bandanna, black" path = /obj/item/clothing/ears/bandanna/black cost = 1 - sort_category = "ears" \ No newline at end of file + sort_category = "ears" diff --git a/html/changelogs/alberky-PR-1124.yml b/html/changelogs/alberky-PR-1124.yml new file mode 100644 index 00000000000..9206bf2694d --- /dev/null +++ b/html/changelogs/alberky-PR-1124.yml @@ -0,0 +1,7 @@ +author: Alberyk + +delete-after: True + +changes: + - rscadd: "Added a glowstick crate and another contraband crate to cargo." + - tweak: "Removed job restriction from jackboots on the custom loadout." From ae6edf7011a429b7e3fe00261a9b13263b8fe95c Mon Sep 17 00:00:00 2001 From: skull132 Date: Mon, 7 Nov 2016 00:25:28 +0200 Subject: [PATCH 04/24] Fix the wheelchair exploit (#1123) No more superfast wheelchairs. --- code/modules/mob/mob_movement.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index dadd8642d64..5a9d2d8f689 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -278,16 +278,18 @@ if(istype(mob.pulledby, /obj/structure/bed/chair/wheelchair)) return mob.pulledby.relaymove(mob, direct) else if(istype(mob.buckled, /obj/structure/bed/chair/wheelchair)) + var/min_move_delay = 0 if(ishuman(mob.buckled)) var/mob/living/carbon/human/driver = mob.buckled var/obj/item/organ/external/l_hand = driver.get_organ("l_hand") var/obj/item/organ/external/r_hand = driver.get_organ("r_hand") if((!l_hand || l_hand.is_stump()) && (!r_hand || r_hand.is_stump())) return // No hands to drive your chair? Tough luck! + min_move_delay = driver.min_walk_delay //drunk wheelchair driving if(mob.confused && prob(20)) direct = pick(cardinal) - move_delay += 2 + move_delay += max((mob.movement_delay() + config.walk_speed) * config.walk_delay_multiplier, min_move_delay) return mob.buckled.relaymove(mob,direct) var/tally = mob.movement_delay() + config.walk_speed From 3bd843f4fd115f854f16456f23afedbd9619e0ea Mon Sep 17 00:00:00 2001 From: Alberyk Date: Mon, 7 Nov 2016 20:18:07 -0200 Subject: [PATCH 05/24] Coin runtime fix and random maint tweaks (#1137) fixing a random coin runtime tweaking some of the random maint loot --- code/game/objects/random/random.dm | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 024158b0e1b..56688426689 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -508,10 +508,9 @@ /obj/random/coin/item_to_spawn() var/list/coin = list("/obj/item/weapon/coin/iron" = 5, "/obj/item/weapon/coin/silver" = 3, - "/obj/item/weapon/coin/gold" = 1, - "/obj/item/weapon/coin/silver" = 0.7, + "/obj/item/weapon/coin/gold" = 0.7, "/obj/item/weapon/coin/phoron" = 0.5, - "obj/item/weapon/coin/uranium" = 0.5, + "/obj/item/weapon/coin/uranium" = 0.5, "/obj/item/weapon/coin/platinum" = 0.2, "/obj/item/weapon/coin/diamond" = 0.1, ) @@ -579,7 +578,7 @@ "/obj/item/clothing/glasses/material" = 0.8, "/obj/item/clothing/glasses/sunglasses" = 1.5, "/obj/item/clothing/glasses/welding" = 1.2, - "/obj/item/clothing/under/captain_fly" = 0.7, + "/obj/item/clothing/under/captain_fly" = 0.5, "/obj/item/clothing/under/rank/mailman" = 0.6, "/obj/item/clothing/under/rank/vice" = 0.8, "/obj/item/clothing/under/assistantformal" = 1, @@ -589,9 +588,11 @@ "/obj/item/clothing/under/serviceoveralls" = 1, "/obj/item/clothing/under/psyche" = 0.5, "/obj/item/clothing/under/track" = 0.9, - "/obj/item/clothing/under/rank/dispatch" = 1, + "/obj/item/clothing/under/rank/dispatch" = 0.8, "/obj/item/clothing/under/syndicate/tacticool" = 1, "/obj/item/clothing/under/syndicate/tracksuit" = 0.2, + "/obj/item/clothing/under/rank/clown" = 0.1, + "/obj/item/clothing/under/mime" = 0.1, "/obj/item/clothing/accessory/badge" = 0.2, "/obj/item/clothing/accessory/badge/old" = 0.2, "/obj/item/clothing/accessory/storage/webbing" = 0.6, @@ -618,6 +619,8 @@ "/obj/item/clothing/mask/gas/syndicate" = 0.4, "/obj/item/clothing/mask/fakemoustache" = 0.4, "/obj/item/clothing/mask/horsehead" = 0.9, + "/obj/item/clothing/mask/gas/clown_hat" = 0.1, + "/obj/item/clothing/mask/gas/mime" = 0.1, "/obj/item/clothing/shoes/rainbow" = 1, "/obj/item/clothing/shoes/jackboots" = 1, "/obj/item/clothing/shoes/workboots" = 1, @@ -656,6 +659,7 @@ "/obj/item/device/flashlight/maglight" = 0.4, "/obj/item/device/flashlight/flare" = 0.5, "/obj/item/device/flashlight/lantern" = 0.4, + "/obj/item/device/taperecorder" = 0.6, "/obj/item/weapon/reagent_containers/food/drinks/teapot" = 0.4, "/obj/item/weapon/reagent_containers/food/drinks/flask/shiny" = 0.3, "/obj/item/weapon/reagent_containers/food/drinks/flask/lithium" = 0.3, @@ -677,7 +681,10 @@ "/obj/random/colored_jumpsuit" = 0.7, "/obj/random/booze" = 1.1, "/obj/random/belt" = 0.9, + "/obj/random/backpack" = 0.7, "/obj/random/contraband" = 0.9, + "/obj/random/firstaid" = 0.4, + "/obj/random/medical" = 0.4, "/obj/random/glowstick" = 0.7, "/obj/item/weapon/caution/cone" = 0.7, "/obj/item/weapon/staff/broom" = 0.5, @@ -686,6 +693,10 @@ "/obj/item/weapon/storage/box/donkpockets" = 0.6, "/obj/item/weapon/contraband/poster" = 1.3, "/obj/item/device/magnetic_lock/security" = 0.3, - "/obj/item/device/magnetic_lock/engineering" = 0.3 + "/obj/item/device/magnetic_lock/engineering" = 0.3, + "/obj/item/weapon/shovel" = 0.5, + "/obj/item/weapon/pickaxe" = 0.4, + "/obj/item/weapon/pickaxe" = 0.4, + "/obj/item/weapon/inflatable_duck" = 0.2 ) return pickweight(maint) From cd26e68d8afce03b28f29d86e868bd389392c8a0 Mon Sep 17 00:00:00 2001 From: skull132 Date: Tue, 8 Nov 2016 00:18:42 +0200 Subject: [PATCH 06/24] Revert Limb Transform (#1136) Because we actually want to keep it. Even if BYOND is silly with its AA application. --- code/modules/organs/organ_external.dm | 4 ++++ html/changelogs/skull132_transform-revert.yml | 12 ++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 html/changelogs/skull132_transform-revert.yml diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 6f13e73e952..8f459a9997e 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -735,7 +735,11 @@ Note that amputating the affected organ does in fact remove the infection from t switch(disintegrate) if(DROPLIMB_EDGE) + // compile_icon() used to be here, but it's causing issues, so RIP. add_blood(victim) + var/matrix/M = matrix() + M.Turn(rand(180)) + src.transform = M if(!clean) //Throw limb around. if(src && istype(loc,/turf)) diff --git a/html/changelogs/skull132_transform-revert.yml b/html/changelogs/skull132_transform-revert.yml new file mode 100644 index 00000000000..bf23b0c253b --- /dev/null +++ b/html/changelogs/skull132_transform-revert.yml @@ -0,0 +1,12 @@ +author: Skull132 + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "Reverted the changes done to limb removal. They now flip again. Also no longer lose hair while doing so." From 3000944d680a069980fc274dbe1c48ca87f4a010 Mon Sep 17 00:00:00 2001 From: Alberyk Date: Mon, 7 Nov 2016 20:19:27 -0200 Subject: [PATCH 07/24] Custom items 06/11 (#1126) Items being added: Tagging Collar - R.U.R - coalf Fancy Scarf - Simon Greene - icydew Karson's Cap - Eric Karson - dronzthewolf Framed Zatimono - Azkuyua Triaka - jackboot --- code/modules/customitems/item_defines.dm | 48 +++++++++++++++++++++++ icons/obj/custom_items/rur_collar.dmi | Bin 0 -> 388 bytes icons/obj/custom_items/simon_scarf.dmi | Bin 0 -> 588 bytes icons/obj/decals.dmi | Bin 31238 -> 31622 bytes 4 files changed, 48 insertions(+) create mode 100644 icons/obj/custom_items/rur_collar.dmi create mode 100644 icons/obj/custom_items/simon_scarf.dmi diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index faae9240827..3813e2e22a8 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -616,9 +616,57 @@ All custom items with worn sprites must follow the contained sprite system: http item_state = "poslan_jacket" contained_sprite = 1 + /obj/item/sign/fluff/alexis_degree //Xenonuerology Doctorate - Alexis Shaw - Tenenza - DONE name = "xenonuerology degree" desc = "Certification for a doctorate in Xenonuerology, made out to Alexis Shaw by the St. Grahelm University of Biesel, authenticated by watermarking." icon_state = "alexis_degree" sign_state = "alexis_degree" w_class = 2 + + +/obj/item/clothing/mask/fluff/rur_collar //Tagging Collar - R.U.R - coalf - DONE + name = "tagging collar" + desc = "A steel tagging collar, a giant golden D is imprinted on the front." + icon = 'icons/obj/custom_items/rur_collar.dmi' + icon_state = "rur_collar" + item_state = "rur_collar" + contained_sprite = 1 + flags = MASKCOVERSMOUTH + body_parts_covered = 0 + canremove = 0 + species_restricted = list("Machine") + var/emagged = 0 + +/obj/item/clothing/mask/fluff/rur_collar/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/card/emag) && !emagged) + user << "You short out \the [src]'s locking mechanism." + src.icon_state = "rur_collar_broken" + src.canremove = 1 + src.emagged = 1 + playsound(src.loc, 'sound/effects/sparks1.ogg', 100, 0) + return + + return + + +/obj/item/clothing/mask/bluescarf/fluff/simon_scarf //Fancy Scarf - Simon Greene - icydew - DONE + name = "fancy scarf" + desc = "A very smooth, dark blue scarf with a golden trim. It feels really new and clean." + icon = 'icons/obj/custom_items/simon_scarf.dmi' + icon_state = "simon_scarf" + item_state = "simon_scarf" + contained_sprite = 1 + + +/obj/item/clothing/head/soft/sec/corp/fluff/karson_cap //Karson's Cap - Eric Karson - dronzthewolf - DONE + name = "well-worn corporate security cap" + desc = "A well-worn corporate security cap. The name Karson is written on the underside of the brim, it is well-worn at the point where it has shaped to the owner's head." + + +/obj/item/sign/fluff/triaka_atimono //Framed Zatimono - Azkuyua Triaka - jackboot - DONE + name = "framed zatimono" + desc = "A framed Zatimono, a Unathi standard worn into battle similar to an old-Earth Sashimono. This one is slightly faded." + icon_state = "triaka_atimono" + sign_state = "triaka_atimono" + w_class = 2 diff --git a/icons/obj/custom_items/rur_collar.dmi b/icons/obj/custom_items/rur_collar.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1d95eb76d3094e061053157b3b0c59f783a25d60 GIT binary patch literal 388 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 Date: Tue, 8 Nov 2016 03:46:41 -0500 Subject: [PATCH 08/24] Changelogs - 08NOV2016 --- html/changelog.html | 8 ++++++++ html/changelogs/.all_changelog.yml | 6 ++++++ html/changelogs/alberky-PR-1124.yml | 7 ------- html/changelogs/skull132_transform-revert.yml | 12 ------------ 4 files changed, 14 insertions(+), 19 deletions(-) delete mode 100644 html/changelogs/alberky-PR-1124.yml delete mode 100644 html/changelogs/skull132_transform-revert.yml diff --git a/html/changelog.html b/html/changelog.html index 1e5b5930b05..e0180eab2ca 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,12 @@ -->
+

07 November 2016

+

Skull132 updated:

+
    +
  • Reverted the changes done to limb removal. They now flip again. Also no longer lose hair while doing so.
  • +
+

06 November 2016

Alberyk updated:

    @@ -80,6 +86,8 @@
  • Added new poster designs.
  • Added magboots and insulated gauntlets to the chief engineer hardsuit.
  • Selecting the combat module as cyborgs now requires an event to be activated via the keycard authentication device, an upgrade from roboticis or code delta also triggers also allows it.
  • +
  • Added a glowstick crate and another contraband crate to cargo.
  • +
  • Removed job restriction from jackboots on the custom loadout.

Bedshaped updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 5677fab4b30..593b2a565c0 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -2919,6 +2919,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - tweak: Selecting the combat module as cyborgs now requires an event to be activated via the keycard authentication device, an upgrade from roboticis or code delta also triggers also allows it. + - rscadd: Added a glowstick crate and another contraband crate to cargo. + - tweak: Removed job restriction from jackboots on the custom loadout. Bedshaped: - rscadd: Added a button on APCs to set the area lights to a 'night-mode' which is dimmer and saves energy. @@ -3002,3 +3004,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Fixed fax machine cooldown. - rscadd: Added ability to expand monkey cubes at water tanks. - rscadd: Added stationwide fax broadcast. +2016-11-07: + Skull132: + - tweak: Reverted the changes done to limb removal. They now flip again. Also no + longer lose hair while doing so. diff --git a/html/changelogs/alberky-PR-1124.yml b/html/changelogs/alberky-PR-1124.yml deleted file mode 100644 index 9206bf2694d..00000000000 --- a/html/changelogs/alberky-PR-1124.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Alberyk - -delete-after: True - -changes: - - rscadd: "Added a glowstick crate and another contraband crate to cargo." - - tweak: "Removed job restriction from jackboots on the custom loadout." diff --git a/html/changelogs/skull132_transform-revert.yml b/html/changelogs/skull132_transform-revert.yml deleted file mode 100644 index bf23b0c253b..00000000000 --- a/html/changelogs/skull132_transform-revert.yml +++ /dev/null @@ -1,12 +0,0 @@ -author: Skull132 - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - tweak: "Reverted the changes done to limb removal. They now flip again. Also no longer lose hair while doing so." From a2140fc76597312403f9844d9c3c920ebb2ab855 Mon Sep 17 00:00:00 2001 From: NanakoAC Date: Wed, 9 Nov 2016 09:11:40 +0000 Subject: [PATCH 09/24] Cargo Stock Fixes 4 (#1143) Blacklists a lot of iconless things and base classes Fixes a pretty critical infinite loop with cargo spawning that was crashing the server Moves posters out of the signs spawn and into their own, spawns them properly in the item form. Removes disease analyser from scanners Reduces weights on various weapons and traitor items Some other minor tweaks to weights --- code/modules/cargo/randomstock.dm | 115 +++++++++++++++++++++--------- 1 file changed, 81 insertions(+), 34 deletions(-) diff --git a/code/modules/cargo/randomstock.dm b/code/modules/cargo/randomstock.dm index 6a1cb57d114..bbee879374f 100644 --- a/code/modules/cargo/randomstock.dm +++ b/code/modules/cargo/randomstock.dm @@ -32,6 +32,31 @@ more variety, and keeps the odds of any one specific item to be about the same */ + + +//Debugging verbs. Uncomment this block for some useful cargo debug commands +/* +var/global/stockname = "" + +/client/verb/set_stock_name() + stockname = input(usr, "Enter name", "Select stock by name") as text + +/client/verb/spawn_1() + spawn_stock(stockname, get_turf(mob)) + +/client/verb/spawn_10() + var/num = 10 + while (num > 0) + spawn_stock(stockname, get_turf(mob)) + num-- + +/client/verb/spawn_100() + var/num = 100 + while (num > 0) + spawn_stock(stockname, get_turf(mob)) + num-- +*/ + var/list/global/random_stock_common = list( "toolbox" = 4, "meds" = 5, @@ -90,15 +115,16 @@ var/list/global/random_stock_common = list( "cosmetic" = 2.2, "suitcooler" = 1.2, "officechair" = 1.2, - "booze" = 3, + "booze" = 3.5, "plant" = 3.5, "bag" = 2, "extinguish" = 2.2, "hailer" = 1.1, "target" = 2, - "snacks" = 3.5, - "oxytank" = 2.5, + "snacks" = 4, + "oxytank" = 2.5,// "signs" = 4, + "posters" = 3, "parts" = 6, "cane" = 2, "warning" = 2.2, @@ -120,7 +146,7 @@ var/list/global/random_stock_uncommon = list( "flare" = 2, "deathalarm" = 2, "trackimp" = 1, - "flashbang" = 1, + "flashbang" = 0.75, "cuffs" = 1, "monkey" = 2, "specialcrayon" = 1.5, @@ -136,8 +162,8 @@ var/list/global/random_stock_uncommon = list( "bible" = 1, "advwelder" = 2, "sord" = 1, - "policebaton" = 2, - "stunbaton" = 1,//batons spawn with no powercell + "policebaton" = 1.5, + "stunbaton" = 0.75,//batons spawn with no powercell "watches" = 3, "MMI" = 1.5, "voidsuit" = 2, @@ -154,21 +180,21 @@ var/list/global/random_stock_uncommon = list( "linenbin" = 1, "coatrack" = 1, "riotshield" = 2, - "fireaxe" = 1.5, + "fireaxe" = 1, "service" = 2, "robot" = 2, - "latexb" = 1.2, + "latexb" = 0.5, "taperoll" = 1, "headset" = 2, "bat" = 1.2, - "scythe" = 1, + "scythe" = 0.75, "manual" = 2, "jammer" = 2, "rped" = 2, "briefcase" = 2, - "blade" = 1.5, + "blade" = 1.2, "exoquip" = 2, - "laserscalpel" = 1.5, + "laserscalpel" = 1.3, "electropack" = 1, "nothing" = 0) @@ -176,23 +202,23 @@ var/list/global/random_stock_rare = list( "gold" = 2.5, "diamond" = 1.5, "uranium" = 3, - "EMP" = 1, + "EMP" = 0.75, "hypercell" = 3, "combatmeds" = 3, - "batterer" = 1, + "batterer" = 0.75, "posibrain" = 3, "augmentvision" = 1.6, - "thermals" = 2, + "thermals" = 1.5, "bsbeaker" = 3, - "energyshield" = 3, + "energyshield" = 2, "hardsuit" = 0.75, "cluster" = 2.0, - "cloak" = 1, - "sword" = 1, + "cloak" = 0.75, + "sword" = 0.75, "ims" = 1.5, "exogear" = 1.5, "teleporter" = 1, - "voice" = 2, + "voice" = 1.5, "nothing" = 0) var/list/global/random_stock_large = list( @@ -573,8 +599,12 @@ var/list/global/random_stock_large = list( if("circuitboard") //Spawns a random circuitboard //Allboards being a global list might be faster, but it didnt seem worth the extra memory - var/list/allboards = typesof(/obj/item/weapon/circuitboard) - allboards -= typesof(/obj/item/weapon/circuitboard/mecha) + var/list/allboards = subtypesof(/obj/item/weapon/circuitboard) + var/list/exclusion = list(/obj/item/weapon/circuitboard/unary_atmos, \ + /obj/item/weapon/circuitboard/telecomms, ) + exclusion += typesof(/obj/item/weapon/circuitboard/mecha) + + allboards -= exclusion var/type = pick(allboards) new type(L) @@ -630,14 +660,18 @@ var/list/global/random_stock_large = list( new /obj/item/weapon/grenade/chem_grenade/metalfoam(L) if ("gloves") var/list/allgloves = typesof(/obj/item/clothing/gloves) + + var/list/exclusion = list(/obj/item/clothing/gloves, + /obj/item/clothing/gloves/fluff, + /obj/item/clothing/gloves/swat/bst) + exclusion += typesof(/obj/item/clothing/gloves/rig) + exclusion += typesof(/obj/item/clothing/gloves/lightrig) + allgloves -= exclusion var/number = rand(1,5) while (number > 0) var/gtype = pick(allgloves) - var/thing = new gtype(L) - if (!istype(thing, /obj/item/clothing/gloves/rig))//Rig gloves would be buggy - number-- - else - qdel(thing) + new gtype(L) + number-- if ("insulated") new /obj/item/clothing/gloves/yellow(L) new /obj/item/clothing/gloves/yellow(L) @@ -651,7 +685,6 @@ var/list/global/random_stock_large = list( "/obj/item/device/slime_scanner" = 1, "/obj/item/weapon/autopsy_scanner" = 1, "/obj/item/device/robotanalyzer" = 4, - "/obj/machinery/disease2/diseaseanalyser" = 0.5, "/obj/item/weapon/mining_scanner" = 1, "/obj/item/device/ano_scanner" = 1, "/obj/item/device/reagent_scanner" = 2, @@ -757,7 +790,7 @@ var/list/global/random_stock_large = list( new /obj/structure/reagent_dispensers/beerkeg(T) else var/list/drinks = typesof(/obj/item/weapon/reagent_containers/food/drinks/bottle) - + drinks -= /obj/item/weapon/reagent_containers/food/drinks/bottle var/number = rand(1,3) while (number > 0) var/type = pick(drinks) @@ -885,8 +918,6 @@ var/list/global/random_stock_large = list( new /obj/item/weapon/cane/concealed(L) else if (prob(20)) new /obj/item/weapon/staff/broom(L) - else if (prob(30)) - new /obj/item/weapon/staff/stick(L) else new /obj/item/weapon/cane(L) @@ -906,7 +937,6 @@ var/list/global/random_stock_large = list( "/obj/item/clothing/mask/gas/mime" = 0.5, "/obj/item/clothing/mask/gas/monkeymask" = 0.5, "/obj/item/clothing/mask/gas/sexymime" = 0.5, - "/obj/item/clothing/mask/gas/death_commando" = 2, "/obj/item/clothing/mask/gas/cyborg" = 1, "/obj/item/clothing/mask/gas/owl_mask" = 1 ) @@ -934,6 +964,8 @@ var/list/global/random_stock_large = list( new /obj/item/device/flashlight/lantern(L) if (prob(50)) new /obj/item/weapon/mining_scanner(L) + if (prob(25)) + new /obj/item/weapon/storage/box/excavation(L) if ("paicard") new /obj/item/device/paicard(L) @@ -1096,8 +1128,13 @@ var/list/global/random_stock_large = list( //Spawns several random circuitboards if("circuitboards") - var/list/allboards = typesof(/obj/item/weapon/circuitboard) - allboards -= typesof(/obj/item/weapon/circuitboard/mecha) + var/list/allboards = subtypesof(/obj/item/weapon/circuitboard) + var/list/exclusion = list(/obj/item/weapon/circuitboard/unary_atmos, \ + /obj/item/weapon/circuitboard/telecomms, ) + exclusion += typesof(/obj/item/weapon/circuitboard/mecha) + + allboards -= exclusion + var/number = rand(2,5) while (number > 0) var/type = pick(allboards) @@ -1139,8 +1176,10 @@ var/list/global/random_stock_large = list( new /obj/random/voidsuit(L,1) if ("signs") - var/list/allsigns = typesof(/obj/structure/sign) + var/list/allsigns = subtypesof(/obj/structure/sign) allsigns -= typesof(/obj/structure/sign/double) + allsigns -= typesof(/obj/structure/sign/poster) + allsigns -= /obj/structure/sign/directions var/number = rand(1,5) while (number > 0) @@ -1149,6 +1188,12 @@ var/list/global/random_stock_large = list( var/obj/structure/sign/S = new newsign(L) S.unfasten() number-- + if ("posters") + new /obj/item/weapon/contraband/poster(L) + if (prob(50)) + new /obj/item/weapon/contraband/poster(L) + if (prob(50)) + new /obj/item/weapon/contraband/poster(L) if ("violin") new /obj/item/device/violin(L) @@ -1215,9 +1260,10 @@ var/list/global/random_stock_large = list( L = U break var/mob/living/bot/newbot = new type(L) - newbot.on = 0//Deactivated + if (prob(10)) newbot.Emag(null) + newbot.turn_off() if ("latexb") new /obj/item/latexballon(L) @@ -1509,6 +1555,7 @@ var/list/global/random_stock_large = list( while (number > 0) var/type = pickweight(equips) new type(L) + number-- if ("teleporter") new /obj/item/weapon/hand_tele(L) From 5494770b2025930a1db1ccfafbdfe1bf31514677 Mon Sep 17 00:00:00 2001 From: NanakoAC Date: Wed, 9 Nov 2016 09:28:51 +0000 Subject: [PATCH 10/24] Sprinting and Movedelay fixes (#1139) I've implemented compensation for this issue. Whenever world.time overshoots the movedelay, the remainder is subtracted from the next movedelay. This keeps movement speed consistent and actually smooths things out a bit. It doesn't completely solve the problem, but it keeps travel times accurate to within 1 decisecond and prevents it from growing and compounding over long distances. --- code/modules/mob/living/carbon/human/life.dm | 7 +++- .../living/carbon/human/species/species.dm | 4 +- .../carbon/human/species/station/station.dm | 29 +++++++------- code/modules/mob/living/living_powers.dm | 2 +- code/modules/mob/mob_movement.dm | 16 +++++++- html/changelogs/Nanako_Sprintfixes.yml | 39 +++++++++++++++++++ 6 files changed, 77 insertions(+), 20 deletions(-) create mode 100644 html/changelogs/Nanako_Sprintfixes.yml diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 958bbd9b3c7..598f01bb376 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1729,13 +1729,18 @@ if (failed_last_breath || oxyloss > exhaust_threshold)//Can't catch our breath if we're suffocating return + if (nutrition <= 0) + if (prob(1.5)) + src << span("warning", "You feel hungry and exhausted, eat something to regain your energy!") + return + if (stamina != max_stamina) //Any suffocation damage slows stamina regen. //This includes oxyloss from low blood levels var/regen = stamina_recovery * (1 - min(((oxyloss*2) / exhaust_threshold), 1)) if (regen > 0) stamina = min(max_stamina, stamina+regen) - nutrition -= stamina_recovery*0.4 + nutrition = max(0, nutrition - stamina_recovery*0.32) hud_used.move_intent.update_move_icon(src) /mob/living/carbon/human/proc/update_health_display() diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 2be2efe2857..cf18b9e9f4b 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -114,8 +114,8 @@ var/stamina = 100 // The maximum stamina this species has. Determines how long it can sprint var/stamina_recovery = 3 // Flat amount of stamina species recovers per proc - var/sprint_speed_factor = 0.65 // The percentage of bonus speed you get when sprinting. 0.4 = 40% - var/sprint_cost_factor = 1.0 // Multiplier on stamina cost for sprinting + var/sprint_speed_factor = 0.7 // The percentage of bonus speed you get when sprinting. 0.4 = 40% + var/sprint_cost_factor = 0.9 // Multiplier on stamina cost for sprinting var/exhaust_threshold = 50 // When stamina runs out, the mob takes oxyloss up til this value. Then collapses and drops to walk // Determines the organs that the species spawns with and diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index 24890b5c24a..5c5f2b375dd 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -15,8 +15,8 @@ stamina = 130 // Humans can sprint for longer than any other species stamina_recovery = 5 - sprint_speed_factor = 0.8 - sprint_cost_factor = 0.7 + sprint_speed_factor = 0.85 + sprint_cost_factor = 0.6 /datum/species/unathi name = "Unathi" @@ -35,7 +35,8 @@ stamina = 120 // Unathi have the shortest but fastest sprint of all sprint_speed_factor = 3 stamina_recovery = 5 - sprint_cost_factor = 1.8 + sprint_cost_factor = 1.55 + exhaust_threshold = 65 rarity_value = 3 blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \ @@ -101,8 +102,8 @@ stamina = 90 // Tajarans evolved to maintain a steady pace in the snow, sprinting wastes energy stamina_recovery = 4 - sprint_speed_factor = 0.55 - sprint_cost_factor = 1 + sprint_speed_factor = 0.6 + sprint_cost_factor = 0.85 blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \ @@ -166,7 +167,7 @@ ethanol_resistance = 0.5//gets drunk faster stamina = 90 - sprint_speed_factor = 1.1 //Evolved for rapid escapes from predators + sprint_speed_factor = 1.15 //Evolved for rapid escapes from predators /datum/species/diona @@ -242,8 +243,8 @@ reagent_tag = IS_DIONA stamina = -1 // Diona sprinting uses energy instead of stamina - sprint_speed_factor = 0.4 //Speed gained is minor - + sprint_speed_factor = 0.45 //Speed gained is minor + sprint_cost_factor = 0.9 /datum/species/diona/handle_sprint_cost(var/mob/living/carbon/human/H, var/cost) var/datum/dionastats/DS = H.get_dionastats() @@ -251,7 +252,7 @@ if (!DS) return 0 //Something is very wrong - var/remainder = cost + var/remainder = cost * sprint_cost_factor if (H.radiation) if (H.radiation > (cost*0.5))//Radiation counts as double energy @@ -338,13 +339,13 @@ has_organ = list() //TODO: Positronic brain. stamina = -1 // Machines use power and generate heat, stamina is not a thing - sprint_speed_factor = 0.85 // About as capable of speed as a human + sprint_speed_factor = 0.9 // About as capable of speed as a human /datum/species/machine/handle_sprint_cost(var/mob/living/carbon/human/H, var/cost) if (H.stat == CONSCIOUS) - H.bodytemperature += cost*1.35 - H.nutrition -= cost*0.9 + H.bodytemperature += cost*1.25 + H.nutrition -= cost*0.75 if (H.nutrition > 0) return 1 else @@ -407,8 +408,8 @@ base_color = "#575757" stamina = 100 // Long period of sprinting, but relatively low speed gain - sprint_speed_factor = 0.5 - sprint_cost_factor = 0.27 + sprint_speed_factor = 0.55 + sprint_cost_factor = 0.23 stamina_recovery = 1//slow recovery diff --git a/code/modules/mob/living/living_powers.dm b/code/modules/mob/living/living_powers.dm index 1eb7c868f93..be9be13ad44 100644 --- a/code/modules/mob/living/living_powers.dm +++ b/code/modules/mob/living/living_powers.dm @@ -59,7 +59,7 @@ else newspeed = text2num(response) - if (!newspeed || newspeed >= speed || newspeed <= 0) + if (!newspeed || newspeed >= speed || newspeed <= 0.2) src << "Error, invalid value entered. Walk speed has not been changed" return diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 5a9d2d8f689..133451546ae 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -181,7 +181,19 @@ if(moving) return 0 - if(world.time < move_delay) return + if(world.time < move_delay) + return + + +//This compensates for the inaccuracy of move ticks +//Whenever world.time overshoots the movedelay, due to it only ticking once per decisecond +//The overshoot value is subtracted from our next delay, farther down where move delay is set. +//This doesn't entirely remove the problem, but it keeps travel times accurate to within 0.1 seconds +//Over an infinite distance, and prevents the inaccuracy from compounding. Thus making it basically a non-issue + var/leftover = world.time - move_delay + if (leftover > 1) + leftover = 0 + if(locate(/obj/effect/stop/, mob.loc)) for(var/obj/effect/stop/S in mob.loc) @@ -259,7 +271,7 @@ - move_delay = world.time//set move delay + move_delay = world.time - leftover//set move delay mob.last_move_intent = world.time + 10 diff --git a/html/changelogs/Nanako_Sprintfixes.yml b/html/changelogs/Nanako_Sprintfixes.yml new file mode 100644 index 00000000000..ed87f6fa20e --- /dev/null +++ b/html/changelogs/Nanako_Sprintfixes.yml @@ -0,0 +1,39 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Nanako + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Fixed a significant issue that caused many people to sprint slower than they should have." + - bugfix: "Fixed being able to regenerate stamina while hungry and drive nutrition into infinite negative." + - bugfix: "Fixed being able to set your walk speed so low you paralyse yourself almost forever." + - tweak: "Adjusted many values related to sprinting and stamina" \ No newline at end of file From aaaa4d9ca4ac7b8af14662d7eae62baf38c8bfc9 Mon Sep 17 00:00:00 2001 From: skull132 Date: Wed, 9 Nov 2016 22:46:06 +0200 Subject: [PATCH 11/24] Fixes #1128 (#1144) Reverts changes done by Nanako to the vehicles, trams, and trolleys; and updates the existing maths to work IAW the updated movement system. And yes, this is tested and working. --- code/modules/vehicles/cargo_train.dm | 17 +++++++----- code/modules/vehicles/train.dm | 11 +++----- code/modules/vehicles/vehicle.dm | 29 ++++++--------------- html/changelogs/Skull132_revert-trolley.yml | 12 +++++++++ 4 files changed, 33 insertions(+), 36 deletions(-) create mode 100644 html/changelogs/Skull132_revert-trolley.yml diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index 46b0d1851d4..0c5987c3f36 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -6,7 +6,7 @@ on = 0 powered = 1 locked = 0 - move_speed = 3 + load_item_visible = 1 load_offset_x = 0 mob_offset_y = 7 @@ -29,7 +29,7 @@ anchored = 0 passenger_allowed = 0 locked = 0 - //move_speed = 3 + load_item_visible = 1 load_offset_x = 0 load_offset_y = 4 @@ -352,12 +352,15 @@ /obj/vehicle/train/cargo/engine/update_car(var/train_length, var/active_engines) src.train_length = train_length src.active_engines = active_engines - move_speed = initial(move_speed) //so that engines that have been turned off don't lag behind + //Update move delay - if(is_train_head() && on) - var/remainder = (car_limit * active_engines) - (train_length - active_engines) - if (remainder) - move_speed -= 0.25 * remainder //makes cargo trains 10% slower than running when not overweight + if(!is_train_head() || !on) + move_delay = initial(move_delay) //so that engines that have been turned off don't lag behind + else + move_delay = max(0, (-car_limit * active_engines) + train_length - active_engines) //limits base overweight so you cant overspeed trains + move_delay *= (1 / max(1, active_engines)) * 2 //overweight penalty (scaled by the number of engines) + move_delay += config.walk_speed //base reference speed + move_delay *= config.vehicle_delay_multiplier //makes cargo trains 10% slower than running when not overweight /obj/vehicle/train/cargo/trolley/update_car(var/train_length, var/active_engines) src.train_length = train_length diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index d3136822aca..d6c0b934e1c 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -2,6 +2,7 @@ name = "train" dir = 4 + move_delay = 1 health = 100 maxhealth = 100 @@ -28,19 +29,13 @@ var/old_loc = get_turf(src) if(..()) if(tow) - tow.forceMove(old_loc) + tow.Move(old_loc) return 1 else if(lead) unattach() return 0 -obj/vehicle/train/forceMove() - var/old_loc = get_turf(src) - ..() - if(tow) - tow.forceMove(old_loc) - /obj/vehicle/train/Bump(atom/Obstacle) if(!istype(Obstacle, /atom/movable)) return @@ -56,7 +51,7 @@ obj/vehicle/train/forceMove() var/mob/living/M = A visible_message("\red [src] knocks over [M]!") M.apply_effects(5, 5) //knock people down if you hit them - M.apply_damages(10 * move_speed) // and do damage according to how fast the train is going + M.apply_damages(22 / move_delay) // and do damage according to how fast the train is going if(istype(load, /mob/living/carbon/human)) var/mob/living/D = load D << "\red You hit [M]!" diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 31d573854e6..c3bdc7b742d 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -28,10 +28,7 @@ var/stat = 0 var/emagged = 0 var/powered = 0 //set if vehicle is powered and should use fuel when moving - - move_speed = 2//Expressed in tiles per second. This is used to control how fast the vehicle moves - - var/move_delay//DO NOT MANUALLY SET THIS. For internal use only + var/move_delay = 1 //set this to limit the speed of the vehicle var/obj/item/weapon/cell/cell var/charge_use = 5 //set this to adjust the amount of power the vehicle uses per move @@ -48,22 +45,8 @@ /obj/vehicle/New() ..() //spawn the cell you want in each vehicle - calc_delay() - -/obj/vehicle/proc/calc_delay() - if (!move_speed || move_speed < 0)//Shouldn't happen - move_speed = 0 - move_delay = 999999999 - return 0 - - move_delay = (1 / move_speed) * 10 * config.vehicle_delay_multiplier - return 1 - /obj/vehicle/Move() - if (!move_speed) - return 0 - if(world.time > l_move_time + move_delay) var/old_loc = get_turf(src) if(on && powered && cell.charge < charge_use) @@ -197,7 +180,6 @@ // Vehicle procs //------------------------------------------- /obj/vehicle/proc/turn_on() - calc_delay() if(stat) return 0 if(powered && cell.charge < charge_use) @@ -326,7 +308,6 @@ if(ismob(C)) buckle_mob(C) - calc_delay() return 1 /obj/vehicle/user_unbuckle_mob(var/mob/user) @@ -374,9 +355,15 @@ unbuckle_mob(load) load = null - calc_delay() + return 1 +// This exists to stop a weird jumping motion when you disembark. +// It essentially makes disembarkation count as a movement. +// Yes, it's not the full calculation. But it's relatively close, and will make it seamless. +/obj/vehicle/post_buckle_mob(var/mob/M) + if (M.client) + M.client.move_delay = M.movement_delay() + config.walk_speed //------------------------------------------------------- // Stat update procs diff --git a/html/changelogs/Skull132_revert-trolley.yml b/html/changelogs/Skull132_revert-trolley.yml new file mode 100644 index 00000000000..c27ff305130 --- /dev/null +++ b/html/changelogs/Skull132_revert-trolley.yml @@ -0,0 +1,12 @@ +author: Skull132 + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Fixed the trolleys and trams by reverting code, and simply tweaking the values to reference the updated move system. All issues, including edgecases, should be resolved now." From 10d09f78cc233c492365190605e003370176fb43 Mon Sep 17 00:00:00 2001 From: skull132 Date: Wed, 9 Nov 2016 14:46:49 -0500 Subject: [PATCH 12/24] Changelgos - 09NOV2016 --- html/changelog.html | 13 +++++++ html/changelogs/.all_changelog.yml | 13 +++++++ html/changelogs/Nanako_Sprintfixes.yml | 39 --------------------- html/changelogs/Skull132_revert-trolley.yml | 12 ------- 4 files changed, 26 insertions(+), 51 deletions(-) delete mode 100644 html/changelogs/Nanako_Sprintfixes.yml delete mode 100644 html/changelogs/Skull132_revert-trolley.yml diff --git a/html/changelog.html b/html/changelog.html index e0180eab2ca..2555af4cc1a 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,19 @@ -->
    +

    09 November 2016

    +

    Nanako updated:

    +
      +
    • Fixed a significant issue that caused many people to sprint slower than they should have.
    • +
    • Fixed being able to regenerate stamina while hungry and drive nutrition into infinite negative.
    • +
    • Fixed being able to set your walk speed so low you paralyse yourself almost forever.
    • +
    • Adjusted many values related to sprinting and stamina
    • +
    +

    Skull132 updated:

    +
      +
    • Fixed the trolleys and trams by reverting code, and simply tweaking the values to reference the updated move system. All issues, including edgecases, should be resolved now.
    • +
    +

    07 November 2016

    Skull132 updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 593b2a565c0..0b8bbae1051 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3008,3 +3008,16 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. Skull132: - tweak: Reverted the changes done to limb removal. They now flip again. Also no longer lose hair while doing so. +2016-11-09: + Nanako: + - bugfix: Fixed a significant issue that caused many people to sprint slower than + they should have. + - bugfix: Fixed being able to regenerate stamina while hungry and drive nutrition + into infinite negative. + - bugfix: Fixed being able to set your walk speed so low you paralyse yourself almost + forever. + - tweak: Adjusted many values related to sprinting and stamina + Skull132: + - bugfix: Fixed the trolleys and trams by reverting code, and simply tweaking the + values to reference the updated move system. All issues, including edgecases, + should be resolved now. diff --git a/html/changelogs/Nanako_Sprintfixes.yml b/html/changelogs/Nanako_Sprintfixes.yml deleted file mode 100644 index ed87f6fa20e..00000000000 --- a/html/changelogs/Nanako_Sprintfixes.yml +++ /dev/null @@ -1,39 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -################################# - -# Your name. -author: Nanako - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - bugfix: "Fixed a significant issue that caused many people to sprint slower than they should have." - - bugfix: "Fixed being able to regenerate stamina while hungry and drive nutrition into infinite negative." - - bugfix: "Fixed being able to set your walk speed so low you paralyse yourself almost forever." - - tweak: "Adjusted many values related to sprinting and stamina" \ No newline at end of file diff --git a/html/changelogs/Skull132_revert-trolley.yml b/html/changelogs/Skull132_revert-trolley.yml deleted file mode 100644 index c27ff305130..00000000000 --- a/html/changelogs/Skull132_revert-trolley.yml +++ /dev/null @@ -1,12 +0,0 @@ -author: Skull132 - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - bugfix: "Fixed the trolleys and trams by reverting code, and simply tweaking the values to reference the updated move system. All issues, including edgecases, should be resolved now." From fbaf8c61a3925d2c674521fb4aada130d3dee3f3 Mon Sep 17 00:00:00 2001 From: Bedshaped Date: Fri, 11 Nov 2016 20:20:21 +0000 Subject: [PATCH 13/24] Bedshaped's Bugfixes 5 (#1146) Fixes #1056 Fixes #1036 Fixes #1127 Fixes #1135 Fixes #1112, increases their health. Quiets the bosun's whistle for night lighting. --- code/game/machinery/cryopod.dm | 12 ++++++------ .../objects/items/devices/floor_painter.dm | 2 +- .../objects/items/devices/magnetic_lock.dm | 15 ++++++++++----- code/modules/ventcrawl/ventcrawl.dm | 1 + .../ventcrawl/ventcrawl_atmospherics.dm | 4 ++-- html/changelogs/Bedshaped-PR-1146.yml | 11 +++++++++++ sound/misc/bosuns_whistle.ogg | Bin 46715 -> 45801 bytes 7 files changed, 31 insertions(+), 14 deletions(-) create mode 100644 html/changelogs/Bedshaped-PR-1146.yml diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index f250f350f21..f75d128fe9a 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -433,7 +433,7 @@ if(willing) - visible_message("[user] starts putting [G:affecting:name] into \the [src].", 3) + visible_message("[user] starts putting [G:affecting:name] into \the [name].", 3) if(do_after(user, 20)) if(!M || !G || !G:affecting) return @@ -476,7 +476,7 @@ var/mob/living/L = O if(L.stat == DEAD) - user << "Dead people can not be put into cryo." + user << "Dead people can not be put into stasis." return for(var/mob/living/carbon/slime/M in range(1,L)) @@ -487,7 +487,7 @@ var/willing = null //We don't want to allow people to be forced into despawning. if(L.client) - if(alert(L,"Would you like to enter cryosleep?",,"Yes","No") == "Yes") + if(alert(L,"Would you like to enter stasis?",,"Yes","No") == "Yes") if(!L) return willing = 1 else @@ -495,9 +495,9 @@ if(willing) if(L == user) - visible_message("[user] starts climbing into the cryo pod.", 3) + visible_message("[user] starts climbing into \the [name].", 3) else - visible_message("[user] starts putting [L] into the cryo pod.", 3) + visible_message("[user] starts putting [L] into \the [name].", 3) if(do_after(user, 20)) if(!L) return @@ -508,7 +508,7 @@ L.client.perspective = EYE_PERSPECTIVE L.client.eye = src else - user << "You stop [L == user ? "climbing into the cryo pod." : "putting [L] into the cryo pod."]" + user << "You stop [L == user ? "climbing into" : "putting [L] into"] \the [name]." return if(orient_right) diff --git a/code/game/objects/items/devices/floor_painter.dm b/code/game/objects/items/devices/floor_painter.dm index 415a5ec2003..b5b19e4f672 100644 --- a/code/game/objects/items/devices/floor_painter.dm +++ b/code/game/objects/items/devices/floor_painter.dm @@ -21,7 +21,7 @@ if(istype(A, /turf/simulated/floor)) var/turf/simulated/floor/F = A - if(F.is_steel_floor()) // only tiled floors + if(!is_type_in_list(F, subtypesof(/turf/simulated/floor))) // only tiled floors if(tile_dir_mode) var/D = get_dir(usr, F) if(usr.loc == F) diff --git a/code/game/objects/items/devices/magnetic_lock.dm b/code/game/objects/items/devices/magnetic_lock.dm index c6765569211..48bc3aafc19 100644 --- a/code/game/objects/items/devices/magnetic_lock.dm +++ b/code/game/objects/items/devices/magnetic_lock.dm @@ -13,7 +13,7 @@ //icon_state = "inactive" w_class = 3 req_access = list(access_cent_specops) - health = 90 + health = 150 var/department = "CENTCOM" var/status = 0 @@ -107,13 +107,17 @@ user << "You cannot swipe your [I] through [src] with it partially dismantled!" return - if (istype(I, /obj/item/weapon) && user.a_intent == "hurt") - if (I.force >= 8) + if (istype(I, /obj/item/weapon) && user.a_intent == "harm") + if (I.force >= 18) user.visible_message("[user] bashes [src] with [I]!", "You strike [src] with [I], damaging it!") takedamage(I.force) + playsound(loc, "sound/weapons/genhit[rand(1,3)].ogg", I.force*3, 1) + spawn(3) + playsound(loc, "sound/effects/sparks[rand(1,4)].ogg", 30, 1) return else - user.visible_message("[user] hits [src] with [I] to no visible effect.", "You hit [src] with [I], but it appears to have no effect.") + user.visible_message("[user] hits [src] with [I] but fails to damage it.", "You hit [src] with [I], [I.force >= 10 ? "and it almost makes a dent!" : "but it appears to have no visible effect."]") + playsound(loc, "sound/weapons/Genhit.ogg", I.force*2.5, 1) return switch (constructionstate) @@ -402,13 +406,14 @@ overlays += "overlay_deconstruct_[constructionstate]" /obj/item/device/magnetic_lock/proc/takedamage(var/damage) - health -= damage + health -= rand(damage/2, damage) if (damage >= 40 && prob(50)) health = 0 if (health <= 0) visible_message("[src] sparks[target ? " and falls off of \the [target]!" : "!"] It is now completely unusable!") + detach(0) status = STATUS_BROKEN update_icon() return diff --git a/code/modules/ventcrawl/ventcrawl.dm b/code/modules/ventcrawl/ventcrawl.dm index 84d5b1d30cd..3366340ea8d 100644 --- a/code/modules/ventcrawl/ventcrawl.dm +++ b/code/modules/ventcrawl/ventcrawl.dm @@ -5,6 +5,7 @@ var/list/ventcrawl_machinery = list( // Vent crawling whitelisted items, whoo /mob/living/var/list/can_enter_vent_with = list( + /obj/item/device/mmi, /obj/item/weapon/implant, /obj/item/device/radio/borg, /obj/item/weapon/holder, diff --git a/code/modules/ventcrawl/ventcrawl_atmospherics.dm b/code/modules/ventcrawl/ventcrawl_atmospherics.dm index 4a9901952c6..32f32452381 100644 --- a/code/modules/ventcrawl/ventcrawl_atmospherics.dm +++ b/code/modules/ventcrawl/ventcrawl_atmospherics.dm @@ -51,10 +51,10 @@ else if((direction & initialize_directions) || is_type_in_list(src, ventcrawl_machinery) && src.can_crawl_through()) //if we move in a way the pipe can connect, but doesn't - or we're in a vent user.remove_ventcrawl() - user.forceMove(src.loc) + user.forceMove(check_neighbor_density(get_turf(src.loc), direction) ? src.loc : get_step(src, direction)) user.sight &= ~(SEE_TURFS|BLIND) user.visible_message("You hear something squeezing through the pipes.", "You climb out the ventilation system.") - user.vent_trap_check("arriving", target_move) + user.vent_trap_check("arriving", user.loc) user.canmove = 0 spawn(1) user.canmove = 1 diff --git a/html/changelogs/Bedshaped-PR-1146.yml b/html/changelogs/Bedshaped-PR-1146.yml new file mode 100644 index 00000000000..8c0a395aa2c --- /dev/null +++ b/html/changelogs/Bedshaped-PR-1146.yml @@ -0,0 +1,11 @@ +author: Bedshaped + +delete-after: True + +changes: + - bugfix: "Fixed Spider-bots unable to vent-crawl." + - bugfix: "Fixed a runtime error when exiting through a pipe after vent-crawling." + - bugfix: "Fixed incorrect message when putting robots in storage." + - bugfix: "Fixed floor painters being able to be used on non-valid tiles." + - bugfix: "Fixed magnetic locks unable to be damaged and increased their health." + - tweak: "Quietened Bosun's whistle." diff --git a/sound/misc/bosuns_whistle.ogg b/sound/misc/bosuns_whistle.ogg index c767cb6fde47776bafb803216f55feeb89bca7e0..1cc7bce4417ece41148078ac29c0a5c92aac4908 100644 GIT binary patch delta 41865 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
      agRxzf^8rzY?jlO^U;mM{KQ$2r% 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

      W^FR(Qwr&RbN{;yC&<+ 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 R_)wy$U$a=HqZo&Y^gp#pBR2p5 From 8dfe5307e3c7cf00b5f564c6af97ff2416ac6327 Mon Sep 17 00:00:00 2001 From: skull132 Date: Fri, 11 Nov 2016 14:34:02 -0500 Subject: [PATCH 14/24] Changelogs - 11NOV2016 --- html/changelog.html | 11 +++++++++++ html/changelogs/.all_changelog.yml | 8 ++++++++ html/changelogs/Bedshaped-PR-1146.yml | 11 ----------- 3 files changed, 19 insertions(+), 11 deletions(-) delete mode 100644 html/changelogs/Bedshaped-PR-1146.yml diff --git a/html/changelog.html b/html/changelog.html index 2555af4cc1a..11a804af9e7 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,17 @@ -->

      +

      11 November 2016

      +

      Bedshaped updated:

      +
        +
      • Fixed Spider-bots unable to vent-crawl.
      • +
      • Fixed a runtime error when exiting through a pipe after vent-crawling.
      • +
      • Fixed incorrect message when putting robots in storage.
      • +
      • Fixed floor painters being able to be used on non-valid tiles.
      • +
      • Fixed magnetic locks unable to be damaged and increased their health.
      • +
      • Quietened Bosun's whistle.
      • +
      +

      09 November 2016

      Nanako updated:

        diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 0b8bbae1051..21be99fa33b 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3021,3 +3021,11 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Fixed the trolleys and trams by reverting code, and simply tweaking the values to reference the updated move system. All issues, including edgecases, should be resolved now. +2016-11-11: + Bedshaped: + - bugfix: Fixed Spider-bots unable to vent-crawl. + - bugfix: Fixed a runtime error when exiting through a pipe after vent-crawling. + - bugfix: Fixed incorrect message when putting robots in storage. + - bugfix: Fixed floor painters being able to be used on non-valid tiles. + - bugfix: Fixed magnetic locks unable to be damaged and increased their health. + - tweak: Quietened Bosun's whistle. diff --git a/html/changelogs/Bedshaped-PR-1146.yml b/html/changelogs/Bedshaped-PR-1146.yml deleted file mode 100644 index 8c0a395aa2c..00000000000 --- a/html/changelogs/Bedshaped-PR-1146.yml +++ /dev/null @@ -1,11 +0,0 @@ -author: Bedshaped - -delete-after: True - -changes: - - bugfix: "Fixed Spider-bots unable to vent-crawl." - - bugfix: "Fixed a runtime error when exiting through a pipe after vent-crawling." - - bugfix: "Fixed incorrect message when putting robots in storage." - - bugfix: "Fixed floor painters being able to be used on non-valid tiles." - - bugfix: "Fixed magnetic locks unable to be damaged and increased their health." - - tweak: "Quietened Bosun's whistle." From dc458a2d5e24219ac8b6bf4cf54b0879870c31a9 Mon Sep 17 00:00:00 2001 From: Bedshaped Date: Fri, 11 Nov 2016 22:08:39 +0000 Subject: [PATCH 15/24] Finished --- code/__HELPERS/time.dm | 2 +- code/controllers/Processes/night_lighting.dm | 8 ++++---- code/controllers/configuration.dm | 8 ++++++++ code/global.dm | 1 + code/setup.dm | 5 ----- config/example/config.txt | 6 ++++++ 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index 45eec801e01..99f2856dd03 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -7,7 +7,7 @@ var/roundstart_hour = 0 //Returns the world time in english proc/worldtime2text(time = world.time) - if(!roundstart_hour) roundstart_hour = pick(2,7,12,17) + if(!roundstart_hour) roundstart_hour = rand(0. 23) return "[(round(time / 36000)+roundstart_hour) % 24]:[(time / 600 % 60) < 10 ? add_zero(time / 600 % 60, 1) : time / 600 % 60]" proc/worldtime2ticks(time = world.time) diff --git a/code/controllers/Processes/night_lighting.dm b/code/controllers/Processes/night_lighting.dm index ed3f8ada71d..07d13f3fb99 100644 --- a/code/controllers/Processes/night_lighting.dm +++ b/code/controllers/Processes/night_lighting.dm @@ -37,21 +37,21 @@ /datum/controller/process/night_lighting/preStart() switch (worldtime2ticks()) - if (0 to MORNING_LIGHT_RESET) + if (0 to (config.nl_finish_hour*TICKS_IN_HOUR)) deactivate() - if (NIGHT_LIGHT_ACTIVE to TICKS_IN_DAY) + if ((config.nl_start_hour*TICKS_IN_HOUR) to TICKS_IN_DAY) activate() /datum/controller/process/night_lighting/doWork() switch (worldtime2ticks()) - if (0 to MORNING_LIGHT_RESET) + if (0 to (config.nl_finish_hour*TICKS_IN_HOUR)) if (isactive) command_announcement.Announce("Good morning. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now return the public hallway lighting levels to normal.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg') deactivate() - if (NIGHT_LIGHT_ACTIVE to TICKS_IN_DAY) + if ((config.nl_start_hour*TICKS_IN_HOUR) to TICKS_IN_DAY) if (!isactive) command_announcement.Announce("Good evening. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now dim lighting in the public hallways in order to accommodate the circadian rhythm of some species.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg') activate() diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index f7c5c48884c..4b47407d88b 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -171,6 +171,8 @@ var/list/gamemode_cache = list() var/ghost_interaction = 0 var/night_lighting = 0 + var/nl_start_hour = 19 + var/nl_finish_hour = 8 var/comms_password = "" @@ -601,6 +603,12 @@ var/list/gamemode_cache = list() if("night_lighting") config.night_lighting = 1 + if("nl_start_hour") + config.nl_start_hour = text2num(value) + + if("nl_finish_hour") + config.nl_finish_hour = text2num(value) + if("disable_player_mice") config.disable_player_mice = 1 diff --git a/code/global.dm b/code/global.dm index 3294807b76c..a77d05a5858 100644 --- a/code/global.dm +++ b/code/global.dm @@ -248,4 +248,5 @@ var/global/obj/item/device/radio/intercom/global_announcer = new(null) var/list/station_departments = list("Command", "Medical", "Engineering", "Science", "Security", "Cargo", "Civilian") var/global/const/TICKS_IN_DAY = 864000 +var/global/const/TICKS_IN_HOUR = 36000 var/global/const/TICKS_IN_SECOND = 10 diff --git a/code/setup.dm b/code/setup.dm index 7ed113467e4..fc258860106 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -1091,11 +1091,6 @@ var/list/be_special_flags = list( #define RESPAWN_ANIMAL 3000 #define RESPAWN_MINISYNTH 6000 -// Night lighting controller times -// The time (in ticks based on worldtime2ticks()) that various actions trigger -#define MORNING_LIGHT_RESET 252000 // 7am or 07:00 - lighting restores to normal in morning -#define NIGHT_LIGHT_ACTIVE 648000 // 6pm or 18:00 - night lighting mode activates - //Cargo random stock vars //These are used in randomstock.dm //And also for generating random loot crates in crates.dm diff --git a/config/example/config.txt b/config/example/config.txt index da2528e3f90..53001b9d311 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -259,6 +259,12 @@ USEALIENWHITELIST ## Comment this to disable automated station night lighting NIGHT_LIGHTING +## Hour when the station night lighting is disabled (if above is enabled) +NL_FINISH_HOUR 8 + +## Hour when the station night lighting is enabled (if above is enabled) +NL_FINISH_HOUR 19 + ## Comment this to unrestrict the number of alien players allowed in the round. The number represents the number of alien players for every human player. #ALIEN_PLAYER_RATIO 0.2 ##Remove the # to let ghosts spin chairs From b59157e6f55a172fc42a38b83ebccc52ed1f45ca Mon Sep 17 00:00:00 2001 From: Bedshaped Date: Fri, 11 Nov 2016 22:10:35 +0000 Subject: [PATCH 16/24] MISTAKE --- code/__HELPERS/time.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index 99f2856dd03..afc9b98a251 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -7,7 +7,7 @@ var/roundstart_hour = 0 //Returns the world time in english proc/worldtime2text(time = world.time) - if(!roundstart_hour) roundstart_hour = rand(0. 23) + if(!roundstart_hour) roundstart_hour = rand(0, 23) return "[(round(time / 36000)+roundstart_hour) % 24]:[(time / 600 % 60) < 10 ? add_zero(time / 600 % 60, 1) : time / 600 % 60]" proc/worldtime2ticks(time = world.time) From 72d95543f9bba07cafad2471076dc4e879078ace Mon Sep 17 00:00:00 2001 From: Bedshaped Date: Fri, 11 Nov 2016 22:18:30 +0000 Subject: [PATCH 17/24] skull_is_a.git --- code/controllers/Processes/night_lighting.dm | 8 ++++---- code/controllers/configuration.dm | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/code/controllers/Processes/night_lighting.dm b/code/controllers/Processes/night_lighting.dm index 07d13f3fb99..25241a1c5cb 100644 --- a/code/controllers/Processes/night_lighting.dm +++ b/code/controllers/Processes/night_lighting.dm @@ -37,21 +37,21 @@ /datum/controller/process/night_lighting/preStart() switch (worldtime2ticks()) - if (0 to (config.nl_finish_hour*TICKS_IN_HOUR)) + if (0 to config.nl_finish) deactivate() - if ((config.nl_start_hour*TICKS_IN_HOUR) to TICKS_IN_DAY) + if ((config.nl_start to TICKS_IN_DAY) activate() /datum/controller/process/night_lighting/doWork() switch (worldtime2ticks()) - if (0 to (config.nl_finish_hour*TICKS_IN_HOUR)) + if (0 to config.nl_finish) if (isactive) command_announcement.Announce("Good morning. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now return the public hallway lighting levels to normal.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg') deactivate() - if ((config.nl_start_hour*TICKS_IN_HOUR) to TICKS_IN_DAY) + if (config.nl_start to TICKS_IN_DAY) if (!isactive) command_announcement.Announce("Good evening. The time is [worldtime2text()]. \n\nThe automated systems aboard the [station_name()] will now dim lighting in the public hallways in order to accommodate the circadian rhythm of some species.", "Automated Lighting System", new_sound = 'sound/misc/bosuns_whistle.ogg') activate() diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 4b47407d88b..9be12bd969b 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -171,8 +171,8 @@ var/list/gamemode_cache = list() var/ghost_interaction = 0 var/night_lighting = 0 - var/nl_start_hour = 19 - var/nl_finish_hour = 8 + var/nl_start = 19 * TICKS_IN_HOUR + var/nl_finish = 8 * TICKS_IN_HOUR var/comms_password = "" @@ -604,10 +604,10 @@ var/list/gamemode_cache = list() config.night_lighting = 1 if("nl_start_hour") - config.nl_start_hour = text2num(value) + config.nl_start = text2num(value) * TICKS_IN_HOUR if("nl_finish_hour") - config.nl_finish_hour = text2num(value) + config.nl_finish = text2num(value) * TICKS_IN_HOUR if("disable_player_mice") config.disable_player_mice = 1 From 53aca0a450d4580eda3886dd70053f3dbb00dba5 Mon Sep 17 00:00:00 2001 From: Bedshaped Date: Fri, 11 Nov 2016 22:21:02 +0000 Subject: [PATCH 18/24] mistake --- code/controllers/Processes/night_lighting.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/Processes/night_lighting.dm b/code/controllers/Processes/night_lighting.dm index 25241a1c5cb..d7d360d739a 100644 --- a/code/controllers/Processes/night_lighting.dm +++ b/code/controllers/Processes/night_lighting.dm @@ -39,7 +39,7 @@ switch (worldtime2ticks()) if (0 to config.nl_finish) deactivate() - if ((config.nl_start to TICKS_IN_DAY) + if (config.nl_start to TICKS_IN_DAY) activate() From aec28266c5e09bb58c936e4d8f4c92fa748b5ce4 Mon Sep 17 00:00:00 2001 From: Bedshaped Date: Sun, 13 Nov 2016 22:31:07 +0000 Subject: [PATCH 19/24] arrowfix --- config/example/config.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/example/config.txt b/config/example/config.txt index 53001b9d311..425f6b9a0e7 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -263,7 +263,7 @@ NIGHT_LIGHTING NL_FINISH_HOUR 8 ## Hour when the station night lighting is enabled (if above is enabled) -NL_FINISH_HOUR 19 +NL_START_HOUR 19 ## Comment this to unrestrict the number of alien players allowed in the round. The number represents the number of alien players for every human player. #ALIEN_PLAYER_RATIO 0.2 From 59a12335bd13e0ac05e132fabb2e83a55799cbd0 Mon Sep 17 00:00:00 2001 From: NanakoAC Date: Fri, 18 Nov 2016 19:59:46 +0000 Subject: [PATCH 20/24] Cargo Tweaks (#1157) Adjusts some more weights and probabilities on cargo items that affect balance. Fixes adminordrazine spawning. Tweaks sprinting values a little more. Iterative design! --- code/modules/cargo/randomstock.dm | 34 +++++++++---------- code/modules/mob/living/carbon/human/life.dm | 2 +- .../carbon/human/species/outsider/vox.dm | 2 +- .../carbon/human/species/station/station.dm | 26 +++++++------- code/setup.dm | 2 +- 5 files changed, 33 insertions(+), 33 deletions(-) diff --git a/code/modules/cargo/randomstock.dm b/code/modules/cargo/randomstock.dm index bbee879374f..12986ab945b 100644 --- a/code/modules/cargo/randomstock.dm +++ b/code/modules/cargo/randomstock.dm @@ -207,14 +207,13 @@ var/list/global/random_stock_rare = list( "combatmeds" = 3, "batterer" = 0.75, "posibrain" = 3, - "augmentvision" = 1.6, - "thermals" = 1.5, + "thermals" = 0.75, "bsbeaker" = 3, "energyshield" = 2, "hardsuit" = 0.75, "cluster" = 2.0, "cloak" = 0.75, - "sword" = 0.75, + "sword" = 0.5, "ims" = 1.5, "exogear" = 1.5, "teleporter" = 1, @@ -225,7 +224,7 @@ var/list/global/random_stock_large = list( "russian" = 1, "emergency" = 2, "firecloset" = 2, - "tacticool" = 0.4, + "tacticool" = 0.2, "radsuit" = 3, "exosuit" = 1.2,//A randomly generated exosuit in a very variable condition. "EOD" = 1.5, @@ -1099,15 +1098,18 @@ var/list/global/random_stock_large = list( //Can be slotted into any dispenser if("chempack") var/total = rand(2,6) + var/list/chems = chemical_reagents_list.Copy() + var/list/exclusion = list("drink", "reagent", "adminordrazine", "beer2") + chems -= exclusion for (var/i=0,i 0) stamina = min(max_stamina, stamina+regen) - nutrition = max(0, nutrition - stamina_recovery*0.32) + nutrition = max(0, nutrition - stamina_recovery*0.18) hud_used.move_intent.update_move_icon(src) /mob/living/carbon/human/proc/update_health_display() diff --git a/code/modules/mob/living/carbon/human/species/outsider/vox.dm b/code/modules/mob/living/carbon/human/species/outsider/vox.dm index 583f24fb480..89f0374fb01 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/vox.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/vox.dm @@ -19,7 +19,7 @@ stamina = 120 // Vox are even faster than unathi and can go longer, but recover slowly sprint_speed_factor = 3 stamina_recovery = 1 - sprint_cost_factor = 1.7 + sprint_cost_factor = 1 speech_sounds = list('sound/voice/shriek1.ogg') speech_chance = 20 diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index 5c5f2b375dd..89f8e01a598 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -15,8 +15,8 @@ stamina = 130 // Humans can sprint for longer than any other species stamina_recovery = 5 - sprint_speed_factor = 0.85 - sprint_cost_factor = 0.6 + sprint_speed_factor = 0.9 + sprint_cost_factor = 0.5 /datum/species/unathi name = "Unathi" @@ -33,9 +33,9 @@ gluttonous = 1 ethanol_resistance = 0.4 stamina = 120 // Unathi have the shortest but fastest sprint of all - sprint_speed_factor = 3 + sprint_speed_factor = 3.2 stamina_recovery = 5 - sprint_cost_factor = 1.55 + sprint_cost_factor = 1.45 exhaust_threshold = 65 rarity_value = 3 @@ -102,8 +102,8 @@ stamina = 90 // Tajarans evolved to maintain a steady pace in the snow, sprinting wastes energy stamina_recovery = 4 - sprint_speed_factor = 0.6 - sprint_cost_factor = 0.85 + sprint_speed_factor = 0.65 + sprint_cost_factor = 0.75 blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \ @@ -167,7 +167,7 @@ ethanol_resistance = 0.5//gets drunk faster stamina = 90 - sprint_speed_factor = 1.15 //Evolved for rapid escapes from predators + sprint_speed_factor = 1.25 //Evolved for rapid escapes from predators /datum/species/diona @@ -243,8 +243,8 @@ reagent_tag = IS_DIONA stamina = -1 // Diona sprinting uses energy instead of stamina - sprint_speed_factor = 0.45 //Speed gained is minor - sprint_cost_factor = 0.9 + sprint_speed_factor = 0.5 //Speed gained is minor + sprint_cost_factor = 0.8 /datum/species/diona/handle_sprint_cost(var/mob/living/carbon/human/H, var/cost) var/datum/dionastats/DS = H.get_dionastats() @@ -339,13 +339,13 @@ has_organ = list() //TODO: Positronic brain. stamina = -1 // Machines use power and generate heat, stamina is not a thing - sprint_speed_factor = 0.9 // About as capable of speed as a human + sprint_speed_factor = 1 // About as capable of speed as a human /datum/species/machine/handle_sprint_cost(var/mob/living/carbon/human/H, var/cost) if (H.stat == CONSCIOUS) - H.bodytemperature += cost*1.25 - H.nutrition -= cost*0.75 + H.bodytemperature += cost*1.15 + H.nutrition -= cost*0.65 if (H.nutrition > 0) return 1 else @@ -409,7 +409,7 @@ stamina = 100 // Long period of sprinting, but relatively low speed gain sprint_speed_factor = 0.55 - sprint_cost_factor = 0.23 + sprint_cost_factor = 0.20 stamina_recovery = 1//slow recovery diff --git a/code/setup.dm b/code/setup.dm index fc258860106..2b443cdae5c 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -1100,7 +1100,7 @@ var/list/be_special_flags = list( #define STOCK_UNCOMMON_PROB 23 //The probability, as a percentage for each item, that we'll choose from the uncommon spawns list -#define STOCK_RARE_PROB 2.8 +#define STOCK_RARE_PROB 2.4 //The probability, as a percentage for each item, that we'll choose from the rare spawns list //If an item is not rare or uncommon, it will be chosen from the common spawns list. From 5cddb85f6e43f678b07718794d906ee03000e934 Mon Sep 17 00:00:00 2001 From: Bedshaped Date: Fri, 18 Nov 2016 20:01:24 +0000 Subject: [PATCH 21/24] Fixes #1164 (#1166) --- code/modules/reagents/reagent_containers/blood_pack.dm | 5 ++--- html/changelogs/Bedshaped-PR-1166.yml | 6 ++++++ 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 html/changelogs/Bedshaped-PR-1166.yml diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 86476938e88..9514f78bdfe 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -66,9 +66,8 @@ ..() /obj/item/weapon/reagent_containers/blood/examine(mob/user, distance = 2) - ..() - if (vampire_marks) - user << "There are teeth marks on it." + if (..() && vampire_marks) + user << "There are teeth marks on it." return /obj/item/weapon/reagent_containers/blood/attackby(obj/item/weapon/P as obj, mob/user as mob) diff --git a/html/changelogs/Bedshaped-PR-1166.yml b/html/changelogs/Bedshaped-PR-1166.yml new file mode 100644 index 00000000000..bb7c89d7deb --- /dev/null +++ b/html/changelogs/Bedshaped-PR-1166.yml @@ -0,0 +1,6 @@ +author: Bedshaped + +delete-after: True + +changes: + - bugfix: "Fixed bitten blood bag message displaying incorrectly." From 265b56d9258a9749006e76774b358088d1ff95c8 Mon Sep 17 00:00:00 2001 From: NanakoAC Date: Fri, 18 Nov 2016 20:02:31 +0000 Subject: [PATCH 22/24] Fixes #1129 (#1169) Fixes going crazy speed when pushing a wheelchair This is a quick fix for now --- code/modules/mob/mob_movement.dm | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 133451546ae..9ce5ab098e3 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -275,7 +275,7 @@ mob.last_move_intent = world.time + 10 - if (mob.buckled || mob.pulledby) + if (mob.buckled) if(istype(mob.buckled, /obj/vehicle)) //manually set move_delay for vehicles so we don't inherit any mob movement penalties //specific vehicle move delays are set in code\modules\vehicles\vehicle.dm @@ -287,8 +287,9 @@ if(istype(mob.loc, /turf/space)) // Wheelchair driving! return // No wheelchair driving in space - if(istype(mob.pulledby, /obj/structure/bed/chair/wheelchair)) - return mob.pulledby.relaymove(mob, direct) + + //TODO: Fuck wheelchairs. + //Toss away all this snowflake code here, and rewrite wheelchairs as a vehicle. else if(istype(mob.buckled, /obj/structure/bed/chair/wheelchair)) var/min_move_delay = 0 if(ishuman(mob.buckled)) @@ -330,6 +331,13 @@ if(mob.machine.relaymove(mob,direct)) return + //Wheelchair pushing goes here for now. + //TODO: Fuck wheelchairs. + if(istype(mob.pulledby, /obj/structure/bed/chair/wheelchair)) + move_delay += 1 + return mob.pulledby.relaymove(mob, direct) + + //We are now going to move moving = 1 From 182d4375be67dd851827937d7e8b06da9d33c78c Mon Sep 17 00:00:00 2001 From: NanakoAC Date: Fri, 18 Nov 2016 20:03:43 +0000 Subject: [PATCH 23/24] Animal healing fix (#1162) Fixes animal healing with food, which i broke a couple patches ago, and healing animals with medical kits, which has never really worked right I tweaked the heal values on the kits slightly, this wont make much difference to healing humans, only to healing animals. Also added a doafter thing to make it a tiny bit more involved. Also adds a little text for animals to make it visible on examination if they're wounded --- code/game/objects/items/stacks/medical.dm | 29 ++++++++++----- .../mob/living/simple_animal/simple_animal.dm | 33 ++++++++--------- html/changelogs/Nanako-Animalhealing.yml | 37 +++++++++++++++++++ 3 files changed, 72 insertions(+), 27 deletions(-) create mode 100644 html/changelogs/Nanako-Animalhealing.yml diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index b7b4dcfe0b2..25817d42730 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -10,8 +10,8 @@ var/heal_brute = 0 var/heal_burn = 0 -/obj/item/stack/medical/attack(mob/living/carbon/M as mob, mob/user as mob) - if (!istype(M)) +/obj/item/stack/medical/attack(mob/living/M as mob, mob/user as mob) + if (!istype(M) || istype(M, /mob/living/silicon)) user << "\red \The [src] cannot be applied to [M]!" return 1 @@ -40,13 +40,21 @@ H.UpdateDamageIcon() else + if (!M.bruteloss && !M.fireloss) + user << " [M] seems healthy, there are no wounds to treat! " + return 1 - M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2)) user.visible_message( \ - "\blue [M] has been applied with [src] by [user].", \ - "\blue You apply \the [src] to [M]." \ - ) - use(1) + " [user] starts applying \the [src] to [M].", \ + " You start applying \the [src] to [M]." \ + ) + if (do_mob(user, M, 30)) + M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2)) + user.visible_message( \ + " [M] has been applied with [src] by [user].", \ + " You apply \the [src] to [M]." \ + ) + use(1) M.updatehealth() /obj/item/stack/medical/bruise_pack @@ -55,6 +63,7 @@ desc = "Some sterile gauze to wrap around bloody stumps." icon_state = "brutepack" origin_tech = "biotech=1" + heal_brute = 4 /obj/item/stack/medical/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob) if(..()) @@ -96,7 +105,7 @@ gender = PLURAL singular_name = "ointment" icon_state = "ointment" - heal_burn = 1 + heal_burn = 4 origin_tech = "biotech=1" /obj/item/stack/medical/ointment/attack(mob/living/carbon/M as mob, mob/user as mob) @@ -127,7 +136,7 @@ singular_name = "advanced trauma kit" desc = "An advanced trauma kit for severe injuries." icon_state = "traumakit" - heal_brute = 12 + heal_brute = 8 origin_tech = "biotech=1" /obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob) @@ -174,7 +183,7 @@ singular_name = "advanced burn kit" desc = "An advanced treatment kit for severe burns." icon_state = "burnkit" - heal_burn = 12 + heal_burn = 8 origin_tech = "biotech=1" diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 359b328c8ba..dea442f4117 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -142,6 +142,11 @@ user << "It looks hungry." else if ((reagents.total_volume > 0 && nutrition > max_nutrition *0.75) || nutrition > max_nutrition *0.9) user << "It looks full and contented." + if (health < maxHealth * 0.5) + user << "It looks badly wounded." + else if (health < maxHealth) + user << "It looks wounded." + /mob/living/simple_animal/Life() ..() @@ -293,7 +298,16 @@ if (istype(current, /datum/reagent/nutriment))//If its food, it feeds us var/datum/reagent/nutriment/N = current nutrition += removed*N.nutriment_factor - health = min(health+(removed*N.regen_factor), maxHealth) + var/heal_amount = removed*N.regen_factor + if (bruteloss > 0) + var/n = min(heal_amount, bruteloss) + adjustBruteLoss(-n) + heal_amount -= n + if (fireloss && heal_amount) + var/n = min(heal_amount, fireloss) + adjustFireLoss(-n) + heal_amount -= n + updatehealth() current.remove_self(removed)//If its not food, it just does nothing. no fancy effects /mob/living/simple_animal/proc/can_eat() @@ -373,22 +387,7 @@ mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj) return /mob/living/simple_animal/attackby(var/obj/item/O, var/mob/user) - if(istype(O, /obj/item/stack/medical)) - user.changeNext_move(4) - if(stat != DEAD) - var/obj/item/stack/medical/MED = O - if(health < maxHealth) - if(MED.amount >= 1) - adjustBruteLoss(-MED.heal_brute) - MED.amount -= 1 - if(MED.amount <= 0) - qdel(MED) - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("[user] applies the [MED] on [src].") - else - user << "\The [src] is dead, medical items won't bring \him back to life." - else if(istype(O, /obj/item/weapon/reagent_containers)) + if(istype(O, /obj/item/weapon/reagent_containers) || istype(O, /obj/item/stack/medical)) ..() else if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead. diff --git a/html/changelogs/Nanako-Animalhealing.yml b/html/changelogs/Nanako-Animalhealing.yml new file mode 100644 index 00000000000..290b2a5c9f8 --- /dev/null +++ b/html/changelogs/Nanako-Animalhealing.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Nanako + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Fixed healing of animals with food, bandages, ointment, and trauma/burn kits. All of these things should work now." + - rscadd: "Animals will now show if they're wounded upon examination." From 355504dabb9342cb2f2f34fddab38853e73c7c64 Mon Sep 17 00:00:00 2001 From: skull132 Date: Fri, 18 Nov 2016 15:05:53 -0500 Subject: [PATCH 24/24] Changelogs - 18NOV2016 --- html/changelog.html | 11 +++++++ html/changelogs/.all_changelog.yml | 7 +++++ html/changelogs/Bedshaped-PR-1166.yml | 6 ---- html/changelogs/Nanako-Animalhealing.yml | 37 ------------------------ 4 files changed, 18 insertions(+), 43 deletions(-) delete mode 100644 html/changelogs/Bedshaped-PR-1166.yml delete mode 100644 html/changelogs/Nanako-Animalhealing.yml diff --git a/html/changelog.html b/html/changelog.html index 11a804af9e7..106dc47c087 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,17 @@ -->
        +

        18 November 2016

        +

        Bedshaped updated:

        +
          +
        • Fixed bitten blood bag message displaying incorrectly.
        • +
        +

        Nanako updated:

        +
          +
        • Fixed healing of animals with food, bandages, ointment, and trauma/burn kits. All of these things should work now.
        • +
        • Animals will now show if they're wounded upon examination.
        • +
        +

        11 November 2016

        Bedshaped updated:

          diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 21be99fa33b..6bfc401e327 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3029,3 +3029,10 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Fixed floor painters being able to be used on non-valid tiles. - bugfix: Fixed magnetic locks unable to be damaged and increased their health. - tweak: Quietened Bosun's whistle. +2016-11-18: + Bedshaped: + - bugfix: Fixed bitten blood bag message displaying incorrectly. + Nanako: + - bugfix: Fixed healing of animals with food, bandages, ointment, and trauma/burn + kits. All of these things should work now. + - rscadd: Animals will now show if they're wounded upon examination. diff --git a/html/changelogs/Bedshaped-PR-1166.yml b/html/changelogs/Bedshaped-PR-1166.yml deleted file mode 100644 index bb7c89d7deb..00000000000 --- a/html/changelogs/Bedshaped-PR-1166.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Bedshaped - -delete-after: True - -changes: - - bugfix: "Fixed bitten blood bag message displaying incorrectly." diff --git a/html/changelogs/Nanako-Animalhealing.yml b/html/changelogs/Nanako-Animalhealing.yml deleted file mode 100644 index 290b2a5c9f8..00000000000 --- a/html/changelogs/Nanako-Animalhealing.yml +++ /dev/null @@ -1,37 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -################################# - -# Your name. -author: Nanako - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. -# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. -changes: - - bugfix: "Fixed healing of animals with food, bandages, ointment, and trauma/burn kits. All of these things should work now." - - rscadd: "Animals will now show if they're wounded upon examination."