From 69e0ebf71e39e5f86d472bbf4508b38d46a122e1 Mon Sep 17 00:00:00 2001 From: Atlantis Date: Sat, 6 Jun 2015 07:21:34 +0200 Subject: [PATCH 01/30] Implements Destroy() for organs - This fixes annoying roundstart GC errors, and should fix other limb/organ related GC errors as well. --- code/modules/organs/organ.dm | 21 +++++++++++++++++++++ code/modules/organs/organ_external.dm | 14 ++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 7e7e2e8178..86620ba50e 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -24,6 +24,27 @@ var/list/organ_cache = list() // links chemical IDs to number of ticks for which they'll stay in the blood germ_level = 0 +/obj/item/organ/Destroy() + if(!owner) + return ..() + + if((owner.internal_organs) && (src in owner.internal_organs)) + owner.internal_organs -= src + + if((owner.internal_organs_by_name) && (src in owner.internal_organs_by_name)) + owner.internal_organs_by_name -= src + + if((owner.organs) && (src in owner.organs)) + owner.internal_organs -= src + + if((owner.organs_by_name) && (src in owner.organs_by_name)) + owner.organs_by_name -= src + + if(src in owner.contents) + owner.contents -= src + + return ..() + /obj/item/organ/proc/update_health() return diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index a92219c733..5434e98acc 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -48,6 +48,20 @@ var/can_grasp var/can_stand +/obj/item/organ/external/Destroy() + if(parent && parent.children) + parent.children -= src + + if(children) + for(var/obj/item/organ/external/C in children) + qdel(C) + + if(internal_organs) + for(var/obj/item/organ/O in internal_organs) + qdel(O) + + return ..() + /obj/item/organ/external/attack_self(var/mob/user) if(!contents.len) return ..() From b16bf61d03930e8841a9db5eda9d0e04036668c6 Mon Sep 17 00:00:00 2001 From: Atlantis Date: Sat, 6 Jun 2015 09:43:39 +0200 Subject: [PATCH 02/30] Implements Destroy() for buildable SMES units. - This also means GC errors for SMES coils and probably cable coils are fixed. Both of these things are in used in SMESs' construction components. --- code/modules/power/smes_construction.dm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm index b2e584c136..0160868a14 100644 --- a/code/modules/power/smes_construction.dm +++ b/code/modules/power/smes_construction.dm @@ -75,6 +75,15 @@ charge = 0 should_be_mapped = 1 +/obj/machinery/power/smes/buildable/Destroy() + qdel(wires) + if(component_parts) + for(var/atom/A in component_parts) + qdel(A) + + return ..() + + // Proc: process() // Parameters: None // Description: Uses parent process, but if grounding wire is cut causes sparks to fly around. From 8a5a969002aede928a7b8a6bfcc2e6f938d1b7c5 Mon Sep 17 00:00:00 2001 From: Atlantis Date: Sat, 6 Jun 2015 11:04:41 +0200 Subject: [PATCH 03/30] More Destroy()s, better implementation - Re-implements Destroy() for SMES units. This time moves relevant (de)construction code all the way up to obj/machinery/. This should fix any potential GC issues with deconstruction of component-based machines. - Implements Destroy() for breaker boxes. - Fixes SMES units lacking disconnect_terminal(), causing GC errors. --- code/game/machinery/machinery.dm | 9 +++++++++ code/modules/power/breaker_box.dm | 5 +++++ code/modules/power/power.dm | 2 ++ code/modules/power/smes.dm | 8 +++++--- code/modules/power/smes_construction.dm | 9 ++++----- 5 files changed, 25 insertions(+), 8 deletions(-) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index d9b579ab03..313efe3bb2 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -123,6 +123,15 @@ Class Procs: /obj/machinery/Destroy() machines -= src + if(component_parts) + for(var/atom/A in component_parts) + if(A.loc == src) // If the components are inside the machine, delete them. + qdel(A) + else // Otherwise we assume they were dropped to the ground during deconstruction, and were not removed from the component_parts list by deconstruction code. + component_parts -= A + if(contents) // The same for contents. + for(var/atom/A in contents) + qdel(A) ..() /obj/machinery/process()//If you dont use process or power why are you here diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm index 2faa50a4e6..5930dd53e7 100644 --- a/code/modules/power/breaker_box.dm +++ b/code/modules/power/breaker_box.dm @@ -19,6 +19,11 @@ var/RCon_tag = "NO_TAG" var/update_locked = 0 +/obj/machinery/power/breakerbox/Destroy() + ..() + for(var/obj/nano_module/rcon/R in world) + R.FindDevices() + /obj/machinery/power/breakerbox/activated icon_state = "bbox_on" diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 3b9d094bda..7d51af8e35 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -17,6 +17,8 @@ /obj/machinery/power/Destroy() disconnect_from_network() + disconnect_terminal() + ..() /////////////////////////////// diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index e42c5289b7..5fcffca120 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -84,10 +84,12 @@ return -/obj/machinery/power/smes/Destroy() +/obj/machinery/power/smes/disconnect_terminal() if(terminal) - disconnect_terminal() - ..() + terminal.master = null + terminal = null + return 1 + return 0 /obj/machinery/power/smes/update_icon() overlays.Cut() diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm index 0160868a14..095c172aac 100644 --- a/code/modules/power/smes_construction.dm +++ b/code/modules/power/smes_construction.dm @@ -76,12 +76,10 @@ should_be_mapped = 1 /obj/machinery/power/smes/buildable/Destroy() + ..() qdel(wires) - if(component_parts) - for(var/atom/A in component_parts) - qdel(A) - - return ..() + for(var/obj/nano_module/rcon/R in world) + R.FindDevices() // Proc: process() @@ -354,6 +352,7 @@ if(I.reliability != 100 && crit_fail) I.crit_fail = 1 I.loc = src.loc + component_parts -= I qdel(src) return From bb33905803b2ab179b8ea9b66fc70249a476ea0c Mon Sep 17 00:00:00 2001 From: Atlantis Date: Sun, 7 Jun 2015 05:29:43 +0200 Subject: [PATCH 04/30] Fixes minor typo in organ Destroy() --- code/modules/organs/organ.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 86620ba50e..933c1de708 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -35,7 +35,7 @@ var/list/organ_cache = list() owner.internal_organs_by_name -= src if((owner.organs) && (src in owner.organs)) - owner.internal_organs -= src + owner.organs -= src if((owner.organs_by_name) && (src in owner.organs_by_name)) owner.organs_by_name -= src From 0135051498b00883e6a70686c513b5cbeb330124 Mon Sep 17 00:00:00 2001 From: Atlantis Date: Sun, 7 Jun 2015 06:43:50 +0200 Subject: [PATCH 05/30] Fixes #9706 - Adds checks whether the turf exists. This should prevent runtimes. - Moves ..() call in food/snacks/grown after seed.thrown_at() call. I believe this was causing the runtime in first place. --- code/modules/hydroponics/grown.dm | 2 +- code/modules/hydroponics/seed.dm | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 8b7678f19f..931ce29d19 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -167,8 +167,8 @@ return /obj/item/weapon/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom) - ..() if(seed) seed.thrown_at(src,hit_atom) + ..() /obj/item/weapon/reagent_containers/food/snacks/grown/attackby(var/obj/item/weapon/W, var/mob/user) diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 9fd666fbb6..59bc3481d9 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -229,7 +229,8 @@ for(var/mob/living/M in T.contents) apply_special_effect(M) splatter(T,thrown) - origin_turf.visible_message("The [thrown.name] explodes!") + if(origin_turf) + origin_turf.visible_message("The [thrown.name] explodes!") qdel(thrown) return @@ -242,7 +243,8 @@ if(get_trait(TRAIT_JUICY) && splatted) splatter(origin_turf,thrown) - origin_turf.visible_message("The [thrown.name] splatters against [target]!") + if(origin_turf) + origin_turf.visible_message("The [thrown.name] splatters against [target]!") qdel(thrown) /datum/seed/proc/handle_environment(var/turf/current_turf, var/datum/gas_mixture/environment, var/light_supplied, var/check_only) From 4b04b867ac7ff48ac5de56758331db83ae13ca16 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 10 Jun 2015 12:32:50 +0930 Subject: [PATCH 06/30] Fxes #9625 --- code/modules/hydroponics/spreading/spreading.dm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index e62a96c2ce..87894c6d73 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -196,16 +196,19 @@ layer = 3 density = 0 -/obj/effect/plant/proc/calc_dir(turf/location = loc) +/obj/effect/plant/proc/calc_dir() set background = 1 + var/turf/T = get_turf(src) + if(!istype(T)) return + var/direction = 16 for(var/wallDir in cardinal) - var/turf/newTurf = get_step(location,wallDir) + var/turf/newTurf = get_step(T,wallDir) if(newTurf.density) direction |= wallDir - for(var/obj/effect/plant/shroom in location) + for(var/obj/effect/plant/shroom in T.contents) if(shroom == src) continue if(shroom.floor) //special From 8a2c0226dcf6daeae6434a7aefc9866205bfdf84 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 10 Jun 2015 12:45:03 +0930 Subject: [PATCH 07/30] Fixes #9597 --- code/modules/materials/materials.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 710e8caf9d..0409a8b7f1 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -273,7 +273,7 @@ var/list/name_to_material hardness = 80 weight = 23 stack_origin_tech = "materials=2" - composite_material = list() //todo + composite_material = list(DEFAULT_WALL_MATERIAL = 3750, "platinum" = 3750) //todo /material/glass name = "glass" @@ -316,7 +316,7 @@ var/list/name_to_material hardness = 40 weight = 30 stack_origin_tech = "materials=2" - composite_material = list() //todo + composite_material = list(DEFAULT_WALL_MATERIAL = 1875,"glass" = 3750) /material/plastic name = "plastic" From 018c3fc2aa4ebb00ea46360a5db0df7d8fd2d9be Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 10 Jun 2015 13:21:07 +0930 Subject: [PATCH 08/30] Fixes #9517 and #9542 --- code/modules/mob/freelook/mask/update_triggers.dm | 2 +- code/modules/mob/living/simple_animal/simple_animal.dm | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/freelook/mask/update_triggers.dm b/code/modules/mob/freelook/mask/update_triggers.dm index a8e68058fd..8100a309a2 100644 --- a/code/modules/mob/freelook/mask/update_triggers.dm +++ b/code/modules/mob/freelook/mask/update_triggers.dm @@ -35,7 +35,7 @@ cultnet.updateVisibility(src, 0) /mob/living/death(gibbed, deathmessage="seizes up and falls limp...") - if(..()) + if(..(gibbed, deathmessage)) // If true, the mob went from living to dead (assuming everyone has been overriding as they should...) cultnet.updateVisibility(src) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index e2ec5059a2..4b33818033 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -295,7 +295,7 @@ if(!O.force) visible_message("[user] gently taps [src] with \the [O].") return - + if(O.force > resistance) var/damage = O.force if (O.damtype == HALLOSS) @@ -306,8 +306,8 @@ adjustBruteLoss(damage) else usr << "[src] has been attacked with the [O] by [user].") + + visible_message("\The [src] has been attacked with the [O] by [user].") user.do_attack_animation(src) /mob/living/simple_animal/movement_delay() @@ -327,10 +327,10 @@ if(statpanel("Status") && show_stat_health) stat(null, "Health: [round((health / maxHealth) * 100)]%") -/mob/living/simple_animal/death(gibbed, deathmessage="") +/mob/living/simple_animal/death(gibbed, deathmessage = "dies!") icon_state = icon_dead density = 0 - return ..() + return ..(gibbed,deathmessage) /mob/living/simple_animal/ex_act(severity) if(!blinded) From cef958cac2f52aeaa90983d7c73bd2ec844130e4 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 10 Jun 2015 14:19:55 +0930 Subject: [PATCH 09/30] Fixes #9503 --- code/datums/mind.dm | 758 ++++++++---------- .../mob/living/carbon/brain/posibrain.dm | 1 + code/modules/mob/mob.dm | 3 +- 3 files changed, 347 insertions(+), 415 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index cfbd155145..fac5c75fc3 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -29,7 +29,7 @@ */ -datum/mind +/datum/mind var/key var/name //replaces mob/var/original_name var/mob/living/current @@ -58,459 +58,389 @@ datum/mind // the world.time since the mob has been brigged, or -1 if not at all var/brigged_since = -1 - New(var/key) - src.key = key - //put this here for easier tracking ingame var/datum/money_account/initial_account - proc/transfer_to(mob/living/new_character) - if(!istype(new_character)) - world.log << "## DEBUG: transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob. Please inform Carn" - if(current) //remove ourself from our old body's mind variable - if(changeling) - current.remove_changeling_powers() - current.verbs -= /datum/changeling/proc/EvolutionMenu - current.mind = null +/datum/mind/New(var/key) + src.key = key - nanomanager.user_transferred(current, new_character) // transfer active NanoUI instances to new user - if(new_character.mind) //remove any mind currently in our new body's mind variable - new_character.mind.current = null - - current = new_character //link ourself to our new body - new_character.mind = src //and link our new body to ourself +/datum/mind/proc/transfer_to(mob/living/new_character) + if(!istype(new_character)) + world.log << "## DEBUG: transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob. Please inform Carn" + if(current) //remove ourself from our old body's mind variable if(changeling) - new_character.make_changeling() + current.remove_changeling_powers() + current.verbs -= /datum/changeling/proc/EvolutionMenu + current.mind = null - if(active) - new_character.key = key //now transfer the key to link the client to our new body + nanomanager.user_transferred(current, new_character) // transfer active NanoUI instances to new user + if(new_character.mind) //remove any mind currently in our new body's mind variable + new_character.mind.current = null - proc/store_memory(new_text) - memory += "[new_text]
" + current = new_character //link ourself to our new body + new_character.mind = src //and link our new body to ourself - proc/show_memory(mob/recipient) - var/output = "[current.real_name]'s Memory
" - output += memory + if(changeling) + new_character.make_changeling() - if(objectives.len>0) - output += "
Objectives:" + if(active) + new_character.key = key //now transfer the key to link the client to our new body - var/obj_count = 1 - for(var/datum/objective/objective in objectives) - output += "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ +/datum/mind/proc/store_memory(new_text) + memory += "[new_text]
" - recipient << browse(output,"window=memory") +/datum/mind/proc/show_memory(mob/recipient) + var/output = "[current.real_name]'s Memory
" + output += memory - proc/edit_memory() - if(!ticker || !ticker.mode) - alert("Not before round-start!", "Alert") - return + if(objectives.len>0) + output += "
Objectives:" - var/out = "[name][(current&&(current.real_name!=name))?" (as [current.real_name])":""]
" - out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
" - out += "Assigned role: [assigned_role]. Edit
" - out += "
" - out += "Factions and special roles:
" - for(var/antag_type in all_antag_types) - var/datum/antagonist/antag = all_antag_types[antag_type] - out += "[antag.get_panel_entry(src)]" - out += "

" - out += "Objectives
" + var/obj_count = 1 + for(var/datum/objective/objective in objectives) + output += "Objective #[obj_count]: [objective.explanation_text]" + obj_count++ - if(objectives && objectives.len) - var/num = 1 - for(var/datum/objective/O in objectives) - out += "Objective #[num]: [O.explanation_text] " - if(O.completed) - out += "(complete)" - else - out += "(incomplete)" - out += " \[toggle\]" - out += " \[remove\]
" - num++ - out += "
\[announce objectives\]" + recipient << browse(output,"window=memory") - else - out += "None." - out += "
\[add\]" - usr << browse(out, "window=edit_memory[src]") +/datum/mind/proc/edit_memory() + if(!ticker || !ticker.mode) + alert("Not before round-start!", "Alert") + return - Topic(href, href_list) - if(!check_rights(R_ADMIN)) return + var/out = "[name][(current&&(current.real_name!=name))?" (as [current.real_name])":""]
" + out += "Mind currently owned by key: [key] [active?"(synced)":"(not synced)"]
" + out += "Assigned role: [assigned_role]. Edit
" + out += "
" + out += "Factions and special roles:
" + for(var/antag_type in all_antag_types) + var/datum/antagonist/antag = all_antag_types[antag_type] + out += "[antag.get_panel_entry(src)]" + out += "

