From 2bfcc9bf1eb1c41aa22c46bbeefccabecf269804 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 25 May 2017 09:43:34 -0500 Subject: [PATCH 01/50] [s] Fixes hiding the nuke disk on the arrivals shuttle --- code/modules/shuttle/arrivals.dm | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm index d60a832279..7cb347d429 100644 --- a/code/modules/shuttle/arrivals.dm +++ b/code/modules/shuttle/arrivals.dm @@ -99,7 +99,7 @@ SendToStation() return - var/found_awake = PersonCheck() + var/found_awake = PersonCheck() || NukeDiskCheck() if(mode == SHUTTLE_CALL) if(found_awake) SendToStation() @@ -128,6 +128,12 @@ return TRUE return FALSE +/obj/docking_port/mobile/arrivals/proc/NukeDiskCheck() + for (var/obj/item/weapon/disk/nuclear/N in GLOB.poi_list) + if (get_area(N) in areas) + return TRUE + return FALSE + /obj/docking_port/mobile/arrivals/proc/SendToStation() var/dockTime = config.arrivals_shuttle_dock_window if(mode == SHUTTLE_CALL && timeLeft(1) > dockTime) @@ -140,11 +146,17 @@ var/docked = S1 == assigned_transit sound_played = FALSE if(docked) //about to launch - if(!force_depart && PersonCheck()) - mode = SHUTTLE_IDLE - if(console) - console.say("Launch cancelled, lifeform dectected on board.") - return + if(!force_depart) + var/cancel_reason + if(PersonCheck()) + cancel_reason = "lifeform dectected on board" + else if(NukeDiskCheck()) + cancel_reason = "critical station device detected on board" + if(cancel_reason) + mode = SHUTTLE_IDLE + if(console) + console.say("Launch cancelled, [cancel_reason].") + return force_depart = FALSE . = ..() if(!. && !docked && !damaged) From e2b1ef2ad2e5ba1650f6a61852953947bb873e72 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 25 May 2017 09:44:40 -0500 Subject: [PATCH 02/50] Xenobio console origin tech fix --- code/game/machinery/computer/buildandrepair.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 600ededadd..f9014d5b8f 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -178,7 +178,7 @@ /obj/item/weapon/circuitboard/computer/xenobiology name = "circuit board (Xenobiology Console)" build_path = /obj/machinery/computer/camera_advanced/xenobio - origin_tech = "programming=3;bio=3" + origin_tech = "programming=3;biotech=3" /obj/item/weapon/circuitboard/computer/base_construction name = "circuit board (Aux Mining Base Construction Console)" build_path = /obj/machinery/computer/camera_advanced/base_construction From 1cf1c1cb4c1c730d4ad7a57d0ab1696f4c5b7bb9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 25 May 2017 09:52:53 -0500 Subject: [PATCH 03/50] Roughly one fifth of internal affairs agents are traitors with an extra objective --- code/game/gamemodes/traitor/double_agents.dm | 35 ++++-- code/game/gamemodes/traitor/traitor.dm | 106 ++++++++++--------- 2 files changed, 83 insertions(+), 58 deletions(-) diff --git a/code/game/gamemodes/traitor/double_agents.dm b/code/game/gamemodes/traitor/double_agents.dm index 2ee546c7aa..dfe198eeb9 100644 --- a/code/game/gamemodes/traitor/double_agents.dm +++ b/code/game/gamemodes/traitor/double_agents.dm @@ -1,6 +1,8 @@ #define PINPOINTER_MINIMUM_RANGE 15 #define PINPOINTER_EXTRA_RANDOM_RANGE 10 #define PINPOINTER_PING_TIME 40 +#define PROB_ACTUAL_TRAITOR 20 +#define TRAITOR_AGENT_ROLE "Syndicate External Affairs Agent" /datum/game_mode/traitor/internal_affairs name = "Internal Affairs" @@ -171,7 +173,10 @@ if(!objective.check_completion()) traitored = FALSE return - to_chat(owner.current," All the other agents are dead, and you're the last loose end. Stage a Syndicate terrorist attack to cover up for today's events. You no longer have any limits on collateral damage.") + if(owner.special_role == TRAITOR_AGENT_ROLE) + to_chat(owner.current," All the loyalist agents are dead, and no more is required of you. Die a glorious death, agent. ") + else + to_chat(owner.current," All the other agents are dead, and you're the last loose end. Stage a Syndicate terrorist attack to cover up for today's events. You no longer have any limits on collateral damage.") replace_escape_objective(owner) @@ -194,7 +199,10 @@ if(objective.stolen) var/fail_msg = "Your sensors tell you that [objective.target.current.real_name], one of the targets you were meant to have killed, pulled one over on you, and is still alive - do the job properly this time! " if(traitored) - fail_msg += " The truth could still slip out! Cease any terrorist actions as soon as possible, unneeded property damage or loss of employee life will lead to your contract being terminated." + if(owner.special_role == TRAITOR_AGENT_ROLE) + fail_msg += " You no longer have permission to die. " + else + fail_msg += " The truth could still slip out! Cease any terrorist actions as soon as possible, unneeded property damage or loss of employee life will lead to your contract being terminated." reinstate_escape_objective(owner) traitored = FALSE to_chat(owner.current, fail_msg) @@ -238,6 +246,10 @@ state.add_steal_targets_timer() if(!issilicon(traitor.current)) give_pinpointer(traitor) + //Optional traitor objective + if(prob(PROB_ACTUAL_TRAITOR)) + traitor.special_role = TRAITOR_AGENT_ROLE + forge_single_objective(traitor) else ..() // Give them standard objectives. @@ -289,11 +301,18 @@ /datum/game_mode/traitor/internal_affairs/greet_traitor(datum/mind/traitor) var/crime = pick("distribution of contraband" , "unauthorized erotic action on duty", "embezzlement", "piloting under the influence", "dereliction of duty", "syndicate collaboration", "mutiny", "multiple homicides", "corporate espionage", "recieving bribes", "malpractice", "worship of prohbited life forms", "possession of profane texts", "murder", "arson", "insulting their manager", "grand theft", "conspiracy", "attempting to unionize", "vandalism", "gross incompetence") - to_chat(traitor.current, "You are the [traitor_name].") - to_chat(traitor.current, "Your target is suspected of [crime], and you have been tasked with eliminating them by any means necessary to avoid a costly and embarrassing public trial.") - to_chat(traitor.current, "While you have a license to kill, unneeded property damage or loss of employee life will lead to your contract being terminated.") - to_chat(traitor.current, "For the sake of plausible deniability, you have been equipped with an array of captured Syndicate weaponry available via uplink.") - to_chat(traitor.current, "Finally, watch your back. Your target has friends in high places, and intel suggests someone may have taken out a contract of their own to protect them.") + if(traitor.special_role == TRAITOR_AGENT_ROLE) + to_chat(traitor.current, "You are the [TRAITOR_AGENT_ROLE].") + to_chat(traitor.current, "Your target has been framed for [crime], and you have been tasked with eliminating them to prevent them defending themselves in court.") + to_chat(traitor.current, "Any damage you cause will be a further embarrassment to Nanotrasen, so you have no limits on collateral damage.") + to_chat(traitor.current, " You have been provided with a standard uplink to accomplish your task. ") + to_chat(traitor.current, "Finally, watch your back. Your target has friends in high places, and intel suggests someone may have taken out a contract of their own to protect them.") + else + to_chat(traitor.current, "You are the [traitor_name].") + to_chat(traitor.current, "Your target is suspected of [crime], and you have been tasked with eliminating them by any means necessary to avoid a costly and embarrassing public trial.") + to_chat(traitor.current, "While you have a license to kill, unneeded property damage or loss of employee life will lead to your contract being terminated.") + to_chat(traitor.current, "For the sake of plausible deniability, you have been equipped with an array of captured Syndicate weaponry available via uplink.") + to_chat(traitor.current, "Finally, watch your back. Your target has friends in high places, and intel suggests someone may have taken out a contract of their own to protect them.") traitor.announce_objectives() @@ -301,6 +320,8 @@ /datum/game_mode/traitor/internal_affairs/give_codewords(mob/living/traitor_mob) return +#undef PROB_ACTUAL_TRAITOR #undef PINPOINTER_EXTRA_RANDOM_RANGE #undef PINPOINTER_MINIMUM_RANGE #undef PINPOINTER_PING_TIME + diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 4673b572a8..6ad37815ca 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -85,40 +85,65 @@ character.make_Traitor() +/datum/game_mode/proc/forge_single_objective(datum/mind/traitor) //Returns how many objectives are added + .=1 + if(issilicon(traitor.current)) + var/special_pick = rand(1,4) + switch(special_pick) + if(1) + var/datum/objective/block/block_objective = new + block_objective.owner = traitor + traitor.objectives += block_objective + if(2) + var/datum/objective/purge/purge_objective = new + purge_objective.owner = traitor + traitor.objectives += purge_objective + if(3) + var/datum/objective/robot_army/robot_objective = new + robot_objective.owner = traitor + traitor.objectives += robot_objective + if(4) //Protect and strand a target + var/datum/objective/protect/yandere_one = new + yandere_one.owner = traitor + traitor.objectives += yandere_one + yandere_one.find_target() + var/datum/objective/maroon/yandere_two = new + yandere_two.owner = traitor + yandere_two.target = yandere_one.target + yandere_two.update_explanation_text() // normally called in find_target() + traitor.objectives += yandere_two + .=2 + else + if(prob(50)) + var/list/active_ais = active_ais() + if(active_ais.len && prob(100/GLOB.joined_player_list.len)) + var/datum/objective/destroy/destroy_objective = new + destroy_objective.owner = traitor + destroy_objective.find_target() + traitor.objectives += destroy_objective + else if(prob(30)) + var/datum/objective/maroon/maroon_objective = new + maroon_objective.owner = traitor + maroon_objective.find_target() + traitor.objectives += maroon_objective + else + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = traitor + kill_objective.find_target() + traitor.objectives += kill_objective + else + var/datum/objective/steal/steal_objective = new + steal_objective.owner = traitor + steal_objective.find_target() + traitor.objectives += steal_objective + + /datum/game_mode/proc/forge_traitor_objectives(datum/mind/traitor) if(issilicon(traitor.current)) var/objective_count = 0 if(prob(30)) - var/special_pick = rand(1,4) - switch(special_pick) - if(1) - var/datum/objective/block/block_objective = new - block_objective.owner = traitor - traitor.objectives += block_objective - objective_count++ - if(2) - var/datum/objective/purge/purge_objective = new - purge_objective.owner = traitor - traitor.objectives += purge_objective - objective_count++ - if(3) - var/datum/objective/robot_army/robot_objective = new - robot_objective.owner = traitor - traitor.objectives += robot_objective - objective_count++ - if(4) //Protect and strand a target - var/datum/objective/protect/yandere_one = new - yandere_one.owner = traitor - traitor.objectives += yandere_one - yandere_one.find_target() - objective_count++ - var/datum/objective/maroon/yandere_two = new - yandere_two.owner = traitor - yandere_two.target = yandere_one.target - yandere_two.update_explanation_text() // normally called in find_target() - traitor.objectives += yandere_two - objective_count++ + objective_count+=forge_single_objective(traitor) for(var/i = objective_count, i < config.traitor_objectives_amount, i++) var/datum/objective/assassinate/kill_objective = new @@ -142,29 +167,8 @@ assign_exchange_role(exchange_red) assign_exchange_role(exchange_blue) objective_count += 1 //Exchange counts towards number of objectives - var/list/active_ais = active_ais() for(var/i = objective_count, i < config.traitor_objectives_amount, i++) - if(prob(50)) - if(active_ais.len && prob(100/GLOB.joined_player_list.len)) - var/datum/objective/destroy/destroy_objective = new - destroy_objective.owner = traitor - destroy_objective.find_target() - traitor.objectives += destroy_objective - else if(prob(30)) - var/datum/objective/maroon/maroon_objective = new - maroon_objective.owner = traitor - maroon_objective.find_target() - traitor.objectives += maroon_objective - else - var/datum/objective/assassinate/kill_objective = new - kill_objective.owner = traitor - kill_objective.find_target() - traitor.objectives += kill_objective - else - var/datum/objective/steal/steal_objective = new - steal_objective.owner = traitor - steal_objective.find_target() - traitor.objectives += steal_objective + forge_single_objective(traitor) if(is_hijacker && objective_count <= config.traitor_objectives_amount) //Don't assign hijack if it would exceed the number of objectives set in config.traitor_objectives_amount if (!(locate(/datum/objective/hijack) in traitor.objectives)) From 3c60a6c82f1f2d3bec178701f8811a9c8ea59fc5 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 25 May 2017 10:37:50 -0500 Subject: [PATCH 04/50] Aux base plasma turrets now have range equal to the range they fire in --- code/modules/projectiles/projectile/special.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 57b339178f..867d1b8c8f 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -242,6 +242,7 @@ //Between normal and advanced for damage, made a beam so not the turret does not destroy glass name = "plasma beam" damage = 6 + range = 7 pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE From fa4e0e61d6efd55f9404611127bee89259d8c898 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 09:05:52 -0500 Subject: [PATCH 05/50] Fixes adv camera leaving obscured images --- code/game/gamemodes/miniantags/abduction/machinery/camera.dm | 2 +- code/game/machinery/computer/camera_advanced.dm | 2 +- code/modules/research/xenobiology/xenobio_camera.dm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm index 1e725bccba..554d992987 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm @@ -70,12 +70,12 @@ origin.vest_mode_action.Remove(C) origin.vest_disguise_action.Remove(C) origin.set_droppoint_action.Remove(C) - remote_eye.eye_user = null C.reset_perspective(null) if(C.client) C.client.images -= remote_eye.user_image for(var/datum/camerachunk/chunk in remote_eye.visibleCameraChunks) chunk.remove(remote_eye) + remote_eye.eye_user = null C.remote_control = null C.unset_machine() Remove(C) diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index e3637d3430..1719695cf5 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -151,13 +151,13 @@ obj/machinery/computer/camera_advanced/attack_ai(mob/user) var/mob/camera/aiEye/remote/remote_eye = C.remote_control remote_eye.origin.current_user = null remote_eye.origin.jump_action.Remove(C) - remote_eye.eye_user = null if(C.client) C.reset_perspective(null) if(remote_eye.visible_icon) C.client.images -= remote_eye.user_image for(var/datum/camerachunk/chunk in remote_eye.visibleCameraChunks) chunk.remove(remote_eye) + remote_eye.eye_user = null C.remote_control = null C.unset_machine() Remove(C) diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index ff7c3f6340..f43a89eef4 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -96,12 +96,12 @@ origin.feed_slime_action.Remove(C) origin.monkey_recycle_action.Remove(C) //All of this stuff below could probably be a proc for all advanced cameras, only the action removal needs to be camera specific - remote_eye.eye_user = null C.reset_perspective(null) if(C.client) C.client.images -= remote_eye.user_image for(var/datum/camerachunk/chunk in remote_eye.visibleCameraChunks) chunk.remove(remote_eye) + remote_eye.eye_user = null C.remote_control = null C.unset_machine() Remove(C) From 4cc3f81b3e12584f99630589a3b0d61eb0601dc5 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 11:12:09 -0500 Subject: [PATCH 06/50] Moves attack chain proc from global to obj/item --- code/_onclick/click.dm | 4 ++-- code/_onclick/cyborg.dm | 4 ++-- code/_onclick/item_attack.dm | 10 +++++----- code/_onclick/telekinesis.dm | 3 ++- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index a8e2681dc9..5b26067725 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -119,7 +119,7 @@ //User itself, current loc, and user inventory if(DirectAccess(A)) if(W) - melee_item_attack_chain(src,W,A,params) + W.melee_attack_chain(src, A, params) else if(ismob(A)) changeNext_move(CLICK_CD_MELEE) @@ -133,7 +133,7 @@ //Standard reach turf to turf or reaching inside storage if(CanReach(A,W)) if(W) - melee_item_attack_chain(src,W,A,params) + W.melee_attack_chain(src, A, params) else if(ismob(A)) changeNext_move(CLICK_CD_MELEE) diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index c52b3441db..3bb15c1947 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -71,7 +71,7 @@ // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents) if(A == loc || (A in loc) || (A in contents)) - melee_item_attack_chain(src, W, A, params) + W.melee_attack_chain(src, A, params) return if(!isturf(loc)) @@ -80,7 +80,7 @@ // cyborgs are prohibited from using storage items so we can I think safely remove (A.loc && isturf(A.loc.loc)) if(isturf(A) || isturf(A.loc)) if(A.Adjacent(src)) // see adjacent.dm - melee_item_attack_chain(src, W, A, params) + W.melee_attack_chain(src, A, params) return else W.afterattack(A, src, 0, params) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 24f6559dd6..72694a434c 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -1,10 +1,10 @@ -/proc/melee_item_attack_chain(mob/user, obj/item/I, atom/target, params) - if(I.pre_attackby(target, user, params)) +/obj/item/proc/melee_attack_chain(mob/user, atom/target, params) + if(pre_attackby(target, user, params)) // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example) - var/resolved = target.attackby(I,user,params) - if(!resolved && target && I) - I.afterattack(target, user, 1, params) // 1: clicking something Adjacent + var/resolved = target.attackby(src, user, params) + if(!resolved && target && !QDELETED(src)) + afterattack(target, user, 1, params) // 1: clicking something Adjacent // Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown. diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index c7ad66440e..0ca0fb31a9 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -124,7 +124,8 @@ if(!isturf(target) && istype(focus,/obj/item) && target.Adjacent(focus)) apply_focus_overlay() - melee_item_attack_chain(tk_user, focus, target, params) //isn't copying the attack chain fun. we should do it more often. + var/obj/item/I = focus + I.melee_attack_chain(tk_user, target, params) //isn't copying the attack chain fun. we should do it more often. if(check_if_focusable(focus)) focus.do_attack_animation(target, null, focus) else From 11c74ee6b44afd6d50f6c2137533262f8dcbd6b8 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 11:13:15 -0500 Subject: [PATCH 07/50] Adds cycling delay to PKborg dampeners, fixes dampener projectors leaving fields behind when server is lagging --- code/game/objects/items/robot/robot_items.dm | 27 ++++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 97a343311d..5bca9cf535 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -504,6 +504,8 @@ S.change_head_color(color2) dropped = TRUE +#define PKBORG_DAMPEN_CYCLE_DELAY 20 + //Peacekeeper Cyborg Projectile Dampenening Field /obj/item/borg/projectile_dampen name = "Hyperkinetic Dampening projector" @@ -526,6 +528,7 @@ var/image/projectile_effect var/field_radius = 3 var/active = FALSE + var/cycle_delay = 0 /obj/item/borg/projectile_dampen/debug maxenergy = 50000 @@ -545,29 +548,31 @@ return ..() /obj/item/borg/projectile_dampen/attack_self(mob/user) - if(!istype(dampening_field)) - activate_field() - active = TRUE + if(cycle_delay < world.time) + to_chat(user, "\the [src] is still recycling its projectors!") + return + cycle_delay = world.time + PKBORG_DAMPEN_CYCLE_DELAY + active = !active + if(active) + activate_field(user) else deactivate_field() - active = FALSE + update_icon() to_chat(user, "You [active? "activate":"deactivate"] the [src].") /obj/item/borg/projectile_dampen/update_icon() - . = ..() icon_state = "[initial(icon_state)][active]" /obj/item/borg/projectile_dampen/proc/activate_field() - if(!istype(dampening_field)) - dampening_field = make_field(/datum/proximity_monitor/advanced/peaceborg_dampener, list("current_range" = field_radius, "host" = src, "projector" = src)) - update_icon() + if(istype(dampening_field)) + QDEL_NULL(dampening_field) + dampening_field = make_field(/datum/proximity_monitor/advanced/peaceborg_dampener, list("current_range" = field_radius, "host" = src, "projector" = src)) /obj/item/borg/projectile_dampen/proc/deactivate_field() QDEL_NULL(dampening_field) - visible_message("The [src] shuts off!") - for(var/obj/item/projectile/P in tracked) + visible_message("\The [src] shuts off!") + for(var/P in tracked) restore_projectile(P) - update_icon() /obj/item/borg/projectile_dampen/dropped() . = ..() From a84bcdd42ea6abecdb182f69c27fe525a02611c1 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 11:14:20 -0500 Subject: [PATCH 08/50] Adds goliath cloak & a recipe (Lavaland PvE primitive item) --- code/modules/clothing/suits/cloaks.dm | 18 +++++++++++++++++- code/modules/crafting/recipes.dm | 13 +++++++++++-- icons/obj/clothing/suits.dmi | Bin 105013 -> 105553 bytes 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index 1a8c96e802..e90c750d12 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -50,12 +50,28 @@ name = "captain's cloak" desc = "Worn by the commander of Space Station 13." icon_state = "capcloak" - + /obj/item/clothing/neck/cloak/hop name = "head of personnel's cloak" desc = "Worn by the Head of Personnel. It smells faintly of bureaucracy." icon_state = "hopcloak" +/obj/item/clothing/suit/hooded/cloak/goliath + name = "goliath cloak" + icon_state = "goliath_cloak" + desc = "A staunch, practical cape made out of numerous monster materials, it is coveted amongst exiles & hermits." + allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/internals, /obj/item/weapon/pickaxe, /obj/item/weapon/twohanded/spear, /obj/item/weapon/twohanded/bonespear, /obj/item/organ/hivelord_core/legion, /obj/item/weapon/kitchen/knife/combat/bone, /obj/item/weapon/kitchen/knife/combat/survival) + armor = list(melee = 35, bullet = 10, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 60, acid = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot + hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath + body_parts_covered = CHEST|GROIN|ARMS + +/obj/item/clothing/head/hooded/cloakhood/goliath + name = "goliath cloak hood" + icon_state = "golhood" + desc = "A protective & concealing hood." + armor = list(melee = 35, bullet = 10, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 60, acid = 60) + flags_inv = HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR + /obj/item/clothing/suit/hooded/cloak/drake name = "drake armour" icon_state = "dragon" diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 72088961de..a489d0fb6a 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -337,9 +337,9 @@ /obj/item/weapon/restraints/handcuffs/cable = 1 ) category = CAT_MISC - + /datum/crafting_recipe/toysword - name = "Toy Sword" + name = "Toy Sword" reqs = list(/obj/item/weapon/light/bulb = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4) result = /obj/item/toy/sword category = CAT_MISC @@ -398,6 +398,15 @@ reqs = list(/obj/item/stack/sheet/bone = 4) category = CAT_PRIMAL +/datum/crafting_recipe/goliathcloak + name = "Goliath Cloak" + result = /obj/item/clothing/suit/hooded/cloak/goliath + time = 50 + reqs = list(/obj/item/stack/sheet/leather = 2, + /obj/item/stack/sheet/sinew = 2, + /obj/item/stack/sheet/animalhide/goliath_hide = 2) //it takes 4 goliaths to make 1 cloak if the plates are skinned + category = CAT_PRIMAL + /datum/crafting_recipe/drakecloak name = "Ash Drake Armour" result = /obj/item/clothing/suit/hooded/cloak/drake diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 27e02e2e7ccf4c80558ae376ae0aef362fb7a2fb..3a59c48c2e194df8a74f430b0b43c56f84ebfe5e 100644 GIT binary patch delta 10752 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 delta 10186 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 ZJjEnhzb^1Mrvm-EG*ony%N4EP|3AuqkKh0R From 5387b4e2a76591ed8b0b7d9258e2ac552c38269b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 13:20:50 -0500 Subject: [PATCH 09/50] Makes a thing use QDEL_NULL --- code/game/machinery/doors/airlock.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 1750aa7aa8..cfc5eb2979 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -199,8 +199,7 @@ qdel(src) /obj/machinery/door/airlock/Destroy() - qdel(wires) - wires = null + QDEL_NULL(wires) if(charge) qdel(charge) charge = null From 3e05ac328a14c9a87e6d68ac3acb93612e079a79 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 13:21:59 -0500 Subject: [PATCH 10/50] Fixes typos and lies --- tools/readme.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tools/readme.txt b/tools/readme.txt index a1c1a17c3b..fbd99e3760 100644 --- a/tools/readme.txt +++ b/tools/readme.txt @@ -1,6 +1,4 @@ the compiled exe file for the Unstandardness text for DM program is in: UnstandardnessTestForDM\bin\Debug\UnstandardnessTestForDM.exe -of -UnstandardnessTestForDM\bin\Release\UnstandardnessTestForDM.exe -You have to move it to the root folder (where the dme file is) and run it from there for it to work. \ No newline at end of file +You have to move it to the root folder (where the dme file is) and run it from there for it to work. From db90467ff2bacce9e7c023d12ffadc0da2662980 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 13:22:05 -0500 Subject: [PATCH 11/50] Deletes the old java mapmerge --- tools/mapmerge/old_java_mapmerge/MapMerge.jar | Bin 20574 -> 0 bytes .../old_java_mapmerge/Run Map Merge.bat | 4 - .../old_java_mapmerge/Source/.classpath | 7 - .../old_java_mapmerge/Source/.project | 17 - .../.settings/org.eclipse.jdt.core.prefs | 11 - .../Source/.settings/org.eclipse.jdt.ui.prefs | 60 ---- .../Source/bin/FileFinder.class | Bin 1882 -> 0 bytes .../Source/bin/MapMerge.class | Bin 3519 -> 0 bytes .../Source/bin/MapPatcher.jar | Bin 10136 -> 0 bytes .../Source/src/FileFinder.java | 25 -- .../Source/src/MapMerge.java | 108 ------ .../src/MapPatcher Source/Location.java | 42 --- .../Source/src/MapPatcher Source/Map.java | 314 ------------------ .../src/MapPatcher Source/MapPatcher.java | 304 ----------------- .../src/MapPatcher Source/SavingThread.java | 37 --- .../Source/src/MapPatcher.jar | Bin 10136 -> 0 bytes 16 files changed, 929 deletions(-) delete mode 100644 tools/mapmerge/old_java_mapmerge/MapMerge.jar delete mode 100644 tools/mapmerge/old_java_mapmerge/Run Map Merge.bat delete mode 100644 tools/mapmerge/old_java_mapmerge/Source/.classpath delete mode 100644 tools/mapmerge/old_java_mapmerge/Source/.project delete mode 100644 tools/mapmerge/old_java_mapmerge/Source/.settings/org.eclipse.jdt.core.prefs delete mode 100644 tools/mapmerge/old_java_mapmerge/Source/.settings/org.eclipse.jdt.ui.prefs delete mode 100644 tools/mapmerge/old_java_mapmerge/Source/bin/FileFinder.class delete mode 100644 tools/mapmerge/old_java_mapmerge/Source/bin/MapMerge.class delete mode 100644 tools/mapmerge/old_java_mapmerge/Source/bin/MapPatcher.jar delete mode 100644 tools/mapmerge/old_java_mapmerge/Source/src/FileFinder.java delete mode 100644 tools/mapmerge/old_java_mapmerge/Source/src/MapMerge.java delete mode 100644 tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/Location.java delete mode 100644 tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/Map.java delete mode 100644 tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/MapPatcher.java delete mode 100644 tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/SavingThread.java delete mode 100644 tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher.jar diff --git a/tools/mapmerge/old_java_mapmerge/MapMerge.jar b/tools/mapmerge/old_java_mapmerge/MapMerge.jar deleted file mode 100644 index d0f0ce08028cdbb917fe185b48e331f8433d49c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20574 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 AYXATM diff --git a/tools/mapmerge/old_java_mapmerge/Run Map Merge.bat b/tools/mapmerge/old_java_mapmerge/Run Map Merge.bat deleted file mode 100644 index 5bb8f1736b..0000000000 --- a/tools/mapmerge/old_java_mapmerge/Run Map Merge.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -call java -jar MapMerge.jar "../../_maps/" /wait - -pause \ No newline at end of file diff --git a/tools/mapmerge/old_java_mapmerge/Source/.classpath b/tools/mapmerge/old_java_mapmerge/Source/.classpath deleted file mode 100644 index 8a11d5b17e..0000000000 --- a/tools/mapmerge/old_java_mapmerge/Source/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/tools/mapmerge/old_java_mapmerge/Source/.project b/tools/mapmerge/old_java_mapmerge/Source/.project deleted file mode 100644 index df472fbdf1..0000000000 --- a/tools/mapmerge/old_java_mapmerge/Source/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - MapMerger - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/tools/mapmerge/old_java_mapmerge/Source/.settings/org.eclipse.jdt.core.prefs b/tools/mapmerge/old_java_mapmerge/Source/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 3a21537071..0000000000 --- a/tools/mapmerge/old_java_mapmerge/Source/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/tools/mapmerge/old_java_mapmerge/Source/.settings/org.eclipse.jdt.ui.prefs b/tools/mapmerge/old_java_mapmerge/Source/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index ea0a123b8b..0000000000 --- a/tools/mapmerge/old_java_mapmerge/Source/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,60 +0,0 @@ -cleanup.add_default_serial_version_id=false -cleanup.add_generated_serial_version_id=true -cleanup.add_missing_annotations=true -cleanup.add_missing_deprecated_annotations=true -cleanup.add_missing_methods=false -cleanup.add_missing_nls_tags=false -cleanup.add_missing_override_annotations=true -cleanup.add_missing_override_annotations_interface_methods=true -cleanup.add_serial_version_id=false -cleanup.always_use_blocks=true -cleanup.always_use_parentheses_in_expressions=true -cleanup.always_use_this_for_non_static_field_access=false -cleanup.always_use_this_for_non_static_method_access=false -cleanup.convert_functional_interfaces=false -cleanup.convert_to_enhanced_for_loop=false -cleanup.correct_indentation=true -cleanup.format_source_code=true -cleanup.format_source_code_changes_only=false -cleanup.insert_inferred_type_arguments=false -cleanup.make_local_variable_final=true -cleanup.make_parameters_final=false -cleanup.make_private_fields_final=true -cleanup.make_type_abstract_if_missing_method=false -cleanup.make_variable_declarations_final=false -cleanup.never_use_blocks=false -cleanup.never_use_parentheses_in_expressions=false -cleanup.organize_imports=true -cleanup.qualify_static_field_accesses_with_declaring_class=false -cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -cleanup.qualify_static_member_accesses_with_declaring_class=true -cleanup.qualify_static_method_accesses_with_declaring_class=true -cleanup.remove_private_constructors=true -cleanup.remove_redundant_type_arguments=true -cleanup.remove_trailing_whitespaces=false -cleanup.remove_trailing_whitespaces_all=true -cleanup.remove_trailing_whitespaces_ignore_empty=false -cleanup.remove_unnecessary_casts=true -cleanup.remove_unnecessary_nls_tags=true -cleanup.remove_unused_imports=true -cleanup.remove_unused_local_variables=true -cleanup.remove_unused_private_fields=true -cleanup.remove_unused_private_members=true -cleanup.remove_unused_private_methods=true -cleanup.remove_unused_private_types=true -cleanup.sort_members=false -cleanup.sort_members_all=false -cleanup.use_anonymous_class_creation=false -cleanup.use_blocks=true -cleanup.use_blocks_only_for_return_and_throw=false -cleanup.use_lambda=true -cleanup.use_parentheses_in_expressions=true -cleanup.use_this_for_non_static_field_access=true -cleanup.use_this_for_non_static_field_access_only_if_necessary=true -cleanup.use_this_for_non_static_method_access=true -cleanup.use_this_for_non_static_method_access_only_if_necessary=true -cleanup.use_type_arguments=false -cleanup_profile=_Default -cleanup_settings_version=2 -eclipse.preferences.version=1 diff --git a/tools/mapmerge/old_java_mapmerge/Source/bin/FileFinder.class b/tools/mapmerge/old_java_mapmerge/Source/bin/FileFinder.class deleted file mode 100644 index ab01a656c458ab21fe7af582f5c7246df388f46e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1882 zcmb7FZBrXn7(F)$EQAGGNTIbLMXi!eY3ggWi>W}1Vne76O$A>!$r3Imo6PP_$A0!# z_%GD4VC{_4&;BOI@!UJm;Q!^Y_1h{srJYd}kmc5MPs3cTIX_ z*EbLonA>+AI%!YV)4QBV=Vh&-=c{f(22$010i))q(w@t=i`nkvyN=r1XieHg-mN#i zvW^7;=US;vC9COW-*+BmWuTZeoR<~PQBB_!NcGEE>QlqcaOL2V^rXrVdZCq4b-YSC zuYBoM>|{Y8wpuT{aYQk0VgzRdq6^7_feC@hkajnhIL=~x7=$xnU?`4hTrhB6;6itg zT8jLmK)JQR#4EVSJ}a)e)OOsqy@&Q#f!%L+!;^8(4QK!sjNksTgGOzTUax2`-Dw9q&D#>K07|P6mYt)49OjR1U@%$2U(sK zr%b1H9j(pczFSgua%UJh+%>Q%Fx$;u)9nz$#22_n)2(jiw$^j^Nph}7>z)NvFSZ-* zRH7$Qx5L>1y*cb)v1j_ldqz|*6mc}KoYD^)PNQw8?>jx)Zts5~zswDBn*1vhAL1kW zB42O%rSK}H<8|jP3t!b53S93geB$CgCY|d57Z!VjM>~ zni$6zk{sV#Qeq>zup6Sd3qG$lxbNG|qhL2|gCcS-<1j;uEY! z@H0$)Bv^g@!Ef03g-KC7FFeV{5`4~Kme;c`Y_))n3(q5uEfyj;?xVm$1~2Icj79M! zqm<KQUu4zQy+L_!XOA+8APY5^noIvl@g3;peX>)qmy diff --git a/tools/mapmerge/old_java_mapmerge/Source/bin/MapMerge.class b/tools/mapmerge/old_java_mapmerge/Source/bin/MapMerge.class deleted file mode 100644 index dff913a6b9443f37dd53caf7992a08c542a9cf10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3519 zcma)9YgZfB72Q`7%pecgR{SEEWGFc1VUUCABY<&j7biG891APKY2yyk0Aout>SzQe ztsA>_)1+zKhx^K-Y10>dH^!-;_Da9EYxQGSv--Kep=-sUsC+?eUknhGKU+s+&FMm%HKv+;@P^JdBusIlx^fzJm< z{k4K;W#WmHVcVuVAP~(N-rS_aAbEiufr)K7@fj;)#!qpLHtJw1W7(EBBoJ=zND4%b zJ8AA$FR=Z-n045S?FzP4VM#3JJu|Bzh6e;fmMyR|*or%iNO%d)HI3{*6dHDF*oEB! zwS%QS_q1Kv`bZzO1)Y@{<}yF-B)cw$O%XPf-(P z(W;o>Qo_lal$1TIFPOHcFSw39+Y`l8NGLd6#z(1CcxsrGHBfRgSjLVbiDwi%T{iXw zu&yf&Q&P5DedB~@q%KUlM#@z2tU%|uqtD3FaBtVtecp7-)^n~iZ>7z&p0-?`1&+Je zqT(|ID@oNoN6)hDX`Z1#`gIBRoQBUzOf~*CvK^;2q>$zzV4D{`*+Do;olqmCH zG#QxqH_@v=9kmyTk>VMZQV8CtrJ&Suilr9ZqQrDH1vK1M-PDV@ps@wI0yR|^ad0z< z4KYl;Par$rKNb|s5M9EWwGFS}a`&E+mjAD49Z3~L-S&jDKtAooQYF%kzUUP61%qOc zOiQsHk%SgB%u7Nel28Q~1$J*7+QDIStYFEKM6nOgYxq3AKyv4eOu?KW&_^m;HaO(V zy;NC`C>GGC;susVxAMB}c)Fo8h?S-?JSuYmS2TPHU*<_`NZpm8%jaIeVMXW? zIyT<|zM|npUmczk*vkxG((p3A#;VR4`Ee#WVzYPHerM(4*EPHn#bQCZGH-t5;^yv5>GL8pN80dBd|kL6BpGri4FZv_4+HP0*; z(5&JYWTt1D-CfA3_$6!8oywR7&xT*)w+enkQmI;YS!&L7HRx#JOy10}yLl@;%0N8X zBD`yJ@&de9SF+Q{@x)B2)53hI^yd|!1;NbpId(JG0w|>yGi`b06~%MT<&AlEi<&d? zc~;V)dBQ2UDfYFzfa{6W|1#;3IMBkgH_Q*05Tf$R<|ryJDn29pt>c@(7QXfRRzSmT zXj98*Siz2)*mJ}8e9-p_`M>qFZt`bAPu}Sz|2Ut5^EI6-*t_9Y>rbk_ixwE*Av{dO zI!Pm8eT3r(S6U?uktd7@XRdXId&BQx-zxUsME7mPr(%z;;LzwYy1Q2Kv8TJ<#o*Y1 zB0l*R9z3v$6H9n*d>JQW<3*h6F5=7*{MWO5mD8Ut;<;t)DZ=>QLH%gks-oQ>&Mw}O zy}T;tDRszF5TNBCh(Jlk2a(w)Rio@Rh-)H_;&7uSxf{e>ELm z5+Xdbg#D!m&8zsPjBuS1I-865ZV^8SB3%uO=1$i6?X`c%0B^96OV}6e-ybQtH%2}b z!TSM%q2@QRB?yE=&6Q}-QVJ6LArZ)}iuh6NC+n#!t*yu$SMak6VEqv}x4!Mq1MB{p z#z=oH{}hGNoeIa65>t`Jn#5F1V{Kxpwoys+tBvX^eswjpw)gclA=@O7(TkJ-C>j+# z7}s$EzvH;bYQD#M z{)N_m!;|y*Cqh;aAAc-J4b zQs#f;sD?;diTWM>L(#={Sm8(^sv4|P_$u2Z5Ojbk%Qq?LHq>u<_%0q2cNtXvwcbIj Z7^AU7(XV!z#zetWMSd{MnL>` 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 I_ { - private PathMatcher matcher; - public ArrayList foundPaths = new ArrayList<>(); - public FileFinder(String pattern) { - matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern); - } - - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - Path name = file.getFileName(); - if (matcher.matches(name)) { - foundPaths.add(file); - } - return FileVisitResult.CONTINUE; - } -} \ No newline at end of file diff --git a/tools/mapmerge/old_java_mapmerge/Source/src/MapMerge.java b/tools/mapmerge/old_java_mapmerge/Source/src/MapMerge.java deleted file mode 100644 index 552a406b13..0000000000 --- a/tools/mapmerge/old_java_mapmerge/Source/src/MapMerge.java +++ /dev/null @@ -1,108 +0,0 @@ -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Scanner; - -public class MapMerge { - - private static Scanner input = new Scanner(System.in); - private static Path pathToMaps; - - public static void main(String[] mapPath) throws IOException { - pathToMaps = Paths.get(mapPath[0]); - FileFinder dmmFinder = new FileFinder("*.dmm"); - Files.walkFileTree(pathToMaps, dmmFinder); - ArrayList foundFiles = dmmFinder.foundPaths; - if (foundFiles.size() > 0) { - try { - MapMerge.merge(foundFiles); - } catch (Exception e) { - System.out.println("Something went wrong."); - e.printStackTrace(); - } - } else { - System.out.println("No files were found in provided directory!"); - System.out.print("Path to maps folder: "); - pathToMaps = Paths.get(input.nextLine()); - dmmFinder = new FileFinder("*.dmm"); - Files.walkFileTree(pathToMaps, dmmFinder); - foundFiles = dmmFinder.foundPaths; - try { - MapMerge.merge(foundFiles); - } catch (Exception e) { - System.out.println("Something went wrong."); - e.printStackTrace(); - } - } - } - - public static void merge(ArrayList foundFiles) throws IOException { - - System.out.println("How many files do you want to merge?"); - int selection1; - inputCheck: while (true) { - while (!input.hasNextInt()) { - String temp = input.next(); - System.out.println(temp + " is not a valid int."); - } - selection1 = input.nextInt(); - if (selection1 < 0) { - System.out.println("Use a number greater than 0!"); - continue inputCheck; - } else { - break inputCheck; - } - } - - for (int numOfFiles = selection1; numOfFiles != 0; numOfFiles--) { - - for (int num = 0; num < foundFiles.size(); num++) { - System.out.println(num + ": " + foundFiles.get(num)); - } - - System.out.print("File to use: "); - int selection2; - inputCheck: while (true) { - while (!input.hasNextInt()) { - String temp = input.next(); - System.out.println(temp + " is not a valid int."); - } - selection2 = input.nextInt(); - if ((selection2 < 0) || (selection2 >= foundFiles.size())) { - if (selection2 < 0) { - System.out.println("Use a number greater than 0!"); - } else { - System.out.println("Use a number less than " + foundFiles.size() + "!"); - } - continue inputCheck; - } else { - break inputCheck; - } - } - - String selected_map = foundFiles.get(selection2) + ""; - String backup_map = selected_map + ".backup"; - String edited_map = selected_map; - String to_save = selected_map; - String[] passInto = { "-clean", backup_map, edited_map, to_save }; - MapPatcher.main(passInto); - - // Will try to fix when I have time ~CorruptComputer - /*try{ - Process process = new ProcessBuilder("dmm2tgm\\dmm2tgm.exe", selected_map).start(); - }catch(Exception e1){ - System.out.println("You are not on a windows machine, trying the .py"); - try{ - Process process = new ProcessBuilder("dmm2tgm\\Source\\dmm2tgm.py", selected_map).start(); - }catch(Exception e2){ - System.out.println("You do not have python 2.7.x installed."); - System.out.println("Downloads can be found here: https://www.python.org/downloads/"); - } - } - */ - - } - } -} \ No newline at end of file diff --git a/tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/Location.java b/tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/Location.java deleted file mode 100644 index 2a901d54b2..0000000000 --- a/tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/Location.java +++ /dev/null @@ -1,42 +0,0 @@ -class Location -{ - int x; - int y; - int z; - - public Location() - { - } - - public Location(int paramInt1, int paramInt2, int paramInt3) - { - this.x = paramInt1; - this.y = paramInt2; - this.z = paramInt3; - } - - public void set(int paramInt1, int paramInt2, int paramInt3) - { - this.x = paramInt1; - this.y = paramInt2; - this.z = paramInt3; - } - - public boolean equals(Object paramObject) - { - if (!(paramObject instanceof Location)) return false; - Location localLocation = (Location)paramObject; - if ((this.x != localLocation.x) || (this.y != localLocation.y) || (this.z != localLocation.z)) return false; - return true; - } - - public int hashCode() - { - return (this.z * 256 + this.y) * 256 + this.x; - } - - public String toString() - { - return "(" + this.x + "," + this.y + "," + this.z + ")"; - } -} diff --git a/tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/Map.java b/tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/Map.java deleted file mode 100644 index 949db7e6ca..0000000000 --- a/tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/Map.java +++ /dev/null @@ -1,314 +0,0 @@ -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileWriter; -import java.io.InputStreamReader; -import java.io.PrintStream; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Set; -import java.util.Vector; - -public class Map -{ - boolean sizeunknown; - int minx; - int miny; - int minz; - int maxx; - int maxy; - int maxz; - HashMap tile_types; - HashMap codes_by_value; - HashMap tiles; - - public Map() - { - this.sizeunknown = true; - this.tile_types = new HashMap(); - this.codes_by_value = new HashMap(); - this.tiles = new HashMap(); - } - - public Map(File paramFile) - { - this(paramFile, false); - } - - public Map(File paramFile, boolean paramBoolean) - { - this.sizeunknown = true; - try { - BufferedReader localBufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(paramFile))); - - this.tile_types = new HashMap(); - this.codes_by_value = new HashMap(); - this.tiles = new HashMap(); - - MapPatcher.Systemoutprintln(new StringBuilder().append("Loading map ").append(paramFile.getName()).toString()); - MapPatcher.Systemoutprint("Loading tiles"); - String str1 = ""; - int i = 0; - while ((str1 = localBufferedReader.readLine()) != null) - { - if (str1.equals("")) break; - if (str1.startsWith("\"")) - { - if (i < 1) - { - int j = str1.indexOf("\"", 1); - i = j - 1; - } - String str2 = str1.substring(1, 1 + i); - String str3 = str1.substring(str1.indexOf("(")); - this.tile_types.put(str2, str3); - this.codes_by_value.put(str3, str2); - } - } - - MapPatcher.Systemoutprintln(new StringBuilder().append(" ").append(this.tile_types.size()).toString()); - if (!paramBoolean) - { - MapPatcher.Systemoutprintln("Loading levels"); - while (true) - { - if ((str1 = localBufferedReader.readLine()) != null) { if (str1.startsWith("(")) break label270; } else { - label270: if (str1 == null) - { - break; - } - int k = str1.indexOf(",", 1); - int m = Integer.parseInt(str1.substring(1, k)); - str1 = str1.substring(k); - k = str1.indexOf(",", 1); - int n = Integer.parseInt(str1.substring(1, k)); - str1 = str1.substring(k); - k = str1.indexOf(")", 1); - int i1 = Integer.parseInt(str1.substring(1, k)); - - MapPatcher.Systemoutprintln(new StringBuilder().append("New map part from (").append(m).append(",").append(n).append(",").append(i1).append(")").toString()); - - int i3 = n; - if (this.sizeunknown) - { - this.minx = m; this.maxx = this.minx; - this.miny = n; this.maxy = this.miny; - this.minz = i1; this.maxz = this.minz; - this.sizeunknown = false; - } - if (this.minz > i1) this.minz = i1; - if (this.maxz < i1) this.maxz = i1; - while (!(str1 = localBufferedReader.readLine()).startsWith("\"}")) - { - int i2 = m; - if (this.miny > i3) this.miny = i3; - if (this.maxy < i3) this.maxy = i3; - while (str1.length() > 0) - { - String str4 = str1.substring(0, i); - Location localLocation = new Location(i2, i3, i1); - if (this.minx > i2) this.minx = i2; - if (this.maxx < i2) this.maxx = i2; - this.tiles.put(localLocation, this.tile_types.get(str4)); - str1 = str1.substring(i); - i2++; - } - i3++; - } - } - } - } - localBufferedReader.close(); - } - catch (Exception localException) - { - localException.printStackTrace(); - } - } - - public void mirrorY() - { - for (int i = this.minz; i <= this.maxz; i++) - for (int j = this.minx; j <= this.maxx; j++) - for (int k = this.miny; k < (this.miny + this.maxy) / 2; k++) - { - int m = this.maxy - (k - this.miny); - String str = contentAt2(j, k, i); - setAt(j, k, i, contentAt2(j, m, i)); - setAt(j, m, i, str); - } - } - - public String contentAt(int paramInt1, int paramInt2, int paramInt3) - { - Location localLocation = new Location(paramInt1, paramInt2, paramInt3); - String str = (String)this.tiles.get(localLocation); - if (str == null) System.err.println(new StringBuilder().append("Null at ").append(paramInt1).append(",").append(paramInt2).append(",").append(paramInt3).append(" Possible loading error").toString()); - return str == null ? "null" : str; - } - - public String contentAt2(int paramInt1, int paramInt2, int paramInt3) - { - Location localLocation = new Location(paramInt1, paramInt2, paramInt3); - return (String)this.tiles.get(localLocation); - } - - public void setAt(int paramInt1, int paramInt2, int paramInt3, String paramString) - { - if (this.sizeunknown) - { - this.minx = (this.maxx = paramInt1); - this.miny = (this.maxy = paramInt2); - this.minz = (this.maxz = paramInt3); - this.sizeunknown = false; - } - else - { - this.minx = Math.min(this.minx, paramInt1); - this.miny = Math.min(this.miny, paramInt2); - this.minz = Math.min(this.minz, paramInt3); - this.maxx = Math.max(this.maxx, paramInt1); - this.maxy = Math.max(this.maxy, paramInt2); - this.maxz = Math.max(this.maxz, paramInt3); - } - Location localLocation = new Location(paramInt1, paramInt2, paramInt3); - localLocation.set(paramInt1, paramInt2, paramInt3); - this.tiles.put(localLocation, paramString); - } - - public void save(File paramFile) throws Exception - { - saveReferencing(paramFile, null); - } - - public void saveReferencing(File paramFile, Map paramMap) throws Exception - { - FileWriter localFileWriter = new FileWriter(paramFile); - - this.tile_types.clear(); - this.codes_by_value.clear(); - Vector localVector1 = new Vector(); - for (Object localObject1 = this.tiles.keySet().iterator(); ((Iterator)localObject1).hasNext(); ) { Location localLocation = (Location)((Iterator)localObject1).next(); - - String str1 = (String)this.tiles.get(localLocation); - if (!localVector1.contains(str1)) - localVector1.add(str1); - } - MapPatcher.Systemoutprintln(new StringBuilder().append("We have ").append(localVector1.size()).append(" different tiles").toString()); - localObject1 = new String[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; - - int i = 1; - int j = localObject1.length; - while (j < localVector1.size()) - { - j *= localObject1.length; - i++; - } - Vector localVector2; - if (paramMap == null) { - localVector2 = localVector1; - } - else { - localVector2 = new Vector(); - for (Iterator localIterator = localVector1.iterator(); localIterator.hasNext(); ) { localObject2 = (String)localIterator.next(); - - if (paramMap.codes_by_value.containsKey(localObject2)) - { - localObject3 = paramMap.getIdFor((String)localObject2); - this.tile_types.put(localObject3, localObject2); - this.codes_by_value.put(localObject2, localObject3); - } - else { - localVector2.add(localObject2); - } } - localVector1.clear(); - } - - int k = 0; - for (Object localObject2 = localVector2.iterator(); ((Iterator)localObject2).hasNext(); ) { localObject3 = (String)((Iterator)localObject2).next(); - do - { - str2 = int2code((String[])localObject1, k, i); - k++; - }while (this.tile_types.containsKey(str2)); - this.tile_types.put(str2, localObject3); - this.codes_by_value.put(localObject3, str2); - } - String str2; - localVector2.clear(); - - k = 0; - for (int m = 0; m < this.tile_types.size(); m++) - { - do - { - localObject3 = int2code((String[])localObject1, k, i); - k++; - }while (!this.tile_types.containsKey(localObject3)); - str2 = (String)this.tile_types.get(localObject3); - localFileWriter.write(new StringBuilder().append("\"").append((String)localObject3).append("\" = ").append(str2).append("\r\n").toString()); - } - localVector2.clear(); - - localFileWriter.write("\n"); - - m = 1 + this.maxz - this.minz; - Object localObject3 = new SavingThread[m]; - int n = (this.maxy - this.miny) * ((this.maxx - this.minx) * i + 2) + 32; - - for (k = 0; k < m; k++) - { - localObject3[k] = new SavingThread(this.minz + k, this, n); - localObject3[k].start(); - } - - int i1 = 0; - String str3 = ""; - while (i1 == 0) { - try { - Thread.sleep(100L); } catch (Exception localException) { - } - i1 = 1; - - str3 = ""; - for (k = 0; k < m; k++) - { - if (!localObject3[k].done) - i1 = 0; - if (str3.length() != 0) str3 = new StringBuilder().append(str3).append(" ").toString(); - str3 = new StringBuilder().append(str3).append(localObject3[k].done ? "Done" : new StringBuilder().append(localObject3[k].progress).append("%").toString()).toString(); - } - MapPatcher.Systemoutprint(new StringBuilder().append(str3).append("\r").toString()); - } - - for (k = 0; k < m; k++) { - localFileWriter.write(localObject3[k].result.toString()); - } - localFileWriter.flush(); - localFileWriter.close(); - } - - public String getIdFor(String paramString) - { - if (this.codes_by_value.containsKey(paramString)) - { - return (String)this.codes_by_value.get(paramString); - } - return "???"; - } - - public String int2code(String[] paramArrayOfString, int paramInt1, int paramInt2) - { - String str = ""; - while (paramInt1 >= paramArrayOfString.length) - { - int i = paramInt1 % paramArrayOfString.length; - str = new StringBuilder().append(paramArrayOfString[i]).append(str).toString(); - paramInt1 -= i; - paramInt1 /= paramArrayOfString.length; - } - str = new StringBuilder().append(paramArrayOfString[paramInt1]).append(str).toString(); - while (str.length() < paramInt2) str = new StringBuilder().append(paramArrayOfString[0]).append(str).toString(); - return str; - } -} diff --git a/tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/MapPatcher.java b/tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/MapPatcher.java deleted file mode 100644 index c8d50b9b2f..0000000000 --- a/tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/MapPatcher.java +++ /dev/null @@ -1,304 +0,0 @@ -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileWriter; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.PrintStream; -import java.util.Arrays; - -public class MapPatcher -{ - static boolean silent = false; - - public static void main(String[] paramArrayOfString) - { - String str1 = "usage: [me] -diff [old_map] [new_map] [diff_file]"; - String str2 = "usage: [me] -patch [old_map] [diff_file] [new_map]"; - String str3 = "usage: [me] -pack [unpacked] [packed.dmm]"; - String str4 = "usage: [me] -unpack [packed.dmm] [unpacked]"; - String str5 = "usage: [me] -clean [oldmap.dmm] [newmap.dmm] [cleaned.dmm]"; - String str6 = "usage: [me] -merge [original] [local] [remote] [output]"; - - for (int i = 0; i < paramArrayOfString.length; i++) - if (paramArrayOfString[i].equalsIgnoreCase("-silent")) - { - silent = true; - for (; i < paramArrayOfString.length - 1; i++) - paramArrayOfString[i] = paramArrayOfString[(i + 1)]; - paramArrayOfString = (String[])Arrays.copyOf(paramArrayOfString, paramArrayOfString.length - 1); - break; - } - Object localObject; - int i2; - int i3; - int i5; - if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-merge"))) - { - if (paramArrayOfString.length < 5) - { - System.out.println(str6); - try { System.in.read(); } catch (Exception localException1) { - }return; - } - - Map localMap1 = new Map(new File(paramArrayOfString[1])); - localObject = new Map(new File(paramArrayOfString[2])); - Map localMap8 = new Map(new File(paramArrayOfString[3])); - Map localMap9 = new Map(); - - if ((localMap1.minx != ((Map)localObject).minx) || (localMap1.minx != localMap8.minx) || (localMap1.maxx != ((Map)localObject).maxx) || (localMap1.maxx != localMap8.maxx) || (localMap1.miny != ((Map)localObject).miny) || (localMap1.miny != localMap8.miny) || (localMap1.maxy != ((Map)localObject).maxy) || (localMap1.maxy != localMap8.maxy) || (localMap1.minz != ((Map)localObject).minz) || (localMap1.minz != localMap8.minz) || (localMap1.maxz != ((Map)localObject).maxz) || (localMap1.maxz != localMap8.maxz)) - { - Systemoutprintln("Map sizes differ"); - System.exit(1); - } - try - { - for (int n = localMap1.minz; n <= localMap1.maxz; n++) - for (i2 = localMap1.miny; i2 <= localMap1.maxy; i2++) - for (i3 = localMap1.minx; i3 <= localMap1.maxx; i3++) - { - boolean bool1 = localMap1.contentAt(i3, i2, n).equals(((Map)localObject).contentAt(i3, i2, n)); - boolean bool2 = localMap1.contentAt(i3, i2, n).equals(localMap8.contentAt(i3, i2, n)); - i5 = ((Map)localObject).contentAt(i3, i2, n).equals(localMap8.contentAt(i3, i2, n)); - if ((!bool1) && (!bool2)) - { - if (i5 == 0) - { - Systemoutprintln(i3 + "," + i2 + "," + n + " local and remote don't match original and differ"); - System.exit(1); - } - else { - localMap9.setAt(i3, i2, n, ((Map)localObject).contentAt(i3, i2, n)); - } - } else if (!bool1) - localMap9.setAt(i3, i2, n, ((Map)localObject).contentAt(i3, i2, n)); - else if (!bool2) - localMap9.setAt(i3, i2, n, localMap8.contentAt(i3, i2, n)); - else - localMap9.setAt(i3, i2, n, localMap1.contentAt(i3, i2, n)); - } - Systemoutprintln("Saving"); - localMap9.saveReferencing(new File(paramArrayOfString[4]), localMap1); - Systemoutprintln("Done"); - } - catch (Exception localException12) - { - localException12.printStackTrace(); - } - } - else - { - int m; - int i1; - if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-diff"))) - { - if (paramArrayOfString.length < 4) - { - System.out.println(str1); - try { System.in.read(); } catch (Exception localException2) { - }return; - } - - Map localMap2 = new Map(new File(paramArrayOfString[1])); - localObject = new Map(new File(paramArrayOfString[2])); - - int j = Math.max(localMap2.minx, ((Map)localObject).minx); - m = Math.min(localMap2.maxx, ((Map)localObject).maxx); - i1 = Math.max(localMap2.miny, ((Map)localObject).miny); - i2 = Math.min(localMap2.maxy, ((Map)localObject).maxy); - i3 = Math.max(localMap2.minz, ((Map)localObject).minz); - int i4 = Math.min(localMap2.maxz, ((Map)localObject).maxz); - Systemoutprintln("Comparing: x(" + j + "-" + m + ") y(" + i1 + "-" + i2 + ") z(" + i3 + "-" + i4 + ")"); - try - { - FileWriter localFileWriter2 = new FileWriter(paramArrayOfString[3]); - i5 = 0; - for (int i6 = i3; i6 <= i4; i6++) - { - Systemoutprintln("Z-level " + i6); - for (int i7 = i1; i7 <= i2; i7++) - for (int i8 = j; i8 <= m; i8++) - if (!localMap2.contentAt(i8, i7, i6).equals(((Map)localObject).contentAt(i8, i7, i6))) - { - localFileWriter2.write("(" + i8 + "," + (1 + ((Map)localObject).maxy - i7) + "," + i6 + ")=" + ((Map)localObject).contentAt(i8, i7, i6) + "\n"); - i5++; - } - } - localFileWriter2.flush(); - localFileWriter2.close(); - if (i5 == 0) - Systemoutprintln("Files do match"); - else - Systemoutprintln("Writed out " + i5 + " differences"); - } - catch (Exception localException13) - { - localException13.printStackTrace(); - } - - Systemoutprintln("Done"); - } - else - { - String str7; - String str8; - if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-patch"))) - { - if (paramArrayOfString.length < 4) - { - System.out.println(str2); - try { System.in.read(); } catch (Exception localException3) { - }return; - } - - Map localMap3 = new Map(new File(paramArrayOfString[1])); - try - { - localObject = new BufferedReader(new InputStreamReader(new FileInputStream(paramArrayOfString[2]))); - - while ((str7 = ((BufferedReader)localObject).readLine()) != null) - { - str7 = str7.trim(); - if (str7.length() != 0) - { - m = str7.indexOf(",", 1); - i1 = Integer.parseInt(str7.substring(1, m)); - str7 = str7.substring(m); - m = str7.indexOf(",", 1); - i2 = Integer.parseInt(str7.substring(1, m)); - str7 = str7.substring(m); - m = str7.indexOf(")", 1); - i3 = Integer.parseInt(str7.substring(1, m)); - str8 = str7.substring(str7.indexOf("=") + 1); - localMap3.setAt(i1, 1 + localMap3.maxy - i2, i3, str8); - } - } - localMap3.save(new File(paramArrayOfString[3])); - } - catch (Exception localException8) - { - localException8.printStackTrace(); - } - - Systemoutprintln("Done"); - } - else if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-pack"))) - { - if (paramArrayOfString.length < 3) - { - System.out.println(str3); - try { System.in.read(); } catch (Exception localException4) { - }return; - } - - Map localMap4 = new Map(); - try { - BufferedReader localBufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(paramArrayOfString[1]))); - Systemoutprintln("Loading"); - - while ((str7 = localBufferedReader.readLine()) != null) - { - str7 = str7.trim(); - if (str7.length() != 0) - { - m = str7.indexOf(",", 1); - i1 = Integer.parseInt(str7.substring(1, m)); - str7 = str7.substring(m); - m = str7.indexOf(",", 1); - i2 = Integer.parseInt(str7.substring(1, m)); - str7 = str7.substring(m); - m = str7.indexOf(")", 1); - i3 = Integer.parseInt(str7.substring(1, m)); - str8 = str7.substring(str7.indexOf("=") + 1); - localMap4.setAt(i1, i2, i3, str8); - } - } - Systemoutprintln("Flipping"); - localMap4.mirrorY(); - Systemoutprintln("Saving, bounds: x{" + localMap4.minx + " - " + localMap4.maxx + "}, y{" + localMap4.miny + " - " + localMap4.maxy + "}, z{" + localMap4.minz + " - " + localMap4.maxz + "}"); - localMap4.save(new File(paramArrayOfString[2])); - Systemoutprintln("Done"); - } - catch (Exception localException9) - { - localException9.printStackTrace(); - } - } - else if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-unpack"))) - { - if (paramArrayOfString.length < 3) - { - System.out.println(str4); - try { System.in.read(); } catch (Exception localException5) { - }return; - } - - Systemoutprintln("Loading"); - Map localMap5 = new Map(new File(paramArrayOfString[1])); - try { - FileWriter localFileWriter1 = new FileWriter(paramArrayOfString[2]); - Systemoutprintln("Saving"); - for (int k = localMap5.minz; k <= localMap5.maxz; k++) - { - Systemoutprintln("Z-level " + k); - for (m = localMap5.miny; m <= localMap5.maxy; m++) - for (i1 = localMap5.minx; i1 <= localMap5.maxx; i1++) - localFileWriter1.write("(" + i1 + "," + (1 + localMap5.maxy - m) + "," + k + ")=" + localMap5.contentAt(i1, m, k) + "\n"); - localFileWriter1.write("\n"); - } - localFileWriter1.flush(); - localFileWriter1.close(); - - Systemoutprintln("Done"); - } - catch (Exception localException10) - { - localException10.printStackTrace(); - } - } - else if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-clean"))) - { - if (paramArrayOfString.length < 4) - { - System.out.println(str5); - try { System.in.read(); } catch (Exception localException6) { - }return; - } - - Map localMap6 = new Map(new File(paramArrayOfString[1]), true); - Map localMap7 = new Map(new File(paramArrayOfString[2])); - try - { - localMap7.saveReferencing(new File(paramArrayOfString[3]), localMap6); - Systemoutprintln("Done"); - } - catch (Exception localException11) - { - localException11.printStackTrace(); - } - } - else - { - System.out.println(str1); - System.out.println(str2); - System.out.println(str3); - System.out.println(str4); - System.out.println(str5); - System.out.println(str6); - try { - System.in.read(); } catch (Exception localException7) { } - } - } - } - } - - public static void Systemoutprintln(String paramString) { if (!silent) - System.out.println(paramString); } - - public static void Systemoutprint(String paramString) - { - if (!silent) - System.out.print(paramString); - } -} diff --git a/tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/SavingThread.java b/tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/SavingThread.java deleted file mode 100644 index 24a3d7b04d..0000000000 --- a/tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher Source/SavingThread.java +++ /dev/null @@ -1,37 +0,0 @@ -class SavingThread extends Thread -{ - int z; - Map mymap; - boolean done; - int progress; - StringBuilder result; - - public SavingThread(int paramInt1, Map paramMap, int paramInt2) - { - this.z = paramInt1; - this.mymap = paramMap; - this.progress = 0; - this.done = false; - this.result = new StringBuilder(paramInt2); - } - - public void run() - { - this.result.append("(" + this.mymap.minx + "," + this.mymap.miny + "," + this.z + ") = {\"\r\n"); - - int i = (this.mymap.maxx - this.mymap.minx) * (this.mymap.maxy - this.mymap.miny) / 100; - int j = 0; - for (int k = this.mymap.miny; k <= this.mymap.maxy; k++) - { - for (int m = this.mymap.minx; m <= this.mymap.maxx; m++) - { - this.result.append(this.mymap.getIdFor(this.mymap.contentAt(m, k, this.z))); - j++; if (j >= i) { j = 0; this.progress += 1; } - } - this.result.append("\r\n"); - } - this.result.append("\"}\r\n"); - this.result.append("\r\n"); - this.done = true; - } -} diff --git a/tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher.jar b/tools/mapmerge/old_java_mapmerge/Source/src/MapPatcher.jar deleted file mode 100644 index 5cbaad488c146d8a7453f114260dbccfe61e7861..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10136 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 I_ Date: Fri, 26 May 2017 14:36:26 -0500 Subject: [PATCH 12/50] Removes Fastload.dmm --- _maps/map_files/generic/Fastload.dmm | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 _maps/map_files/generic/Fastload.dmm diff --git a/_maps/map_files/generic/Fastload.dmm b/_maps/map_files/generic/Fastload.dmm deleted file mode 100644 index 96b4a26934..0000000000 --- a/_maps/map_files/generic/Fastload.dmm +++ /dev/null @@ -1,3 +0,0 @@ -"a" = () - -(1,1,1, 1,1,1) = {""} From 93c19d0e4b05acb7094fcc66dd206e6af9aec934 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 14:41:35 -0500 Subject: [PATCH 13/50] Replaces parentcommit with originmastercommit --- code/datums/helper_datums/getrev.dm | 31 ++++++++++++++++------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index b90e2ec652..2e95629d30 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -1,34 +1,37 @@ /datum/getrev - var/parentcommit + var/originmastercommit var/commit var/list/testmerge = list() var/has_pr_details = FALSE //example data in a testmerge entry when this is true: https://api.github.com/repositories/3234987/pulls/22586 var/date /datum/getrev/New() - var/head_file = file2text(".git/logs/HEAD") if(SERVERTOOLS && fexists("..\\prtestjob.lk")) var/list/tmp = world.file2list("..\\prtestjob.lk") for(var/I in tmp) if(I) testmerge |= I - var/testlen = max(testmerge.len - 1, 0) - var/regex/head_log = new("(\\w{40}) .+> (\\d{10}).+(?=(\n.*(\\w{40}).*){[testlen]}\n*\\Z)") - head_log.Find(head_file) - parentcommit = head_log.group[1] - date = unix2date(text2num(head_log.group[2])) - commit = head_log.group[4] + log_world("Running /tg/ revision:") - log_world("[date]") + var/list/logs = world.file2list(".git/logs/HEAD") + if(logs) + logs = splittext(logs[logs.len - 1], " ") + date = unix2date(text2num(logs[5])) + commit = logs[2] + log_world("[date]") + logs = world.file2list(".git/logs/refs/remotes/origin/master") + if(logs) + originmastercommit = splittext(logs[logs.len - 1], " ")[2] + if(testmerge.len) log_world(commit) for(var/line in testmerge) if(line) log_world("Test merge active of PR #[line]") SSblackbox.add_details("testmerged_prs","[line]") - log_world("Based off master commit [parentcommit]") + log_world("Based off origin/master commit [originmastercommit]") else - log_world(parentcommit) + log_world(originmastercommit) /datum/getrev/proc/DownloadPRDetails() if(!config.githubrepoid) @@ -73,13 +76,13 @@ set name = "Show Server Revision" set desc = "Check the current server code revision" - if(GLOB.revdata.parentcommit) + if(GLOB.revdata.originmastercommit) to_chat(src, "Server revision compiled on: [GLOB.revdata.date]") var/prefix = "" if(GLOB.revdata.testmerge.len) to_chat(src, GLOB.revdata.GetTestMergeInfo()) - prefix = "Based off master commit: " - var/pc = GLOB.revdata.parentcommit + prefix = "Based off origin/master commit: " + var/pc = GLOB.revdata.originmastercommit to_chat(src, "[prefix][copytext(pc, 1, min(length(pc), 7))]") else to_chat(src, "Revision unknown") From 04df45c9075f56bde888f29c600052a956102b75 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 18:02:13 -0500 Subject: [PATCH 14/50] Ports defibs to Initialize --- code/game/objects/items/weapons/defib.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index f251cbabab..4bdf6ddf3c 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -23,14 +23,14 @@ var/combat = 0 //can we revive through space suits? var/grab_ghost = FALSE // Do we pull the ghost back into their body? -/obj/item/weapon/defibrillator/New() //starts without a cell for rnd - ..() +/obj/item/weapon/defibrillator/Initialize() //starts without a cell for rnd + . = ..() paddles = make_paddles() update_icon() return -/obj/item/weapon/defibrillator/loaded/New() //starts with hicap - ..() +/obj/item/weapon/defibrillator/loaded/Initialize() //starts with hicap + . = ..() paddles = make_paddles() bcell = new(src) update_icon() @@ -237,8 +237,8 @@ if(slot == user.getBeltSlot()) return 1 -/obj/item/weapon/defibrillator/compact/loaded/New() - ..() +/obj/item/weapon/defibrillator/compact/loaded/Initialize() + . = ..() paddles = make_paddles() bcell = new(src) update_icon() @@ -249,8 +249,8 @@ combat = 1 safety = 0 -/obj/item/weapon/defibrillator/compact/combat/loaded/New() - ..() +/obj/item/weapon/defibrillator/compact/combat/loaded/Initialize() + . = ..() paddles = make_paddles() bcell = new /obj/item/weapon/stock_parts/cell/infinite(src) update_icon() From 0e40cd7f6d28d68d97bea997d775d2a8e4b92cf1 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 18:03:17 -0500 Subject: [PATCH 15/50] Ports stunbatons to Initialize --- code/game/objects/items/weapons/stunbaton.dm | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 5393f40ec6..c1b932d1bc 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -21,10 +21,9 @@ user.visible_message("[user] is putting the live [name] in [user.p_their()] mouth! It looks like [user.p_theyre()] trying to commit suicide!") return (FIRELOSS) -/obj/item/weapon/melee/baton/New() - ..() +/obj/item/weapon/melee/baton/Initialize() + . = ..() update_icon() - return /obj/item/weapon/melee/baton/throw_impact(atom/hit_atom) ..() @@ -32,10 +31,9 @@ if(status && prob(throw_hit_chance) && iscarbon(hit_atom)) baton_stun(hit_atom) -/obj/item/weapon/melee/baton/loaded/New() //this one starts with a cell pre-installed. - ..() +/obj/item/weapon/melee/baton/loaded/Initialize() //this one starts with a cell pre-installed. bcell = new(src) - update_icon() + . = ..() /obj/item/weapon/melee/baton/proc/deductcharge(chrgdeductamt) if(bcell) @@ -188,8 +186,8 @@ slot_flags = SLOT_BACK var/obj/item/device/assembly/igniter/sparkler = 0 -/obj/item/weapon/melee/baton/cattleprod/New() - ..() +/obj/item/weapon/melee/baton/cattleprod/Initialize() + . = ..() sparkler = new (src) /obj/item/weapon/melee/baton/cattleprod/baton_stun() From 15482314d43044a8aa591236318757f1932bd716 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 18:03:21 -0500 Subject: [PATCH 16/50] Makes a thing use QDEL_NULL --- code/game/machinery/doors/airlock.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 1750aa7aa8..020f7aa309 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -204,9 +204,7 @@ if(charge) qdel(charge) charge = null - if(electronics) - qdel(electronics) - electronics = null + QDEL_NULL(electronics) if (cyclelinkedairlock) if (cyclelinkedairlock.cyclelinkedairlock == src) cyclelinkedairlock.cyclelinkedairlock = null From b977d6989de28600cf31c6af46039458eb3ed73d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 18:04:26 -0500 Subject: [PATCH 17/50] Makes shades/constructs able to speak galcommon again --- code/modules/language/language_holder.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/language/language_holder.dm b/code/modules/language/language_holder.dm index 918f179591..a649041e01 100644 --- a/code/modules/language/language_holder.dm +++ b/code/modules/language/language_holder.dm @@ -107,7 +107,6 @@ /datum/language_holder/construct languages = list(/datum/language/common, /datum/language/narsie) - only_speaks_language = /datum/language/narsie /datum/language_holder/drone languages = list(/datum/language/common, /datum/language/drone, /datum/language/machine) From b089a14c536e35b1b1343128e42d551d3dd6b450 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 19:06:39 -0500 Subject: [PATCH 18/50] Ports guns to Initialize --- .../objects/items/weapons/chrono_eraser.dm | 6 +++--- .../mission_code/stationCollision.dm | 8 ++++---- code/modules/clothing/chameleon.dm | 4 ++-- code/modules/projectiles/gun.dm | 4 ++-- code/modules/projectiles/guns/ballistic.dm | 4 ++-- .../projectiles/guns/ballistic/automatic.dm | 19 ++++++++---------- .../guns/ballistic/laser_gatling.dm | 20 +++++++++---------- .../projectiles/guns/ballistic/revolver.dm | 16 +++++++-------- .../projectiles/guns/ballistic/shotgun.dm | 8 ++++---- .../modules/projectiles/guns/ballistic/toy.dm | 4 ++-- code/modules/projectiles/guns/energy.dm | 4 ++-- .../projectiles/guns/energy/energy_gun.dm | 4 ++-- .../guns/energy/kinetic_accelerator.dm | 2 +- code/modules/projectiles/guns/energy/pulse.dm | 4 ++-- code/modules/projectiles/guns/magic.dm | 4 ++-- code/modules/projectiles/guns/magic/wand.dm | 4 ++-- code/modules/projectiles/guns/medbeam.dm | 8 ++++---- code/modules/projectiles/guns/syringe_gun.dm | 4 ++-- 18 files changed, 62 insertions(+), 65 deletions(-) diff --git a/code/game/objects/items/weapons/chrono_eraser.dm b/code/game/objects/items/weapons/chrono_eraser.dm index e32d365298..86664404d1 100644 --- a/code/game/objects/items/weapons/chrono_eraser.dm +++ b/code/game/objects/items/weapons/chrono_eraser.dm @@ -54,10 +54,10 @@ var/obj/effect/chrono_field/field = null var/turf/startpos = null -/obj/item/weapon/gun/energy/chrono_gun/New(var/obj/item/weapon/chrono_eraser/T) +/obj/item/weapon/gun/energy/chrono_gun/Initialize() . = ..() - if(istype(T)) - TED = T + if(istype(loc, /obj/item/weapon/chrono_eraser)) + TED = loc else //admin must have spawned it TED = new(src.loc) qdel(src) diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index fb1d375854..441d40db8f 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -46,8 +46,8 @@ //Syndicate sub-machine guns. /obj/item/weapon/gun/ballistic/automatic/c20r/sc_c20r -/obj/item/weapon/gun/ballistic/automatic/c20r/sc_c20r/New() - ..() +/obj/item/weapon/gun/ballistic/automatic/c20r/sc_c20r/Initialize() + . = ..() for(var/ammo in magazine.stored_ammo) if(prob(95)) //95% chance magazine.stored_ammo -= ammo @@ -55,8 +55,8 @@ //Barman's shotgun /obj/item/weapon/gun/ballistic/shotgun/sc_pump -/obj/item/weapon/gun/ballistic/shotgun/sc_pump/New() - ..() +/obj/item/weapon/gun/ballistic/shotgun/sc_pump/Initialize() + . = ..() for(var/ammo in magazine.stored_ammo) if(prob(95)) //95% chance magazine.stored_ammo -= ammo diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 0de56aa86a..3a91c3207e 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -420,8 +420,8 @@ var/badmin_mode = FALSE var/static/list/blacklisted_vars = list("locs", "loc", "contents", "x", "y", "z") -/obj/item/weapon/gun/energy/laser/chameleon/New() - ..() +/obj/item/weapon/gun/energy/laser/chameleon/Initialize() + . = ..() chameleon_action = new(src) chameleon_action.chameleon_type = /obj/item/weapon/gun chameleon_action.chameleon_name = "Gun" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 2dffe0a567..6fb4e6276f 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -60,8 +60,8 @@ var/datum/action/toggle_scope_zoom/azoom -/obj/item/weapon/gun/New() - ..() +/obj/item/weapon/gun/Initialize() + . = ..() if(pin) pin = new pin(src) if(gun_light) diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index a7a8b75da2..80be30a06a 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -9,8 +9,8 @@ var/obj/item/ammo_box/magazine/magazine var/casing_ejector = 1 //whether the gun ejects the chambered casing -/obj/item/weapon/gun/ballistic/New() - ..() +/obj/item/weapon/gun/ballistic/Initialize() + . = ..() if(!spawnwithmagazine) update_icon() return diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 2f7036cab8..70d399b107 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -99,10 +99,9 @@ /obj/item/weapon/gun/ballistic/automatic/c20r/unrestricted pin = /obj/item/device/firing_pin -/obj/item/weapon/gun/ballistic/automatic/c20r/New() - ..() +/obj/item/weapon/gun/ballistic/automatic/c20r/Initialize() + . = ..() update_icon() - return /obj/item/weapon/gun/ballistic/automatic/c20r/afterattack() ..() @@ -150,20 +149,18 @@ fire_delay = 2 pin = /obj/item/device/firing_pin/implant/pindicate -/obj/item/weapon/gun/ballistic/automatic/m90/New() - ..() +/obj/item/weapon/gun/ballistic/automatic/m90/Initialize() + . = ..() underbarrel = new /obj/item/weapon/gun/ballistic/revolver/grenadelauncher(src) update_icon() - return /obj/item/weapon/gun/ballistic/automatic/m90/unrestricted pin = /obj/item/device/firing_pin -/obj/item/weapon/gun/ballistic/automatic/m90/unrestricted/New() - ..() +/obj/item/weapon/gun/ballistic/automatic/m90/unrestricted/Initialize() + . = ..() underbarrel = new /obj/item/weapon/gun/ballistic/revolver/grenadelauncher/unrestricted(src) update_icon() - return /obj/item/weapon/gun/ballistic/automatic/m90/afterattack(atom/target, mob/living/user, flag, params) if(select == 2) @@ -259,8 +256,8 @@ /obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog/unrestricted pin = /obj/item/device/firing_pin -/obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog/New() - ..() +/obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog/Initialize() + . = ..() update_icon() /obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog/update_icon() diff --git a/code/modules/projectiles/guns/ballistic/laser_gatling.dm b/code/modules/projectiles/guns/ballistic/laser_gatling.dm index bc0668cd66..a246871e61 100644 --- a/code/modules/projectiles/guns/ballistic/laser_gatling.dm +++ b/code/modules/projectiles/guns/ballistic/laser_gatling.dm @@ -9,16 +9,16 @@ item_state = "backpack" slot_flags = SLOT_BACK w_class = WEIGHT_CLASS_HUGE - var/obj/item/weapon/gun/ballistic/minigun/gun = null + var/obj/item/weapon/gun/ballistic/minigun/gun var/armed = 0 //whether the gun is attached, 0 is attached, 1 is the gun is wielded. var/overheat = 0 var/overheat_max = 40 var/heat_diffusion = 1 -/obj/item/weapon/minigunpack/New() +/obj/item/weapon/minigunpack/Initialize() + . = ..() gun = new(src) START_PROCESSING(SSobj, src) - ..() /obj/item/weapon/minigunpack/Destroy() STOP_PROCESSING(SSobj, src) @@ -110,15 +110,15 @@ casing_ejector = 0 var/obj/item/weapon/minigunpack/ammo_pack -/obj/item/weapon/gun/ballistic/minigun/New() +/obj/item/weapon/gun/ballistic/minigun/Initialize() SET_SECONDARY_FLAG(src, SLOWS_WHILE_IN_HAND) - if(!ammo_pack) - if(istype(loc,/obj/item/weapon/minigunpack)) //We should spawn inside a ammo pack so let's use that one. - ammo_pack = loc - ..() - else - qdel(src)//No pack, no gun + if(istype(loc, /obj/item/weapon/minigunpack)) //We should spawn inside a ammo pack so let's use that one. + ammo_pack = loc + else + return INITIALIZE_HINT_QDEL //No pack, no gun + + return ..() /obj/item/weapon/gun/ballistic/minigun/attack_self(mob/living/user) return diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 892defa9f4..2ce432bf31 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -6,8 +6,8 @@ origin_tech = "combat=3;materials=2" casing_ejector = 0 -/obj/item/weapon/gun/ballistic/revolver/New() - ..() +/obj/item/weapon/gun/ballistic/revolver/Initialize() + . = ..() if(!istype(magazine, /obj/item/ammo_box/magazine/internal/cylinder)) verbs -= /obj/item/weapon/gun/ballistic/revolver/verb/spin @@ -95,8 +95,8 @@ unique_rename = 1 unique_reskin = 1 -/obj/item/weapon/gun/ballistic/revolver/detective/New() - ..() +/obj/item/weapon/gun/ballistic/revolver/detective/Initialize() + . = ..() options["Default"] = "detective" options["Leopard Spots"] = "detective_leopard" options["Black Panther"] = "detective_panther" @@ -177,8 +177,8 @@ mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rus357 var/spun = FALSE -/obj/item/weapon/gun/ballistic/revolver/russian/New() - ..() +/obj/item/weapon/gun/ballistic/revolver/russian/Initialize() + . = ..() do_spin() spun = TRUE update_icon() @@ -271,8 +271,8 @@ unique_rename = 1 unique_reskin = 1 -/obj/item/weapon/gun/ballistic/revolver/doublebarrel/New() - ..() +/obj/item/weapon/gun/ballistic/revolver/doublebarrel/Initialize() + . = ..() options["Default"] = "dshotgun" options["Dark Red Finish"] = "dshotgun-d" options["Ash"] = "dshotgun-f" diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 918acd27a1..6fc3fd3687 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -147,8 +147,8 @@ mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage -/obj/item/weapon/gun/ballistic/shotgun/boltaction/enchanted/New() - ..() +/obj/item/weapon/gun/ballistic/shotgun/boltaction/enchanted/Initialize() + . = ..() bolt_open = 1 pump() gun_type = type @@ -213,8 +213,8 @@ var/toggled = 0 var/obj/item/ammo_box/magazine/internal/shot/alternate_magazine -/obj/item/weapon/gun/ballistic/shotgun/automatic/dual_tube/New() - ..() +/obj/item/weapon/gun/ballistic/shotgun/automatic/dual_tube/Initialize() + . = ..() if (!alternate_magazine) alternate_magazine = new mag_type(src) diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index 89f6655d8e..9b8044dac8 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -35,9 +35,9 @@ /obj/item/weapon/gun/ballistic/automatic/toy/pistol/riot mag_type = /obj/item/ammo_box/magazine/toy/pistol/riot -/obj/item/weapon/gun/ballistic/automatic/toy/pistol/riot/New() +/obj/item/weapon/gun/ballistic/automatic/toy/pistol/riot/Initialize() magazine = new /obj/item/ammo_box/magazine/toy/pistol/riot(src) - ..() + return ..() /obj/item/weapon/gun/ballistic/automatic/toy/pistol/unrestricted pin = /obj/item/device/firing_pin diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 9e642b0cef..b022941f78 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -25,8 +25,8 @@ update_icon() -/obj/item/weapon/gun/energy/New() - ..() +/obj/item/weapon/gun/energy/Initialize() + . = ..() if(cell_type) power_supply = new cell_type(src) else diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index 52f9852344..a8edc727b3 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -22,9 +22,9 @@ charge_sections = 3 can_flashlight = 0 // Can't attach or detach the flashlight, and override it's icon update -/obj/item/weapon/gun/energy/e_gun/mini/New() +/obj/item/weapon/gun/energy/e_gun/mini/Initialize() gun_light = new /obj/item/device/flashlight/seclite(src) - ..() + return ..() /obj/item/weapon/gun/energy/e_gun/mini/update_icon() ..() diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 0f108fcc76..e8d48373da 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -68,7 +68,7 @@ unique_frequency = TRUE max_mod_capacity = 80 -/obj/item/weapon/gun/energy/kinetic_accelerator/New() +/obj/item/weapon/gun/energy/kinetic_accelerator/Initialize() . = ..() if(!holds_charge) empty() diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index b3e55f2423..43431a65c3 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -17,9 +17,9 @@ /obj/item/weapon/gun/energy/pulse/prize pin = /obj/item/device/firing_pin -/obj/item/weapon/gun/energy/pulse/prize/New() +/obj/item/weapon/gun/energy/pulse/prize/Initialize() . = ..() - GLOB.poi_list |= src + GLOB.poi_list += src var/msg = "A pulse rifle prize has been created at [ADMIN_COORDJMP(src)]" message_admins(msg) diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm index 58a756a28d..9c30eefd2f 100644 --- a/code/modules/projectiles/guns/magic.dm +++ b/code/modules/projectiles/guns/magic.dm @@ -44,8 +44,8 @@ charges--//... drain a charge recharge_newshot() -/obj/item/weapon/gun/magic/New() - ..() +/obj/item/weapon/gun/magic/Initialize() + . = ..() charges = max_charges chambered = new ammo_type(src) if(can_charge) diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index fe93a58838..247273e3f4 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -9,13 +9,13 @@ max_charges = 100 //100, 50, 50, 34 (max charge distribution by 25%ths) var/variable_charges = 1 -/obj/item/weapon/gun/magic/wand/New() +/obj/item/weapon/gun/magic/wand/Initialize() if(prob(75) && variable_charges) //25% chance of listed max charges, 50% chance of 1/2 max charges, 25% chance of 1/3 max charges if(prob(33)) max_charges = Ceiling(max_charges / 3) else max_charges = Ceiling(max_charges / 2) - ..() + return ..() /obj/item/weapon/gun/magic/wand/examine(mob/user) ..() diff --git a/code/modules/projectiles/guns/medbeam.dm b/code/modules/projectiles/guns/medbeam.dm index 37d576a8ff..46758f8889 100644 --- a/code/modules/projectiles/guns/medbeam.dm +++ b/code/modules/projectiles/guns/medbeam.dm @@ -16,8 +16,8 @@ weapon_weight = WEAPON_MEDIUM -/obj/item/weapon/gun/medbeam/New() - ..() +/obj/item/weapon/gun/medbeam/Initialize() + . = ..() START_PROCESSING(SSobj, src) /obj/item/weapon/gun/medbeam/Destroy(mob/user) @@ -128,6 +128,6 @@ /obj/item/weapon/gun/medbeam/mech mounted = 1 -/obj/item/weapon/gun/medbeam/mech/New() - ..() +/obj/item/weapon/gun/medbeam/mech/Initialize() + . = ..() STOP_PROCESSING(SSobj, src) //Mech mediguns do not process until installed, and are controlled by the holder obj diff --git a/code/modules/projectiles/guns/syringe_gun.dm b/code/modules/projectiles/guns/syringe_gun.dm index 09547b0d98..2e8a29cded 100644 --- a/code/modules/projectiles/guns/syringe_gun.dm +++ b/code/modules/projectiles/guns/syringe_gun.dm @@ -14,8 +14,8 @@ var/list/syringes = list() var/max_syringes = 1 -/obj/item/weapon/gun/syringe/New() - ..() +/obj/item/weapon/gun/syringe/Initialize() + . = ..() chambered = new /obj/item/ammo_casing/syringegun(src) /obj/item/weapon/gun/syringe/recharge_newshot() From e3e040fee0646b14f7f417e5c0a46f261045bf65 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 19:41:20 -0500 Subject: [PATCH 19/50] Fixes pre-round-start logs --- code/world.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/world.dm b/code/world.dm index 566c9e213c..df083571c4 100644 --- a/code/world.dm +++ b/code/world.dm @@ -18,7 +18,7 @@ SetupExternalRSC() - GLOB.config_error_log = file("data/logs/config_error.log") //temporary file used to record errors with loading config, moved to log directory once logging is set bl + GLOB.config_error_log = GLOB.world_href_log = GLOB.world_runtime_log = GLOB.world_attack_log = GLOB.world_game_log = file("data/logs/config_error.log") //temporary file used to record errors with loading config, moved to log directory once logging is set bl make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once) From 4ffca03a530fb9c9a8909efb2af7faa2c1121f03 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 23:04:25 -0500 Subject: [PATCH 20/50] Automatic changelog generation for PR #1210 [ci skip] --- html/changelogs/AutoChangeLog-pr-1210.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1210.yml diff --git a/html/changelogs/AutoChangeLog-pr-1210.yml b/html/changelogs/AutoChangeLog-pr-1210.yml new file mode 100644 index 0000000000..4dd2b1de7d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1210.yml @@ -0,0 +1,4 @@ +author: "Kor" +delete-after: True +changes: + - bugfix: "The chaplains possessed blade, shades, and constructs, can once again speak galactic common." From 4680f045ffa61ba648e055457e93d0c1e28fb81c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 23:22:32 -0500 Subject: [PATCH 21/50] Automatic changelog generation for PR #1195 [ci skip] --- html/changelogs/AutoChangeLog-pr-1195.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1195.yml diff --git a/html/changelogs/AutoChangeLog-pr-1195.yml b/html/changelogs/AutoChangeLog-pr-1195.yml new file mode 100644 index 0000000000..0a5716bcb7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1195.yml @@ -0,0 +1,6 @@ +author: "Moonlighting Mac says" +delete-after: True +changes: + - rscadd: "You can now craft a strong cloak with a hood made out of goliath and monster materials from within the primitive crafting screen." + - rscadd: "The cloak has a suit slot for all kind of primitive supplies, however it cannot carry most electronic miner equipment. +balance: Due to the recipe requiring leather, it is not normally accessible to all ghost roles without a source of water & electricity." From 2fbcba23557ef6159ec4a33187c936d623b28856 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 23:23:48 -0500 Subject: [PATCH 22/50] Automatic changelog generation for PR #1183 [ci skip] --- html/changelogs/AutoChangeLog-pr-1183.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1183.yml diff --git a/html/changelogs/AutoChangeLog-pr-1183.yml b/html/changelogs/AutoChangeLog-pr-1183.yml new file mode 100644 index 0000000000..4a627f949b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1183.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "20% of internal affairs agents are actually traitors" From 83971cf8fb06f4b19e78511ffee766987ae98ef9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 26 May 2017 23:24:09 -0500 Subject: [PATCH 23/50] Automatic changelog generation for PR #1182 [ci skip] --- html/changelogs/AutoChangeLog-pr-1182.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1182.yml diff --git a/html/changelogs/AutoChangeLog-pr-1182.yml b/html/changelogs/AutoChangeLog-pr-1182.yml new file mode 100644 index 0000000000..a2c7d10876 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1182.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - spellcheck: "typo fix for origin tech" From 127a9ff6d41d66c56d06cec7d4394db89e29195c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:26:50 -0500 Subject: [PATCH 24/50] Vapes are tiny (#1231) --- code/game/objects/items/weapons/cigs_lighters.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 82229bb7cf..86bbb340b1 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -622,6 +622,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon = 'icons/obj/clothing/masks.dmi' icon_state = null item_state = null + w_class = WEIGHT_CLASS_TINY var/chem_volume = 100 var/vapetime = 0 //this so it won't puff out clouds every tick var/screw = 0 // kinky From 63ac84ab6d9be6d2bfc40c12baea238d9814cae6 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:26:51 -0500 Subject: [PATCH 25/50] Automatic changelog generation for PR #1231 [ci skip] --- html/changelogs/AutoChangeLog-pr-1231.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1231.yml diff --git a/html/changelogs/AutoChangeLog-pr-1231.yml b/html/changelogs/AutoChangeLog-pr-1231.yml new file mode 100644 index 0000000000..7fad1ab274 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1231.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - tweak: "E-Cigarettes can now fit in your pocket." From c9ab875da92896f4162f878341b57e24a512da0a Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:26:59 -0500 Subject: [PATCH 26/50] Ports clonepods to Initialize (#1230) --- code/game/machinery/cloning.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index ec87cf6ba9..6df194cf25 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -44,8 +44,8 @@ "corazone", // prevents cardiac arrest damage "mimesbane") // stops them gasping from lack of air. -/obj/machinery/clonepod/New() - ..() +/obj/machinery/clonepod/Initialize() + . = ..() var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/clonepod(null) B.apply_default_parts(src) From 6c1159bf856ac7c470002fb96c439ed0312a55cb Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:27:33 -0500 Subject: [PATCH 27/50] Puts the Viruses back in the viro fridge at the syndicate base. (#1229) --- .../RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index 4b50904ea2..0bc99060de 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -726,7 +726,7 @@ }, /area/ruin/powered/syndicate_lava_base) "bM" = ( -/obj/machinery/smartfridge/chemistry/virology, +/obj/machinery/smartfridge/chemistry/virology/preloaded, /turf/open/floor/plasteel/podhatch{ tag = "icon-podhatch (EAST)"; icon_state = "podhatch"; From e5f2a0962298ebb07fc371d9c098c8d1faa82334 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:27:52 -0500 Subject: [PATCH 28/50] Pixel projectile ricochets and reflections! (#1220) --- code/__DEFINES/flags.dm | 2 ++ code/__HELPERS/maths.dm | 18 ++++++++++++++++-- code/game/atoms.dm | 3 +++ code/game/turfs/closed.dm | 3 --- .../turfs/simulated/wall/mineral_walls.dm | 1 + code/game/turfs/simulated/walls.dm | 14 ++++++++++++++ code/modules/projectiles/projectile.dm | 19 ++++++++++++++++++- code/modules/projectiles/projectile/beams.dm | 4 +++- 8 files changed, 57 insertions(+), 7 deletions(-) diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index a5e69bdc7b..e443e57b14 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -14,6 +14,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define NOBLUDGEON 4 // when an item has this it produces no "X has been hit by Y with Z" message in the default attackby() #define MASKINTERNALS 8 // mask allows internals #define HEAR 16 // This flag is what recursive_hear_check() uses to determine wether to add an item to the hearer list or not. +#define CHECK_RICOCHET 32 // Projectiels will check ricochet on things impacted that have this. #define CONDUCT 64 // conducts electricity (metal etc.) #define ABSTRACT 128 // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way #define NODECONSTRUCT 128 // For machines and structures that should not break into parts, eg, holodeck stuff @@ -57,6 +58,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define UNUSED_TRANSIT_TURF 2 #define CAN_BE_DIRTY 4 //If a turf can be made dirty at roundstart. This is also used in areas. #define NO_DEATHRATTLE 16 // Do not notify deadchat about any deaths that occur on this turf. +//#define CHECK_RICOCHET 32 //Same thing as atom flag. /* These defines are used specifically with the atom/pass_flags bitmask diff --git a/code/__HELPERS/maths.dm b/code/__HELPERS/maths.dm index 7e892e8dd4..7e0fd531eb 100644 --- a/code/__HELPERS/maths.dm +++ b/code/__HELPERS/maths.dm @@ -130,6 +130,22 @@ GLOBAL_LIST_INIT(sqrtTable, list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, var/t = round((val - min) / d) return val - (t * d) +#define NORM_ROT(rot) ((((rot % 360) + (rot - round(rot, 1))) > 0) ? ((rot % 360) + (rot - round(rot, 1))) : (((rot % 360) + (rot - round(rot, 1))) + 360)) + +/proc/get_angle_of_incidence(face_angle, angle_in, auto_normalize = TRUE) + + var/angle_in_s = NORM_ROT(angle_in) + var/face_angle_s = NORM_ROT(face_angle) + var/incidence = face_angle_s - angle_in_s + var/incidence_s = incidence + while(incidence_s < -90) + incidence_s += 180 + while(incidence_s > 90) + incidence_s -= 180 + if(auto_normalize) + return incidence_s + else + return incidence //A logarithm that converts an integer to a number scaled between 0 and 1 (can be tweaked to be higher). //Currently, this is used for hydroponics-produce sprite transforming, but could be useful for other transform functions. @@ -141,8 +157,6 @@ GLOBAL_LIST_INIT(sqrtTable, list(1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, return size_factor + scaling_modifier //scale mod of 0 results in a number from 0 to 1. A scale modifier of +0.5 returns 0.5 to 1.5 //to_chat(world, "Transform multiplier of [src] is [size_factor + scaling_modifer]") - - //converts a uniform distributed random number into a normal distributed one //since this method produces two random numbers, one is saved for subsequent calls //(making the cost negligble for every second call) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 4a0f05602b..65d4cf1449 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -104,6 +104,9 @@ return ..() +/atom/proc/handle_ricochet(obj/item/projectile/P) + return + /atom/proc/CanPass(atom/movable/mover, turf/target, height=1.5) return (!density || !height) diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index 741d4f2958..2c3e60694d 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -24,9 +24,6 @@ /turf/closed/indestructible/oldshuttle/corner icon_state = "corner" - - - /turf/closed/indestructible/splashscreen name = "Space Station 13" icon = 'config/title_screens/images/blank.png' diff --git a/code/game/turfs/simulated/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm index b78099c6bb..2cfb32f6dc 100644 --- a/code/game/turfs/simulated/wall/mineral_walls.dm +++ b/code/game/turfs/simulated/wall/mineral_walls.dm @@ -175,6 +175,7 @@ desc = "A light-weight titanium wall used in shuttles." icon = 'icons/turf/walls/shuttle_wall.dmi' icon_state = "map-shuttle" + flags = CAN_BE_DIRTY | CHECK_RICOCHET sheet_type = /obj/item/stack/sheet/mineral/titanium smooth = SMOOTH_MORE|SMOOTH_DIAGONAL canSmoothWith = list(/turf/closed/wall/mineral/titanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock/, /turf/closed/wall/shuttle, /obj/structure/window/shuttle, /obj/structure/shuttle/engine/heater, /obj/structure/falsewall/titanium) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 068dd0f218..44dc1afee7 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -28,6 +28,20 @@ /turf/closed/wall/attack_tk() return +/turf/closed/wall/handle_ricochet(obj/item/projectile/P) //A huge pile of shitcode! + var/turf/p_turf = get_turf(P) + var/face_direction = get_dir(src, p_turf) + var/face_angle = dir2angle(face_direction) + var/incidence_s = get_angle_of_incidence(face_angle, P.Angle) + var/new_angle = face_angle + incidence_s + var/new_angle_s = new_angle + while(new_angle_s > 180) // Translate to regular projectile degrees + new_angle_s -= 360 + while(new_angle_s < -180) + new_angle_s += 360 + P.Angle = new_angle_s + return TRUE + /turf/closed/wall/proc/dismantle_wall(devastated=0, explode=0) if(devastated) devastate_wall() diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 3dbadc85c5..8c810155db 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -28,6 +28,9 @@ var/spread = 0 //amount (in degrees) of projectile spread var/legacy = 0 //legacy projectile system animate_movement = 0 //Use SLIDE_STEPS in conjunction with legacy + var/ricochets = 0 + var/ricochets_max = 2 + var/ricochet_chance = 30 var/damage = 10 var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE are the only things that should be in here @@ -132,7 +135,11 @@ /obj/item/projectile/Bump(atom/A, yes) if(!yes) //prevents double bumps. return - if(firer) + if(check_ricochet() && check_ricochet_flag(A) && ricochets < ricochets_max) + ricochets++ + if(A.handle_ricochet(src)) + return FALSE + if(firer && !ricochets) if(A == firer || (A == firer.loc && istype(A, /obj/mecha))) //cannot shoot yourself or your mech loc = A.loc return 0 @@ -166,6 +173,16 @@ picked_mob.bullet_act(src, def_zone) qdel(src) +/obj/item/projectile/proc/check_ricochet() + if(prob(ricochet_chance)) + return TRUE + return FALSE + +/obj/item/projectile/proc/check_ricochet_flag(atom/A) + if(A.flags & CHECK_RICOCHET) + return TRUE + return FALSE + /obj/item/projectile/Process_Spacemove(var/movement_dir = 0) return 1 //Bullets don't drift in space diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 766d8b5e39..427f590ba5 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -11,7 +11,9 @@ eyeblur = 2 impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser light_color = LIGHT_COLOR_RED - + ricochets_max = 50 //Honk! + ricochet_chance = 80 + /obj/item/projectile/beam/laser /obj/item/projectile/beam/laser/heavylaser From 06234fa915aa5f4a71a1dfd4fc168c3d07ff867c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:27:53 -0500 Subject: [PATCH 29/50] Automatic changelog generation for PR #1220 [ci skip] --- html/changelogs/AutoChangeLog-pr-1220.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1220.yml diff --git a/html/changelogs/AutoChangeLog-pr-1220.yml b/html/changelogs/AutoChangeLog-pr-1220.yml new file mode 100644 index 0000000000..a9590654e2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1220.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Nanotrasen's new titanium wall blueprints are smooth enough that it can reflect projectiles!" From 9288106128a3dea2b1dd2877f15869a43af67e1c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:29:32 -0500 Subject: [PATCH 30/50] Fixes monkeys having two Initializes and not returning a hint (#1188) --- code/modules/mob/living/carbon/monkey/monkey.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index a05614fe09..f6f7665ae8 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -31,10 +31,8 @@ create_internal_organs() - ..() + . = ..() -/mob/living/carbon/monkey/Initialize() - ..() create_dna(src) dna.initialize_dna(random_blood_type()) From 51dd042af54100599385cbc8e6bae946b512395c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:30:25 -0500 Subject: [PATCH 31/50] Necropolis tendrils glow again (#1228) --- .../simple_animal/hostile/mining_mobs.dm | 57 ++++++++++++------- 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index eaabcf5980..97fa07b5be 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -1037,6 +1037,11 @@ regenerate_icons() //Nests +/obj/effect/light_emitter/tendril + set_luminosity = 4 + set_cap = 2.5 + light_color = LIGHT_COLOR_LAVA + /mob/living/simple_animal/hostile/spawner/lavaland name = "necropolis tendril" desc = "A vile tendril of corruption, originating deep underground. Terrible monsters are pouring out of it." @@ -1046,7 +1051,6 @@ icon_dead = "tendril" faction = list("mining") weather_immunities = list("lava","ash") - luminosity = 1 health = 250 maxHealth = 250 max_mobs = 3 @@ -1059,9 +1063,17 @@ loot = list(/obj/effect/collapse, /obj/structure/closet/crate/necropolis/tendril) del_on_death = 1 var/gps = null + var/obj/effect/light_emitter/tendril/emitted_light + +/mob/living/simple_animal/hostile/spawner/lavaland/goliath + mob_type = /mob/living/simple_animal/hostile/asteroid/goliath/beast + +/mob/living/simple_animal/hostile/spawner/lavaland/legion + mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord/legion /mob/living/simple_animal/hostile/spawner/lavaland/Initialize() - ..() + . = ..() + emitted_light = new(loc) for(var/F in RANGE_TURFS(1, src)) if(ismineralturf(F)) var/turf/closed/mineral/M = F @@ -1069,7 +1081,8 @@ gps = new /obj/item/device/gps/internal(src) /mob/living/simple_animal/hostile/spawner/lavaland/Destroy() - qdel(gps) + QDEL_NULL(emitted_light) + QDEL_NULL(gps) . = ..() #define MEDAL_PREFIX "Tendril" @@ -1096,29 +1109,31 @@ /obj/effect/collapse name = "collapsing necropolis tendril" desc = "Get clear!" - luminosity = 1 - layer = ABOVE_OPEN_TURF_LAYER + layer = BELOW_OBJ_LAYER icon = 'icons/mob/nest.dmi' icon_state = "tendril" anchored = TRUE + density = TRUE + var/obj/effect/light_emitter/tendril/emitted_light -/obj/effect/collapse/New() - ..() +/obj/effect/collapse/Initialize() + . = ..() + emitted_light = new(loc) visible_message("The tendril writhes in fury as the earth around it begins to crack and break apart! Get back!") visible_message("Something falls free of the tendril!") - playsound(get_turf(src),'sound/effects/tendril_destroyed.ogg', 200, 0, 50, 1, 1) - spawn(50) - for(var/mob/M in range(7,src)) - shake_camera(M, 15, 1) - playsound(get_turf(src),'sound/effects/explosionfar.ogg', 200, 1) - visible_message("The tendril falls inward, the ground around it widening into a yawning chasm!") - for(var/turf/T in range(2,src)) - if(!T.density) - T.TerraformTurf(/turf/open/chasm/straight_down/lava_land_surface) - qdel(src) + playsound(loc,'sound/effects/tendril_destroyed.ogg', 200, 0, 50, 1, 1) + addtimer(CALLBACK(src, .proc/collapse), 50) -/mob/living/simple_animal/hostile/spawner/lavaland/goliath - mob_type = /mob/living/simple_animal/hostile/asteroid/goliath/beast +/obj/effect/collapse/Destroy() + QDEL_NULL(emitted_light) + return ..() -/mob/living/simple_animal/hostile/spawner/lavaland/legion - mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord/legion +/obj/effect/collapse/proc/collapse() + for(var/mob/M in range(7,src)) + shake_camera(M, 15, 1) + playsound(get_turf(src),'sound/effects/explosionfar.ogg', 200, 1) + visible_message("The tendril falls inward, the ground around it widening into a yawning chasm!") + for(var/turf/T in range(2,src)) + if(!T.density) + T.TerraformTurf(/turf/open/chasm/straight_down/lava_land_surface) + qdel(src) From a884c7efcd1f4f4762d36670bdc3d53c0c17832a Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:30:26 -0500 Subject: [PATCH 32/50] Automatic changelog generation for PR #1228 [ci skip] --- html/changelogs/AutoChangeLog-pr-1228.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1228.yml diff --git a/html/changelogs/AutoChangeLog-pr-1228.yml b/html/changelogs/AutoChangeLog-pr-1228.yml new file mode 100644 index 0000000000..1b9058a75c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1228.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - bugfix: "Necropolis tendrils will once again emit light." From 3ed1975ddaee08e6e71998cbca0c35c084291196 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:31:13 -0500 Subject: [PATCH 33/50] Fixes dirty in lavaland (#1227) --- code/game/area/areas/mining.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/area/areas/mining.dm b/code/game/area/areas/mining.dm index 48271f479d..a88816f187 100644 --- a/code/game/area/areas/mining.dm +++ b/code/game/area/areas/mining.dm @@ -86,6 +86,7 @@ /area/lavaland icon_state = "mining" has_gravity = 1 + flags = NONE /area/lavaland/surface name = "Lavaland" @@ -123,4 +124,4 @@ icon_state = "danger" /area/lavaland/surface/outdoors/explored - name = "Lavaland Labor Camp" \ No newline at end of file + name = "Lavaland Labor Camp" From 41ba91a2a48a3fab3a9e376761bdf65b22101ef5 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:31:29 -0500 Subject: [PATCH 34/50] The Syndicate has fired their chemist and hired a replacement. (#1232) --- code/modules/paperwork/pen.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 73f4c73cfa..b6f8ee8f74 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -154,7 +154,7 @@ /obj/item/weapon/pen/sleepy/New() create_reagents(45) - reagents.add_reagent("morphine", 20) + reagents.add_reagent("chloralhydrate2", 20) reagents.add_reagent("mutetoxin", 15) reagents.add_reagent("tirizene", 10) ..() @@ -205,4 +205,4 @@ /obj/item/weapon/pen/poison/on_write(obj/item/weapon/paper/P, mob/user) P.contact_poison = "delayed_toxin" P.contact_poison_volume = 10 - add_logs(user,P,"used poison pen on") \ No newline at end of file + add_logs(user,P,"used poison pen on") From d900d20119becde9a85cc13bf2d91a1f491646a5 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:31:30 -0500 Subject: [PATCH 35/50] Automatic changelog generation for PR #1232 [ci skip] --- html/changelogs/AutoChangeLog-pr-1232.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1232.yml diff --git a/html/changelogs/AutoChangeLog-pr-1232.yml b/html/changelogs/AutoChangeLog-pr-1232.yml new file mode 100644 index 0000000000..97344d4418 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1232.yml @@ -0,0 +1,4 @@ +author: "Iamgoofball" +delete-after: True +changes: + - bugfix: "After the Syndicate realized their top chemist was both mixing a stamina destroying drug with a stimulant to avoid slowdowns entirely in their sleepypens, they fired him and replaced him with a new chemist." From 7b820cf7cac649aca95d68828a6c32f131bf2ef1 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:32:11 -0500 Subject: [PATCH 36/50] Fixes missing bracket in domi spawner message (#1234) --- code/game/gamemodes/gang/gang_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/gang/gang_items.dm b/code/game/gamemodes/gang/gang_items.dm index aec9b040cd..5a190d4a18 100644 --- a/code/game/gamemodes/gang/gang_items.dm +++ b/code/game/gamemodes/gang/gang_items.dm @@ -422,7 +422,7 @@ return FALSE if(dominator_excessive_walls(user)) - to_chat(user, "span class='warning'>The dominator will not function here! The dominator requires a sizable open space within three standard units so that walls do not interfere with the signal.") + to_chat(user, "The dominator will not function here! The dominator requires a sizable open space within three standard units so that walls do not interfere with the signal.") return FALSE if(!(usrarea.type in gang.territory|gang.territory_new)) From 740f1727725dd5126cdecdb12022c83781fddd4d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:32:49 -0500 Subject: [PATCH 37/50] Fixes airlocks having two Initializes (#1198) --- code/game/machinery/doors/airlock.dm | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index cd1d4de617..2175be22fe 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -97,7 +97,14 @@ var/static/list/airlock_overlays = list() /obj/machinery/door/airlock/Initialize() - ..() + . = ..() + + if (cyclelinkeddir) + cyclelinkairlock() + if(frequency) + set_frequency(frequency) + update_icon() + wires = new /datum/wires/airlock(src) if(src.closeOtherId != null) spawn (5) @@ -120,14 +127,6 @@ diag_hud.add_to_hud(src) diag_hud_set_electrified() -/obj/machinery/door/airlock/Initialize() - ..() - if (cyclelinkeddir) - cyclelinkairlock() - if(frequency) - set_frequency(frequency) - update_icon() - /obj/machinery/door/airlock/proc/cyclelinkairlock() if (cyclelinkedairlock) cyclelinkedairlock.cyclelinkedairlock = null From 8a3cd334db1a6450cca6739a0b23940397362134 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:32:59 -0500 Subject: [PATCH 38/50] Port vapes to Initialize() (#1224) --- 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 86bbb340b1..61ac601e71 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -634,8 +634,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM return (TOXLOSS|OXYLOSS) -/obj/item/clothing/mask/vape/New(loc, var/param_color = null) - ..() +/obj/item/clothing/mask/vape/Initialize(mapload, param_color) + . = ..() create_reagents(chem_volume) reagents.set_reacting(FALSE) // so it doesn't react until you light it reagents.add_reagent("nicotine", 50) From 4e381aaca40635717357f624257349431457d422 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:33:30 -0500 Subject: [PATCH 39/50] Fixes legion icon (#1222) --- code/modules/mob/living/simple_animal/hostile/mining_mobs.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 97fa07b5be..c2bd44d8ef 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -840,6 +840,9 @@ health = 120 brood_type = /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/advanced icon_state = "dwarf_legion" + icon_living = "dwarf_legion" + icon_aggro = "dwarf_legion" + icon_dead = "dwarf_legion" /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/advanced stat_attack = 2 @@ -859,6 +862,7 @@ max_mobs = 3 spawn_time = 200 spawn_text = "peels itself off from" + mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord/legion melee_damage_lower = 20 melee_damage_upper = 20 anchored = FALSE From 6c79b06e2ca3bb1f8d236468ec805066f1271fc7 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:34:00 -0500 Subject: [PATCH 40/50] c4 now takes 3 seconds instead of 5 to plant (#1186) --- code/game/objects/items/weapons/grenades/plastic.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/grenades/plastic.dm b/code/game/objects/items/weapons/grenades/plastic.dm index 21a71f371d..a528a832c0 100644 --- a/code/game/objects/items/weapons/grenades/plastic.dm +++ b/code/game/objects/items/weapons/grenades/plastic.dm @@ -235,7 +235,7 @@ to_chat(user, "You start planting the bomb...") - if(do_after(user, 50, target = AM)) + if(do_after(user, 30, target = AM)) if(!user.temporarilyRemoveItemFromInventory(src)) return src.target = AM From f1239b1b9cc6f759a7e0bc7d5b3d43f265a71f7f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:34:01 -0500 Subject: [PATCH 41/50] Automatic changelog generation for PR #1186 [ci skip] --- html/changelogs/AutoChangeLog-pr-1186.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1186.yml diff --git a/html/changelogs/AutoChangeLog-pr-1186.yml b/html/changelogs/AutoChangeLog-pr-1186.yml new file mode 100644 index 0000000000..205bc61c7a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1186.yml @@ -0,0 +1,4 @@ +author: "4dplanner, robustin" +delete-after: True +changes: + - bugfix: "c4 has always taken 3 seconds to plant, and you are not allow to believe otherwise" From 833c0c549cf5482b70f304f2de84697596712d00 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:35:52 -0500 Subject: [PATCH 42/50] Make dance machine mob dancing asynchronous (#1221) --- code/game/machinery/dance_machine.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index 8632243b67..214feeb63a 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -317,7 +317,7 @@ /obj/machinery/disco/proc/dance(var/mob/living/M) //Show your moves - + set waitfor = FALSE switch(rand(0,9)) if(0 to 1) dance2(M) From e9d00c2affc727d1e38472585c9d3275d318e85e Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:36:44 -0500 Subject: [PATCH 43/50] [READY] Adds ability to add bayonets to weapons - Only enabled on kinetic accelerators - refactors gunlight/bayonet sprites to ballistics too (#1191) --- code/game/objects/items/weapons/kitchen.dm | 4 +- code/modules/projectiles/gun.dm | 131 ++++++++++++------ code/modules/projectiles/guns/energy.dm | 13 +- .../guns/energy/kinetic_accelerator.dm | 15 +- icons/obj/guns/bayonets.dmi | Bin 0 -> 268 bytes icons/obj/guns/flashlights.dmi | Bin 0 -> 457 bytes 6 files changed, 98 insertions(+), 65 deletions(-) create mode 100644 icons/obj/guns/bayonets.dmi create mode 100644 icons/obj/guns/flashlights.dmi diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 54a41b2214..e11e36bbb6 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -65,6 +65,7 @@ attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") sharpness = IS_SHARP_ACCURATE armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + var/bayonet = FALSE //Can this be attached to a gun? /obj/item/weapon/kitchen/knife/attack(mob/living/carbon/M, mob/living/carbon/user) if(user.zone_selected == "eyes") @@ -107,7 +108,7 @@ throwforce = 20 origin_tech = "materials=3;combat=4" attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut") - + bayonet = TRUE /obj/item/weapon/kitchen/knife/combat/survival name = "survival knife" @@ -115,6 +116,7 @@ desc = "A hunting grade survival knife." force = 15 throwforce = 15 + bayonet = TRUE /obj/item/weapon/kitchen/knife/combat/bone name = "bone dagger" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 6fb4e6276f..04761befdc 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -43,8 +43,11 @@ var/obj/item/device/firing_pin/pin = /obj/item/device/firing_pin //standard firing pin for most guns - var/obj/item/device/flashlight/gun_light = null + var/obj/item/device/flashlight/gun_light var/can_flashlight = 0 + var/obj/item/weapon/kitchen/knife/bayonet + var/can_bayonet = FALSE + var/datum/action/item_action/toggle_gunlight/alight var/list/upgrades = list() @@ -52,6 +55,8 @@ var/ammo_y_offset = 0 var/flight_x_offset = 0 var/flight_y_offset = 0 + var/knife_x_offset = 0 + var/knife_y_offset = 0 //Zooming var/zoomable = FALSE //whether the gun generates a Zoom action on creation @@ -65,8 +70,7 @@ if(pin) pin = new pin(src) if(gun_light) - verbs += /obj/item/weapon/gun/proc/toggle_gunlight - new /datum/action/item_action/toggle_gunlight(src) + alight = new /datum/action/item_action/toggle_gunlight(src) build_zooming() @@ -268,52 +272,88 @@ SSblackbox.add_details("gun_fired","[src.type]") return 1 +/obj/item/weapon/gun/update_icon() + ..() + cut_overlays() + if(gun_light && can_flashlight) + var/state = "flight[gun_light.on? "_on":""]" //Generic state. + if(gun_light.icon_state in icon_states('icons/obj/guns/flashlights.dmi')) //Snowflake state? + state = gun_light.icon_state + var/mutable_appearance/flashlight_overlay = mutable_appearance('icons/obj/guns/flashlights.dmi', state) + flashlight_overlay.pixel_x = flight_x_offset + flashlight_overlay.pixel_y = flight_y_offset + add_overlay(flashlight_overlay) + if(bayonet && can_bayonet) + var/state = "bayonet" //Generic state. + if(bayonet.icon_state in icon_states('icons/obj/guns/bayonets.dmi')) //Snowflake state? + state = bayonet.icon_state + var/mutable_appearance/knife_overlay = mutable_appearance('icons/obj/guns/bayonets.dmi', state) + knife_overlay.pixel_x = knife_x_offset + knife_overlay.pixel_y = knife_y_offset + add_overlay(knife_overlay) + /obj/item/weapon/gun/attack(mob/M as mob, mob/user) if(user.a_intent == INTENT_HARM) //Flogging - ..() - else - return + if(bayonet) + bayonet.attack(M, user) + return + return ..() + +/obj/item/weapon/gun/attack_obj(obj/O, mob/user) + if(user.a_intent == INTENT_HARM) + if(bayonet) + bayonet.attack_obj(O, user) + return + return ..() /obj/item/weapon/gun/attackby(obj/item/I, mob/user, params) - if(can_flashlight) - if(istype(I, /obj/item/device/flashlight/seclite)) - var/obj/item/device/flashlight/seclite/S = I - if(!gun_light) - if(!user.transferItemToLoc(I, src)) - return - to_chat(user, "You click [S] into place on [src].") - if(S.on) - set_light(0) - gun_light = S - update_icon() - update_gunlight(user) - verbs += /obj/item/weapon/gun/proc/toggle_gunlight - var/datum/action/A = new /datum/action/item_action/toggle_gunlight(src) - if(loc == user) - A.Grant(user) - - if(istype(I, /obj/item/weapon/screwdriver)) - if(gun_light) - for(var/obj/item/device/flashlight/seclite/S in src) - to_chat(user, "You unscrew the seclite from [src].") - gun_light = null - S.forceMove(get_turf(user)) - update_gunlight(user) - S.update_brightness(user) - update_icon() - verbs -= /obj/item/weapon/gun/proc/toggle_gunlight - for(var/datum/action/item_action/toggle_gunlight/TGL in actions) - qdel(TGL) + if(user.a_intent == INTENT_HARM) + return ..() + else if(istype(I, /obj/item/device/flashlight/seclite)) + if(!can_flashlight) + return ..() + var/obj/item/device/flashlight/seclite/S = I + if(!gun_light) + if(!user.transferItemToLoc(I, src)) + return + to_chat(user, "You click \the [S] into place on \the [src].") + if(S.on) + set_light(0) + gun_light = S + update_icon() + update_gunlight(user) + alight = new /datum/action/item_action/toggle_gunlight(src) + if(loc == user) + alight.Grant(user) + else if(istype(I, /obj/item/weapon/kitchen/knife)) + if(!can_bayonet) + return ..() + var/obj/item/weapon/kitchen/knife/K = I + if(!bayonet) + if(!user.transferItemToLoc(I, src)) + return + to_chat(user, "You attach \the [K] to the front of ]the [src].") + bayonet = K + update_icon() + else if(istype(I, /obj/item/weapon/screwdriver)) + if(gun_light) + var/obj/item/device/flashlight/seclite/S = gun_light + to_chat(user, "You unscrew the seclite from \the [src].") + gun_light = null + S.forceMove(get_turf(user)) + update_gunlight(user) + S.update_brightness(user) + update_icon() + QDEL_NULL(alight) + if(bayonet) + var/obj/item/weapon/kitchen/knife/K = bayonet + K.forceMove(get_turf(user)) + bayonet = null + update_icon() else - ..() - - + return ..() /obj/item/weapon/gun/proc/toggle_gunlight() - set name = "Toggle Gunlight" - set category = "Object" - set desc = "Click to toggle your weapon's attached flashlight." - if(!gun_light) return @@ -343,12 +383,16 @@ ..() if(azoom) azoom.Grant(user) + if(alight) + alight.Grant(user) /obj/item/weapon/gun/dropped(mob/user) ..() zoom(user,FALSE) if(azoom) azoom.Remove(user) + if(alight) + alight.Remove(user) /obj/item/weapon/gun/AltClick(mob/user) @@ -370,9 +414,6 @@ to_chat(M, "Your gun is now skinned as [choice]. Say hello to your new friend.") update_icon() - - - /obj/item/weapon/gun/proc/handle_suicide(mob/living/carbon/human/user, mob/living/carbon/human/target, params) if(!ishuman(user) || !ishuman(target)) return diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index b022941f78..f8d0911011 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -10,6 +10,7 @@ var/list/ammo_type = list(/obj/item/ammo_casing/energy) var/select = 1 //The state of the select fire switch. Determines from the ammo_type list what kind of shot is fired next. var/can_charge = 1 //Can it be charged in a recharger? + var/automatic_charge_overlays = TRUE //Do we handle overlays with base update_icon()? var/charge_sections = 4 ammo_x_offset = 2 var/shaded_charge = 0 //if this gun uses a stateful charge bar for more detail @@ -116,7 +117,9 @@ return /obj/item/weapon/gun/energy/update_icon() - cut_overlays() + ..() + if(!automatic_charge_overlays) + return var/ratio = Ceiling((power_supply.charge / power_supply.maxcharge) * charge_sections) var/obj/item/ammo_casing/energy/shot = ammo_type[select] var/iconState = "[icon_state]_charge" @@ -138,14 +141,6 @@ add_overlay(charge_overlay) else add_overlay("[icon_state]_charge[ratio]") - if(gun_light && can_flashlight) - var/iconF = "flight" - if(gun_light.on) - iconF = "flight_on" - var/mutable_appearance/flashlight_overlay = mutable_appearance(icon, iconF) - flashlight_overlay.pixel_x = flight_x_offset - flashlight_overlay.pixel_y = flight_y_offset - add_overlay(flashlight_overlay) if(itemState) itemState += "[ratio]" item_state = itemState diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index e8d48373da..1799a33cbb 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -16,6 +16,9 @@ var/holds_charge = FALSE var/unique_frequency = FALSE // modified by KA modkits var/overheat = FALSE + can_bayonet = TRUE + knife_x_offset = 15 + knife_y_offset = 13 var/max_mod_capacity = 100 var/list/modkits = list() @@ -129,19 +132,11 @@ overheat = FALSE /obj/item/weapon/gun/energy/kinetic_accelerator/update_icon() - cut_overlays() + ..() + if(empty_state && !can_shoot()) add_overlay(empty_state) - if(gun_light && can_flashlight) - var/iconF = "flight" - if(gun_light.on) - iconF = "flight_on" - var/mutable_appearance/flashlight_overlay = mutable_appearance(icon, iconF) - flashlight_overlay.pixel_x = flight_x_offset - flashlight_overlay.pixel_y = flight_y_offset - add_overlay(flashlight_overlay) - //Casing /obj/item/ammo_casing/energy/kinetic projectile_type = /obj/item/projectile/kinetic diff --git a/icons/obj/guns/bayonets.dmi b/icons/obj/guns/bayonets.dmi new file mode 100644 index 0000000000000000000000000000000000000000..176005b7d7035e71552d4cd37702734f719e3045 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{*8>L*$jNBBxdct0ySA#K z&)CrZ#MN9|pe$oakY6x^!?PP{Ku&g5NJNQCYH@N=WKhlO#F@nvH#g*lHV9hnrO5Ui=W(a2tZ zt4n9MvFhd(5*kS-j?N65GGjJZqPF&qUppIk*%+!`Nd0B`pA!bO*3i?%F+^ixa)Jcw zVKEL)t(iM^>`-74X`Ry2+uJLsfvl_hC>f>Nw2Reg3>|2}-|^N-1zw+!ni}7#MjyT^vI)8sE-z^g9f+b-(txi;;&|WmfJz6~o}i!oFhqoCUMj zbhYR^+@4xJF)_78VCp5mRr*Kv_$qmStp9g%&7@<6N9xlKiX{lMZeYFP!kEKo7RV6Y z;45-~SfS6)xljDOXLH_P&mq(|G&WH#U@A97nuYVsmG(KeHlt1rm_U4}7y5@4R=Z9Qb7%oK3R(`H?ujV_) zl%Pxb`McT6Cq@_M{)ZT;u9l*F@@O1TaS?83{1OPJ)#rgmM literal 0 HcmV?d00001 From 8b0bc4ebcf57d44bd73b12f8f8ef1cadefb497bb Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:36:45 -0500 Subject: [PATCH 44/50] Automatic changelog generation for PR #1191 [ci skip] --- html/changelogs/AutoChangeLog-pr-1191.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1191.yml diff --git a/html/changelogs/AutoChangeLog-pr-1191.yml b/html/changelogs/AutoChangeLog-pr-1191.yml new file mode 100644 index 0000000000..9e1d3c3eaa --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1191.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "You can now add bayonets to kinetic accelerators. However, only combat knives and survival knives can be added. Harm intent attacking things will cause you to attack that thing with the bayonet instead!" From 0b44c77bfbfbe8bafb9f26e87c33f01231419808 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:37:45 -0500 Subject: [PATCH 45/50] UPDATE: Removes airlock charge from uplink (#1216) --- code/modules/uplink/uplink_item.dm | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm index 667742afc4..f603612bbf 100644 --- a/code/modules/uplink/uplink_item.dm +++ b/code/modules/uplink/uplink_item.dm @@ -725,16 +725,6 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. item = /obj/item/weapon/grenade/clusterbuster/soap cost = 6 -/datum/uplink_item/stealthy_weapons/door_charge - name = "Explosive Airlock Charge" - desc = "A small, easily concealable device. It can be applied to an open airlock panel, booby-trapping it. \ - The next person to use that airlock will trigger an explosion, knocking them down and destroying \ - the airlock maintenance panel." - item = /obj/item/device/doorCharge - cost = 2 - surplus = 10 - exclude_modes = list(/datum/game_mode/nuclear) - // Stealth Items /datum/uplink_item/stealthy_tools category = "Stealth and Camouflage Items" From 9006cfeb60043f100f67528d7c27cfc5fc414978 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:39:51 -0500 Subject: [PATCH 46/50] Map conversions will always write out LF (#1212) --- tools/mapmerge/map_helpers.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/mapmerge/map_helpers.py b/tools/mapmerge/map_helpers.py index 2e96e7e7e2..ea06641f50 100644 --- a/tools/mapmerge/map_helpers.py +++ b/tools/mapmerge/map_helpers.py @@ -125,7 +125,7 @@ def merge_map(newfile, backupfile, tgm): ####################### #write to file helpers# def write_dictionary_tgm(filename, dictionary, header = None): #write dictionary in tgm format - with open(filename, "w") as output: + with open(filename, "w", newline='\n') as output: output.write("{}\n".format(tgm_header)) if header: output.write("{}\n".format(header)) @@ -172,7 +172,7 @@ def write_dictionary_tgm(filename, dictionary, header = None): #write dictionary def write_grid_coord_small(filename, grid, maxx, maxy): #thanks to YotaXP for finding out about this one - with open(filename, "a") as output: + with open(filename, "a", newline='\n') as output: output.write("\n") for x in range(1, maxx+1): @@ -183,7 +183,7 @@ def write_grid_coord_small(filename, grid, maxx, maxy): #thanks to YotaXP for fi def write_dictionary(filename, dictionary, header = None): #writes a tile dictionary the same way Dreammaker does - with open(filename, "w") as output: + with open(filename, "w", newline='\n') as output: for key, value in dictionary.items(): if header: output.write("{}\n".format(header)) @@ -191,7 +191,7 @@ def write_dictionary(filename, dictionary, header = None): #writes a tile dictio def write_grid(filename, grid, maxx, maxy): #writes a map grid the same way Dreammaker does - with open(filename, "a") as output: + with open(filename, "a", newline='\n') as output: output.write("\n") output.write("(1,1,1) = {\"\n") From a1ebd8c7910f80c444ecd6bae8a7d467ef554af4 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:40:09 -0500 Subject: [PATCH 47/50] Refactors how diagonal smoothing underlays work (#1187) --- code/__HELPERS/icon_smoothing.dm | 21 +++----- code/game/turfs/closed.dm | 8 +++ code/game/turfs/open.dm | 3 ++ code/game/turfs/simulated/chasm.dm | 9 ++++ .../game/turfs/simulated/floor/fancy_floor.dm | 21 ++++++-- .../turfs/simulated/floor/plating/lava.dm | 5 ++ code/game/turfs/simulated/minerals.dm | 9 +++- code/game/turfs/space/space.dm | 6 +++ code/game/turfs/space/transit.dm | 54 +++++++++++-------- code/game/turfs/turf.dm | 6 +++ code/modules/mining/mine_items.dm | 5 +- 11 files changed, 105 insertions(+), 42 deletions(-) diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index de46e18fde..a0de8d9840 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -167,23 +167,14 @@ underlay_appearance.icon = fixed_underlay["icon"] underlay_appearance.icon_state = fixed_underlay["icon_state"] else - var/turf/T = get_step(src, turn(adjacencies, 180)) - if(T && (T.density || T.smooth)) + var/turned_adjacency = turn(adjacencies, 180) + var/turf/T = get_step(src, turned_adjacency) + if(!T.get_smooth_underlay_icon(underlay_appearance, src, turned_adjacency)) T = get_step(src, turn(adjacencies, 135)) - if(T && (T.density || T.smooth)) + if(!T.get_smooth_underlay_icon(underlay_appearance, src, turned_adjacency)) T = get_step(src, turn(adjacencies, 225)) - - if(isspaceturf(T) && !istype(T, /turf/open/space/transit)) - underlay_appearance.icon = 'icons/turf/space.dmi' - underlay_appearance.icon_state = SPACE_ICON_STATE - underlay_appearance.plane = PLANE_SPACE - else if(T && !T.density && !T.smooth) - underlay_appearance.icon = T.icon - underlay_appearance.icon_state = T.icon_state - else if(baseturf && !initial(baseturf.density) && !initial(baseturf.smooth)) - underlay_appearance.icon = initial(baseturf.icon) - underlay_appearance.icon_state = initial(baseturf.icon_state) - else + //if all else fails, ask our own turf + if(!T.get_smooth_underlay_icon(underlay_appearance, src, turned_adjacency) && !get_smooth_underlay_icon(underlay_appearance, src, turned_adjacency)) underlay_appearance.icon = DEFAULT_UNDERLAY_ICON underlay_appearance.icon_state = DEFAULT_UNDERLAY_ICON_STATE underlays = U diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index 2c3e60694d..a459ac5903 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -5,6 +5,9 @@ density = 1 blocks_air = 1 +/turf/closed/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + return FALSE + /turf/closed/indestructible name = "wall" icon = 'icons/turf/walls.dmi' @@ -108,6 +111,11 @@ explosion_block = 50 baseturf = /turf/closed/indestructible/necropolis +/turf/closed/indestructible/necropolis/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + underlay_appearance.icon = 'icons/turf/floors.dmi' + underlay_appearance.icon_state = "necro1" + return TRUE + /turf/closed/indestructible/riveted/hierophant name = "wall" desc = "A wall made out of a strange metal. The squares on it pulse in a predictable pattern." diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index ff278b415a..718451bcb0 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -45,6 +45,9 @@ /turf/open/indestructible/hierophant/two +/turf/open/indestructible/hierophant/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + return FALSE + /turf/open/indestructible/paper name = "notebook floor" desc = "A floor made of invulnerable notebook paper." diff --git a/code/game/turfs/simulated/chasm.dm b/code/game/turfs/simulated/chasm.dm index 4f22487537..8f0de9675d 100644 --- a/code/game/turfs/simulated/chasm.dm +++ b/code/game/turfs/simulated/chasm.dm @@ -22,6 +22,10 @@ if(!drop_stuff()) STOP_PROCESSING(SSobj, src) +/turf/open/chasm/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + underlay_appearance.icon = 'icons/turf/floors.dmi' + underlay_appearance.icon_state = "basalt" + return TRUE /turf/open/chasm/attackby(obj/item/C, mob/user, params, area/area_restriction) ..() @@ -171,6 +175,11 @@ planetary_atmos = TRUE initial_gas_mix = "o2=14;n2=23;TEMP=300" +/turf/open/chasm/jungle/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + underlay_appearance.icon = 'icons/turf/floors.dmi' + underlay_appearance.icon_state = "dirt" + return TRUE + /turf/open/chasm/straight_down/jungle icon = 'icons/turf/floors/junglechasm.dmi' planetary_atmos = TRUE diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index 4f6da47bde..91ed7a7cd6 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -140,7 +140,7 @@ floor_tile = /obj/item/stack/tile/carpet broken_states = list("damaged") smooth = SMOOTH_TRUE - canSmoothWith = list(/turf/open/floor/carpet, /turf/open/chasm) + canSmoothWith = list(/turf/open/floor/carpet) flags = NONE /turf/open/floor/carpet/Initialize() @@ -175,15 +175,22 @@ burnt = 1 update_icon() +/turf/open/floor/carpet/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + return FALSE -turf/open/floor/fakepit +/turf/open/floor/fakepit desc = "A clever illusion designed to look like a bottomless pit." smooth = SMOOTH_TRUE | SMOOTH_BORDER | SMOOTH_MORE - canSmoothWith = list(/turf/open/floor/fakepit, /turf/open/chasm) + canSmoothWith = list(/turf/open/floor/fakepit) icon = 'icons/turf/floors/Chasms.dmi' icon_state = "smooth" +/turf/open/floor/fakepit/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + underlay_appearance.icon = 'icons/turf/floors.dmi' + underlay_appearance.icon_state = "basalt" + return TRUE + /turf/open/floor/fakespace icon = 'icons/turf/space.dmi' icon_state = "0" @@ -193,4 +200,10 @@ turf/open/floor/fakepit /turf/open/floor/fakespace/Initialize() ..() - icon_state = "[rand(0,25)]" + icon_state = SPACE_ICON_STATE + +/turf/open/floor/fakespace/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + underlay_appearance.icon = 'icons/turf/space.dmi' + underlay_appearance.icon_state = SPACE_ICON_STATE + underlay_appearance.plane = PLANE_SPACE + return TRUE diff --git a/code/game/turfs/simulated/floor/plating/lava.dm b/code/game/turfs/simulated/floor/plating/lava.dm index 9321b4f082..ead1e97d22 100644 --- a/code/game/turfs/simulated/floor/plating/lava.dm +++ b/code/game/turfs/simulated/floor/plating/lava.dm @@ -38,6 +38,11 @@ /turf/open/floor/plating/lava/make_plating() return +/turf/open/floor/plating/lava/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + underlay_appearance.icon = 'icons/turf/floors.dmi' + underlay_appearance.icon_state = "basalt" + return TRUE + /turf/open/floor/plating/lava/GetHeatCapacity() . = 700000 diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index 0a8230e186..9c3d8ed0c7 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -26,7 +26,7 @@ /turf/closed/mineral/Initialize() if (!canSmoothWith) - canSmoothWith = list(/turf/closed) + canSmoothWith = list(/turf/closed/mineral, /turf/closed/indestructible) pixel_y = -4 pixel_x = -4 icon = smooth_icon @@ -42,6 +42,13 @@ setDir(angle2dir(rotation+dir2angle(dir))) queue_smooth(src) +/turf/closed/mineral/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + if(turf_type) + underlay_appearance.icon = initial(turf_type.icon) + underlay_appearance.icon_state = initial(turf_type.icon_state) + return TRUE + return ..() + /turf/closed/mineral/attackby(obj/item/weapon/pickaxe/P, mob/user, params) if (!user.IsAdvancedToolUser()) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 1876d6f782..bac25e68c0 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -160,6 +160,12 @@ /turf/open/space/acid_act(acidpwr, acid_volume) return 0 +/turf/open/space/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + underlay_appearance.icon = 'icons/turf/space.dmi' + underlay_appearance.icon_state = SPACE_ICON_STATE + underlay_appearance.plane = PLANE_SPACE + return TRUE + /turf/open/space/rcd_vals(mob/user, obj/item/weapon/construction/rcd/the_rcd) if(!CanBuildHere()) diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index 68c00c54ec..c447b83a1f 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -4,6 +4,11 @@ baseturf = /turf/open/space/transit flags = NOJAUNT //This line goes out to every wizard that ever managed to escape the den. I'm sorry. +/turf/open/space/transit/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + . = ..() + underlay_appearance.icon_state = "speedspace_ns_[get_transit_state(asking_turf)]" + underlay_appearance.transform = turn(matrix(), get_transit_angle(asking_turf)) + /turf/open/space/transit/south dir = SOUTH @@ -69,25 +74,32 @@ throw_atom(AM) /turf/open/space/transit/proc/update_icon() - var/p = 9 - var/angle = 0 - var/state = 1 - switch(dir) - if(NORTH) - angle = 180 - state = ((-p*x+y) % 15) + 1 - if(state < 1) - state += 15 - if(EAST) - angle = 90 - state = ((x+p*y) % 15) + 1 - if(WEST) - angle = -90 - state = ((x-p*y) % 15) + 1 - if(state < 1) - state += 15 - else - state = ((p*x+y) % 15) + 1 + icon_state = "speedspace_ns_[get_transit_state(src)]" + transform = turn(matrix(), get_transit_angle(src)) - icon_state = "speedspace_ns_[state]" - transform = turn(matrix(), angle) \ No newline at end of file +/proc/get_transit_state(turf/T) + var/p = 9 + . = 1 + switch(T.dir) + if(NORTH) + . = ((-p*T.x+T.y) % 15) + 1 + if(. < 1) + . += 15 + if(EAST) + . = ((T.x+p*T.y) % 15) + 1 + if(WEST) + . = ((T.x-p*T.y) % 15) + 1 + if(. < 1) + . += 15 + else + . = ((p*T.x+T.y) % 15) + 1 + +/proc/get_transit_angle(turf/T) + . = 0 + switch(T.dir) + if(NORTH) + . = 180 + if(EAST) + . = 90 + if(WEST) + . = -90 \ No newline at end of file diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index c4d35d7bd1..9d556e896f 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -394,6 +394,12 @@ if(ismob(A) || .) A.ratvar_act() +/turf/proc/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + underlay_appearance.icon = icon + underlay_appearance.icon_state = icon_state + underlay_appearance.dir = adjacency_dir + return TRUE + /turf/proc/add_blueprints(atom/movable/AM) var/image/I = new I.appearance = AM.appearance diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 3df4d521ff..10b7bc1eac 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -217,6 +217,7 @@ /area/survivalpod name = "\improper Emergency Shelter" icon_state = "away" + dynamic_lighting = DYNAMIC_LIGHTING_FORCED requires_power = 0 has_gravity = 1 @@ -394,7 +395,9 @@ icon = 'icons/obj/lavaland/donkvendor.dmi' icon_on = "donkvendor" icon_off = "donkvendor" - luminosity = 8 + light_range = 5 + light_power = 1.2 + light_color = "#DDFFD3" max_n_of_items = 10 pixel_y = -4 flags = NODECONSTRUCT From fd2c61f3d30b234a7fd6862a77b6b4b497852ab2 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:42:58 -0500 Subject: [PATCH 48/50] [MIRROR] Adds a minor documentation comment (#1097) * Adds a minor documentation comment * Update subsystems.dm * Delete subsystems.dm.rej --- code/__DEFINES/subsystems.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 8c8b360497..7303f0f33a 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -39,6 +39,7 @@ // Subsystem init_order, from highest priority to lowest priority +// Subsystems shutdown in the reverse of the order they initialize in // The numbers just define the ordering, they are meaningless otherwise. #define INIT_ORDER_SERVER_MAINT 16 @@ -71,4 +72,4 @@ #define RUNLEVEL_GAME 4 #define RUNLEVEL_POSTGAME 8 -#define RUNLEVELS_DEFAULT (RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME) \ No newline at end of file +#define RUNLEVELS_DEFAULT (RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME) From d1e38d9e1f8a82feefaccc1115bed2d82bfdbf73 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:43:20 -0500 Subject: [PATCH 49/50] Fixed very minor capitalization and punctuation inconsistencies. (#1104) --- code/game/objects/structures/artstuff.dm | 4 ++-- code/game/objects/structures/signs.dm | 20 +++++++++---------- .../living/simple_animal/bot/construction.dm | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index 23bbc40ed8..989bb6755b 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -5,7 +5,7 @@ /obj/structure/easel name = "easel" - desc = "only for the finest of art!" + desc = "Only for the finest of art!" icon = 'icons/obj/artstuff.dmi' icon_state = "easel" density = 1 @@ -49,7 +49,7 @@ GLOBAL_LIST_INIT(globalBlankCanvases, new(AMT_OF_CANVASES)) /obj/item/weapon/canvas name = "canvas" - desc = "draw out your soul on this canvas!" + desc = "Draw out your soul on this canvas!" icon = 'icons/obj/artstuff.dmi' icon_state = "11x11" resistance_flags = FLAMMABLE diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 445af97b4e..8ffebdc0ab 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -146,49 +146,49 @@ /obj/structure/sign/biohazard name = "\improper BIOHAZARD" - desc = "A warning sign which reads 'BIOHAZARD'" + desc = "A warning sign which reads 'BIOHAZARD'." icon_state = "bio" /obj/structure/sign/electricshock name = "\improper HIGH VOLTAGE" - desc = "A warning sign which reads 'HIGH VOLTAGE'" + desc = "A warning sign which reads 'HIGH VOLTAGE'." icon_state = "shock" /obj/structure/sign/examroom name = "\improper EXAM ROOM" - desc = "A guidance sign which reads 'EXAM ROOM'" + desc = "A guidance sign which reads 'EXAM ROOM'." icon_state = "examroom" /obj/structure/sign/vacuum name = "\improper HARD VACUUM AHEAD" - desc = "A warning sign which reads 'HARD VACUUM AHEAD'" + desc = "A warning sign which reads 'HARD VACUUM AHEAD'." icon_state = "space" /obj/structure/sign/deathsposal name = "\improper DISPOSAL: LEADS TO SPACE" - desc = "A warning sign which reads 'DISPOSAL: LEADS TO SPACE'" + desc = "A warning sign which reads 'DISPOSAL: LEADS TO SPACE'." icon_state = "deathsposal" /obj/structure/sign/pods name = "\improper ESCAPE PODS" - desc = "A warning sign which reads 'ESCAPE PODS'" + desc = "A warning sign which reads 'ESCAPE PODS'." icon_state = "pods" /obj/structure/sign/fire name = "\improper DANGER: FIRE" - desc = "A warning sign which reads 'DANGER: FIRE'" + desc = "A warning sign which reads 'DANGER: FIRE'." icon_state = "fire" /obj/structure/sign/nosmoking_1 name = "\improper NO SMOKING" - desc = "A warning sign which reads 'NO SMOKING'" + desc = "A warning sign which reads 'NO SMOKING'." icon_state = "nosmoking" /obj/structure/sign/nosmoking_2 name = "\improper NO SMOKING" - desc = "A warning sign which reads 'NO SMOKING'" + desc = "A warning sign which reads 'NO SMOKING'." icon_state = "nosmoking2" /obj/structure/sign/radiation @@ -223,7 +223,7 @@ /obj/structure/sign/nanotrasen name = "\improper NanoTrasen Logo " - desc = "A sign with the Nanotrasen Logo on it. Glory to Nanotrasen!" + desc = "A sign with the Nanotrasen Logo on it. Glory to Nanotrasen!" icon_state = "nanotrasen" /obj/structure/sign/science //These 3 have multiple types, just var-edit the icon_state to whatever one you want on the map diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 25be049546..b3b4725914 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -273,7 +273,7 @@ //Medbot Assembly /obj/item/weapon/firstaid_arm_assembly - name = "incomplete medibot assembly." + name = "incomplete medibot assembly" desc = "A first aid kit with a robot arm permanently grafted to it." icon = 'icons/mob/aibots.dmi' icon_state = "firstaid_arm" From 499ef04593c0786d1797b876ed53cdf18a8c366d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 27 May 2017 15:43:21 -0500 Subject: [PATCH 50/50] Automatic changelog generation for PR #1104 [ci skip] --- html/changelogs/AutoChangeLog-pr-1104.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-1104.yml diff --git a/html/changelogs/AutoChangeLog-pr-1104.yml b/html/changelogs/AutoChangeLog-pr-1104.yml new file mode 100644 index 0000000000..caffe5a257 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1104.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - spellcheck: "Fixed very minor inconsistencies on items & punctuation on items."