" + out += "Objectives
" - if(href_list["add_antagonist"]) - var/datum/antagonist/antag = all_antag_types[href_list["add_antagonist"]] - if(antag) antag.add_antagonist(src) - - else if(href_list["remove_antagonist"]) - var/datum/antagonist/antag = all_antag_types[href_list["remove_antagonist"]] - if(antag) antag.remove_antagonist(src) - - else if(href_list["equip_antagonist"]) - var/datum/antagonist/antag = all_antag_types[href_list["equip_antagonist"]] - if(antag) antag.equip(src.current) - - else if(href_list["unequip_antagonist"]) - var/datum/antagonist/antag = all_antag_types[href_list["unequip_antagonist"]] - if(antag) antag.unequip(src.current) - - else if(href_list["move_antag_to_spawn"]) - var/datum/antagonist/antag = all_antag_types[href_list["move_antag_to_spawn"]] - if(antag) antag.place_mob(src.current) - - else if (href_list["role_edit"]) - var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in joblist - if (!new_role) return - assigned_role = new_role - - else if (href_list["memory_edit"]) - var/new_memo = sanitize(input("Write new memory", "Memory", memory) as null|message) - if (isnull(new_memo)) return - memory = new_memo - - else if (href_list["obj_edit"] || href_list["obj_add"]) - var/datum/objective/objective - var/objective_pos - var/def_value - - if (href_list["obj_edit"]) - objective = locate(href_list["obj_edit"]) - if (!objective) return - objective_pos = objectives.Find(objective) - - //Text strings are easy to manipulate. Revised for simplicity. - var/temp_obj_type = "[objective.type]"//Convert path into a text string. - def_value = copytext(temp_obj_type, 19)//Convert last part of path into an objective keyword. - if(!def_value)//If it's a custom objective, it will be an empty string. - def_value = "custom" - - var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "debrain", "protect", "prevent", "harm", "brig", "hijack", "escape", "survive", "steal", "download", "mercenary", "capture", "absorb", "custom") - if (!new_obj_type) return - - var/datum/objective/new_objective = null - - switch (new_obj_type) - if ("assassinate","protect","debrain", "harm", "brig") - //To determine what to name the objective in explanation text. - var/objective_type_capital = uppertext(copytext(new_obj_type, 1,2))//Capitalize first letter. - var/objective_type_text = copytext(new_obj_type, 2)//Leave the rest of the text. - var/objective_type = "[objective_type_capital][objective_type_text]"//Add them together into a text string. - - var/list/possible_targets = list("Free objective") - for(var/datum/mind/possible_target in ticker.minds) - if ((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human)) - possible_targets += possible_target.current - - var/mob/def_target = null - var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain) - if (objective&&(objective.type in objective_list) && objective:target) - def_target = objective:target.current - - var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets - if (!new_target) return - - var/objective_path = text2path("/datum/objective/[new_obj_type]") - if (new_target == "Free objective") - new_objective = new objective_path - new_objective.owner = src - new_objective:target = null - new_objective.explanation_text = "Free objective" - else - new_objective = new objective_path - new_objective.owner = src - new_objective:target = new_target:mind - //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops. - new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role=="MODE" ? (new_target:mind:special_role) : (new_target:mind:assigned_role)]." - - if ("prevent") - new_objective = new /datum/objective/block - new_objective.owner = src - - if ("hijack") - new_objective = new /datum/objective/hijack - new_objective.owner = src - - if ("escape") - new_objective = new /datum/objective/escape - new_objective.owner = src - - if ("survive") - new_objective = new /datum/objective/survive - new_objective.owner = src - - if ("mercenary") - new_objective = new /datum/objective/nuclear - new_objective.owner = src - - if ("steal") - if (!istype(objective, /datum/objective/steal)) - new_objective = new /datum/objective/steal - new_objective.owner = src - else - new_objective = objective - var/datum/objective/steal/steal = new_objective - if (!steal.select_target()) - return - - if("download","capture","absorb") - var/def_num - if(objective&&objective.type==text2path("/datum/objective/[new_obj_type]")) - def_num = objective.target_amount - - var/target_number = input("Input target number:", "Objective", def_num) as num|null - if (isnull(target_number))//Ordinarily, you wouldn't need isnull. In this case, the value may already exist. - return - - switch(new_obj_type) - if("download") - new_objective = new /datum/objective/download - new_objective.explanation_text = "Download [target_number] research levels." - if("capture") - new_objective = new /datum/objective/capture - new_objective.explanation_text = "Accumulate [target_number] capture points." - if("absorb") - new_objective = new /datum/objective/absorb - new_objective.explanation_text = "Absorb [target_number] compatible genomes." - new_objective.owner = src - new_objective.target_amount = target_number - - if ("custom") - var/expl = sanitize(input("Custom objective:", "Objective", objective ? objective.explanation_text : "") as text|null) - if (!expl) return - new_objective = new /datum/objective - new_objective.owner = src - new_objective.explanation_text = expl - - if (!new_objective) return - - if (objective) - objectives -= objective - objectives.Insert(objective_pos, new_objective) + if(objectives && objectives.len) + var/num = 1 + for(var/datum/objective/O in objectives) + out += "Objective #[num]: [O.explanation_text] " + if(O.completed) + out += "(complete)" else - objectives += new_objective + out += "(incomplete)" + out += " \[toggle\]" + out += " \[remove\]
" + num++ + out += "
\[announce objectives\]" - else if (href_list["obj_delete"]) - var/datum/objective/objective = locate(href_list["obj_delete"]) - if(!istype(objective)) return - objectives -= objective + else + out += "None." + out += "
\[add\]" + usr << browse(out, "window=edit_memory[src]") - else if(href_list["obj_completed"]) - var/datum/objective/objective = locate(href_list["obj_completed"]) - if(!istype(objective)) return - objective.completed = !objective.completed +/datum/mind/Topic(href, href_list) + if(!check_rights(R_ADMIN)) return - else if(href_list["implant"]) - var/mob/living/carbon/human/H = current + if(href_list["add_antagonist"]) + var/datum/antagonist/antag = all_antag_types[href_list["add_antagonist"]] + if(antag) antag.add_antagonist(src) - BITSET(H.hud_updateflag, IMPLOYAL_HUD) // updates that players HUD images so secHUD's pick up they are implanted or not. + else if(href_list["remove_antagonist"]) + var/datum/antagonist/antag = all_antag_types[href_list["remove_antagonist"]] + if(antag) antag.remove_antagonist(src) - switch(href_list["implant"]) - if("remove") - for(var/obj/item/weapon/implant/loyalty/I in H.contents) - for(var/obj/item/organ/external/organs in H.organs) - if(I in organs.implants) - qdel(I) - break - H << "Your loyalty implant has been deactivated." - log_admin("[key_name_admin(usr)] has de-loyalty implanted [current].") - if("add") - H << "You somehow have become the recepient of a loyalty transplant, and it just activated!" - H.implant_loyalty(H, override = TRUE) - log_admin("[key_name_admin(usr)] has loyalty implanted [current].") + else if(href_list["equip_antagonist"]) + var/datum/antagonist/antag = all_antag_types[href_list["equip_antagonist"]] + if(antag) antag.equip(src.current) + + else if(href_list["unequip_antagonist"]) + var/datum/antagonist/antag = all_antag_types[href_list["unequip_antagonist"]] + if(antag) antag.unequip(src.current) + + else if(href_list["move_antag_to_spawn"]) + var/datum/antagonist/antag = all_antag_types[href_list["move_antag_to_spawn"]] + if(antag) antag.place_mob(src.current) + + else if (href_list["role_edit"]) + var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in joblist + if (!new_role) return + assigned_role = new_role + + else if (href_list["memory_edit"]) + var/new_memo = sanitize(input("Write new memory", "Memory", memory) as null|message) + if (isnull(new_memo)) return + memory = new_memo + + else if (href_list["obj_edit"] || href_list["obj_add"]) + var/datum/objective/objective + var/objective_pos + var/def_value + + if (href_list["obj_edit"]) + objective = locate(href_list["obj_edit"]) + if (!objective) return + objective_pos = objectives.Find(objective) + + //Text strings are easy to manipulate. Revised for simplicity. + var/temp_obj_type = "[objective.type]"//Convert path into a text string. + def_value = copytext(temp_obj_type, 19)//Convert last part of path into an objective keyword. + if(!def_value)//If it's a custom objective, it will be an empty string. + def_value = "custom" + + var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "debrain", "protect", "prevent", "harm", "brig", "hijack", "escape", "survive", "steal", "download", "mercenary", "capture", "absorb", "custom") + if (!new_obj_type) return + + var/datum/objective/new_objective = null + + switch (new_obj_type) + if ("assassinate","protect","debrain", "harm", "brig") + //To determine what to name the objective in explanation text. + var/objective_type_capital = uppertext(copytext(new_obj_type, 1,2))//Capitalize first letter. + var/objective_type_text = copytext(new_obj_type, 2)//Leave the rest of the text. + var/objective_type = "[objective_type_capital][objective_type_text]"//Add them together into a text string. + + var/list/possible_targets = list("Free objective") + for(var/datum/mind/possible_target in ticker.minds) + if ((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human)) + possible_targets += possible_target.current + + var/mob/def_target = null + var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain) + if (objective&&(objective.type in objective_list) && objective:target) + def_target = objective:target.current + + var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets + if (!new_target) return + + var/objective_path = text2path("/datum/objective/[new_obj_type]") + if (new_target == "Free objective") + new_objective = new objective_path + new_objective.owner = src + new_objective:target = null + new_objective.explanation_text = "Free objective" else - /* - else if (href_list["monkey"]) - var/mob/living/L = current - if (L.monkeyizing) - return - switch(href_list["monkey"]) - if("healthy") - if (usr.client.holder.rights & R_ADMIN) - var/mob/living/carbon/human/H = current - var/mob/living/carbon/monkey/M = current - if (istype(H)) - log_admin("[key_name(usr)] attempting to monkeyize [key_name(current)]") - message_admins("\blue [key_name_admin(usr)] attempting to monkeyize [key_name_admin(current)]") - src = null - M = H.monkeyize() - src = M.mind - //world << "DEBUG: \"healthy\": M=[M], M.mind=[M.mind], src=[src]!" - else if (istype(M) && length(M.viruses)) - for(var/datum/disease/D in M.viruses) - D.cure(0) - sleep(0) //because deleting of virus is done through spawn(0) - if("infected") - if (usr.client.holder.rights & R_ADMIN) - var/mob/living/carbon/human/H = current - var/mob/living/carbon/monkey/M = current - if (istype(H)) - log_admin("[key_name(usr)] attempting to monkeyize and infect [key_name(current)]") - message_admins("\blue [key_name_admin(usr)] attempting to monkeyize and infect [key_name_admin(current)]", 1) - src = null - M = H.monkeyize() - src = M.mind - current.contract_disease(new /datum/disease/jungle_fever,1,0) - else if (istype(M)) - current.contract_disease(new /datum/disease/jungle_fever,1,0) - if("human") - var/mob/living/carbon/monkey/M = current - if (istype(M)) - for(var/datum/disease/D in M.viruses) - if (istype(D,/datum/disease/jungle_fever)) - D.cure(0) - sleep(0) //because deleting of virus is doing throught spawn(0) - log_admin("[key_name(usr)] attempting to humanize [key_name(current)]") - message_admins("\blue [key_name_admin(usr)] attempting to humanize [key_name_admin(current)]") - var/obj/item/weapon/dnainjector/m2h/m2h = new - var/obj/item/weapon/implant/mobfinder = new(M) //hack because humanizing deletes mind --rastaf0 - src = null - m2h.inject(M) - src = mobfinder.loc:mind - qdel(mobfinder) - current.radiation -= 50 - */ - else if (href_list["silicon"]) - BITSET(current.hud_updateflag, SPECIALROLE_HUD) - switch(href_list["silicon"]) + new_objective = new objective_path + new_objective.owner = src + new_objective:target = new_target:mind + //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops. + new_objective.explanation_text = "[objective_type] [new_target:real_name], the [new_target:mind:assigned_role=="MODE" ? (new_target:mind:special_role) : (new_target:mind:assigned_role)]." - if("unemag") - var/mob/living/silicon/robot/R = current - if (istype(R)) + if ("prevent") + new_objective = new /datum/objective/block + new_objective.owner = src + + if ("hijack") + new_objective = new /datum/objective/hijack + new_objective.owner = src + + if ("escape") + new_objective = new /datum/objective/escape + new_objective.owner = src + + if ("survive") + new_objective = new /datum/objective/survive + new_objective.owner = src + + if ("mercenary") + new_objective = new /datum/objective/nuclear + new_objective.owner = src + + if ("steal") + if (!istype(objective, /datum/objective/steal)) + new_objective = new /datum/objective/steal + new_objective.owner = src + else + new_objective = objective + var/datum/objective/steal/steal = new_objective + if (!steal.select_target()) + return + + if("download","capture","absorb") + var/def_num + if(objective&&objective.type==text2path("/datum/objective/[new_obj_type]")) + def_num = objective.target_amount + + var/target_number = input("Input target number:", "Objective", def_num) as num|null + if (isnull(target_number))//Ordinarily, you wouldn't need isnull. In this case, the value may already exist. + return + + switch(new_obj_type) + if("download") + new_objective = new /datum/objective/download + new_objective.explanation_text = "Download [target_number] research levels." + if("capture") + new_objective = new /datum/objective/capture + new_objective.explanation_text = "Accumulate [target_number] capture points." + if("absorb") + new_objective = new /datum/objective/absorb + new_objective.explanation_text = "Absorb [target_number] compatible genomes." + new_objective.owner = src + new_objective.target_amount = target_number + + if ("custom") + var/expl = sanitize(input("Custom objective:", "Objective", objective ? objective.explanation_text : "") as text|null) + if (!expl) return + new_objective = new /datum/objective + new_objective.owner = src + new_objective.explanation_text = expl + + if (!new_objective) return + + if (objective) + objectives -= objective + objectives.Insert(objective_pos, new_objective) + else + objectives += new_objective + + else if (href_list["obj_delete"]) + var/datum/objective/objective = locate(href_list["obj_delete"]) + if(!istype(objective)) return + objectives -= objective + + else if(href_list["obj_completed"]) + var/datum/objective/objective = locate(href_list["obj_completed"]) + if(!istype(objective)) return + objective.completed = !objective.completed + + else if(href_list["implant"]) + var/mob/living/carbon/human/H = current + + BITSET(H.hud_updateflag, IMPLOYAL_HUD) // updates that players HUD images so secHUD's pick up they are implanted or not. + + switch(href_list["implant"]) + if("remove") + for(var/obj/item/weapon/implant/loyalty/I in H.contents) + for(var/obj/item/organ/external/organs in H.organs) + if(I in organs.implants) + qdel(I) + break + H << "Your loyalty implant has been deactivated." + log_admin("[key_name_admin(usr)] has de-loyalty implanted [current].") + if("add") + H << "You somehow have become the recepient of a loyalty transplant, and it just activated!" + H.implant_loyalty(H, override = TRUE) + log_admin("[key_name_admin(usr)] has loyalty implanted [current].") + else + else if (href_list["silicon"]) + BITSET(current.hud_updateflag, SPECIALROLE_HUD) + switch(href_list["silicon"]) + + if("unemag") + var/mob/living/silicon/robot/R = current + if (istype(R)) + R.emagged = 0 + if (R.activated(R.module.emag)) + R.module_active = null + if(R.module_state_1 == R.module.emag) + R.module_state_1 = null + R.contents -= R.module.emag + else if(R.module_state_2 == R.module.emag) + R.module_state_2 = null + R.contents -= R.module.emag + else if(R.module_state_3 == R.module.emag) + R.module_state_3 = null + R.contents -= R.module.emag + log_admin("[key_name_admin(usr)] has unemag'ed [R].") + + if("unemagcyborgs") + if (istype(current, /mob/living/silicon/ai)) + var/mob/living/silicon/ai/ai = current + for (var/mob/living/silicon/robot/R in ai.connected_robots) R.emagged = 0 - if (R.activated(R.module.emag)) - R.module_active = null - if(R.module_state_1 == R.module.emag) - R.module_state_1 = null - R.contents -= R.module.emag - else if(R.module_state_2 == R.module.emag) - R.module_state_2 = null - R.contents -= R.module.emag - else if(R.module_state_3 == R.module.emag) - R.module_state_3 = null - R.contents -= R.module.emag - log_admin("[key_name_admin(usr)] has unemag'ed [R].") + if (R.module) + if (R.activated(R.module.emag)) + R.module_active = null + if(R.module_state_1 == R.module.emag) + R.module_state_1 = null + R.contents -= R.module.emag + else if(R.module_state_2 == R.module.emag) + R.module_state_2 = null + R.contents -= R.module.emag + else if(R.module_state_3 == R.module.emag) + R.module_state_3 = null + R.contents -= R.module.emag + log_admin("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.") - if("unemagcyborgs") - if (istype(current, /mob/living/silicon/ai)) - var/mob/living/silicon/ai/ai = current - for (var/mob/living/silicon/robot/R in ai.connected_robots) - R.emagged = 0 - if (R.module) - if (R.activated(R.module.emag)) - R.module_active = null - if(R.module_state_1 == R.module.emag) - R.module_state_1 = null - R.contents -= R.module.emag - else if(R.module_state_2 == R.module.emag) - R.module_state_2 = null - R.contents -= R.module.emag - else if(R.module_state_3 == R.module.emag) - R.module_state_3 = null - R.contents -= R.module.emag - log_admin("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.") - - else if (href_list["common"]) - switch(href_list["common"]) - if("undress") - for(var/obj/item/W in current) - current.drop_from_inventory(W) - if("takeuplink") - take_uplink() - memory = null//Remove any memory they may have had. - if("crystals") - if (usr.client.holder.rights & R_FUN) - var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink() - var/crystals + else if (href_list["common"]) + switch(href_list["common"]) + if("undress") + for(var/obj/item/W in current) + current.drop_from_inventory(W) + if("takeuplink") + take_uplink() + memory = null//Remove any memory they may have had. + if("crystals") + if (usr.client.holder.rights & R_FUN) + var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink() + var/crystals + if (suplink) + crystals = suplink.uses + crystals = input("Amount of telecrystals for [key]","Operative uplink", crystals) as null|num + if (!isnull(crystals)) if (suplink) - crystals = suplink.uses - crystals = input("Amount of telecrystals for [key]","Operative uplink", crystals) as null|num - if (!isnull(crystals)) - if (suplink) - suplink.uses = crystals + suplink.uses = crystals - else if (href_list["obj_announce"]) - var/obj_count = 1 - current << "\blue Your current objectives:" - for(var/datum/objective/objective in objectives) - current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - edit_memory() -/* - proc/clear_memory(var/silent = 1) - var/datum/game_mode/current_mode = ticker.mode + else if (href_list["obj_announce"]) + var/obj_count = 1 + current << "\blue Your current objectives:" + for(var/datum/objective/objective in objectives) + current << "Objective #[obj_count]: [objective.explanation_text]" + obj_count++ + edit_memory() - // remove traitor uplinks - var/list/L = current.get_contents() - for (var/t in L) - if (istype(t, /obj/item/device/pda)) - if (t:uplink) qdel(t:uplink) - t:uplink = null - else if (istype(t, /obj/item/device/radio)) - if (t:traitorradio) qdel(t:traitorradio) - t:traitorradio = null - t:traitor_frequency = 0.0 - else if (istype(t, /obj/item/weapon/SWF_uplink) || istype(t, /obj/item/weapon/syndicate_uplink)) - if (t:origradio) - var/obj/item/device/radio/R = t:origradio - R.loc = current.loc - R.traitorradio = null - R.traitor_frequency = 0.0 - qdel(t) +/datum/mind/proc/find_syndicate_uplink() + var/list/L = current.get_contents() + for (var/obj/item/I in L) + if (I.hidden_uplink) + return I.hidden_uplink + return null - // remove wizards spells - //If there are more special powers that need removal, they can be procced into here./N - current.spellremove(current) - - // clear memory - memory = "" - special_role = null - -*/ - - proc/find_syndicate_uplink() - var/list/L = current.get_contents() - for (var/obj/item/I in L) - if (I.hidden_uplink) - return I.hidden_uplink - return null - - proc/take_uplink() - var/obj/item/device/uplink/hidden/H = find_syndicate_uplink() - if(H) - qdel(H) +/datum/mind/proc/take_uplink() + var/obj/item/device/uplink/hidden/H = find_syndicate_uplink() + if(H) + qdel(H) - // check whether this mind's mob has been brigged for the given duration - // have to call this periodically for the duration to work properly - proc/is_brigged(duration) - var/turf/T = current.loc - if(!istype(T)) - brigged_since = -1 - return 0 - - var/is_currently_brigged = 0 - - if(istype(T.loc,/area/security/brig)) - is_currently_brigged = 1 - for(var/obj/item/weapon/card/id/card in current) +// check whether this mind's mob has been brigged for the given duration +// have to call this periodically for the duration to work properly +/datum/mind/proc/is_brigged(duration) + var/turf/T = current.loc + if(!istype(T)) + brigged_since = -1 + return 0 + var/is_currently_brigged = 0 + if(istype(T.loc,/area/security/brig)) + is_currently_brigged = 1 + for(var/obj/item/weapon/card/id/card in current) + is_currently_brigged = 0 + break // if they still have ID they're not brigged + for(var/obj/item/device/pda/P in current) + if(P.id) is_currently_brigged = 0 break // if they still have ID they're not brigged - for(var/obj/item/device/pda/P in current) - if(P.id) - is_currently_brigged = 0 - break // if they still have ID they're not brigged - if(!is_currently_brigged) - brigged_since = -1 - return 0 + if(!is_currently_brigged) + brigged_since = -1 + return 0 - if(brigged_since == -1) - brigged_since = world.time + if(brigged_since == -1) + brigged_since = world.time - return (duration <= world.time - brigged_since) + return (duration <= world.time - brigged_since) +/datum/mind/proc/reset() + assigned_role = null + special_role = null + role_alt_title = null + assigned_job = null + //faction = null //Uncommenting this causes a compile error due to 'undefined type', fucked if I know. + changeling = null + initial_account = null + objectives = list() + special_verbs = list() + has_been_rev = 0 + rev_cooldown = 0 + brigged_since = -1 //Antagonist role check /mob/living/proc/check_special_role(role) diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index b9ff795aaa..5d66d68695 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -60,6 +60,7 @@ src.searching = 0 src.brainmob.mind = candidate.mind src.brainmob.ckey = candidate.ckey + src.brainmob.mind.reset() src.name = "positronic brain ([src.brainmob.name])" src.brainmob << "You are a positronic brain, brought into existence on [station_name()]." src.brainmob << "As a synthetic intelligence, you answer to all crewmembers, as well as the AI." diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 0ff35abdca..50dfbbfe93 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -362,7 +362,8 @@ return M.key = key -// M.Login() //wat + if(M.mind) + M.mind.reset() return /client/verb/changes() From 48b063a96eb8bdbefe4dd1fc28aa228f4ffa03c2 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 10 Jun 2015 21:57:00 +0930 Subject: [PATCH 10/30] Fixes #9620 --- code/modules/hydroponics/_hydro_setup.dm | 3 +- code/modules/hydroponics/grown.dm | 49 ++++++++++++++++++++++- code/modules/hydroponics/seed.dm | 6 ++- code/modules/hydroponics/seed_datums.dm | 2 + icons/obj/hydroponics_misc.dmi | Bin 0 -> 337 bytes 5 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 icons/obj/hydroponics_misc.dmi diff --git a/code/modules/hydroponics/_hydro_setup.dm b/code/modules/hydroponics/_hydro_setup.dm index a3fd4604a6..4641aa3ace 100644 --- a/code/modules/hydroponics/_hydro_setup.dm +++ b/code/modules/hydroponics/_hydro_setup.dm @@ -55,4 +55,5 @@ #define TRAIT_PRODUCT_COLOUR 35 #define TRAIT_BIOLUM 36 #define TRAIT_BIOLUM_COLOUR 37 -#define TRAIT_IMMUTABLE 38 \ No newline at end of file +#define TRAIT_IMMUTABLE 38 +#define TRAIT_FLESH_COLOUR 39 \ No newline at end of file diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 8b7678f19f..72f0e444ab 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -194,9 +194,11 @@ else if(seed.chems) if(istype(W,/obj/item/weapon/material/hatchet) && !isnull(seed.chems["woodpulp"])) user.show_message("You make planks out of \the [src]!", 1) + var/flesh_colour = seed.get_trait(TRAIT_FLESH_COLOUR) + if(!flesh_colour) flesh_colour = seed.get_trait(TRAIT_PRODUCT_COLOUR) for(var/i=0,i<2,i++) var/obj/item/stack/material/wood/NG = new (user.loc) - NG.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) + if(flesh_colour) NG.color = flesh_colour for (var/obj/item/stack/material/wood/G in user.loc) if(G==NG) continue @@ -221,6 +223,15 @@ new /obj/item/weapon/reagent_containers/food/snacks/soydope(get_turf(src)) qdel(src) return + else //This may need to be made more specific, but at this point I am not sure what the criteria should be. + user << "You slice up \the [src]." + var/slices = rand(3,5) + var/reagents_to_transfer = round(reagents.total_volume/slices) + for(var/i=i;i<=slices;i++) + var/obj/item/weapon/reagent_containers/food/snacks/fruit_slice/F = new(get_turf(src),seed) + if(reagents_to_transfer) reagents.trans_to_obj(F,reagents_to_transfer) + qdel(src) + return ..() /obj/item/weapon/reagent_containers/food/snacks/grown/attack(var/mob/living/carbon/M, var/mob/user, var/def_zone) @@ -301,9 +312,11 @@ if(seed.kitchen_tag == "grass") user.show_message("You make a grass tile out of \the [src]!", 1) + var/flesh_colour = seed.get_trait(TRAIT_FLESH_COLOUR) + if(!flesh_colour) flesh_colour = seed.get_trait(TRAIT_PRODUCT_COLOUR) for(var/i=0,i<2,i++) var/obj/item/stack/tile/grass/G = new (user.loc) - G.color = seed.get_trait(TRAIT_PRODUCT_COLOUR) + if(flesh_colour) G.color = flesh_colour for (var/obj/item/stack/tile/grass/NG in user.loc) if(G==NG) continue @@ -358,3 +371,35 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris plantname = "ambrosia" + +/obj/item/weapon/reagent_containers/food/snacks/fruit_slice + name = "fruit slice" + desc = "A slice of some tasty fruit." + icon = 'icons/obj/hydroponics_misc.dmi' + icon_state = "" + +var/list/fruit_icon_cache = list() + +/obj/item/weapon/reagent_containers/food/snacks/fruit_slice/New(var/newloc, var/datum/seed/S) + ..(newloc) + // Need to go through and make a general image caching controller. Todo. + if(!istype(S)) + qdel(src) + return + + name = "[S.seed_name] slice" + desc = "A slice of \a [S.seed_name]. Tasty, probably." + + var/rind_colour = S.get_trait(TRAIT_PRODUCT_COLOUR) + var/flesh_colour = S.get_trait(TRAIT_FLESH_COLOUR) + if(!flesh_colour) flesh_colour = rind_colour + if(!fruit_icon_cache["rind-[rind_colour]"]) + var/image/I = image(icon,"fruit_rind") + I.color = rind_colour + fruit_icon_cache["rind-[rind_colour]"] = I + overlays |= fruit_icon_cache["rind-[rind_colour]"] + if(!fruit_icon_cache["slice-[rind_colour]"]) + var/image/I = image(icon,"fruit_slice") + I.color = flesh_colour + fruit_icon_cache["slice-[rind_colour]"] = I + overlays |= fruit_icon_cache["slice-[rind_colour]"] \ No newline at end of file diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 9fd666fbb6..2331c328dc 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -60,6 +60,7 @@ set_trait(TRAIT_IDEAL_HEAT, 293) // Preferred temperature in Kelvin. set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25) // Plant eats this much per tick. set_trait(TRAIT_PLANT_COLOUR, "#46B543") // Colour of the plant icon. + set_trait(TRAIT_FLESH_COLOUR, "#46B543") spawn(5) sleep(-1) @@ -169,8 +170,9 @@ if(get_trait(TRAIT_BIOLUM_COLOUR)) clr = get_trait(TRAIT_BIOLUM_COLOUR) splat.set_light(get_trait(TRAIT_BIOLUM), l_color = clr) - if(get_trait(TRAIT_PRODUCT_COLOUR)) - splat.color = get_trait(TRAIT_PRODUCT_COLOUR) + var/flesh_colour = get_trait(TRAIT_FLESH_COLOUR) + if(!flesh_colour) flesh_colour = get_trait(TRAIT_PRODUCT_COLOUR) + if(flesh_colour) splat.color = get_trait(TRAIT_PRODUCT_COLOUR) if(chems) for(var/mob/living/M in T.contents) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index cfbf024eda..d93de27286 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -244,6 +244,7 @@ set_trait(TRAIT_PRODUCT_ICON,"apple") set_trait(TRAIT_PRODUCT_COLOUR,"#FF540A") set_trait(TRAIT_PLANT_ICON,"tree2") + set_trait(TRAIT_FLESH_COLOUR,"#E8E39B") /datum/seed/apple/poison name = "poisonapple" @@ -804,6 +805,7 @@ set_trait(TRAIT_PRODUCT_COLOUR,"#326B30") set_trait(TRAIT_PLANT_COLOUR,"#257522") set_trait(TRAIT_PLANT_ICON,"vine2") + set_trait(TRAIT_FLESH_COLOUR,"#F22C2C") /datum/seed/pumpkin name = "pumpkin" diff --git a/icons/obj/hydroponics_misc.dmi b/icons/obj/hydroponics_misc.dmi new file mode 100644 index 0000000000000000000000000000000000000000..a5c594d93ff9fadfa688db26bf17cf2dd5d0fe86 GIT binary patch literal 337 zcmV-X0j~auP)H9JO0004WQchCV=-0C=2J zR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5 zDXpk9vn0MaCo?%!iHkEOv#1y-YRJWzR+N~V3SpzEEy~PG!KGAL!PU<$1dB`J7j zo#o>I003=CL_t(IjqQ%x4S*mFMJuoXod6pKFxCMKbpM%*@ln#K0~pQ^3HP+U0G-Yw zLoy%U Date: Wed, 10 Jun 2015 22:11:33 +0930 Subject: [PATCH 11/30] Fixes #9777 --- baystation12.dme | 1 - .../game/objects/items/stacks/sheets/glass.dm | 174 ------------------ code/game/objects/structures/grille.dm | 11 +- code/modules/hydroponics/grown.dm | 2 +- code/modules/hydroponics/seed.dm | 3 +- code/modules/hydroponics/seed_datums.dm | 3 + code/modules/materials/material_sheets.dm | 39 +++- code/modules/materials/material_synth.dm | 6 + code/modules/materials/materials.dm | 153 +++++++++++++-- 9 files changed, 196 insertions(+), 196 deletions(-) delete mode 100644 code/game/objects/items/stacks/sheets/glass.dm diff --git a/baystation12.dme b/baystation12.dme index 3dc5369865..ce1f5b27c0 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -601,7 +601,6 @@ #include "code\game\objects\items\stacks\nanopaste.dm" #include "code\game\objects\items\stacks\rods.dm" #include "code\game\objects\items\stacks\stack.dm" -#include "code\game\objects\items\stacks\sheets\glass.dm" #include "code\game\objects\items\stacks\sheets\leather.dm" #include "code\game\objects\items\stacks\sheets\light.dm" #include "code\game\objects\items\stacks\tiles\light.dm" diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm deleted file mode 100644 index fd20de103c..0000000000 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ /dev/null @@ -1,174 +0,0 @@ -/* Glass stack types - * Contains: - * Glass sheets - * Reinforced glass sheets - * Phoron Glass Sheets - * Reinforced Phoron Glass Sheets (AKA Holy fuck strong windows) - * Glass shards - TODO: Move this into code/game/object/item/weapons - */ - -/* - * Glass sheets - */ -/obj/item/stack/material/glass - name = "glass" - singular_name = "glass sheet" - icon_state = "sheet-glass" - var/created_window = /obj/structure/window/basic - var/is_reinforced = 0 - var/list/construction_options = list("One Direction", "Full Window") - default_type = "glass" - -/obj/item/stack/material/glass/attack_self(mob/user as mob) - construct_window(user) - -/obj/item/stack/material/glass/attackby(obj/item/W, mob/user) - ..() - if(!is_reinforced) - if(istype(W,/obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/CC = W - if (get_amount() < 1 || CC.get_amount() < 5) - user << "You attach wire to the [name]." - new /obj/item/stack/light_w(user.loc) - else if(istype(W, /obj/item/stack/rods)) - var/obj/item/stack/rods/V = W - if (V.get_amount() < 1 || get_amount() < 1) - user << "You need one rod and one sheet of glass to make reinforced glass." - return - - var/obj/item/stack/material/glass/reinforced/RG = new (user.loc) - RG.add_fingerprint(user) - RG.add_to_stacks(user) - var/obj/item/stack/material/glass/G = src - src = null - var/replace = (user.get_inactive_hand()==G) - V.use(1) - G.use(1) - if (!G && replace) - user.put_in_hands(RG) - -/obj/item/stack/material/glass/proc/construct_window(mob/user as mob) - if(!user || !src) return 0 - if(!istype(user.loc,/turf)) return 0 - if(!user.IsAdvancedToolUser()) - return 0 - var/title = "Sheet-[name]" - title += " ([src.get_amount()] sheet\s left)" - switch(input(title, "What would you like to construct?") as null|anything in construction_options) - if("One Direction") - if(!src) return 1 - if(src.loc != user) return 1 - - var/list/directions = new/list(cardinal) - var/i = 0 - for (var/obj/structure/window/win in user.loc) - i++ - if(i >= 4) - user << "\red There are too many windows in this location." - return 1 - directions-=win.dir - if(!(win.dir in cardinal)) - user << "\red Can't let you do that." - return 1 - - //Determine the direction. It will first check in the direction the person making the window is facing, if it finds an already made window it will try looking at the next cardinal direction, etc. - var/dir_to_set = 2 - for(var/direction in list( user.dir, turn(user.dir,90), turn(user.dir,180), turn(user.dir,270) )) - var/found = 0 - for(var/obj/structure/window/WT in user.loc) - if(WT.dir == direction) - found = 1 - if(!found) - dir_to_set = direction - break - new created_window( user.loc, dir_to_set, 1 ) - src.use(1) - if("Full Window") - if(!src) return 1 - if(src.loc != user) return 1 - if(src.get_amount() < 4) - user << "\red You need more glass to do that." - return 1 - if(locate(/obj/structure/window) in user.loc) - user << "\red There is a window in the way." - return 1 - new created_window( user.loc, SOUTHWEST, 1 ) - src.use(4) - if("Windoor") - if(!is_reinforced) return 1 - - - if(!src || src.loc != user) return 1 - - if(isturf(user.loc) && locate(/obj/structure/windoor_assembly/, user.loc)) - user << "\red There is already a windoor assembly in that location." - return 1 - - if(isturf(user.loc) && locate(/obj/machinery/door/window/, user.loc)) - user << "\red There is already a windoor in that location." - return 1 - - if(src.get_amount() < 5) - user << "\red You need more glass to do that." - return 1 - - new /obj/structure/windoor_assembly(user.loc, user.dir, 1) - src.use(5) - - return 0 - - -/* - * Reinforced glass sheets - */ -/obj/item/stack/material/glass/reinforced - name = "reinforced glass" - singular_name = "reinforced glass sheet" - icon_state = "sheet-rglass" - default_type = "reinforced glass" - created_window = /obj/structure/window/reinforced - is_reinforced = 1 - construction_options = list("One Direction", "Full Window", "Windoor") - -/* - * Phoron Glass sheets - */ -/obj/item/stack/material/glass/phoronglass - name = "phoron glass" - singular_name = "phoron glass sheet" - icon_state = "sheet-phoronglass" - created_window = /obj/structure/window/phoronbasic - default_type = "phoron glass" - -/obj/item/stack/material/glass/phoronglass/attackby(obj/item/W, mob/user) - ..() - if( istype(W, /obj/item/stack/rods) ) - var/obj/item/stack/rods/V = W - var/obj/item/stack/material/glass/phoronrglass/RG = new (user.loc) - RG.add_fingerprint(user) - RG.add_to_stacks(user) - V.use(1) - var/obj/item/stack/material/glass/G = src - src = null - var/replace = (user.get_inactive_hand()==G) - G.use(1) - if (!G && !RG && replace) - user.put_in_hands(RG) - else - return ..() - -/* - * Reinforced phoron glass sheets - */ -/obj/item/stack/material/glass/phoronrglass - name = "reinforced phoron glass" - singular_name = "reinforced phoron glass sheet" - icon_state = "sheet-phoronrglass" - default_type = "reinforced phoron glass" - created_window = /obj/structure/window/phoronreinforced - is_reinforced = 1 diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index fa7a448bd6..7829705a63 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -114,9 +114,12 @@ "You have [anchored ? "fastened the grille to" : "unfastened the grill from"] the floor.") return -//window placing begin - else if(istype(W,/obj/item/stack/material/glass)) - var/obj/item/stack/material/glass/ST = W +//window placing begin //TODO CONVERT PROPERLY TO MATERIAL DATUM + else if(istype(W,/obj/item/stack/material)) + var/obj/item/stack/material/ST = W + if(!ST.material.created_window) + return 0 + var/dir_to_set = 1 if(loc == user.loc) dir_to_set = user.dir @@ -146,7 +149,7 @@ user << "There is already a window facing this way there." return - var/wtype = ST.created_window + var/wtype = ST.material.created_window if (ST.use(1)) var/obj/structure/window/WD = new wtype(loc, dir_to_set, 1) user << "You place the [WD] on [src]." diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 72f0e444ab..031fc8b23d 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -223,7 +223,7 @@ new /obj/item/weapon/reagent_containers/food/snacks/soydope(get_turf(src)) qdel(src) return - else //This may need to be made more specific, but at this point I am not sure what the criteria should be. + else if(seed.get_trait(TRAIT_FLESH_COLOUR)) user << "You slice up \the [src]." var/slices = rand(3,5) var/reagents_to_transfer = round(reagents.total_volume/slices) diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 2331c328dc..9afa043256 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -60,7 +60,6 @@ set_trait(TRAIT_IDEAL_HEAT, 293) // Preferred temperature in Kelvin. set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25) // Plant eats this much per tick. set_trait(TRAIT_PLANT_COLOUR, "#46B543") // Colour of the plant icon. - set_trait(TRAIT_FLESH_COLOUR, "#46B543") spawn(5) sleep(-1) @@ -637,7 +636,7 @@ if(GENE_STRUCTURE) traits_to_copy = list(TRAIT_PLANT_ICON,TRAIT_PRODUCT_ICON,TRAIT_HARVEST_REPEAT) if(GENE_FRUIT) - traits_to_copy = list(TRAIT_STINGS,TRAIT_EXPLOSIVE,TRAIT_JUICY) + traits_to_copy = list(TRAIT_STINGS,TRAIT_EXPLOSIVE,TRAIT_FLESH_COLOUR,TRAIT_JUICY) if(GENE_SPECIAL) traits_to_copy = list(TRAIT_TELEPORTING) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index d93de27286..b8b0530788 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -844,6 +844,7 @@ set_trait(TRAIT_PRODUCT_ICON,"treefruit") set_trait(TRAIT_PRODUCT_COLOUR,"#3AF026") set_trait(TRAIT_PLANT_ICON,"tree") + set_trait(TRAIT_FLESH_COLOUR,"#3AF026") /datum/seed/citrus/lemon name = "lemon" @@ -856,6 +857,7 @@ ..() set_trait(TRAIT_PRODUCES_POWER,1) set_trait(TRAIT_PRODUCT_COLOUR,"#F0E226") + set_trait(TRAIT_FLESH_COLOUR,"#F0E226") /datum/seed/citrus/orange name = "orange" @@ -867,6 +869,7 @@ /datum/seed/citrus/orange/New() ..() set_trait(TRAIT_PRODUCT_COLOUR,"#FFC20A") + set_trait(TRAIT_FLESH_COLOUR,"#FFC20A") /datum/seed/grass name = "grass" diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm index ec6f51540f..62b3c433dc 100644 --- a/code/modules/materials/material_sheets.dm +++ b/code/modules/materials/material_sheets.dm @@ -47,6 +47,19 @@ return 0 ..(S,tamount,1) +/obj/item/stack/material/attack_self(var/mob/user) + if(!material.build_windows(user, src)) + ..() + +/obj/item/stack/material/attackby(var/obj/item/W, var/mob/user) + if(istype(W,/obj/item/stack/cable_coil)) + material.build_wired_product(user, W, src) + return + else if(istype(W, /obj/item/stack/rods)) + material.build_rod_product(user, W, src) + return + return ..() + /obj/item/stack/material/iron name = "iron" icon_state = "sheet-silver" @@ -75,7 +88,7 @@ default_type = "phoron" /obj/item/stack/material/plastic - name = "Plastic" + name = "plastic" icon_state = "sheet-plastic" default_type = "plastic" @@ -151,3 +164,27 @@ singular_name = "leather piece" icon_state = "sheet-leather" default_type = "leather" + +/obj/item/stack/material/glass + name = "glass" + singular_name = "glass sheet" + icon_state = "sheet-glass" + default_type = "glass" + +/obj/item/stack/material/glass/reinforced + name = "reinforced glass" + singular_name = "reinforced glass sheet" + icon_state = "sheet-rglass" + default_type = "reinforced glass" + +/obj/item/stack/material/glass/phoronglass + name = "phoron glass" + singular_name = "phoron glass sheet" + icon_state = "sheet-phoronglass" + default_type = "phoron glass" + +/obj/item/stack/material/glass/phoronrglass + name = "reinforced phoron glass" + singular_name = "reinforced phoron glass sheet" + icon_state = "sheet-phoronrglass" + default_type = "reinforced phoron glass" diff --git a/code/modules/materials/material_synth.dm b/code/modules/materials/material_synth.dm index a0977e69c5..23b0e7e546 100644 --- a/code/modules/materials/material_synth.dm +++ b/code/modules/materials/material_synth.dm @@ -13,20 +13,26 @@ matter = null /obj/item/stack/material/cyborg/plastic + icon_state = "sheet-plastic" default_type = "plastic" /obj/item/stack/material/cyborg/steel + icon_state = "sheet-metal" default_type = "steel" /obj/item/stack/material/cyborg/plasteel + icon_state = "sheet-plasteel" default_type = "plasteel" /obj/item/stack/material/cyborg/wood + icon_state = "sheet-wood" default_type = "wood" /obj/item/stack/material/cyborg/glass + icon_state = "sheet-glass" default_type = "glass" /obj/item/stack/material/cyborg/glass/reinforced + icon_state = "sheet-rglass" default_type = "reinforced glass" charge_costs = list(500, 1000) \ No newline at end of file diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 0409a8b7f1..0e2fecff36 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -77,6 +77,12 @@ var/list/name_to_material var/conductive = 1 // Objects with this var add CONDUCTS to flags on spawn. var/list/composite_material // If set, object matter var will be a list containing these values. + // Placeholder vars for the time being, todo properly integrate windows/light tiles/rods. + var/created_window + var/rod_product + var/wire_product + var/list/window_options = list() + // Damage values. var/hardness = 60 // Prob of wall destruction by hulk, used for edge damage in weapons. var/weight = 20 // Determines blunt damage/throwforce for weapons. @@ -90,6 +96,37 @@ var/list/name_to_material // Wallrot crumble message. var/rotting_touch_message = "crumbles under your touch" +// Placeholders for light tiles and rglass. +/material/proc/build_rod_product(var/mob/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack) + if(!rod_product) + user << "You cannot make anything out of \the [target_stack]" + return + if(used_stack.get_amount() < 1 || target_stack.get_amount() < 1) + user << "You need one rod and one sheet of [display_name] to make anything useful." + return + used_stack.use(1) + target_stack.use(1) + var/obj/item/stack/S = new rod_product(get_turf(user)) + S.add_fingerprint(user) + S.add_to_stacks(user) + if(!(user.l_hand && user.r_hand)) + user.put_in_hands(S) + +/material/proc/build_wired_product(var/mob/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack) + if(!wire_product) + user << "You cannot make anything out of \the [target_stack]" + return + if(used_stack.get_amount() < 5 || target_stack.get_amount() < 1) + user << "You need five wires and one sheet of [display_name] to make anything useful." + return + + used_stack.use(5) + target_stack.use(1) + user << "You attach wire to the [name]." + var/obj/item/product = new wire_product(get_turf(user)) + if(!(user.l_hand && user.r_hand)) + user.put_in_hands(product) + // Make sure we have a display name and shard icon even if they aren't explicitly set. /material/New() ..() @@ -100,6 +137,10 @@ var/list/name_to_material if(!shard_icon) shard_icon = shard_type +// This is a placeholder for proper integration of windows/windoors into the system. +/material/proc/build_windows(var/mob/living/user, var/obj/item/stack/used_stack) + return 0 + // Weapons handle applying a divisor for this value locally. /material/proc/get_blunt_damage() return weight //todo @@ -288,21 +329,82 @@ var/list/name_to_material weight = 15 door_icon_base = "stone" destruction_desc = "shatters" + window_options = list("One Direction", "Full Window") + created_window = /obj/structure/window/basic + wire_product = /obj/item/stack/light_w + rod_product = /obj/item/stack/material/glass/reinforced -/material/glass/phoron - name = "phoron glass" - stack_type = /obj/item/stack/material/glass/phoronglass - flags = MATERIAL_BRITTLE - ignition_point = 300 - integrity = 200 // idk why but phoron windows are strong, so. - icon_colour = "#FC2BC5" - stack_origin_tech = "materials=3;phorontech=2" +/material/glass/build_windows(var/mob/living/user, var/obj/item/stack/used_stack) -/material/glass/phoron/reinforced - name = "reinforced phoron glass" - stack_type = /obj/item/stack/material/glass/phoronrglass - stack_origin_tech = "materials=4;phorontech=2" - composite_material = list() //todo + if(!user || !used_stack || !created_window || !window_options.len) + return 0 + + if(!user.IsAdvancedToolUser()) + user << "This task is too complex for your clumsy hands." + return 1 + + var/turf/T = user.loc + if(!istype(T)) + user << "You must be standing on open flooring to build a window." + return 1 + + var/title = "Sheet-[used_stack.name] ([used_stack.get_amount()] sheet\s left)" + var/choice = input(title, "What would you like to construct?") as null|anything in window_options + + if(!choice || !used_stack || !user || used_stack.loc != user || user.stat || user.loc != T) + return 1 + + // Get data for building windows here. + var/list/possible_directions = cardinal.Copy() + var/window_count = 0 + for (var/obj/structure/window/check_window in user.loc) + window_count++ + possible_directions -= check_window.dir + + // Get the closest available dir to the user's current facing. + var/build_dir = SOUTHWEST //Default to southwest for fulltile windows. + var/failed_to_build + + if(window_count >= 4) + failed_to_build = 1 + else + if(choice in list("One Direction","Windoor")) + if(possible_directions.len) + for(var/direction in list(user.dir, turn(user.dir,90), turn(user.dir,180), turn(user.dir,270) )) + if(direction in possible_directions) + build_dir = direction + break + else + failed_to_build = 1 + if(!failed_to_build && choice == "Windoor") + if(!is_reinforced()) + user << "This material is not reinforced enough to use for a door." + return + if((locate(/obj/structure/windoor_assembly) in T.contents) || (locate(/obj/machinery/door/window) in T.contents)) + failed_to_build = 1 + if(failed_to_build) + user << "There is no room in this location." + return 1 + + var/build_path = /obj/structure/windoor_assembly + var/sheets_needed = 4 + if(choice == "Windoor") + sheets_needed = 5 + build_dir = user.dir + else + build_path = created_window + + if(used_stack.get_amount() < sheets_needed) + user << "You need at least [sheets_needed] sheets to build this." + return 1 + + // Build the structure and update sheet count etc. + used_stack.use(sheets_needed) + new build_path(T, build_dir, 1) + return 1 + +/material/glass/proc/is_reinforced() + return (hardness > 35) //todo /material/glass/reinforced name = "reinforced glass" @@ -317,6 +419,31 @@ var/list/name_to_material weight = 30 stack_origin_tech = "materials=2" composite_material = list(DEFAULT_WALL_MATERIAL = 1875,"glass" = 3750) + window_options = list("One Direction", "Full Window", "Windoor") + created_window = /obj/structure/window/reinforced + wire_product = null + rod_product = null + +/material/glass/phoron + name = "phoron glass" + stack_type = /obj/item/stack/material/glass/phoronglass + flags = MATERIAL_BRITTLE + ignition_point = 300 + integrity = 200 // idk why but phoron windows are strong, so. + icon_colour = "#FC2BC5" + stack_origin_tech = "materials=3;phorontech=2" + created_window = /obj/structure/window/phoronbasic + wire_product = null + rod_product = /obj/item/stack/material/glass/phoronrglass + +/material/glass/phoron/reinforced + name = "reinforced phoron glass" + stack_type = /obj/item/stack/material/glass/phoronrglass + stack_origin_tech = "materials=4;phorontech=2" + composite_material = list() //todo + created_window = /obj/structure/window/phoronreinforced + hardness = 40 + rod_product = null /material/plastic name = "plastic" From 2bd0d7a2f4331fb90505418eb5cce01c1690174e Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Wed, 10 Jun 2015 17:56:31 +0200 Subject: [PATCH 12/30] Automatic player note fixes. Player notes should now properly include the relevant admin's ckey. Automatically adds temporary and permanent bans to the player's notes. --- code/modules/admin/player_notes.dm | 32 ++++++------------------------ code/modules/admin/topic.dm | 25 +++++------------------ 2 files changed, 11 insertions(+), 46 deletions(-) diff --git a/code/modules/admin/player_notes.dm b/code/modules/admin/player_notes.dm index 3a74da5fca..25f6638ee0 100644 --- a/code/modules/admin/player_notes.dm +++ b/code/modules/admin/player_notes.dm @@ -27,26 +27,6 @@ datum/admins/proc/notes_gethtml(var/ckey) . += "[dir]
" return - -//handles adding notes to the end of a ckey's buffer -//originally had seperate entries such as var/by to record who left the note and when -//but the current bansystem is a heap of dung. -/proc/notes_add(var/ckey, var/note) - if(!ckey) - ckey = ckey(input(usr,"Who would you like to add notes for?","Enter a ckey",null) as text|null) - if(!ckey) return - - if(!note) - note = html_encode(input(usr,"Enter your note:","Enter some text",null) as message|null) - if(!note) return - - var/savefile/notesfile = new(NOTESFILE) - if(!notesfile) return - notesfile.cd = "/[ckey]" - notesfile.eof = 1 //move to the end of the buffer - notesfile << "[time2text(world.realtime,"DD-MMM-YYYY")] | [note][(usr && usr.ckey)?" ~[usr.ckey]":""]" - return - //handles removing entries from the buffer, or removing the entire directory if no start_index is given /proc/notes_remove(var/ckey, var/start_index, var/end_index) var/savefile/notesfile = new(NOTESFILE) @@ -85,7 +65,7 @@ datum/admins/proc/notes_gethtml(var/ckey) //Hijacking this file for BS12 playernotes functions. I like this ^ one systemm alright, but converting sounds too bothersome~ Chinsky. -/proc/notes_add(var/key, var/note, var/mob/usr) +/proc/notes_add(var/key, var/note, var/mob/user) if (!key || !note) return @@ -111,9 +91,9 @@ datum/admins/proc/notes_gethtml(var/ckey) var/day_loc = findtext(full_date, time2text(world.timeofday, "DD")) var/datum/player_info/P = new - if (usr) - P.author = usr.key - P.rank = usr.client.holder.rank + if (user) + P.author = user.key + P.rank = user.client.holder.rank else P.author = "Adminbot" P.rank = "Friendly Robot" @@ -123,8 +103,8 @@ datum/admins/proc/notes_gethtml(var/ckey) infos += P info << infos - message_admins("\blue [key_name_admin(usr)] has edited [key]'s notes.") - log_admin("[key_name(usr)] has edited [key]'s notes.") + message_admins("\blue [key_name_admin(user)] has edited [key]'s notes.") + log_admin("[key_name(user)] has edited [key]'s notes.") del info diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 750af5e4d9..3f6e3242ad 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -110,6 +110,7 @@ banreason = "(MANUAL BAN) "+banreason DB_ban_record(bantype, playermob, banduration, banreason, banjob, null, banckey) + notes_add(playermob.ckey,banreason,usr) else if(href_list["editrights"]) if(!check_rights(R_PERMISSIONS)) @@ -757,7 +758,7 @@ msg = job else msg += ", [job]" - notes_add(M.ckey, "Banned from [msg] - [reason]") + notes_add(M.ckey, "Banned from [msg] - [reason]", usr) message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes", 1) M << "\redYou have been jobbanned by [usr.client.ckey] from: [msg]." M << "\red The reason is: [reason]" @@ -778,7 +779,7 @@ jobban_fullban(M, job, "[reason]; By [usr.ckey] on [time2text(world.realtime)]") if(!msg) msg = job else msg += ", [job]" - notes_add(M.ckey, "Banned from [msg] - [reason]") + notes_add(M.ckey, "Banned from [msg] - [reason]", usr) message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [msg]", 1) M << "\redYou have been jobbanned by [usr.client.ckey] from: [msg]." M << "\red The reason is: [reason]" @@ -832,25 +833,7 @@ message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1) //M.client = null del(M.client) -/* - //Player Notes - else if(href_list["notes"]) - var/ckey = href_list["ckey"] - if(!ckey) - var/mob/M = locate(href_list["mob"]) - if(ismob(M)) - ckey = M.ckey - switch(href_list["notes"]) - if("show") - notes_show(ckey) - if("add") - notes_add(ckey,href_list["text"]) - notes_show(ckey) - if("remove") - notes_remove(ckey,text2num(href_list["from"]),text2num(href_list["to"])) - notes_show(ckey) -*/ else if(href_list["removejobban"]) if(!check_rights(R_BAN)) return @@ -885,6 +868,7 @@ return AddBan(M.ckey, M.computer_id, reason, usr.ckey, 1, mins) ban_unban_log_save("[usr.client.ckey] has banned [M.ckey]. - Reason: [reason] - This will be removed in [mins] minutes.") + notes_add(M.ckey,"[usr.client.ckey] has banned [M.ckey]. - Reason: [reason] - This will be removed in [mins] minutes.",usr) M << "\redYou have been banned by [usr.client.ckey].\nReason: [reason]." M << "\red This is a temporary ban, it will be removed in [mins] minutes." feedback_inc("ban_tmp",1) @@ -917,6 +901,7 @@ else M << "\red No ban appeals URL has been set." ban_unban_log_save("[usr.client.ckey] has permabanned [M.ckey]. - Reason: [reason] - This is a permanent ban.") + notes_add(M.ckey,"[usr.client.ckey] has permabanned [M.ckey]. - Reason: [reason] - This is a permanent ban.",usr) log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.") message_admins("\blue[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.") feedback_inc("ban_perma",1) From fe2ce02f54a2c24a78b59018e10603b8bff1477c Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 10 Jun 2015 21:50:48 -0500 Subject: [PATCH 13/30] Fixes #9744. --- code/game/objects/items/weapons/tools.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 0c563215c7..fad3035563 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -261,6 +261,8 @@ //Removes fuel from the welding tool. If a mob is passed, it will perform an eyecheck on the mob. This should probably be renamed to use() /obj/item/weapon/weldingtool/proc/remove_fuel(var/amount = 1, var/mob/M = null) + if(!welding) + return 0 if(get_fuel() >= amount) reagents.remove_reagent("fuel", amount) if(M) @@ -291,7 +293,7 @@ var/turf/T = get_turf(src) //If we're turning it on if(set_welding && !welding) - if (remove_fuel(1)) + if (get_fuel() > 0) if(M) M << "You switch the [src] on." else if(T) From c062f886c097e191ca348f12e54f1ef60752cc95 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 10 Jun 2015 22:07:52 -0500 Subject: [PATCH 14/30] Attempting to weld closet with inactive welder no longer produces message claiming insufficient fuel. --- .../objects/structures/crates_lockers/closets.dm | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 13b0ae81ec..4414535d5a 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -227,8 +227,11 @@ if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W if(!WT.remove_fuel(0,user)) - user << "You need more welding fuel to complete this task." - return + if(!WT.isOn()) + return + else + user << "You need more welding fuel to complete this task." + return new /obj/item/stack/material/steel(src.loc) for(var/mob/M in viewers(src)) M.show_message("\The [src] has been cut apart by [user] with \the [WT].", 3, "You hear welding.", 2) @@ -246,8 +249,11 @@ else if(istype(W, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = W if(!WT.remove_fuel(0,user)) - user << "You need more welding fuel to complete this task." - return + if(!WT.isOn()) + return + else + user << "You need more welding fuel to complete this task." + return src.welded = !src.welded src.update_icon() for(var/mob/M in viewers(src)) From 951a7b7347392f80d1524e7050c1cc0f0bf022d5 Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Thu, 11 Jun 2015 21:44:08 +0100 Subject: [PATCH 15/30] Cryogenic/robotic storage now uses alt-title for announcements Fixes #9790. --- code/game/machinery/cryopod.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index e345847c86..337d57df8d 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -393,9 +393,9 @@ occupant.ckey = null //Make an announcement and log the person entering storage. - control_computer.frozen_crew += "[occupant.real_name], [occupant.mind.assigned_role] - [worldtime2text()]" + control_computer.frozen_crew += "[occupant.real_name], [occupant.mind.role_alt_title] - [worldtime2text()]" - announce.autosay("[occupant.real_name], [occupant.mind.assigned_role] [on_store_message]", "[on_store_name]") + announce.autosay("[occupant.real_name], [occupant.mind.role_alt_title], [on_store_message]", "[on_store_name]") visible_message("\The [initial(name)] hums and hisses as it moves [occupant.real_name] into storage.", 3) // Delete the mob. From c38d88c06a25fbf5d518f48e1566bd7b5426afb5 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Fri, 12 Jun 2015 00:01:41 -0400 Subject: [PATCH 16/30] Updates dmitool to be able to insert specific directions Adds a direction option to the import command, that causes the imported icon state is overwrites the specified direction, if nodup is set. Otherwise, the direction is overwritten on a copy. --- tools/dmitool/dmitool.jar | Bin 201166 -> 197142 bytes .../src/main/java/dmitool/IconState.java | 9 +++- tools/dmitool/src/main/java/dmitool/Main.java | 40 ++++++++++++++++-- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/tools/dmitool/dmitool.jar b/tools/dmitool/dmitool.jar index 34bdb5bdd459fd2f1746062a878f430c86fe8d45..f0fc1dc17be5ea9669116c9f20999c841922eb70 100644 GIT binary patch delta 29470 zcmZ6yV~izE^sd{srfu7{ZClf}&Dm|+wrzX2ZQJhM?&+SHKEHd<%{lqsl}ak9tfW5F zs-)iaJ~dy8lo5uMYMhAQDwZhrBQq}$f;4ln5gaxX7zjbx8d7A%*f~-Ku9?}{sshmu zkr@dKiIOR$4MEl^B?{q$+UcSWF#(x*4G)RZnQ9Kf2HnY{4WW#jS&i^tnx*A`Y0owg z<(RFPv)2@@LhnD2TbDtO(4ERq;2)x?B5(gX|J%>rvXfs5TnVpJJq=s|F*Ela0;MzE z7`&gWGrtgg8!j0EEqRd|fC&Z$1_##DKO@}@OF?jf4+bX30S5Ntzf}uITMuVv2Np>s zIc9SQQ+M}xd{`4qDHp5ne-HoMY)P0w=tt1WFK}k7iShULaI$E~x;`m1zHSu-{T;PIs#HvJ#^-y7h@v-_QGX;0rfX6NT;=Wl0k_g20EyMx4F)X||HK7>Zf zyztLmxZ~l~W&wCx(#OGC_5zzK%(D#!LiZ!_oEAP{P%I``1d78 z4RQ87$o+!-^1wX+*RBLmh-+5?*w2+WyQk5WH9f{jRC$7gY;D(-7$JPWtpoh~p;v#z zh-}Z9SARr^{J!DJyl%&<0)*tuYdi|ZCoVJ1k3h^C56362J0im;t~oNLXI?JG|BKg! zdy`!cgAB>fJS>fs>yZ^JhK#D?N~e?S$qQz{iNpubd>aN>+ngTzfiKM&XNRlN9IwWx z;o6Pz%dq%Jo+xp&6!-TMo(~f7%$TdPKFEhzS@ls8OGUleDAGz$Z%ji|P%DzPpyKEX z$t5Df+Ri5ML==?I(B|o;t zeejZFOK%Kl(D*{wNq$C&*$Vhl%*_qfIo8_s=GtIBEHMUhF|OL{;_-X*VK-_#`Vq~` zWG3*KR3`8oD;e(A9WmkW*Bm+G?>8J1@lPEqV?8V%A@t?O`r`uo4GAVKhPSx#3BtqrdR+HvT!o}U?=>}4RkHDs~zM+i(UG28$Jc^ZmpcHnB>RGKY{N^s*X)c+vg6K ztpO~ynI(ytd*|tduF8E+BJPWoe7GN0W$mB|>0i8H$Wi&L0Yr`)UYL2C{SlL*G+BOadX^V+*COsWL3OS0w8$J&To1%=k&YXYh zls7EX@^Gs9s1PKOPBqaAP#Ejf3W#)&3CEd2(hSICR2+LpiyIeZWX3!X_+#RML@tzb z>1-pLtIIn%3jWOK*Gdtb0csH~ai_hv{=-8KrM|g?<*oo-cSs$>+*)M)-~A_7xAY5;Qqcba5)F)_l+Bnj5OJ{)O|QkDQG^V z0BQke8Hz2Vx#AY{IV57<=K)dt!8P^yw8;@(l>SYD)wYGD6v?CA7J-l2n1unb%Oe2s zK#?oX(!iO+fb$xb$Zk_PDugH;Q`QSu#|#d)hGo1k!prFYX}-g~sD$|yQMfW?epd^n z^@s>LINEq=vV{Bxe^Bkw0CF&tM(fZ15D7@etoXY_#TJnpBille4*HSvcPTL>V5G47 zBOG&UMe#zhZFlIWn${x^Bp?#tZF9GZ$zm&s4{}yPKAI_#g2DfLWZ12mXeNiivV`Y5IagT+I)eyK<-Q+C6EYBA0L4Q z)%W;sd4Z^#F^Q`5gCVg)6qnl0kjRnF{>~uMZWy4pYio$<1NADsl@1Ny;1KfzX;?<@ zpo%}@lz)84_#?f}*^g2@K-wlzE{YhDlAcPw3kt0&Rdaa@El$#wzSI!?u@kCmn35AJ z=P!dLk%Crm1lowSx|=k_OlUC-e%4THF7QaZ=2=vO7uylp0MnBH_oh93m>IT-cAkH? z0g{STs@6k#_Sq zTyi&QkJKcw{nM1D(F6__KSDKJdfry~wePCN1z#Ko56=AS=2yR<=@!(f-ppbID~Lti zQ)SoFFREKMDZe`TUKBZ*uEl4{0ZK=SR}&l786+F&6h)Y94~GN5>z_0)WdXIfMU*Zb znz0uod88JA&=I-iZ!KgK@1kK6kwD6Ir1vu(yj|O)bqem%W=L|)|KR5m*T`(+NE4L zj8ocYMW_o#LNtJCoNSvMA!J3;v~m{z2G0VIr(635htO)0MWI&bKr~dRAg+CjCe?Jz zA}+NNUaZ9)MWr0k>$9nCbQKkD`AOx#)J?I_8)IzC?Br14_&ZW_KkfwMgGtn59c;LT zMu{vYL5XBq3f=--gURD;b@o-W*I-}YE}A8h7Bf9u(E;E}FrG8D!(AprLwdVemRzn}_+#SN#NJ7!#_dO-GD<>7sW0C+W=c2g4i3m)RX{rIIBvtNtM|5kz^t7%hbN0QI zR&y+w7glfehb(KyNmgy3yve>-U`!wYPU)Kh2Qa&II z{EdBdzXUKM3R@GA#aNN_TJCi)qBZ8Cfy}0q1U_dnmNPXbZ1~Z&sdH-`Wq00b0yb!i zGKZ(d#Ilek?t?56v>IYHuBg1d(1E>%x<9u0uhWGh@P88kP46<7?KYog-ILf|MH zL5|}n(=Rg&P~zpL*u}P!eIE0TeiTlbGT_zaO<&{jJ_K6A5E)b(|71k_$zAz9o+6?= zEN3qJ)8ET)kyRH{Hdx=CbQRY=C3ttB%{zRJZu$!*Wh@kWx4Pg|9i2Cnd`d4kYcN<7 z%oG3{LlG&wi{UaloAn*h!XD+zAbXnp7lHxrw`dOxvccWb`niciRGN8HzTEFLy?><9 zi+q63UAk8Lz~}4F>!oQM#zk>-q|P5+9CSl`VN_(I=xu}TTxca04Yz zFEl=%+3KWS$t^PMTyLFW1SQ5#hQUQ1-s@YSNPjY1D zs@P3XfJYIBsubpEKQk`q_+@qdOM=jC`OgS>g3;~koT*dA)68n}3_Xz|vCnTPHV`Q# zZn|4y&QMI2rt$zW{8Yq9FsG|scsby-JW2y0^HWMcAG_WUR6c2Kn$j||v(ZUR4 z$BclwXjj4?$%IM_Ipg#=aNHA~TH6O@WKQfIC0(3K`&XdpwO~u|ahW+^b)9pEx#Ds~ zz%U?(s5JK>QL~xPAsu&SV@>AvtxA-T;U+k5I!c7}nyHdnXGu!q1Wjgu? z+|=e=OIM8#VV5J!>eoOgA6meS{prghy9RZNYjaK$&Ccuh-U3oZbwYV?dVAe&ci?Si zj}2?93akL=I~=PcH1*ImhJYsoBgoky=v&BA=yycKctLqi&_z|i{`JKd{x8rOa{A5? z!)hX^Cd|I_&EED-qx!F({uk$D@h1U@I^9`qfy|`z8%%0!FKDczofHrw(*SMYI;^i6 z<3D7)ft=7@^c1BXXFu$V<5Kj+oo+6gS`JYf^`|)rdPjmdu5=w`6(2SHr7+VkG9xfH zlT=o0L2;yZBi%znng^H8qlb_Y98&(ssD`g9AND~G^TB{NPA&)BxHR8BA(Io(5gz}1H+?Ss{M z?B+epZTz*z`b3ZG&x83g)Dh;9X77RHv-|dH)Rb?Jq}6NUfa9Q|ns7s!IAnNY(K=MW zn0n|&NR%`eTQt`$!4n6V)Vl20q4pA6vYR~mW!D{ZCK|n?i~&f4v3J2m9rrgZM=zRn z)cKs%G&~bbn(ymhKI+I#h;E2s-gL$4irw?-bx^zviM}zRfpG9Hf@Y_KCnumo3l}{W zf2paESY9Nnxa_rAAI(1-C9GB3g6^%0Fsz6YFzjWQlk0+Skya@$M)Z2V4%4fiRi#IM zvD&6@m9*sca|bx2cdtXSP>gqLm&!M=bMMQh=wv51X5-PodN0B0SU+g2f81XU^;QNU zLvW`I>FA#L%O2uAMnKVg~+?H6l@|GF5^=*DMGg{K)1av7aRH}I=bO3Z4$-W;nRFP!=eh**g<%kwA z_#eoxjM!L*jil&!mp#}m|Xah8} zU>JT6Xj0fT+*==={k;pm=I?Z}%7RI8Xqk2JPRQOtZtZJ0?(rAP%WM3tLh$DN5 zN^v+e&jfhK>D6MFV{h4N;4^CahRM2Fi`ms zPH8sVdM70mt+?|Medl*f@2Q@dN7-DfSKHfyeughzS@k~*;_qD1zW1VkY0b?2v{QA= zKb#ETcj9g8Fsl6P6PEzl?E+))DAp#u)i2t|SOxIVPY+M$FUFuIbLe5VU4d=oJneh5 zC2)s}U6`UIndZv3!``d-M@o1;*QAACVR}u}gc@zW1OxKt*vmF*+RQzh*LRi^mZQy>%1!C>#!1^rlg-schK*ccIfmYNqT=i?{dEn zr2@d!N>Xo35;+IiIX4Kr8`~U{Z)#q#8=;OI?F&}FRMbKOvGIOLPi~S#mXFwP(?8Dz z+>`G$YoYK&KC8lFb}MlJO8D|@X3m$WIRHzN9I>#uvq!Ph)}5#{{68HRDxZFEml4}E zoT$Ng<@PDfu2DRH#sj+A1jJJ~B7JXZ(S)Fw*Y zvae&bODWS#JQK{T_GDUtXtS#U~m%+V?@6RonpkZ zDS{!4hAFaQD1j-rAlR3NCOgirNd4K0_ao}riDVbFgb-+52t-#EUR)Yru`Xm}F$uOQ z4P&2#P?ZqC}lIIa|rhbjr?Vq zMxKSoRuml_{JWegVJ)iDLHL;$#T%+DjnN7y{3j-l=jascmwHaN~U z^{`Y&;E~x*v`h9Kg05vRy!Ot0@QkC8OZXjl*Yq1F9VmCv^b4#(3(Bz3Vi;MT*n^(9 zON}lhH*HH(1k6bdCBz_|$|Vv#LLeQ>rE?kOo%Ui_|LoVLI&p;OG>1#!6a8*uAEeN< z3Mi-rnz-$zX}$oG;MU1!6Ceyj+>SG1{+12u3M6)DV+o_V1@~FrM^f2J46D4W9O8IG zJkW&0J;W;fo() z(k*ihuaQk>sV>4Faw`88^$iHXaCpYqoV)Afpy^sQ@{{vyA8ux~+zD|9iKS;1UqtqU z8Gt7%nq6T}YRE15;7K*zkEd`fwS0r4GuxD-Ke;{hQPXgo5MVv7+_n|Wql)Rhd*3C3f=8uNGcuXmAt>>9(wC2v22EDT5eoQ=yV?-7SJTq# z!q1TOxG_(S04Wuk+HW-VARG%I_4E|?%2I!L!acx*XFKyRTDI`~SjRyy?I-lF_!Up( zkcQx65DIkyn`?|VHEl_81$#wRFs-`N-EH8imwifuT9JB1<)XKn7p)}htt0^_5m#0; z|7|Q@pk+rdRqMgwJFlbns4e2=8*S610D5ugdb!^)Akd?v(x$YK()l8obE*LSnoe#~ zX`ZDUHKAiTc)I>BM9^0Te@Vc_SeclCzNNGpbO8|=$U5IHRVWEQ!oE0iGng9YTQ z+Z4Sje&H>yy&m(GTFnP%7D(SC7(qUqa?H%zfta8m=zr+rc1ANhlG74zg0@7{v)veB z?ss?!;Fm{LsZJKEYzX!(Con~Ei|F~mzK8H$;KhYh$;6-Ed1*mhOvE4R(H>XG=|b&j z#t%i6jy-z8Tig0BE}o?&FW`$EdDVYsxxTqX=e9uYra|vTi$v2Py&{uFJUMY^f|(Fb zr&nS+Ku{^nrBT->IsH)*@ms*!NV$s^ zC2)pj5UbV=S>i-F&wr% zAQ#V4i7(}&(M86GzZ2{+=Pi5#h2%g?x9N7qYz&7B{<`MxvLP}IP%bCufJ0ckt1#Qn z?OFp*@Dh+WU67k0WiC#N51o=k85X13U^xpAm$Sn5YA~{jM{H=6uaK=Er&yPdw9RyN zDBp&xy-|#;KDY7MbM4l-31+yS-qq&;7+!hyLz^_+`Z-MC(&v5z%tSy7{6%sU)UOgYq0xg|Mxzx6l8VWhpLcXQ8+&+eko zRyZtkE#*#Bqge7{%qe;sGf^o{};yWwH#_UbVO^{2=?iGxscX*uW$4b+sgwY4e;F+BoA{=|)5Uw5S|oB$_NVot{lDx}hIeqtT2tJy z6$%$_pC;^SSK`|c*dfh4R1OfSZn)=SFybY}YWU0C`_%O+LPms zZiJfvV=v?UWrB_*0z z>!iie<&r1wi7&~rg;X&Be(99%gn^@51XAr`%)HaPC~kl)Cm9?;S+&Wp^3b6~>iK%|7wTSp79NtFHp&DOv>$@ct7R-FODP_~n zl}kUQ8|^=yM`Bu_|8T55-LJcn*jT5L{)DvqU+VmBHI%2dk7D{hLV}T~OBd|~hZq64 zSOHLoAT=NtK@3bMs&(z+IK(nv$?mB%u=rO)jQx2=KS1ZFm zdrDTW@UE)zgUmj4Dt+d3eXj`cbW!OGy8v)i1xTp>>!qP3C;urz00V=>0RzMOpI(}z zt(DdP_S5=xVSNA^TA2Tw*Zt*;4d9}r>oGCqa>rvJxwIHUN|&|E5RR2oH@H(y$6m0i zG2ZtH-ba~8p%77a{hfFHAL7IP=4XiMNq!ane3}<{-)+6`zR2@Wt<+}eCmGVl^)MlM zk|*=4AnZCntHl#5BCF(1 z%8I$roH3g^BYVxj`+15H;#l(bgt_9N%#4ul{Kx@>H+By2Qox=HDf||B0&hyHhAM0X z?}#3e8X>(%>UM4(Y$V;L5JLF*vU1!%(orN8k{O_=Fd1mVU?0Kd z&Q5^zErf(1)$v_SA7b)u(fc1^1IMb7f3mx~q zn(3^#s@=Xnx~RuK%Ue{=zX^|no)rS1x`L$$d`Z!Jk{kx-P4bc+ zHuo_c#_%yT@tAjUr!4V;CdWWG>R02ccmS{qRE@tjVPjO~;zo^e_ET3$odk#JW2~4B zxJ3Dk42x1OU);cx6i3)i0t?h`w^I=cMpn=Z)If{{rIe~5L1R@AxiNXCJiEd0jE~fC zt&h_1jgQq^a+CP5fsetkfRE0wKhnN62z*6&R0iTEjfwE>+8ny@5TF5F zc;pWK^H2f$=aD`90qqBNqQZyr@cW0D$(~uMz%|wRbK@ytxvLm05DjX5u&OMw8jOWLq;J29gO#Fypmr%W zx_(J>MI_Nda2ppF7krj(Ij{UM7$7#(ML?+Z%9U0(9H%O%qJr^*D2=;5VtaK+vsEM* z5lfT z!Qc6{x@k5}s$jD3 zZ?nlJAAuK>&&Ts<*_N3pZ$dZkvd*+Id@yHRpOV3mUJCRe>FLh7D#nQXTpkF^W(__3 z<$LlMet9^Rhy;qE{|bsiKB$R%ne?*Xb`L$O$C7nU7vkAW*R3jDm7sXpY!Y#Zs44Ui zPC|u>(F3}nWZ@Gx1i*$X-wI2Swd|OK1kVniXIQq=3-{*d*C0k!obcZyJ;u&!-IYdF z0xfu^>4&)lbO!LO^K*Ay3irH&nl0e7Z`gaq?UzEJ_TqI% z1+)x$#*emcCMN=gZS|Cg)ov!ax>iDJ{RWokAAfZ_MSV)^03g3#27BbXdmX>JluT-U zkBag5s0M`R9;05KTp;l)wsh?iCLERA9c+-)y&TJgEIZ?y;*6#)GE%CjzxS{q70gPz ztEd<_4I`2{p3XTo(N|y0)3X2exr09pHhV{!1%?2Z{dowH+j4hIjHZ)b(LxA}Ho;sS zqMlXbYny&F0Hl!bi{kuIN}C}FPKdUz7MkgPjp>?7)mKU8>yj9=VGB1iaAUw0i4i8c z9#c95qv_?qU64j+Q7zuJr49rIVi}@eDlhe;=hlrhAqiW7QLv9zqmP7rNB3)|oP_Ka zWGinUOnM^rvz(z3u-VtE$T&y_Qkys$BRt#a|F#~L0?4&Ci;~@B32IwCzM5lTAj>e1 zWKnWcP4W2D&d4Urr(({g{_vz?^V&Z&=vLhr7IPs$IPJjfx}&xEb(4LBSrruHPB}*GO2kQWm^HsC z-a@N{0>CTlN78Nz50j{_G^xNWyi5KnbL1RLucdN*&lTcPKf-W$)lV3btL@pfq|x(P z?t5YfF&lIP>SnF|KkI@lfB*jRDaedH=SbN0wIUb<-pM)-v4mM(kJzqex03AS*o+@- z&o|BjEsRAl{?eIIU`)7UK1J3K zHM;Dqq{8g2jS?c53$SS?ALWZy(^_f>u^<)vVePV9Z+SM<{Jku!!im4iu-~3BYo*le zQ&s2Fz5pjiKP@d)mWw*RW{qtp$HamY!|C1d5{KTi+N)jB|823Y@33vK@6qESuS5dk zsQ|<~m{gOmw0CP==*_X8D`iV{+!3rp6_rl}UG z+|1M?i7{dZgMtN1PH#m{jlMWaI66khs|YZZ6bWkxVotflQeZO(2orv!OJJAd-R8uc z$f{wR&Anvkpb>r!KjqRf$>u%g6ssJNoQyYoUn&-ORkeNH>inm8J9 zw!Ujp5IQr*`iT9RaF%Of4D0-?Yx)ms12-Vpepcj2Uje$I(;=FG>4a_Jvd`Oe)ecaX zgr*RvQ#>u&1FK3SMj#vjw)SV9G!*1ks2%TI3C?vwF!L)|li_{&F+EWWPrsAmJ{?pK zZmFmz|0#?Ud3Z2%MWDm9cTU;kn*Wfqdc0k})^49`&ofB1#_xsGW*u3!0-R}I%$rWY zE?^mWbVvo9OkvbiPFTNuBALnAX9IXXY-)bq4o4(R@o@6ZrQFestyk1lbLk+0ms)PJ zd*(_qsI*z`bqQ$=l{?*Ly8}N-_OirDJyB=1){MiKy7suDEh>#+a%%$zcyt^baiu}r z+toW)Bx?dym-mv;<%I;#SB+cHoP%hsO;HUnv94@HgYRbWe-{>6ZguHvnw1n4NBfT@ zcUk5~Add}OW~T&DmPz+m9j*jt1AE23LvC4vU``;|m|}V9O#P5DUk1Vc=R>!Kqu2Hw z91N@u5)2FI?BWRIXkYmZ>QV z_jow2&D!O4$~&|`kM2mB(K8{`I`E@c{N_f~_|43gNMv zbX1Y$iM%6au{3#-G28jvMe(oKYqZg_>EukoONRi4pZ}~Z z;>kE2P7IGFW4z{1jp8SFtvgWB(IS)Ee+)RsUxdeon&6}42kOK)NE=n z$7A5vR>NLV-30I={$lqO+JU$1oqOZ-xGj?Cj`yoChZ?|k8Uvqf>wx)vNO90@v%pO`&aH&XxbLo#57IM5# zD#{6!{!RQ%QjNZ`iX&T|)x<_4D4N5f%DpYXVZkiP$~NH}9i=rO|8I%#F#?P#l5K$W z74pt`av+CHXGu932WRjluz>;EbyoG%Bc|M3k67X4n11Gwt!8nOlg=d-yPJAx-nL=cwf$uS?n0kvLk`fNK(O2Og9rY?il`IL zRdXUM!4+@6=7gKaX(B8^fOD6wthcP&AnN_HO9vRpK6nrh3o43eQzUjfG0iU9%@aHx zFZEfB4|gd?OgwT$R=M<9j;DG|BTzZPvn^PA%)cPaKIJE`4;c`)I8C9>k$YWS@&|J|@ExAEOggJOe6D+<69uGVur8%pn8n zj|h0UM?04TDv$h;MY@{df2Ez%@OXc0h132@KG(7Rm3r=-{7)iB#ONb7XEUJ6bUFSG zle3&ttB3)ROCUho8%r69NI+Z3nbY8r@|ad(NPg>8D?ToTm-A#(GZ|k+zpfcgz@{aS znyxck0QW9~+2`0B{*J^m0gSeB_vgn_kkp}Q2Gk(}Y3h>+Kg5?I5jJ46X_nU<2Y+y|a%*zEaj*tasw}bCpx^>F z6|DFZ6-^{>ne3{@(tc{MqrJVtyh)41KU%Ai=*DbV(WSiqxMTia#UiyqCX7A7w1XW} z1UT-QIHnFZY%Cz+;?{LWtV5rMc{_G2z#L!lB#ADow%fUe_k8dFhX$}Q<-5bdz$C8^ zF`)vZf`yWnNgs!P+;X*t6Y&GmM)||8~je;0Pts{Ok^&t#zg4L zF;yQTR_6Gp{GAKzmCA)hU)p1*lUXhqrRGf>!j7)8nHuu6l&CM!K8yC6R~prNcAAr% zzFTSO8dI&UUPEq=&|gutkLCc_E3_tX-pIEW=pU#OR7v?rT<}=b%JTX<>%%AbLV2Y! zCZi@i^%T_A{C8zrib&s$y;_n&ka+PxIf*r+lr<~blX-_qu572l=%rS`T_trfO|JKki+Rv z6Nb4^KJqSElaVm-F1K3w?Ag-LjB&x=FIA!3m%U?N`6*+vT3;n*%WBHwYY_~C<8C@O zm&qhO6Eq|$IX$=hyxRKN0g&~M3o9sKrYh&78=*jtFUx{@N1BKv&wZc|r{?TeQ8weU z%QIN~r&Y?~K7dd=Zw|1#_}*gp2IE1VK;LZ*yr~zzadgz$=)QLr@N|;6((TKJUZr1u z4faj*{3qdRm44@tuBJu$vM>+d`+Bh1FkE~u7E4_baqg*fH>N^j*|}#@>&fGc>bS>- z;q`@7K>?9+s+yClh;zc!6;OkV*mRz9H6Ap34DT9Me&Cl?_W?k44($LaDrk!$3%jl> zyrH&9y~T~5rDLF9mjnZhGJGG~-@`Cm&q?*P4)CTiKbXw?XM~OEK&{TT@{bs2mAQqi zXYVPuomwfu`VPe5D{}M8Hmwa~Bf-ConKDFyf=N@Qia)s&bYov-#_+V4&@ zG0gdWzIDGE837NsJ%Nlpun1pfA{}3lc8I*HqSqV7YwIqE2=mfoP!2>VO*{$1N1iQs zq123fzsR&FFS<9A?wPybdOBUeciFqK#&HGrOLlvXBLPi5|5{RJTg>n>&qw=OIWsNw z;*Gf?o?3r^a^?k^RU_kDu7r^`Y;S;KRCjVPgZwKqq9Y$D;B~D0irgHAh9p$gnCS(GbXyF7$tg@lluz z-IB|T%K#o0C9x{1Hd5Xj@S0vxN@ht}BPwgSH4nojgiLR&gSSjUG7;vWgHU`v_~?pJ zIkW%7Q-`#vNLWhT>T#MrSTFvV*$6GJl$iNE9m}ml=7=AhiOgy#PJ9OB4p2CnpEd`% z5(SibJ|hvZB-h36!Boh+zpm((8CMypOP;z*2M}0z<5GR{nDq-33B9r!^aS!|fcS_< z$a#wI9n!uCy|sSAEkI@5f|$7yhW3!-OOfQ(XwB7yri(sqORMZy^Gjd$SEa88|EoQy z0F<6BlOE}#e%I{@Y|Lh(hyw1F7fWA-j1#qb*>`Pm$dIyz*(G{i#v7KkkcTGHlZcT02NnagIQZ68kh#gJ)l#Urt%({|dh5_Ds*l*6=%%@JZN zh7p*h5|ozGpWT>Gx+w^78EtlViAqWwfc^1>Hm9N-wumB>zR_=pG#c zXDFo7tU)SbOIFGW6-$~rB_=oAU4u%81hQ7m;Ox$z}$bt zqd_2{cWXSOw6szl>^E&j)8Ecr|=ts2F&?pw!c9pOM8i| z-qBCGN~?iC1hdV%g5%o(`_o&01T?fBB{<5pr^;1*ib?ogntXiB>& z9yXQxECrq!y-lI7&C=md6kiS@09Ki~O$<&KByGlLe1oBTtkGR=PYjRbb)vBPzb7AY z=1=FQ|1h^$?2)_7ytm%+k%;Fjztt*WZMR)Da5;+g+BOo46-~9V^u|yetYULxae8qz zdv7*iD-JB%kN~gwW^h7)H4)tFK!ojX#xK%0bOm0PEDLonP>n&yD(&$p0EcriDb-be zJTGL%Hcqa{P~B+F{sDns=|3Mbm>Q>Ux@}ti=f+c~NqmuTZkyGjC&qdYSnYmTd!=eG ziV}Bz$cm?Bncii)O~pD*>T4Y+b>JTq_a!Tr#skH|noh~i#M1V0!B7NIyzo0Ow;kOJ zRz}lP1np@68UaolZb#7s;3aDtPP+vQ8)Vn>#kyKWnk^nNPH?Z6R z^%*OM32(={$>CsAhc}|${q+!TwMj@70f%FWjB!2kX*Dw0%#uH5cO`3a!7^naF8bZC zVt*&g+SuZo|Kj24Qe>j~<45HWl*(3^ykdFRikeZqKLV3mf93%wgQSJE9b>+BJb8^M zl!0076NluU?8;i!fMZNgVP-Xou2pe8r~*0q4m-rHY?6DysTfVpP+6@?TV5mJxWzYk z<|lIS!Qlraw7eCdIHkkpQX5dBSSmG0F8;>Cy7?qu5ZetK725c<@O8J)l#F!5e-Ae&;&S>Sq?^phhHkbOmCs@`^2|UN z^=^ky1K|1rj&#Zj)4d^x*~ayW=XMoa8(4Lq^z5^l+;gZBqSda&C#x~`t^Iv2E;q%* zJfoSo(#F8eGCm!Y%vPbDkkZTuPbJcI)9Z>E9qxp^?a2O9X(m}G8s{GBRMV$)#yP}u z&?EPAu@_`&)G*g@!+_oBTHZnM_on{LZyGm}f@6gntb~1F=toH6Y9Xkp<>W^@J@M&J zZ(>z~L%Md1dkvv3oiR{f_-wx_yWE-NIUoLfzI^a4bm8s7SEv-;g$lbZ_5zKBG0b!W z`9>kY#kMOb%JBmOrcfnh6G_=SoeYmi@~W{4yUtkl%qzkQ_80TW*w*MzNP=(I&gmLO zzaA@XXh6FK(Qm}^Ai-y=)~bXEwp-!eO@bAE=A#RB1~$Vtp8wnS=>6}n98gEg9u5Kw zEbza!2i5;i*=8!AL%?SiokO4j0@Zh%(A6-FB6pC0stAt#!O%?CLD+4p3MFhy_^EPL z!X}DwDv%tUl_N-aFhAoSb^e6eF)G;|!+xlZdp6l=T~oHcZQ1{vAINJwKp6zv93_I} zOIy|*@`bMDpT?($Nuj;!Dms;dw&$;rHOt<&n^m*k#P8`^#r2U&W z3U;7z^K0zLUs8)&f~PiJ@Mla{Z}JaTiJbJO{Q4V#z|$NS5iND9gqegBG;}riESxtP zd{f!okdmG}LbA!!{83oivMnZf>;& z9w2tY%=_G`8T|?Ty>j2M5zEW2phR^RCtdJ>P-pPXZERnt$|0lPa{HbAO8X%O&uHLo zZTIiidM8hr5ilby4da;~>L~VnMzzm&t&E>GBexJHv z-~n45MMT9PR+NxH!eJF3k_FEQQiG62ghRxoASEAKXI+N`z7o=q){vcxDeIuC0DTle zCgjxcTzW&8;2O}17^#3O@wr9Tl~D04s%ER$FGAFFvx0=*_}D(GgcU*I{Mhiub>`8B z<@^~}y3D5tL<~Z@RLr$hllXEy+Et!<&BO#PW)$4;n~c64mzy=_xmBGvo5kjpANR}6 z20&tDf2`$@z1;FjnK@m>VK`}Wt2QZK%-C#;)~%zL^`%AJ)^LE3FuIPaSh!(Ydt1qQ zQ#W=Li0kq=Wi_`He--goLXGnRnz1oAz$Ue`gK6jiRt9xHZ4^uO(Khe>B4 z#1AX+DO&;n1?@|{aOh>h?;&^pIjYLzVLGQ zXd<_&d^C^9St2ejHkEH#vf8w9+BwP(-l{Ye=_Tsig9KtNGB_Pb7sYH)Ha8j2#eaW2YNt=pIv)vJnu-$^bRSE1Md>E!tEAoG{T zM7=%a>{9nQ79oZ7`h$Ts6-QCQrMy;$T~LB##VQD%@@`&|G?109(#4x1{LE{GTrMaV z$c95wUV!l-Dnrd6@qwTI%K?2@$~>ho%qIv0mxbploh598ARR1rO*;n@)`%v{RV42S z-~+pwHHZjk-(a3~@?af{)sjMRWekpQIDrhwWBIew#Q;bI>Ft_$VRATNLwr~qEaNll z06xxr`E{qf_#3{!4gJrXi^%IMolnFC;hu5_0I(^0A98W=2Y$?sT6o-99$vcBBQ{Mwf5b6GH4#QmSyHzltFG|mqql&} z$Q}OQk$Hn+svgPsu@|$H)^8Rat{)XRp$SAPGd*Yge|lPBs#Bh-$zkBiIXWA6ooBzA zp#bi?AF8@FNbyAW^6BZ*<-5hs!5T7AkBFIw|BUt?obBdf+VMHKg}1I8MXrjmOxa53 zruLNh1otmb#kx?{I|`u)C2qccpDN|hEX>Jquw&j>D3^FvM1?-3DL7_mC|mFrV!%`V z{oa!y*O<*Qlkaw$v~7NrFi()y|04j4c>%cS_%Zml)&0>W`j5-IS&$9I>Fnugk+;h+ z1eMyQH_Ye@>R`A%^<6AUkf-m$NX}A}XXIYw`ROp=!rzr{06P%wOC5xiojh)BW*;7_ zip5?a0|Sl+ZBdhSB*?C#dXX%ps}#gcs)R|bW>N2gC4CS(=|#MiYJrl%CwI<|>I@ij zpCmf$2@{N$`+_hmv$w7x%`3w|w8G5Gl!Lx7Hy-{?)$Swf6-^EeMcB(}*8B`N&yo%` zUn)Ajouk6g0?Wd&z8=`avO>I@1`>88`IE9x`5+;T4jtGtDf8JzwsvDJ9K~4k>wJg@ z_}>UJ$Ng~18e^MPCw-Q%U`je815CbSRH%l#Pr71-e|~Zn{`wJ)Xwe-+-j7<6jEhyY z{1y5H5u>hEB5Ku4-vRx*dZFN0P(=rJkTbvXhqk~Sp`pkKMwP5Ce70&tQf(kY1{~UT!lGG%?ZZUA@bGJLV!to6TD{= zqNgj|>&IF3f{F~}?(ydS#pHlVm=56<58=jwP4&k_)O7rM4Wq~}EHq8eMdMddSj*DV zoH%7W=$vX#o0<-nm(SMiCDs8@{RS7(B5RU}G#H?;sCEd)iSZ6LK0*vF@ajLv0V7?l z%VddVG7ld_6fQqt7(FE%2Z&pY@@yQ0^sjTb+=WlDa!s&`j=@n~Hi!`&#Zlch7%%r+ z#!=N4w=7xN$ES<^`247i zF#b6=}rTXP(VpZ4=EvCLr8ab zhlof^gM=VTcPT0G56Hb&zn|wE_F3!Qv)(;3J0^B8#-bT1cRyFJAh?}j_Rg!vaL1sA z&alo8&OD4dDbXDn+I${XqCVD}m!l@3>8%8+8$aeTz|fYl6U7)CFruk+sXxopmw5B} zVJlnKi;M^_`cgT``sjxF_Z(o;xtFQdMd#CJgmvWWT{Y`bY;>|>1c(PEuQGo4=Iz|H zHCg>RLRUtv--NBA-PeYe+ww5;8>8ez^!`wQE1Qq3QUej;n~n6>g+{JKv! zeP?tSuRy2Rpx^q5c&4yb*#2O+LVv|Bb5$m&fO(Wq%Ja@rX|D#DutTUGDmYL{! z9t6#T!od&FE3L=S^&KJjbsivr8>?@ z!t5DkD@=)HqHa;rq|eWe()FWgI%kkiD4ll;&(n}_Kc)MfrENEb=@t~L;ZsVU`P3aV zwpyNNzgDC5rBCc8(C3AGo>V+Xw{L08LZ5V-7~*i-eEqNZWtgy3z1KiAPR%-ozxac<=v6I;K^Ao5LqEFN1H!5P*>*Wwak z8u$6IUW3!(OgTcLJS;|{9%q+>iSm2Asm!eyR;Q4`yUO=TQQY5_#~VJmz-67}*p@!` zyM3}q-GzK1p+Vg79BWTQi|n0}Mjx@#Q|!ZbnbmvIh96=c?ku1b^$6LR(j=1=E1tN! z)iDd+=xRw|v+4`@F4#A+so@mNXB$XY`Ue0ilvbfr!J6y)q z48N0{HFB>(pbSjJE$d&S@_TepxKU?-u9TU5&Msuii2%mBuc zP-x2MRX8$f{feAx6MZ>q6M3y8o!o8SlUcdKLEPcv zTW+$OsYplqUJn;`3%%aeTj58GPJAM%>G_aTX$-dr=udo;VrFb{hjB8y($L~V_l<*| zOlgbM{#aq-jLL`0%*lmLI4hz!``>Oal+%ySr}f`oZK~?;T@ihN*SjVvwH(n;==1>R z^`l`|S5l-B8c~+Drl@{C;m>PEx%)lBr5O&*{n)|+Yohm-wVfU)FLw)OH`Vm7uTYKGPkvnAbE7CN-A56Ap0`hwEHLa^&_Cj6JLKBXPr2R{)PYaBc~7FN zE2+nWKU$|y)V#}adZD~tv}Vxtesb+_z43Aar^xf-eSVcbGedP3kz^6almIdw_?(ETbodkGXb8<8% zjd)|H84@?bc_vMQl;ZNA9_Y0jsESUaqRA8`-MwwU&ZGZqy$12~s3TS%adD7VQ}Mf( zDxz>69^pGo-`z6NEd@)Qv0U3$tOn#nUMAyjYW|=wF0i9`BRMbLPVJ*PKf~K^`F2b& zm#f2}x^F$?aFJk@NbL;Gr^S+iGBwUirMmh}_z=aq^1|@yLe^aiVgGXb-K7S!EXI=6 z1WOJ_$By9X8_^j+Rf>u98GLf!7JGBFe$P1xED%`r(Y zafCCEQ>_hj$ncpQQas|OwX$jg-@EUNqipw{avjS*!|D_uYm&J6Xvaf*aL)JWk#Bz{ zd>^~P>ou0R-yzSD+6}G#EoguVr#RK7wQ#g)#bF1}O#Ew-RIpc8#M_SE?NkdiwH1wC zA*hipV8JG6)fWWNhJvk*?=nw+9gAI2YS*k+;~km#`bJ*o2YcUBx@h&X9J1hQQoqlO zeLv|d(y36K7PA}PdL|&XFT9V4rx)k&hQG>|vvelyYxeCW|FrnM*|T1aom#QYKix=G zbTm1hQq|v2axhtJx8GPUXx6g-cEPeM<}HNmlTk*8;j?-VxR{%8^cj~PFA?@_!bu~> z8R8yAyeGycLeaL>)O~K;NX#2=U2JK>cK4ezTqC7JjHn(UWIqSq*GDsvnJ%3U`M~!y zr*h@#BH~v<7-UwJSX1nnaQ)2(g3P6OHIPRKZ)WWCzImn=?JtJMOqS0Qy@f3oYZ2oq zGCye~oQc%CP&rf|Uq8%2IB;<1qZ;z=U@c3+ir;fof^K?qsY$%h&iF8SS;Ek)*aLh8{dndEZCa|Hv)VP6;xMC^^D}yAp)>K) z$W?KrFM_Qk#ap&S!Cw`lrl;2zVdU0iiX)sG#pZoxUXny{!)FaLEjU_s3y_`~gXy@shzV=2~#U471tSX@Y8a(%J;aC?eH; zViD`{s2=>Gnk^Dg6L0-`GsYM0k-$~EQ8{>R7C19d{xZmS2l-sephg!;& zQFl<7UDC~hXD!Wj2?<1}mC<{9dNTKZ@Zz##+@!F;JFATaXkWSx8_ee`_39 z105}x7$?xDZpy{jd^~u=Uo%wfTPuI+fQXJW*!G3>!@0FAy{cl!bW#~w~oXE^i zNQB7lH^fQ5qR>N3$05yN#!M?)k>~hyQsJU`#))W_5Jma^2-RId^z$T~EI0<$l{M5` zWA#fHW2pdfEPRH^&#LcZRr^Z2S?0Mc!5y-wJ7$J!MtnzT;=^;9N0z=@*{4|I@)|k8 z6@JeWvltzPZn7{9AXJ1o?;DvIXauQd-MRO@+7*s7jqy52!Ci{Id&tg1^nrShEc!W; zuj)cHmUx0HelYS~PHgd5xGK+)qc|)-=e-5Si#U3n6#QH=O-n^q{(J%I=npxLK%7bo z1;aL49EI<|l0(E^RrY->6pjT4Zx-s4Ha&e!-Xg2Ppu29^4M_Tw;hFmh^vhKp^aE@* zM|Z{UyOZ8+hnwI8NSS6btWZH^>;LdZ*nXlCb%9yrTm@~;{^_^ZoU z*1^qZ%>|VrgaNkX4)0c#voNUBrcD?Q7G9w-h1upXytqhxD;%XFWvtzAw$M8pY!6yJ(ny=Dw` z{F%UodN~!4fXT?2_95JC=c5O2NPdkw*&XEh-lVt>UsAohu@GPu6J`#;+jigRNBCqh zIvcNiI%GJkh0@{}gw?&9NP$l?fJcEh`zYGpFB}APvF{T%LOHmOG+IKeq^;Bwo*Rse zCFpywwZ-h|^yS{*c86ov#0}FsSV=YH#7tVmCaTHT{8XZHYzu<3Hdb~)PjA{Cg1*Qy zY7G!EE$dkyYUaA_N|pwV59Dtbg^v{y=H}Q|H8tQ@>_rcp!g+0Eglw3A3$@RWXsIv~ z?oSqlCgQ&@lRXY2xEIS$1U)$AJW_1wnJYY|@GV_j$GWk!j@{z@ocD-fvWj`RWNLz_ zz?h|q$;5uIps*OOACN6Prlj9jZf2KM>ZJDUdzH@;2DbY*S>^V=FPyyYV{X*~vms~` zk25x4AcY6!%~sjgQPV?1aS67`;@e4@Nhmqm6@gPaHB9K(Ect=;)byaNX_Fh`dFD6# zrz4qVGD>Z7%^XQAtT%O@>g#};B~S469&?j??M|~N8>!cZkB=VNQ`TlXjC{PYIK*-k zmEHDe$vK8Uh9t&@wy0U|#_-c;k)1WS9{32PR$^iyuqkrPt|e2(ROXuKa->hs)9izD zXa_Njv)+$thYnGK-G$lZG1e6LIW!I4beI$mv1TDZHB@*uTx5Hx$((lAi7g(Awyghj`&qlX4+gk&GY4hYIvS|#mxndoGsvAfy^qJoKcz5ZJmOj+9(2!`ys@9r zg$S38o|NGH%!(J!#HDi@Ps$CC(Bn0YFq)EGywg;dvIIAT%NjopDW$fn)x=>uU4@aG zWqHNN6|kM;h<>(Ax$Sr`byxQ3ezTzlNzMe?qz@$%ynOa!EVcVu_KNnoZ+4U~&xqo^ zhnpsvXko>*Ya;}cBwv!T3hLhauQCKWe)G_{7^wu;nZpQRokvZX>ie{b(iDY~T2L)~3V;kX=W%k)&u zxjp3D`s9d(97$(C#k2=b?DhwjmdWf_X)#tG@8s*jJsyaw-O3Y*cJYrP4`J(XeXZkn zaXwanB&XWq9oN zz3^_BG2B&{Xc+sO?g-x_*lJx+)(C+tvB(#txUlu^sfN9flj-qV{z;%_7t<=}#LLEh zqD67=)vZZZ-me`pZ^VrjY6 z&Fkqz>v0D6)*EGPS>)J=rxeOzUh@QP&y9h+`YQ;d!2ylH)M`dd#6$~HZ)wXq@} zCUT99T7Qms-a>6)6w1YtP!p?&Ju{A1qo24T6|x@Sc-(yJb(7m3%V~NF+?1E)wb-}a zL0aFufy{fasedXN{M=>AOU)cJ0W(|T#(y0sjdFEn?aSsG{jBY6@;aGK`}B}cX$*5k zt#L!XGG;eJX#I0Te>QK?<9Mlc>>3fra;e`tt6 z91O6^E*GjI2w&@JIA@e`Bf7 zXH^~v((9zZ=D()p4Qh`wyc~35v$1@`M?TIFUX`1+`3d#NHSS>e5%K%rvVmbO@*j(} z6{u=Io*kyb5!aHoL=2}>apJ%klz=nSgG=VmDqm=qt?{2u zRwPiz;`T15&9Um^^VnejEHDt7t3ZBaA_6vIG~6s&w453 zFYsvtbrCxF+Ee~@N)t->I<##y>==|MKj|17Ls?rIxQA_|)ZVt=4f{1bR^AHO!pT|* zcW_3WWu`hVo{Z@wy&Y#DHTgPa_G040V~zlpz2M0bcKj3iQIWRTI0krGh07~Ldl#hA z4T=fCZa9j4mGsZQd9sx%3R+c#| zM_*f~(NmcCs3>VY^3Spa9v4FdUAUISJ%AHX=6#L zvYtU_J(ReTXZ5DHw{!9usVTMZ-`MSo`Oxn{^{W?|<*d?7Xa{%}4G#=Q6*YVxFoh(J zuycTMqYCpaa+9wQA&$2Q;&$E~j`Eyys|b@|2Bs+SPCv$j&RjAE7`}F(K`Q)vJX$-I zzg}Ceo`<9(v)_khBp(t)e9ij@hN<`QQW5cW17CXBN;P4~g3_X!JV?7}crzGw;J~fG zB<~gVz(S7)Qbt&^(zN{t+Gr+-c#VwhL*l74IEW^?{u9%>Oo50rQ5Zw(`H+TD)jKw4M?DzJ7nLUTMFmD>`Y(<+qv&Y$uDDLKKU)D?fBI9B3c+6JR zq_p1qWbl4;+t`ygLYiM>D~9(%XI1KoLj-l{S2-dl%Czlm9(VP1ZQ9tvA8R&##6K`d z0=yBXFqsH`D6-(iV`bw^5ui%Bd|}Mi+P=BQC*iem)&L#y^G4?axV~bDosOatOvHz?mYS; z>3+Y%@uo4+k9?|(TO04fRp1IZi{O49vtG~w%}S>!Z9Oq3k~birjrtbT(rGbN@~3nN z!iKmMJdN4wWu&JRX5MgtSNCSmFbB>Miv7tZ>A}UVnzV3#n+sY4^$sKMmFVPSFHNhr zKeP&NyiC`R-~ZZOgEz*}t7@ym4$4d9PYph&pA|h8Zk>|eFE$+X z9-nlKsD6V}b3-;jFTA~QkI7N6V*6H6?MUQ!z>4L%f@8?f`@-WVa7^mw4#Vg*c8(b~ zK(bk3uBP=mEmORF?sQECkInRme$Cm6^>n&p*e05RWn)NxwV3qsWJ(UEHOENArc*=L z0g3U`Q$O}fPZ@CfRXU6HyJ2nTeF)oM#qV7FkvA{w)@O$*w&fC%;^?8MDkPq1 zLG^IBGAwmPsPp-cjHMiqSE9LyO|I0kcL*9e@}p+_?zZK#k;W+^H`Qss+0Rp}Ft*?U zy~FJA>a!J18*$GZ>U*irI=>f=@$5dCJN^;sOzv4|tRnF=d>B43Mfl^*0o_>vTZWt) z0{Gy5h4w?7o7p8Hr5bnUD@Vt6@2#C|jNUq;cVeJCso5B^DA)apn3}Z}@?1k?SN$oe z_&w#hq){w!#hEv-Eh^L*SW}Gq%Ln7lq^d8rdwUyk=ZL?c+7+K#mN=yL6xI!VySKGp zH|vQgPV1AQa{ZTNtnXa^u~g4c5I~oo@ydb%9-H0P>4ecrVG4enc&8bQRlv>YWk~$ z!=0v&?r!4Wns=nOQf4t`I~$Rv%;%P43)1Q5LY`vZ95q8KU{`vG) zsxJP*K8v)6)W=}Bs8%`mL%pF^P^+jL)ZyJ-B<4Bp3En)WXdqdgx$pR$ZZFa}bDfu> zBie540EWy$I%L1V_^9;r3d-t{zs?hI{Z7TXq_dw^_*#7m%jm%Jeo^&kX;n_pFMnpf z20I^pwv5|7ehC*ew)qb&p+~0STJ@uJ*5oBaevBXCvaV}z^*v3kpBC0>Ourhtf8|aI zJafbxQYAV`$l;*d))SV_?uHi(hh}K_%GdVLvz&+E@%EW?d}ZVswolQ9Xa6KxYe=>9 z`S?O6_x7vIpO#2l3I#{ran-!+8MiMaNBFuA127($5!PX=4t;Bk6lOix|D~kgIMaew zTQLS#eVQM=1Ft)~WAKst{W)c^S-(#$tOP&OG=UT6qFZZk>ok<#*QQ-`B%)K8{Ek%e zA}O!h#oZ}YGxVn==z${==ozVb4HE^!oxY)45$mW%qwK9r4s-@bL?4>3cz;QOld?Ay!> z>Xy(p50Ps49(5J<*L#(NvkBYjDlOn}*IBrvCzXU`?v5{SAMQ}$uQKafN2#P$4{6Ns z_YmIf^%XM%uZUNiZ(I;g!f!VoVR9j=e$m`Pnn6<4Qy-vM4Pwd^vwJHvz+~!@5wdoa zQG6bTALq-^uG)sC`W{VH=ECB!-|{0rQt0#83mkh`9*sk*pqN3K66$g|jj z4{sJscZy{(?Bx~7Pn+!Kj(jYf9g{wCWZ$OgUp5g$RFY7t6=i$`>k2A(;7hV#Q5I#C zx=*Rc^gJr*E1mDxoUtRZFArLLDSKb$hkng1K7u76*A?qMIW!%3MT0hWll6S)3BM7| zJ9CzE6D{xW`>VB4g&)==ikm+yNi;Wq*pkR>{_strvRP(7b!;~Mbij6dN9fn`T>dd> z%|n?0@LX$NdzP1G*jLJ@JW9J{~VFb^$q3)zBUfkn&!@9)D zvn;Z_e35!_jwtvc1(%W!*D$Yf!fxo%iw6shcOQ_iWvX+iWa}^sHNR_Y5x%o6ZLaZ< zn-@1T&+_GKtb@>CWSQbS&_r>m*`{2c3-f-jdI-}|bK=vbCRNHO;cAtu(RHyXwg=k$ zb3ua!?dm;uzAq%a+eKh^hQ-WrZj{a=N43RPSG$3Ib+kB^3Q5l9j(I+#8I5na^A$=n zV{iHuAK>b_{K8)6S@s-euBVxzeKoz4^`86QC!H;~Z=^-ewPR-!?NqmU*il)ITi1ZU z-w5iMV>{45M=2fpQbKP8J)NlF#u4iG+tjE&4mdTe8YQq)4uTKpP|5H9&_E(4f}!W{ zJW;JQHY*n@C-*G!p6Kmmtr>{wtToeoBFl%IYQ?Im%5j+^o=CN8mv() zYs{7T9c}pmAaS{VwEQNzR+BAWfK`;N!b<^=G&dyKKa*38H1B2|do+tTT<0MTJQgWx z##S(@cEp9|4(>Tkh9*@{RVNeDv~{h{icc16cspq=g?MuFE(+cpth4{5k~!mgy1o8uKc*q_Q|b91 z6Q5jmj6|&7;2(gF-y-z#oCE>Goz$mQrX}&jk_4?^2;gDZXksv}V$WB_*EChH z!G6%)57f%Yz-=0}D;no5zx8sa*Fu{)-w*F*s{*Y#2@F8LpHj)Q?$FaAuh5rd3tS!v!9b zV1zV>MeDu8k9XjA_D%IB&7GZ=M195G_cN|PR5-$<_tu=kEzKbJX9YY0$;C#l5Z zcZief?s3>5*{WMhYZSewlX$R-RnOP`EYe7HuimC1!wHZ7MeWW{%&$60V)A+127dk{ zf|*&rz6AO)Gw9qaP|;wm@tVYhxmkSjI#l_eF~C8%_5N4l$aDDIw55JL@_a!AXGz%NQ!u}Uq@kCR^Rj{mYxZ{Jg4NtkhbAefM$In_laXMt?+ z*~8*&wV;w(D=(hG`?TmgQ7WdR{)N_;UYmyXbL%~>YV?(smvF0Z2Ur1;6N)9ARZH6N zp7kvgDT2<0Ex#iE!O&+YQ<0p5wCS4CpkJk6u1SZaL`n2SE4G@NYGs$dVtV|`C$|`| z`@ZG$-JE->)!Ox(*kgdjoIc5Gvgkn2(LPa&#c3AKPs0=T z$z>ybLERXtcaU>C#q16-xO!SV?Ne2!dPNU)- zNMh5vm%T0%)ABWW$;2ls{z5lRb%{nXWDhBJ`>qUSIZXJ_ApU&`U;hsm^T1dACAUt{ zpYm%5m_L0!c!6B5fI3LX=0wJ1KwUi9{8i%O^|VUcw*E~FJ;L|N-xqj>`UgzRA|l~r z(gA~7SfLTlWVf*QKvv8Vj_i%vK*rPj?Z9{P^i8QJua64O@Y8vVG2V>4NYwd=m#dhl zBj+=6H&MsGU_%OhTVQo%X~sP-D}06u&5=w^Yg6r9&BAtfvP<`K1h+D+&nvx(#AcDG zA>NnHx0Cac#VbzNX6)dZ+#+>dmaT3m=eU>kJb1ALkX7=(jK__{5R2}A-5sgm8a)+& zSD72&g9<)e1t`F~s{jrPlz|Z*+k=s-05#|e5r6;!7_fq z2=tTv26`I+C!oY|32uSKmzGe*OP~pS;J*whK($Rk7^o8Z7odS9n*ag$VjW6$M;;;$ zIQR>|f&t8HC*uk+t~P%%gD_5* zkJEpQ1g!7ne+U~4L4+dE`d*zdN)UGoksK6TfKK?;k%Iv+3K+ism5~ON1Ymbzx@M53D-x3TeU63a{y3 z#Ly4}G#CsIq(g?1kXL-oKSGA0=Tu*#+Dr7J=?c++*eEbT7)HxAI%5PduCg0g!v^4h z5hyS$*k0SU@f`}3hU2blw7~;Kr9p);!;bo|DH~K61sH+`xz-rFrn=E!RF}&bQNVB~ zuBmoZNG9OxHELG)$0Oh6hRgHUJhc+Ud!Rx4vUtfCEnoAg8W7Kl4)M@3NE9%K^=tkP z222_zw|R|1FksZ6=w*b8oomV!9dfIFc#Q@j+vU1R6flJIYibDtCICPOY4;2u2h*NG z_xV00@8Q`&xVG(6nO0uz-Eke{GoH9wv<7vc%tjO%Nc0-!=g)SUt(r zj~me^gLt6pWyW^ig37=y`EMF5-vW4H$qZMB5Io%igkjd~h|%FIw4nYrzzl5hf{6Q& z+xTrj4EV_R8?0>uba8u7ozlYpo8Z_31OYmse*p^Uvj>oXSUXUh0hud0TH+@ZxF#DJgCwY$AU4zJRy{h10w?^u_4JDuK*PA%^?&u z4-3jD-y{DtZel^@<|X(aB?H@edyP`CVX`p!{A+Y}iTVn!k#Pz@_Pd1n;XtC8byvJT zOugai#~n}(4@LqC<3cvo)+>q@oW_M=gZ{WsEtS&tA0-A$?z%>zcrYQ@uimR&p$FgM zK{1{CuaFk3dg7W^!iNdKn7?160(@u>sZpSX!^94tqm#b_MxFq~pzQ%5354wZ2Ism^ z6Hs>o<)vxp*I)IqI1B*G4*)ul@etsGv7i8;ohKp@_~H;?0Y4oB6o_l!HyDf%REtA| z+Sp@20@j5IfKn%b3M>&D0P*7yS;3YQsPgu}1;EEKh{SQHfH+JGABuAd6&!ZL-z->s z3NT+TQbqyeBfj?W?g%<9We=c}i@61zo0Ur=FXNxan@3Qw5@r66!UCHepjPYE5#;cQ z^*>$|X2o!zi#(v zppZiAzpegVaSa3E(u9D3h(LxAV|hcNEo%_5XG5yC`H%2_UBLgId-6{ooX`LA@!w38 zfBLb-leqFD9D48brJsMo|Mm0t%s>CRL560%bOWNF!zkf@$}Z$^T*E^;D041Bh2e4# zpZcHTBh|9M_rgo{_g-9w|EvA?@UB0#g+s5jss55p43@u=4bWDiulf zE7gC(|5g3_!PB3rQRM*mbOE^emu!Tp{*~v7Y`3^l{U`ii)xV!x{He-T1%PLZ0O?=3IVi#KN;dqL<(2F|;h(aXC+zQA<3D9N zYyQj4*Eh=0ee$1qjs2MI%EyV5;H3|A#Ooi3;PDc`j5}2aASm6FkyFu>V|R3M1YgYq zRFvpf)y3sMJcLatzb*hlSx!re?VgG}2gtn)Rc-IPfaq_pi9peL2n2Tnpw&D;3pOo7 zRb2QofCGc|0ASiObaf)%14M@fQi4a9Tg6-f8W4RAYP8i?pbMYnD~26RTY=2Qy_a$6 q!QB;rjoxn%Ku}TDf>L&wEVcW{S9eqq2oVUToCpZXL(qc)g#QD(cxcxE delta 33522 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 Jx1X=${y+a7g{c4l diff --git a/tools/dmitool/src/main/java/dmitool/IconState.java b/tools/dmitool/src/main/java/dmitool/IconState.java index c3eb2cff21..ee31b13792 100644 --- a/tools/dmitool/src/main/java/dmitool/IconState.java +++ b/tools/dmitool/src/main/java/dmitool/IconState.java @@ -175,7 +175,7 @@ public class IconState { } int pxW = in.imgInfo.cols; int pxH = in.imgInfo.rows; - int frames = pxW / w; + int frames = pxW / w; //frames are read along the X axis, dirs along the Y, much like export. int dirs = pxH / h; // make sure the size is an integer multiple @@ -211,6 +211,12 @@ public class IconState { return new IconState(name, dirs, frames, images, delays, rewind, loop, hotspot, movement); } + + //Converts a desired dir and frame to an index into the images array. + public int getIndex(int dir, int frame) { + return dir + frame*dirs; + } + } @@ -244,6 +250,5 @@ public class IconState { - diff --git a/tools/dmitool/src/main/java/dmitool/Main.java b/tools/dmitool/src/main/java/dmitool/Main.java index 493d7b58fe..55b453098e 100644 --- a/tools/dmitool/src/main/java/dmitool/Main.java +++ b/tools/dmitool/src/main/java/dmitool/Main.java @@ -59,6 +59,7 @@ public class Main { "\t movement | move | mov | m : [state] should be marked as a movement state\n" + "\t delays L | delay L | del L | d L : use the list L as a comma-separated list of delays (e.g. '1,1,2,2,1')\n" + "\t hotspot H | hs H | h H : use H as the hotspot for this state\n" + + "\t direction D | dir D : replaces D with the image from [in], instead of the entire state. D can be 0-7 or S, N, E, etc. If the state does not already exist, this is ignored\n" + ""; public static void main(String[] args) throws FileNotFoundException, IOException, DMIException { @@ -270,6 +271,7 @@ public class Main { boolean movement = false; String hotspot = null; float[] delays = null; + String replaceDir = null; while(!argq.isEmpty()) { String s = argq.pollFirst(); switch(s.toLowerCase()) { @@ -341,6 +343,15 @@ public class Main { return; } break; + case "dir": + case "direction": + if(!argq.isEmpty()) { + replaceDir = argq.pollFirst(); + } else { + System.out.println("Argument '" + s + "' requires a direction argument following it!"); + return; + } + break; default: System.out.println("Unknown import argument '" + s + "', ignoring."); break; @@ -352,12 +363,33 @@ public class Main { if(VERBOSITY >= 0) toImportTo.printInfo(); IconState is = IconState.importFromPNG(toImportTo, new FileInputStream(pngFile), stateName, delays, rewind, loop, hotspot, movement); - if(noDup) { - if(!toImportTo.setIconState(is)) { - toImportTo.addIconState(null, is); + //If replaceDir is set, attempt to find an IconState with the same name. + //Then if nodup is set, replace the specified direction of that IconState with the (first direction) of the imported IconState. + //If nodup is not set, create a copy of the source IconState and apply the replace operation on that. + IconState targetIs; + if(replaceDir != null && (targetIs = toImportTo.getIconState(stateName)) != null) { + int dirToReplace = parseDir(replaceDir, targetIs); + int numFrames = is.frames < targetIs.frames? is.frames : targetIs.frames; + + if(noDup) { + for(int frameIdx = 0; frameIdx < numFrames; frameIdx++) { + targetIs.images[targetIs.getIndex(dirToReplace, frameIdx)] = is.images[is.getIndex(0, frameIdx)]; + } + } else { + targetIs = targetIs.clone(); + for(int frameIdx = 0; frameIdx < numFrames; frameIdx++) { + targetIs.images[targetIs.getIndex(dirToReplace, frameIdx)] = is.images[is.getIndex(0, frameIdx)]; + } + toImportTo.addIconState(null, targetIs); } } else { - toImportTo.addIconState(null, is); + if(noDup) { + if(!toImportTo.setIconState(is)) { + toImportTo.addIconState(null, is); + } + } else { + toImportTo.addIconState(null, is); + } } if(VERBOSITY >= 0) toImportTo.printInfo(); From 1cbfff09d7f948d83dc75c6772b8d82c4c4bce0b Mon Sep 17 00:00:00 2001 From: mwerezak Date: Fri, 12 Jun 2015 00:06:58 -0400 Subject: [PATCH 17/30] Adds python wrapper for dmitool --- tools/dmitool/dmitool.py | 91 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 tools/dmitool/dmitool.py diff --git a/tools/dmitool/dmitool.py b/tools/dmitool/dmitool.py new file mode 100644 index 0000000000..f24ce2c590 --- /dev/null +++ b/tools/dmitool/dmitool.py @@ -0,0 +1,91 @@ +""" Python 2.7 wrapper for dmitool. +""" + +import os +from subprocess import Popen, PIPE + +_JAVA_PATH = ["java"] +_DMITOOL_CMD = ["-jar", "dmitool.jar"] + +def _dmitool_call(*dmitool_args, **popen_args): + return Popen(_JAVA_PATH + _DMITOOL_CMD + list(dmitool_args), **popen_args) + +def _safe_parse(dict, key, deferred_value): + try: + dict[key] = deferred_value() + except Exception as e: + print "Could not parse property '%s': %s"%(key, e) + return e + return False + +def version(): + """ Prints the version to stdout. """ + return _dmitool_call("version") + +def help(): + """ Prints the help text to stdout. """ + return _dmitool_call("help") + +def info(filepath): + """ Totally not a hack that parses the output from dmitool into a dictionary. + May break at any moment. + """ + subproc = _dmitool_call("info", filepath, stdout=PIPE) + stdout, stderr = subproc.communicate() + + result = {} + data = stdout.split(os.linesep)[1:] + #for s in data: print s + + #parse header line + if len(data) > 0: + header = data.pop(0).split(",") + #don't need to parse states, it's redundant + _safe_parse(result, "images", lambda: int(header[0].split()[0].strip())) + _safe_parse(result, "size", lambda: header[2].split()[1].strip()) + + #parse state information + states = [] + for item in data: + if not len(item): continue + + stateinfo = {} + item = item.split(",", 3) + _safe_parse(stateinfo, "name", lambda: item[0].split()[1].strip(" \"")) + _safe_parse(stateinfo, "dirs", lambda: int(item[1].split()[0].strip())) + _safe_parse(stateinfo, "frames", lambda: int(item[2].split()[0].strip())) + if len(item) > 3: + stateinfo["misc"] = item[3] + + states.append(stateinfo) + + result["states"] = states + return result + +def extract_state(input_path, output_path, icon_state, direction=None, frame=None): + """ Extracts an icon state as a png to a given path. + If provided direction should be a string, one of S, N, E, W, SE, SW, NE, NW. + If provided frame should be a frame number or a string of two frame number separated by a dash. + """ + args = ["extract", input_path, icon_state, output_path] + if direction: args.extend(("direction" , str(direction))) + if frame: args.extend(("frame" , str(frame))) + return _dmitool_call(*args) + +def import_state(target_path, input_path, icon_state, replace=False, delays=None, rewind=False, loop=None, ismovement=False, direction=None): + """ Inserts an input png given by the input_path into the target_path. + """ + args = ["import", target_path, icon_state, input_path] + + if replace: args.append("nodup") + if rewind: args.append("rewind") + if ismovement: args.append("movement") + if delays: args.extend(("delays", ",".join(delays))) + if direction: args.extend(("direction", direction)) + + if loop in ("inf", "infinity"): + args.append("loop") + elif loop: + args.extend(("loopn", loop)) + + return _dmitool_call(*args) From c2f8e1242e3faa8f1f5e3bf779051b0d2869cf49 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sat, 13 Jun 2015 08:44:58 +0200 Subject: [PATCH 18/30] Expands admin jump permissions, cuts down on superfluous feedback. --- code/modules/admin/verbs/adminjump.dm | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index e84543e88f..e579ca1544 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -8,8 +8,7 @@ set name = "Jump to Area" set desc = "Area to jump to" set category = "Admin" - if(!check_rights(R_ADMIN)) - usr << "Only administrators may use this command." + if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return if(config.allow_admin_jump) @@ -25,8 +24,7 @@ /client/proc/jumptoturf(var/turf/T in world) set name = "Jump to Turf" set category = "Admin" - if(!check_rights(R_ADMIN)) - usr << "Only administrators may use this command." + if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return if(config.allow_admin_jump) log_admin("[key_name(usr)] jumped to [T.x],[T.y],[T.z] in [T.loc]") @@ -42,8 +40,7 @@ set category = "Admin" set name = "Jump to Mob" - if(!check_rights(R_ADMIN)) - usr << "Only administrators may use this command." + if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return if(config.allow_admin_jump) @@ -65,8 +62,7 @@ set category = "Admin" set name = "Jump to Coordinate" - if(!check_rights(R_ADMIN)) - usr << "Only administrators may use this command." + if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return if (config.allow_admin_jump) @@ -86,8 +82,7 @@ set category = "Admin" set name = "Jump to Key" - if(!check_rights(R_ADMIN)) - usr << "Only administrators may use this command." + if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return if(config.allow_admin_jump) @@ -111,8 +106,7 @@ set category = "Admin" set name = "Get Mob" set desc = "Mob to teleport" - if(!check_rights(R_ADMIN)) - usr << "Only administrators may use this command." + if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return if(config.allow_admin_jump) log_admin("[key_name(usr)] teleported [key_name(M)]") @@ -128,8 +122,7 @@ set name = "Get Key" set desc = "Key to teleport" - if(!check_rights(R_ADMIN)) - usr << "Only administrators may use this command." + if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return if(config.allow_admin_jump) @@ -155,8 +148,7 @@ /client/proc/sendmob(var/mob/M in sortmobs()) set category = "Admin" set name = "Send Mob" - if(!check_rights(R_ADMIN)) - usr << "Only administrators may use this command." + if(!check_rights(R_ADMIN|R_MOD|R_DEBUG)) return var/area/A = input(usr, "Pick an area.", "Pick an area") in return_sorted_areas() if(A) From d989df7e8cf1fbdf39621ebd0783e1d60cb3a492 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sat, 13 Jun 2015 09:53:32 +0200 Subject: [PATCH 19/30] Adds the Jump-To-X verbs to the list of debug verbs. --- code/modules/admin/admin_verbs.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index f20b04de8a..6d8abad3cb 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -163,6 +163,9 @@ var/list/admin_verbs_debug = list( /client/proc/toggledebuglogs, /client/proc/SDQL_query, /client/proc/SDQL2_query, + /client/proc/Jump, + /client/proc/jumptomob, + /client/proc/jumptocoord ) var/list/admin_verbs_paranoid_debug = list( From 9613fae16a348b25ed3d413fbc5e7919ef38d262 Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Sat, 13 Jun 2015 13:43:51 +0100 Subject: [PATCH 20/30] Wizard suits will now be refitted automatically for non-human wizards --- code/game/gamemodes/wizard/spellbook.dm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 9b81c62267..23ed522c3e 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -179,9 +179,13 @@ if("armor") feedback_add_details("wizard_spell_learned","HS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells new /obj/item/clothing/shoes/sandal(get_turf(H)) //In case they've lost them. - new /obj/item/clothing/gloves/purple(get_turf(H))//To complete the outfit - new /obj/item/clothing/suit/space/void/wizard(get_turf(H)) - new /obj/item/clothing/head/helmet/space/void/wizard(get_turf(H)) + var/obj/item/clothing/gloves = new /obj/item/clothing/gloves/purple(get_turf(H))//To complete the outfit + var/obj/item/clothing/suit = new /obj/item/clothing/suit/space/void/wizard(get_turf(H)) + var/obj/item/clothing/helmet = new /obj/item/clothing/head/helmet/space/void/wizard(get_turf(H)) + if(H.species.name != "Human") // if they're non-human, refit their suit so they can actually wear it + for(var/obj/item/clothing/C in list(gloves, suit, helmet)) + C.refit_for_species(H.species.name) + C.desc += "\nIt appears to be fitted for [H.species.name]." temp = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space." max_uses-- if("staffanimation") From aa3c68d3c2a257eacd744f51a8a5fc5748f5ab81 Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Sat, 13 Jun 2015 14:12:59 +0100 Subject: [PATCH 21/30] Renames Track-With-Camera to Follow-With-Camera Title. This means both AIs and ghosts can get space-completion for following a specific mob from 'fol', rather than AIs needing 'tra' and ghosts needing 'fol'. --- code/game/machinery/camera/tracking.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 1b3619b5a4..ca3f0e794f 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -132,11 +132,11 @@ /mob/living/silicon/ai/proc/ai_camera_track(var/target_name in trackable_mobs()) set category = "AI Commands" - set name = "Track With Camera" + set name = "Follow With Camera" set desc = "Select who you would like to track." if(src.stat == 2) - src << "You can't track with camera because you are dead!" + src << "You can't follow [target_name] with cameras because you are dead!" return if(!target_name) src.cameraFollow = null From 8d0c7039dfef7e7d9d8307f6f293d5e2930efdcd Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Sat, 13 Jun 2015 16:43:23 +0100 Subject: [PATCH 22/30] Changes to dsay - Adds dsay to list of +DEBUG verbs - Changes dsay to use holder rank rather than trying to guess from rights --- code/modules/admin/admin_verbs.dm | 3 ++- code/modules/admin/verbs/deadsay.dm | 11 +---------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 6d8abad3cb..a07b05dec2 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -165,7 +165,8 @@ var/list/admin_verbs_debug = list( /client/proc/SDQL2_query, /client/proc/Jump, /client/proc/jumptomob, - /client/proc/jumptocoord + /client/proc/jumptocoord, + /client/proc/dsay ) var/list/admin_verbs_paranoid_debug = list( diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index bb66843c16..1a68f3016b 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -18,16 +18,7 @@ if (src.handle_spam_prevention(msg,MUTE_DEADCHAT)) return - var/stafftype = null - - if (src.holder.rights & R_MOD) - stafftype = "MOD" - - if (src.holder.rights & R_MENTOR) - stafftype = "MENTOR" - - if (src.holder.rights & R_ADMIN) - stafftype = "ADMIN" + var/stafftype = uppertext(holder.rank) msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN)) log_admin("[key_name(src)] : [msg]") From 0527e4b05fa87fa2e1a6a6dda49ab7d9410b5d13 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 13 Jun 2015 12:19:42 -0400 Subject: [PATCH 23/30] Adds dmitool import iconstate splicing Adds the ability to splice in specific directions and/or frames when importing icon states with dmitool. --- tools/dmitool/dmitool.jar | Bin 197142 -> 197672 bytes tools/dmitool/dmitool.py | 21 ++++--- .../src/main/java/dmitool/IconState.java | 30 ++++++++- tools/dmitool/src/main/java/dmitool/Main.java | 59 ++++++++++++------ 4 files changed, 81 insertions(+), 29 deletions(-) diff --git a/tools/dmitool/dmitool.jar b/tools/dmitool/dmitool.jar index f0fc1dc17be5ea9669116c9f20999c841922eb70..c7df4d8b7fddfad48441dbf5caef765269dc5f59 100644 GIT binary patch delta 11967 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

Xxk4?;w`6`-%D!y-TjdKw>xppo+Wfk!ml@W z*B;HTiQLazt|xaP-zzVp3~)TQONSxnt9!cn)Sxz%%fZ@cv~A@Y8?UA_IQ?;su|3^Z z=P@_l+S86`O_!gO95th!sH@SsXWqfo?VE?d)lOZ9HqQd1E7QSA)fjL6$@H<<5iEPw zl^yw*SkDUdL-|-cugv+8#n`X2>Cju(7utcP=_m&I?HuFB3t@?TWHTosQPf42~MT=sXiFJ`;u_W86a9>%;# z%yi(o67we&*h8{v!1x{f)7?in;&BSNH@qOY56wAulkdIvMV{vNy<|b%UP6 z@FX>BD=@J*JnD(zTU8n#e@nlQ$tQUgNdkIZT6FoCd)gkPc&j@d&Bt|xpTqkoH#_JX zcVyMmcS~Tf|CGw~kakU}AIx+cw>#NQcZw@Y}$vQ-v0i9|BrqU}n&OW0sZgYs|YWzo&E2N9K#Kw>8VBo@$V<)36ze_^DavUey_oxIVB%rQsfzvn$F zO}10NDG<^w?NYMO7`NpuB7x?@*gyP6_5zipGTh5r4Ifx`kfbtcLdVzwejhPB!Rv%q zundg8(OuZIZh&{Ac&_5babFPQ;nU_a)0`dzE!|u=yI>sewS?203YP>k)Mh}5z4O*} zNmjGYns4db7_9Wd(>x!e@0c{^Fe>PqXz%KK`|Qysh>`5GW{blewN7pZ32qy*f0Gf8 z%U|i(e5U(32RsyUj@QQ2m)vG3$XSYS1o7C!Bif@9R)8314+-mKUs&bMmuU(3?ftO{r_~0TKx*g&k@tV!Fsw5QXZe( zRr$s9E!QAV!ap(diE=&AprqaMa-volzE^?9KR8ap?@OFoyl*yS9E@U>>>(+AfaIBZ?c5RI{Q5aa7_t|+{W#BfXZZ0yrHnLVd3G#?@B&S|0e{^VG z*WnA_C%BW9o;yC=n*jZyaJc0J`$AWv2P(w*6WkKI+gg4ZP^Dvi_W|&bEL`?SZ6~YH zy-i3!Uc+}QX!rKSBcXBnRIs;s`mi^zdHPpxUGwx#Z&|batpWRw^^zARE4y2sR~S$0 zKe9Rwd6-dKTwW<$s1dFvpGfNzD{Curo-qHX#FtwS5QP3$*xP9UX#DGy0-FH;rTX!= z02syoX$0Fp1Ni>_8~Tk~7K7`a0VMwh=br&WaObw*e}cF#{~hFh0f@6Ag+>1j&O!Id z09U(<{*P6Xg$4*h{cnNs|6WvF`vTyClNk*A2kiVmV5qMELI7zDIR6!Z3l@F_5Q$YW zW&am)fZ~54|F`{rk%2mBzpde+py)nAK@mbx{FOBS**^b0t>gZIqk%(B%=w3F?)ASD zzy5~{H4Xgn4L}C^&j8HldH<#PkNtmX{*ML<1%>fHXrR*pP^NZPf5miLCV3+(dqxvm zBNrE>e^Y>hf`-C_ssYyiI~3VslYcq>WB+o1Yu*5e|ITs88-Ng|s1X3Jtp|`|{NJ~u zW!L|cKjNSN&Y$+r-=2p}0PuAKfaw3%)BSJH&;KmthHgIRoP~yhIsiaH;rx%J1zW&P ze*hG44sVVBU~m2h`~5FAK%@;!^bYt8S3wc^Pou~?fDdrq0S*=Yz zd)D4-X1cqks%Ldk2y$WovQGeH9f(W?s-=CTkx~VOLGZ7~ZwH!0{MY;F0ipw;{zb*7 zta!&mP$3{%@WIkvAYwohM#xbW^Nk_=fnzIMtG1*q zDyHr0Zx`SXw1^g@fc7YY)h0AfgacEeMtFObfutyVy!8@bhlA60ARvmDZIwE&HLqDa z*D@q8)M~#uGQOfl?m5nX4A-+n^{;=eGPE8={LtH+AebO4GIrVdzhi zH`(TogMrb&RcMrgvsb~6BWFh^7{9~82+FH`i-41(w{hC5aLW@#u&Em1XZ$`Tr|aWV zAl1*9eRYeUar>?@Zz3szx{u*0i(W+r(~)PGZ24@eS+uDHyi~2>WWh)TRE2CQ6;82N z@dY|xPF+fc`^E55uFXpZBa3L}RYD1vRi!^9sCQ)m@DCE0Z8oie56GMYJ)!1~o;+AG zqUxlToQe1zs=^_M&vYFb(IneZFcBw_gykZsgZiS`^mh|YZHpU*BN4wBm+r&u!gNEVwAhF06m&vGC zV5;i{_K{Sj+HWW*Oe2yeX7Zex9eo8Fj$iUXftK=?Ifa(q3BH#rMwnA$pD##cZBZ)ca6M2Kq*?P(vy$ z>eRCh~y61W6WEbh8!F2=9Zu3RN*_Ai;DxXRtZkmFz_S?ViCjv z*+#`_f+cN`tiK4h%D!k!>tj<5KX?3bXk9<_XR#TYL^KN+T-@#qM6B8~Emtb+i^x1= z!U}9=mHd)z-$zy^4i)x$Rwf@Zg(*gJRNO@wQ=Vv9ebG~T%c8#c?`rcO@9$vm#RVg; z%)Win2wO0vj(tEoV|bs%A~8oH4Bx>7EaCcO0h={_o4DT<3lm7VxMht&^Dw&st~L!5 zu-k{6zl5e0>n-gATi(|Tildn6(;eYqVPoby=|A*@`11dnCb{ZFJ7upA$Ug49Urs~F zcH=`w8CZ}K3+@FUkt&-H>c9hBF{-?W7oYHDUs_4uoWA!8N`?s%ONq{Sv!h=DX%bHe4J(zQ`*v z=_EUnn{YRl#gW#FBIz#e)R>A@6e|x)mryX5PASS+T8Pk-GTSAZYLctczBu^>Kort^9eu`xUc#=_p0r1ppSdf+!eeotzVTxz$>zH?|SSlR))EW!5#B@$C z1y^(@c4(3LP^YtrNO_LhUZ~5sT(9bl?U?BB*-TASpJHk897=tV){LT6D65rBZ4}#y zbZv&#h9W_cn48D}r*Wwym#3W;LX9)V7R7eq<2OTcZE}llsr_}#!^{Lu%HspU~}9(X34V0dBH$G;!iWx zvaG=t^|I+uFZPxjS$fp17B4*D*o@u7YP+cd%aAD@d={fZM;LvUS}ebJW1?e7H{t0K zCzJ2a(l9Q6oj6#mr4R-znGQLxcUXVyT%H&v3`iE)J1yN$() zuI%%#;S>cy`_6J_eF~pU8rSqoojL73*sL*QxV#`2kb+`&6;o1WadzmNyh?D9s`g`# z`h7;X5$r?qH$0Nc9zWRmHvqCSYC4d;#4=_pADc01W$m z5>3?&ykX2odPBf-L_m-FvevFt`U+#OFg25D?;-ZIQ8m_A%bGZFMrwT8ytbmR+xJP2 zK2fNL@7GYS?00q&ORB5Pv(L!b3YN^#c>um#hoHznYCN5Vq zIh-OZXhQ*eTb&U{knU|WdKM`CG9vju-Ui=6@g|j*Is}TNCY6aYl7*IoII%Q_!vb{H!*3(7gEToS_N6rSS*kDoZm~ zKQ7;T&T7kcaFyFzP3&lmAs%?Yx2={9Y@!*d#~yTDi*}hZ&ReY*99e^PM&#mxq^#)~ zY+W#Ns0KXRUNYpowkihKPN72|-a}f0>x5gGeqTRTQDJYjp|9lN!~Jl<#_s96-1$7a zEhJ5kdiH^?WGhP#1x}$m6oeA|gXXmhAC+FmAtpaN&&fC^TtU%X%yj`l#U(_}@K;i| z!W?eNMOO|X{XNs~Q+gkXAfw9-e|&C)(1KnmLslSaxk21OFd#N!b~|1Rq7}c-u$u~3 z?5oi@HRGu@xZ49>Ut%^FCo&OgrAHu?hbjf75cLwgKO*8aCDp{@M4!p9J}>J4jwlS) z_!75D%{y_=u6XS<>ftTue`NaGxrZz9lAE~u3upGZb^HsVtLk_73FySrO9u9+&NY<@he>m&$G`Gl-DLwageOCPF_ush(?SW03t@4z+x?&`Ti{?a; zUUit6r*E^b7uqCwv!Tf93bB0b&76=`q63Jn7)|^RzCMZRW&|zCP?1!}IGPys?EP4* zv}nUgIOsHJEx009v0aYul7p%A6|)}JH{U|4#n6Q?k%Ly1`?DJMOg#jGlu%=F6e%Rb zvD!XRW0RG_7L15y zB<%FZku~Ztj53jQ7 zl?ZFT+ED&V{yXBXXan+fj?ovQ)Nv0(zjj_mCw$P}Df zMQeNTsZMW?`?voZQ)rXJHSN`xG9fsvr@`Q@D zHe5F>{e9uOQ9m+EAhphP(isDoZ-FRX52!CxY(46jxL z6F&N7hTD%P)4(HgMWX}kw4;if?Y|kVVaoy4Bz6dhpKVOX+`~zpcvHvcDC^DxYn+E z+JD0I1Wz_3eRb5Rqc@vO!?r0M3m!4we(K4${&0g8Mvu4RT4lYlsLmBs?s&HeKU>AG zh={{F^_gxy_nw&6+?T83{@F-YcNix$je&;#3xIPpdD1JmML_;mC zg-y$rwl65@)%?Rdxb$ZnK>baUS=!L&ZpoQeiAv_3#4@n?#hFE3)odHnS%BdiY16E* zCUk}rO@k%UQu3#BzM(J`Hh)RgLJKb4o_^zZNboa?@5bgM6pS=r3S`GNnE(9{=E&xX z{r)0+&&afREu9fq`%T~A9+cx@V0izL_=W?Ut`Vh$qDog{hpWNPo>9m`W((To@Y3ZO zaiDr1*tQx^?1Xo6%uA+}c?Wxr2LgLD7Z0 zXo0>On;)(9*UBSyep0Rxr{rh<#rmxLQEWQS5tyvjWj_i4zTJjeUS_z}4=Gu%JbK@< zU}*uX>@p#FZzOdeI)`YsY4X~%k7a3not@o5HabmrBqA56^j^&4R!0Tb@~`;if`gpp zNahWW3r5sAqSls!+jqt3C2c9~S}5WSt`q3SkoGUHIBv3CpyEQh2zNyWkc}Dim74w1 ztOi>%R;`{U+oJ612p(;lW9;HmADNo)K1XB|?38IXqWx~f$i(1+a^3V=4K3yR4f#;j z4t}R}_>=)`%bZ|Et@rpp`bE!XURKrYpw-h5?|yeBRwUS@uE#i6=5JE(yKD;_ZC7NG z+7sR9#vf0Y_C1BkJe_#)7sESHV6niSpcK)A9j^GYkom)+$tT3-5d$_;!EX^+-ZkMf z9+Bu#Wf69np5&fOkSW|xhVH(l-tSNZ@Ai$uC9)pOEv9NPK)o^16H>kp-;HT)QB)A~ zsX*%@!3+<>)`1c&v(7!Iq6`!?CIkcoJVfi?^(|clND>6~kLMZ%%7XiMeT$z6x`IUg zdrds){)H|E9|9tY6^xezA^`NY#gG%)-Wp%exa4)16pw3Sg<^$$Ay7-}sBx#6l*F|X z33x-hs{PN{P(0(?IZc$s7gMVq);%xUA2RliI@G7DnA-u$^t>6V7T(v9gX|64mdKF# z%@rLd2L7C>T!xxSQd^G*V(bSQ$Gd1o0^hrAh7#ZVIOijO&WxE7 zz!1%-^YK1EoMK8H-}@{F|5;q+QLXTT?Rj0Sbn?UW6RC&jStj(OrqB1?t5Toe%@$~J ze2Zh)4Z}SJwYp}(<3LJyhOw?0CDl@Xt+rXu5b^zRuCQ6=cmj`ZPVM&tn)Fg<)I&bh zn=SI)YO>j#tZ|v6wz~0=Lq5HaBgcGS4}OhfIP0MX=})`6<3LxC@X;Q(#g4P{EF9|; z-VF0p<~X*GqwsJZ^GO}3I_t?D4DnP}+~D(67CXj`TOGAEi~}c!g!9cyeJ9r*_?4A6 zusn7}H<;<1)9xkXGfuWs?k(d4CvBnqXgFt5f`fyp!(JS5YNdRpgH9{E)y;ejlkPI< zjnmD#2gyvlcI7u5@}tJu-`sf9d7U!yZ>-ZB7u?~}U1!}Xna@7pUz9nj9B?!6#PG65 z9T6@x%N*FIdjd}Khi&2Gt;cDz&FVXtagM2p?|6;Zh=I zp2jyE6u=3?RP&V7ka>xxk|#r)q%$Y0dqIKnk`7zK3Ps9kH0zRKsBB`f<-JC)mIB`r z9K1+bswBC?39F{nNdx4R3Gto!B zzCJv93jaiIclu~IPtuGhu-f5jzXd*zs^TcwoYBdte|pALRBL7mccz!wcor+rrwni1 zSBB}b1xO!iL(w@qdXqKt^7ukMZK~fN`K32&?(Gpq|^iEAK5d2h_#gin>%Eny6p=_^m zvm)Ef+D5pz+AYJV<(If`RRy?V^*8|wd!u(`HQ9u)&U^VSY2L}uy}Mn%lE?%YeShYQ z0p>0^qwW49cw>9p?cU9b3`El1f!R6=e6#6E1PXxxLX+wISL3>3q3h=3T8SJGhwg~*XCU4}jNhd|SbP}8q$N-(pN zpK@;4!mSkJ0{K7E;1<)youh~)n8kbZ?kwr>CR1m+;?TO>(+S04&6dHrLp3MrL4Kni}EQm z^2IT|q%2Ym$1bARk8p?a&*I5-A!dzto5HuoFGFutd6jmR8N-qchd}9!=j;lispJ(0 zSE0`;S|@~3GgU5EC4OvN2wpxG0qF0tZB9ha=&6cUv=kdq<_bu1Fn-z&_A4)mqMqcB z=g&WF%S-3=D(@#E#T^vq41fMR60SP#(ubqJ=qoaOMJpr%6%ZSSNBkjXNS89402WxA zuH29sl3`x1-#-tKOQKS|^k*^eKPvyA(XD|swc@F(J8DX+5AAo$4INKJ0l*x=sS6*| z!Gko7;9X;+c7NwZ!s#VzLsXq#nVyS#$Of|-z<2YBk4=~Gfg+&{eOVOhb((C+p%O;^ zHQ!AfO=Mb#X{E3cDdBtu;X9vwCVtk{Rr0_#zFR3<09a4AUCm0UJuJXh#Rg)?w|h?IpFm7{Ru9j=zuO@(_u#RtzcbcYnfDN7)uo{CLky z!z}#uA5;hg{_REL zNJi#IrH%*-VT*6cc3LxY$(mmD-SO9IqlLsQo&ZWi;xw6~#n+aC_$9N16h-ldJ6S@f z?ohhcT3|3nA+*;qbXAl}Wdf7>K*Rb$xzOWEs4{eZqWGdLdae|su)wyitp%;-I&R_x zV6ze7wxI^SD=z4NCPYk@St^T6LF=j#eTqVtO5nikNULOelF~8N(dV;1>;YPNBf~UPzxhMLTDW9<&7n>6gmMQ3Qcu?!kS zedc|vNza@m;+vd7NI*1hNswuQ?qd=)v)W4%4h!&0gU#rd&a&tpWm{9mzBV8V=o&;+ z64^H@qf)&bLE#za`6MNl&_5UOEtqGJJKZl!idx>ZYb#+FEW$7O5l{ow>wO7Cp2zuz zs&D@JvHq+x(o)~g43*)d${UYo(3h}R(~(P>(gKet!jSX{BN`vO60cu${?qF^t#&I^A(H<~fEDoCgdVw$r5!GFU?G+f!zK z;**QB)Z~67TD~{9{SeV!f0{7utMkm{FtCv|6uCu=3d1_l1g0$^#JE$gI=u)?BZaZ2MghmQ8PbZGEgssPi-E^Lp!-;e zS#1)zTyG}Zc;9#J)7|(|`MNZRl~5i@oM|yGc1H0PVK`8~LCGaJVTSSoS4{(Lu>GmhEVJL zO3)Ci?0Q4cN{aP7g=Z&m6@4Ba3gipET$Iladbgb}CapB@@G=$9n$4CqDyDgESyFZ8 zg`$ca^F4)mZq|C?mt6;umQExyZE{0`G|Jli#|F)m)2|UH!A?)@q(N;S*R(I$8GsQR zZ4m#~)#PXYqKRCoAfh{2t-CAgqRiYmLvU_K;{2a`*;(d+yc^L%ox8@7HlOG9tg-Lx zvU5m>ile4~Wllms@iI$plWx-{+TUP8JVWzVU+UbK-5CmonZVtP*XjywKXK-MTiy66$SFGlN92Y)gQ$)GT0)&n!64?n1XPeFBpT6Q&~>p1Oz`LPoT;tPHc7UxVJ>i0pMmJBtN7r%@w&O;z1=6c}Fn2-N?O3;=X>HHw zBqJ{i9CH)AdDadmSv_P3IA-RpzA3>v5+T9!Fy^Yjrd|OO(fe@V*MY-dC_H@#CxNtl6=RZUE*;N9*u z*1##=T0LX}kjJU#yxJ>pcO=rtVg=;?zz@2nFR!7Z=|~&}z=693jXK+O5TJVIDdI+06)M;TXgS z=N9+JB_Ef@H)OYw_6IZ#BgG##*knNzlWE+&3SsJHk!>;g1Ua0^eN(I2AF5Ty94||C zvQ@)jS*^ZW2J1B19Tv!umjlRG!QcN(sa+2MAD{f*_{=)jjGy_MfPh3`OGyAH@<%WD`pK=L)3%R_*SQxdyKpUZwnU(fkr-m6BmcSU$ORABo~! zc2!W*FEupP<-jJ{MOiep&)p3Shy>4fU#MCm={j0irft3|ru9lj{h6Mt?gZK5c47dR zs534i%l+>ra~i2>^AtFS8_UK&7JCdBgK4kBmMR#~p2=o;yAu*AfT|j|pV|&?(3Pk7 ziy-@(6ugJT3OEjhb>zkS9c3q&W92bt{bJEIe-Hd)vdfjMbFo*dW6WVrD!fkGO=Ks3 zTj$vqD1li%oMxE2s$^C-Z3uNEeguFh`DD0;{i?YYB1wWzCGr_N#cRX8Xd!DZHB;0( z^mUlvgV1ZU5&1J}sqAAPVYiG)Q%!EW!4{`Of{n~~o3Kr%&V}-tg|G0)|51t?mN%cMa z7E!Y-^}xjyb?OjEl32v4lN+QQBzVW0<#l!P zkaFKc)sQi-Ilm-WQR&a!9X*2+SrzfpGMKaFGpua( zeV&ww>z*?S=T=@7t(m@#T$gVukKj@#J7SDktWtHbF&G>jJhQPiP;LeK(C)QTLB0^n zNYv=J(zG9wkn>TO(c!+jty1NyTzooa7xX!OZTZ~dAbSQY9RSl#Bje#7Wd1|8!5tV@ z^WCwMZRkSR)_gzjd*hcTIG#v-ZJ!-8D}e9*9h=AOS;FsJnFZV03_8!E)L#|yl<9Z+ zq>Fi5OqfG@`a4=)0(B1n-xSekgzl0Y4j6rI#$tl@1#zmvr6HL+??npT2}eMj3Va2! zXnb5_yuTt9O_%r#oefVjqE5j&JfGp*zmqm(MF-lvf7bfeufuW}m;U6VY>{@WQbO#S zt(kPQF;wPlYHCvuB69oop1GZwrS#`B&o+Qn9x!YqV5qlC$VCHKqk<&-MaQ~e=BIxc z+h-mN40sctna<+N_4ByR)eq7(-!VLcQhUVR5Hh7lCfT$g?}pjZ)e0kvlR3I*uM2!Q za>t6X29}X|f|d{2gm5OYotS^9Z|^;MET^33**rlVZ&sRPzl+w=V=u28<`dEDEf1mR z6`2sF7%lzcp-%Zr{hb>tlG;H<6AmzErp>W6iK)dK z*DPc8ZDLS~3Ko;c*=yw^lf?4~b&d5=_th2RFIo%PuVn^2oy)>E<=T_J^Gi;@>cdeR zh(&`nqI*lPshzlLE=bE7XJY1q56w>`oFeXIc;=sxi0lBzX@mxQryLtlx^Zctvh~Sl z>Ll^Pm4+Nvo0S>OhSx*um29V|Gk7iY)`;~3@R3&3oG?Pc_0mF6Q;rOVg14fB#0=2kPU%a|StD*@{Z%STZ3VG|k;`O)>Shsrhr z-UUQbnN|barE{!TCYw*UkuG@NrMmKhmeJD_%NW3I`2CmH68ao54+yZHOpWSy)KB>p z5tT}mJGHZOS5n8%r?aGwWX==>&kd(jX4UE&kePYs5q3(vSKlmg1f=9PQ)iI{q}Rfs z&I#expxWX+UG?VMaTI=BjEuB?*u+|evoC)!uW-y9E^V6Fk~+U>TK9(JZ2EK{{(#X| z@?rt#jlE(ixBz1(O}}@lUL@8#t1g3rf(vnX+(?c16xc1B`^>jPs!m7_557WJ-+2_h zxbmubkQM0jBw)N;A1U<6+-GgCyw+TIeX_nN^on|56(&vy52PD6f*cN{` z|NF}{TBUjRi#1-wQ~*^UAnJbn?OGX7xihoQqW;r5^rvu{)5-~HN&)jZxq$J@g$9ps z{t!?y9hsx#FWxvzM*9}=k!{qle}js7+95*~$iKrpZpk$F>-!;6Nd7bT&K&w&qU6yx zv7U_~hx}b=hJENE7*XFCqX|V}YO6JdhwlF7kE~|vS_gb%%^aX$SsZuS^hyb6^|5rl z5tJK``!zyUpv4#^Goii@sa&7GL~{7s^zzO88sNdB{F=Up!>0HyxvXG}U|E3>G9!qP zlUdZVSTa4}A9?=k1Wsp`p_AJ2i`FA%Pn+33|B$#t==1ZiBN+;@ z8edYCY`}%xwj_Lj6V*&`^auZR1i|10rxN>ytku@q52B99ZZF>YYoa=UXhW)Yay|JX zTfPH4J@^_e0>5N-FFgWv}=g)>(O!=&`+#G7vgt}C4jv3 z5s4X6VO9AOdJS4ZwJPWf9DTB1KiuR=GxLKnP($h(%C0qtDb&Iz>IBW%3ISxZAKF$O&O z@!2zv4&BOuRg0mR70Hz{J4O8chbyRCS0)EHaZb1Yci-m@>* z-rjRAnA_g7C0N@oa+5i?p8YamdvVGA=U}t=38&$^NHF+KWk+?Ljbz&Yt5>H$-rMxe z<;DM%zp86Nf{_2pUpI9iwST=r*#;2kUmZ-L3B(}!j|cYo1LC8MHz$_p&YOfBKK?qK1Vw(E0}n z`5&bCFG63J&<{lh8=9>B4|4ez`DbL%Apb&44PXXHC=ytPC;ETxr~(Pa2U>0d$3jAJ zf&vD?Bal$+P+fx{@Z~TF6O03bq5*{sfki-2LLjJNa3BbZ7fO5>1YR8j5rEhKqEPYw zX_0_wq5ifG{?j4@dqF|5L6wjE8%YUX{)>?XOoAZf6;z}|#2B31oD^kXVE-9`Uw;oH OCJ2c1slVL`@&5oA^)B@Q diff --git a/tools/dmitool/dmitool.py b/tools/dmitool/dmitool.py index f24ce2c590..390f0d745f 100644 --- a/tools/dmitool/dmitool.py +++ b/tools/dmitool/dmitool.py @@ -8,7 +8,7 @@ _JAVA_PATH = ["java"] _DMITOOL_CMD = ["-jar", "dmitool.jar"] def _dmitool_call(*dmitool_args, **popen_args): - return Popen(_JAVA_PATH + _DMITOOL_CMD + list(dmitool_args), **popen_args) + return Popen(_JAVA_PATH + _DMITOOL_CMD + [str(arg) for arg in dmitool_args], **popen_args) def _safe_parse(dict, key, deferred_value): try: @@ -19,12 +19,14 @@ def _safe_parse(dict, key, deferred_value): return False def version(): - """ Prints the version to stdout. """ - return _dmitool_call("version") + """ Returns the version as a string. """ + stdout, stderr = _dmitool_call("version", stdout=PIPE).communicate() + return str(stdout).strip() def help(): - """ Prints the help text to stdout. """ - return _dmitool_call("help") + """ Returns the help text as a string. """ + stdout, stderr = _dmitool_call("help", stdout=PIPE).communicate() + return str(stdout).strip() def info(filepath): """ Totally not a hack that parses the output from dmitool into a dictionary. @@ -68,11 +70,11 @@ def extract_state(input_path, output_path, icon_state, direction=None, frame=Non If provided frame should be a frame number or a string of two frame number separated by a dash. """ args = ["extract", input_path, icon_state, output_path] - if direction: args.extend(("direction" , str(direction))) - if frame: args.extend(("frame" , str(frame))) + if direction is not None: args.extend(("direction" , str(direction))) + if frame is not None: args.extend(("frame" , str(frame))) return _dmitool_call(*args) -def import_state(target_path, input_path, icon_state, replace=False, delays=None, rewind=False, loop=None, ismovement=False, direction=None): +def import_state(target_path, input_path, icon_state, replace=False, delays=None, rewind=False, loop=None, ismovement=False, direction=None, frame=None): """ Inserts an input png given by the input_path into the target_path. """ args = ["import", target_path, icon_state, input_path] @@ -81,7 +83,8 @@ def import_state(target_path, input_path, icon_state, replace=False, delays=None if rewind: args.append("rewind") if ismovement: args.append("movement") if delays: args.extend(("delays", ",".join(delays))) - if direction: args.extend(("direction", direction)) + if direction is not None: args.extend(("direction", direction)) + if frame is not None: args.extend(("frame", frame)) if loop in ("inf", "infinity"): args.append("loop") diff --git a/tools/dmitool/src/main/java/dmitool/IconState.java b/tools/dmitool/src/main/java/dmitool/IconState.java index ee31b13792..2a2202c71c 100644 --- a/tools/dmitool/src/main/java/dmitool/IconState.java +++ b/tools/dmitool/src/main/java/dmitool/IconState.java @@ -203,7 +203,7 @@ public class IconState { px[bY][bX + 3]); } } - images[imageY + imageX*dirs] = new NonPalettedImage(w, h, pixels); + images[_getIndex(imageY, imageX, dirs)] = new NonPalettedImage(w, h, pixels); } } @@ -214,9 +214,35 @@ public class IconState { //Converts a desired dir and frame to an index into the images array. public int getIndex(int dir, int frame) { - return dir + frame*dirs; + return _getIndex(dir, frame, dirs); } + private static int _getIndex(int dir, int frame, int totalDirs) { + return dir + frame*totalDirs; + } + + public void insertDir(int dir, Image[] splice) { + int maxFrame = frames < splice.length? frames: splice.length; + for(int frameIdx = 0; frameIdx < maxFrame; frameIdx++) { + insertImage(dir, frameIdx, splice[frameIdx]); + } + } + + public void insertFrame(int frame, Image[] splice) { + int maxDir = dirs < splice.length? dirs: splice.length; + for(int dirIdx = 0; dirIdx < maxDir; dirIdx++) { + insertImage(dirIdx, frame, splice[dirIdx]); + } + } + + public void insertImage(int dir, int frame, Image splice) { + if(frame < 0 || frame >= frames) + throw new IllegalArgumentException("Provided frame is out of range: " + frame); + if(dir < 0 || dir >= dirs) + throw new IllegalArgumentException("Provided dir is out of range: " + dir); + + images[getIndex(dir, frame)] = splice; + } } diff --git a/tools/dmitool/src/main/java/dmitool/Main.java b/tools/dmitool/src/main/java/dmitool/Main.java index 55b453098e..fe6048ca3b 100644 --- a/tools/dmitool/src/main/java/dmitool/Main.java +++ b/tools/dmitool/src/main/java/dmitool/Main.java @@ -272,6 +272,7 @@ public class Main { String hotspot = null; float[] delays = null; String replaceDir = null; + String replaceFrame = null; while(!argq.isEmpty()) { String s = argq.pollFirst(); switch(s.toLowerCase()) { @@ -352,6 +353,15 @@ public class Main { return; } break; + case "f": + case "frame": + if(!argq.isEmpty()) { + replaceFrame = argq.pollFirst(); + } else { + System.out.println("Argument '" + s + "' requires a frame argument following it!"); + return; + } + break; default: System.out.println("Unknown import argument '" + s + "', ignoring."); break; @@ -363,26 +373,39 @@ public class Main { if(VERBOSITY >= 0) toImportTo.printInfo(); IconState is = IconState.importFromPNG(toImportTo, new FileInputStream(pngFile), stateName, delays, rewind, loop, hotspot, movement); - //If replaceDir is set, attempt to find an IconState with the same name. - //Then if nodup is set, replace the specified direction of that IconState with the (first direction) of the imported IconState. - //If nodup is not set, create a copy of the source IconState and apply the replace operation on that. - IconState targetIs; - if(replaceDir != null && (targetIs = toImportTo.getIconState(stateName)) != null) { - int dirToReplace = parseDir(replaceDir, targetIs); - int numFrames = is.frames < targetIs.frames? is.frames : targetIs.frames; + //image insertion + if(replaceDir != null || replaceFrame != null) { - if(noDup) { - for(int frameIdx = 0; frameIdx < numFrames; frameIdx++) { - targetIs.images[targetIs.getIndex(dirToReplace, frameIdx)] = is.images[is.getIndex(0, frameIdx)]; - } - } else { - targetIs = targetIs.clone(); - for(int frameIdx = 0; frameIdx < numFrames; frameIdx++) { - targetIs.images[targetIs.getIndex(dirToReplace, frameIdx)] = is.images[is.getIndex(0, frameIdx)]; - } - toImportTo.addIconState(null, targetIs); + IconState targetIs = toImportTo.getIconState(stateName); + if(targetIs == null) { + System.out.println("'direction' or 'frame' specified and no icon state '" + stateName + "' found, aborting!"); + return; } - } else { + if(is.images.length == 0) { + System.out.println("'direction' or 'frame' specified and imported is empty, aborting!"); + return; + } + + if(!noDup) targetIs = targetIs.clone(); + + int dirToReplace, frameToReplace; + if(replaceDir != null && replaceFrame != null) { + frameToReplace = parseFrame(replaceFrame, targetIs); + dirToReplace = parseDir(replaceDir, targetIs); + targetIs.insertImage(dirToReplace, frameToReplace, is.images[0]); + } + else if(replaceDir != null) { + dirToReplace = parseDir(replaceDir, targetIs); + targetIs.insertDir(dirToReplace, is.images); + } + else if(replaceFrame != null) { + frameToReplace = parseFrame(replaceFrame, targetIs); + targetIs.insertFrame(frameToReplace, is.images); + } + + if(!noDup) toImportTo.addIconState(null, targetIs); + } + else { if(noDup) { if(!toImportTo.setIconState(is)) { toImportTo.addIconState(null, is); From 9f1aa4c7acf57be790347555467c884bb964364c Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 13 Jun 2015 12:20:47 -0400 Subject: [PATCH 24/30] Fixes unathi tail icons Updates 6 pixels on the E/W directions on every icon state in tail.dmi using dmitool.py --- icons/mob/species/unathi/tail.dmi | Bin 19340 -> 20346 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/species/unathi/tail.dmi b/icons/mob/species/unathi/tail.dmi index 97ae78393aff38cbca0ef9094d4e74b1d0de2e76..eba37dba6aa50d21d11da065784124827b5ec051 100644 GIT binary patch literal 20346 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 From 70d9c1c01ba58c366af7ad04c11ee5fb483eb767 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 13 Jun 2015 13:04:48 -0400 Subject: [PATCH 25/30] Updates rwall overlay --- icons/turf/wall_masks.dmi | Bin 50086 -> 49635 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/turf/wall_masks.dmi b/icons/turf/wall_masks.dmi index c7fd0f0e811d662efa7eaf3710656ed965035ca1..0094e605b82dd3ae798c45d22317846d17e67e92 100644 GIT binary patch literal 49635 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

-*Cl5E4Ms21SPvC@1f94;=QFCqP*jsbOhX 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 Q3izjWMF&}Y$tLuF0ALM8M*si- literal 50086 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 Date: Sat, 13 Jun 2015 13:33:21 -0400 Subject: [PATCH 26/30] Hotfix for #9235 Hotfix for master --- code/ZAS/Controller.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/ZAS/Controller.dm b/code/ZAS/Controller.dm index d8cb87a740..e70de85d1c 100644 --- a/code/ZAS/Controller.dm +++ b/code/ZAS/Controller.dm @@ -282,7 +282,7 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun var/space = !istype(B) if(direct && !space) - if(equivalent_pressure(A.zone,B.zone) || current_cycle == 0) + if(min(A.zone.contents.len, B.zone.contents.len) <= 10 || equivalent_pressure(A.zone,B.zone) || current_cycle == 0) merge(A.zone,B.zone) return From 86b080769c80f51a6eeda202550164dc9c49086f Mon Sep 17 00:00:00 2001 From: Kelenius Date: Sun, 14 Jun 2015 15:54:07 +0300 Subject: [PATCH 27/30] Fixes two log destroyers --- code/game/objects/items/weapons/cigs_lighters.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 67e322496c..af90ba9ad3 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -463,9 +463,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon_state = icon_off item_state = icon_off if(istype(src, /obj/item/weapon/flame/lighter/zippo) ) - user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.") + user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing.") else - user.visible_message("[user] quietly shuts off the [src].") + user.visible_message("[user] quietly shuts off the [src].") user.SetLuminosity(user.luminosity - 2) processing_objects.Remove(src) From 3c525e907a0ddb6337a61e607d18da6d4e6195ff Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Sun, 14 Jun 2015 14:44:38 +0100 Subject: [PATCH 28/30] 'Fixes' NanoUI locking up on medical/security records --- code/game/objects/items/devices/PDA/PDA.dm | 15 +++++++++++++++ code/modules/mob/living/silicon/pai/pai.dm | 15 ++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index b2ae15832e..872754f1b3 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -1068,6 +1068,21 @@ var/global/list/obj/item/device/pda/PDAs = list() new_message = 1 update_icon() +/obj/item/device/pda/verb/verb_reset_pda() + set category = "Object" + set name = "Reset PDA" + set src in usr + + if(issilicon(usr)) + return + + if(can_use(usr)) + mode = 0 + nanomanager.update_uis(src) + usr << "You press the reset button on \the [src]." + else + usr << "You cannot do this while restrained." + /obj/item/device/pda/verb/verb_remove_id() set category = "Object" set name = "Remove id" diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index edfe9bea0b..a347ba45be 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -201,6 +201,19 @@ src.reset_view(C) return 1 +/mob/living/silicon/pai/verb/reset_record_view() + set category = "pAI Commands" + set name = "Reset Records Software" + + securityActive1 = null + securityActive2 = null + security_cannotfind = 0 + medicalActive1 = null + medicalActive2 = null + medical_cannotfind = 0 + nanomanager.update_uis(src) + usr << "You reset your record-viewing software." + /mob/living/silicon/pai/cancel_camera() set category = "pAI Commands" set name = "Cancel Camera View" @@ -400,4 +413,4 @@ // No binary for pAIs. /mob/living/silicon/pai/binarycheck() - return 0 \ No newline at end of file + return 0 From 4da75dba68c47513ca518eb811664efad2c2c26c Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Mon, 15 Jun 2015 10:48:30 +0100 Subject: [PATCH 29/30] Fixes some more unbalanced HTML --- code/game/objects/items/devices/scanners.dm | 6 +++--- code/modules/mob/living/carbon/carbon.dm | 2 +- code/modules/mob/living/silicon/robot/examine.dm | 2 +- code/modules/reagents/reagent_containers/glass.dm | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index b133e10a27..7312045ef6 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -99,7 +99,7 @@ REAGENT SCANNER user.show_message("\t Key: Suffocation/Toxin/Burns/Brute", 1) user.show_message("\t Damage Specifics: ? - ? - ? - ?") user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1) - user.show_message("\red Warning: Blood Level ERROR: --% --cl.\blue Type: ERROR") + user.show_message("\red Warning: Blood Level ERROR: --% --cl.\blue Type: ERROR") user.show_message("\blue Subject's pulse: -- bpm.") return @@ -203,9 +203,9 @@ REAGENT SCANNER var/blood_type = M.dna.b_type blood_percent *= 100 if(blood_volume <= 500 && blood_volume > 336) - user.show_message("\red Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl.\blue Type: [blood_type]") + user.show_message("\red Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl.\blue Type: [blood_type]") else if(blood_volume <= 336) - user.show_message("\red Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl.\blue Type: [blood_type]") + user.show_message("\red Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl.\blue Type: [blood_type]") else user.show_message("\blue Blood Level Normal: [blood_percent]% [blood_volume]cl. Type: [blood_type]") user.show_message("\blue Subject's pulse: [H.get_pulse(GETPULSE_TOOL)] bpm.") diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 5b29fa5130..dde4783da3 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -206,7 +206,7 @@ src.sleeping = max(0,src.sleeping-5) if(src.sleeping == 0) src.resting = 0 - M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \ + M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \ "You shake [src] trying to wake [t_him] up!") else var/mob/living/carbon/human/H = M diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index 20820369f5..c47ec21b0a 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -29,7 +29,7 @@ if(!src.client) msg += "It appears to be in stand-by mode.\n" //afk if(UNCONSCIOUS) msg += "It doesn't seem to be responding.\n" if(DEAD) msg += "It looks completely unsalvageable.\n" - msg += "*---------*" + msg += "*---------*" if(print_flavor_text()) msg += "\n[print_flavor_text()]\n" diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index d49f8d1d2a..b5254b232d 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -60,10 +60,10 @@ attack_self() ..() if (is_open_container()) - usr << "You put the lid on \the [src]." + usr << "You put the lid on \the [src]." flags ^= OPENCONTAINER else - usr << "You take the lid off \the [src]." + usr << "You take the lid off \the [src]." flags |= OPENCONTAINER update_icon() From 0423691ca2568fcd4e522b571307654b39594b5f Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Mon, 15 Jun 2015 12:20:16 +0100 Subject: [PATCH 30/30] Missed a span --- code/modules/mob/living/carbon/carbon.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index dde4783da3..0416619ad3 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -207,7 +207,7 @@ if(src.sleeping == 0) src.resting = 0 M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \ - "You shake [src] trying to wake [t_him] up!") + "You shake [src] trying to wake [t_him] up!") else var/mob/living/carbon/human/H = M if(istype(H))