From 7ba1638e11c6f893055c483b19efcb7e9adebd67 Mon Sep 17 00:00:00 2001 From: Mloc-Argent Date: Sun, 11 Aug 2013 15:52:48 +0100 Subject: [PATCH 01/10] Fixed some mob clicks. Signed-off-by: Mloc-Argent --- code/modules/mob/living/carbon/human/human_attackhand.dm | 2 ++ code/modules/mob/mob_grab.dm | 2 ++ 2 files changed, 4 insertions(+) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index cb161b9d944..0c6b8172a28 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -12,6 +12,8 @@ ..() + M.delay_click(10) + if((M != src) && check_shields(0, M.name)) visible_message("\red [M] attempted to touch [src]!") return 0 diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 68941a4d090..07a07500083 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -162,6 +162,8 @@ if(killing) return + assailant.delay_click(10) + switch(S.id) if(1.0) if (state < 2) From 070cb50f8df7cc68c2286f56dab414f0ead33cf1 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Sun, 11 Aug 2013 17:13:58 +0100 Subject: [PATCH 02/10] PDAs can be used when buckled (and not in any other way restrained or stunned). Rejuvenate now completely heals a target or broken organs and viruses too. --- baystation12.dme | 8 +- code/game/objects/items/devices/PDA/PDA.dm | 389 ++++++++++----------- code/modules/admin/topic.dm | 16 +- code/modules/mob/living/living.dm | 9 + code/modules/virus2/disease2.dm | 24 ++ 5 files changed, 235 insertions(+), 211 deletions(-) diff --git a/baystation12.dme b/baystation12.dme index 5a034ff343b..8b4d64ba6ff 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -784,10 +784,10 @@ #include "code\modules\customitems\item_defines.dm" #include "code\modules\customitems\item_spawning.dm" #include "code\modules\destilery\main.dm" -#include "code\modules\DetectiveWork\detective_work.dm" -#include "code\modules\DetectiveWork\evidence.dm" -#include "code\modules\DetectiveWork\footprints_and_rag.dm" -#include "code\modules\DetectiveWork\scanner.dm" +#include "code\modules\detectivework\detective_work.dm" +#include "code\modules\detectivework\evidence.dm" +#include "code\modules\detectivework\footprints_and_rag.dm" +#include "code\modules\detectivework\scanner.dm" #include "code\modules\events\alien_infestation.dm" #include "code\modules\events\blob.dm" #include "code\modules\events\brand_intelligence.dm" diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 33fc438c4ac..378d08f880d 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -288,7 +288,7 @@ var/global/list/obj/item/device/pda/PDAs = list() return 0 var/mob/M = loc - if(!M.canmove) + if(M.stat || M.restrained() || M.paralysis || M.stunned || M.weakened) return 0 if((src in M.contents) || ( istype(loc, /turf) && in_range(src, M) )) return 1 @@ -306,7 +306,7 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/MouseDrop(obj/over_object as obj, src_location, over_location) var/mob/M = usr - if((!istype(over_object, /obj/screen)) && !M.restrained() && !M.stat && can_use()) + if((!istype(over_object, /obj/screen)) && can_use()) return attack_self(M) return @@ -520,231 +520,226 @@ var/global/list/obj/item/device/pda/PDAs = list() //if ((src in U.contents) || ( istype(loc, /turf) && in_range(src, U) ) ) if(can_use()) //Why reinvent the wheel? There's a proc that does exactly that. - if ( !(U.stat || U.restrained()) ) - add_fingerprint(U) - U.set_machine(src) + add_fingerprint(U) + U.set_machine(src) - switch(href_list["choice"]) + switch(href_list["choice"]) //BASIC FUNCTIONS=================================== - if("Close")//Self explanatory - U.unset_machine() - U << browse(null, "window=pda") - return - if("Refresh")//Refresh, goes to the end of the proc. - if("Return")//Return - if(mode<=9) + if("Close")//Self explanatory + U.unset_machine() + U << browse(null, "window=pda") + return + if("Refresh")//Refresh, goes to the end of the proc. + if("Return")//Return + if(mode<=9) + mode = 0 + else + mode = round(mode/10) + if(mode==4)//Fix for cartridges. Redirects to hub. mode = 0 - else - mode = round(mode/10) - if(mode==4)//Fix for cartridges. Redirects to hub. - mode = 0 - else if(mode >= 40 && mode <= 49)//Fix for cartridges. Redirects to refresh the menu. - cartridge.mode = mode - cartridge.unlock() - if ("Authenticate")//Checks for ID - id_check(U, 1) - if("UpdateInfo") - ownjob = id.assignment - name = "PDA-[owner] ([ownjob])" - if("Eject")//Ejects the cart, only done from hub. - if (!isnull(cartridge)) - var/turf/T = loc - if(ismob(T)) - T = T.loc - cartridge.loc = T - scanmode = 0 - if (cartridge.radio) - cartridge.radio.hostpda = null - cartridge = null + else if(mode >= 40 && mode <= 49)//Fix for cartridges. Redirects to refresh the menu. + cartridge.mode = mode + cartridge.unlock() + if ("Authenticate")//Checks for ID + id_check(U, 1) + if("UpdateInfo") + ownjob = id.assignment + name = "PDA-[owner] ([ownjob])" + if("Eject")//Ejects the cart, only done from hub. + if (!isnull(cartridge)) + var/turf/T = loc + if(ismob(T)) + T = T.loc + cartridge.loc = T + scanmode = 0 + if (cartridge.radio) + cartridge.radio.hostpda = null + cartridge = null //MENU FUNCTIONS=================================== - if("0")//Hub - mode = 0 - if("1")//Notes - mode = 1 - if("2")//Messenger - mode = 2 - if("21")//Read messeges - mode = 21 - if("3")//Atmos scan - mode = 3 - if("4")//Redirects to hub - mode = 0 - if("chatroom") // chatroom hub - mode = 5 - if("41") //Manifest - mode = 41 + if("0")//Hub + mode = 0 + if("1")//Notes + mode = 1 + if("2")//Messenger + mode = 2 + if("21")//Read messeges + mode = 21 + if("3")//Atmos scan + mode = 3 + if("4")//Redirects to hub + mode = 0 + if("chatroom") // chatroom hub + mode = 5 + if("41") //Manifest + mode = 41 //MAIN FUNCTIONS=================================== - if("Light") - if(fon) - fon = 0 - if(src in U.contents) U.SetLuminosity(U.luminosity - f_lum) - else SetLuminosity(0) - else - fon = 1 - if(src in U.contents) U.SetLuminosity(U.luminosity + f_lum) - else SetLuminosity(f_lum) - if("Medical Scan") - if(scanmode == 1) - scanmode = 0 - else if((!isnull(cartridge)) && (cartridge.access_medical)) - scanmode = 1 - if("Reagent Scan") - if(scanmode == 3) - scanmode = 0 - else if((!isnull(cartridge)) && (cartridge.access_reagent_scanner)) - scanmode = 3 - if("Halogen Counter") - if(scanmode == 4) - scanmode = 0 - else if((!isnull(cartridge)) && (cartridge.access_engine)) - scanmode = 4 - if("Honk") - if ( !(last_honk && world.time < last_honk + 20) ) - playsound(loc, 'sound/items/bikehorn.ogg', 50, 1) - last_honk = world.time - if("Gas Scan") - if(scanmode == 5) - scanmode = 0 - else if((!isnull(cartridge)) && (cartridge.access_atmos)) - scanmode = 5 + if("Light") + if(fon) + fon = 0 + if(src in U.contents) U.SetLuminosity(U.luminosity - f_lum) + else SetLuminosity(0) + else + fon = 1 + if(src in U.contents) U.SetLuminosity(U.luminosity + f_lum) + else SetLuminosity(f_lum) + if("Medical Scan") + if(scanmode == 1) + scanmode = 0 + else if((!isnull(cartridge)) && (cartridge.access_medical)) + scanmode = 1 + if("Reagent Scan") + if(scanmode == 3) + scanmode = 0 + else if((!isnull(cartridge)) && (cartridge.access_reagent_scanner)) + scanmode = 3 + if("Halogen Counter") + if(scanmode == 4) + scanmode = 0 + else if((!isnull(cartridge)) && (cartridge.access_engine)) + scanmode = 4 + if("Honk") + if ( !(last_honk && world.time < last_honk + 20) ) + playsound(loc, 'sound/items/bikehorn.ogg', 50, 1) + last_honk = world.time + if("Gas Scan") + if(scanmode == 5) + scanmode = 0 + else if((!isnull(cartridge)) && (cartridge.access_atmos)) + scanmode = 5 //MESSENGER/NOTE FUNCTIONS=================================== - if ("Edit") - var/n = input(U, "Please enter message", name, notehtml) as message - if (in_range(src, U) && loc == U) - n = copytext(adminscrub(n), 1, MAX_MESSAGE_LEN) - if (mode == 1) - note = replacetext(n, "\n", "
") - notehtml = n - else - U << browse(null, "window=pda") - return - if("Toggle Messenger") - toff = !toff - if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status - silent = !silent - if("Clear")//Clears messages - tnote = null - if("Ringtone") - var/t = input(U, "Please enter new ringtone", name, ttone) as text - if (in_range(src, U) && loc == U) - if (t) - if(src.hidden_uplink && hidden_uplink.check_trigger(U, lowertext(t), lowertext(lock_code))) - U << "The PDA softly beeps." - U << browse(null, "window=pda") - else - t = copytext(sanitize(t), 1, 20) - ttone = t - else - U << browse(null, "window=pda") - return - if("Message") - var/obj/item/device/pda/P = locate(href_list["target"]) - src.create_message(U, P) + if ("Edit") + var/n = input(U, "Please enter message", name, notehtml) as message + if (in_range(src, U) && loc == U) + n = copytext(adminscrub(n), 1, MAX_MESSAGE_LEN) + if (mode == 1) + note = replacetext(n, "\n", "
") + notehtml = n + else + U << browse(null, "window=pda") + return + if("Toggle Messenger") + toff = !toff + if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status + silent = !silent + if("Clear")//Clears messages + tnote = null + if("Ringtone") + var/t = input(U, "Please enter new ringtone", name, ttone) as text + if (in_range(src, U) && loc == U) + if (t) + if(src.hidden_uplink && hidden_uplink.check_trigger(U, lowertext(t), lowertext(lock_code))) + U << "The PDA softly beeps." + U << browse(null, "window=pda") + else + t = copytext(sanitize(t), 1, 20) + ttone = t + else + U << browse(null, "window=pda") + return + if("Message") + var/obj/item/device/pda/P = locate(href_list["target"]) + src.create_message(U, P) - if("Send Honk")//Honk virus - if(istype(cartridge, /obj/item/weapon/cartridge/clown))//Cartridge checks are kind of unnecessary since everything is done through switch. - var/obj/item/device/pda/P = locate(href_list["target"])//Leaving it alone in case it may do something useful, I guess. - if(!isnull(P)) - if (!P.toff && cartridge:honk_charges > 0) - cartridge:honk_charges-- - U.show_message("\blue Virus sent!", 1) - P.honkamt = (rand(15,20)) - else - U << "PDA not found." + if("Send Honk")//Honk virus + if(istype(cartridge, /obj/item/weapon/cartridge/clown))//Cartridge checks are kind of unnecessary since everything is done through switch. + var/obj/item/device/pda/P = locate(href_list["target"])//Leaving it alone in case it may do something useful, I guess. + if(!isnull(P)) + if (!P.toff && cartridge:honk_charges > 0) + cartridge:honk_charges-- + U.show_message("\blue Virus sent!", 1) + P.honkamt = (rand(15,20)) else - U << browse(null, "window=pda") - return - if("Send Silence")//Silent virus - if(istype(cartridge, /obj/item/weapon/cartridge/mime)) - var/obj/item/device/pda/P = locate(href_list["target"]) - if(!isnull(P)) - if (!P.toff && cartridge:mime_charges > 0) - cartridge:mime_charges-- - U.show_message("\blue Virus sent!", 1) - P.silent = 1 - P.ttone = "silence" - else - U << "PDA not found." + U << "PDA not found." + else + U << browse(null, "window=pda") + return + if("Send Silence")//Silent virus + if(istype(cartridge, /obj/item/weapon/cartridge/mime)) + var/obj/item/device/pda/P = locate(href_list["target"]) + if(!isnull(P)) + if (!P.toff && cartridge:mime_charges > 0) + cartridge:mime_charges-- + U.show_message("\blue Virus sent!", 1) + P.silent = 1 + P.ttone = "silence" else - U << browse(null, "window=pda") - return + U << "PDA not found." + else + U << browse(null, "window=pda") + return //SYNDICATE FUNCTIONS=================================== - if("Toggle Door") - if(cartridge && cartridge.access_remote_door) - for(var/obj/machinery/door/poddoor/M in world) - if(M.id == cartridge.remote_door_id) - if(M.density) - M.open() - else - M.close() + if("Toggle Door") + if(cartridge && cartridge.access_remote_door) + for(var/obj/machinery/door/poddoor/M in world) + if(M.id == cartridge.remote_door_id) + if(M.density) + M.open() + else + M.close() - if("Detonate")//Detonate PDA - if(istype(cartridge, /obj/item/weapon/cartridge/syndicate)) - var/obj/item/device/pda/P = locate(href_list["target"]) - if(!isnull(P)) - if (!P.toff && cartridge:shock_charges > 0) - cartridge:shock_charges-- + if("Detonate")//Detonate PDA + if(istype(cartridge, /obj/item/weapon/cartridge/syndicate)) + var/obj/item/device/pda/P = locate(href_list["target"]) + if(!isnull(P)) + if (!P.toff && cartridge:shock_charges > 0) + cartridge:shock_charges-- - var/difficulty = 0 + var/difficulty = 0 - if(P.cartridge) - difficulty += P.cartridge.access_medical - difficulty += P.cartridge.access_security - difficulty += P.cartridge.access_engine - difficulty += P.cartridge.access_clown - difficulty += P.cartridge.access_janitor - else - difficulty += 2 + if(P.cartridge) + difficulty += P.cartridge.access_medical + difficulty += P.cartridge.access_security + difficulty += P.cartridge.access_engine + difficulty += P.cartridge.access_clown + difficulty += P.cartridge.access_janitor + else + difficulty += 2 - if(prob(difficulty * 12) || (P.hidden_uplink)) - U.show_message("\red An error flashes on your [src].", 1) - else if (prob(difficulty * 3)) - U.show_message("\red Energy feeds back into your [src]!", 1) - U << browse(null, "window=pda") - explode() - else - U.show_message("\blue Success!", 1) - P.explode() - else - U << "PDA not found." + if(prob(difficulty * 12) || (P.hidden_uplink)) + U.show_message("\red An error flashes on your [src].", 1) + else if (prob(difficulty * 3)) + U.show_message("\red Energy feeds back into your [src]!", 1) + U << browse(null, "window=pda") + explode() + else + U.show_message("\blue Success!", 1) + P.explode() else - U.unset_machine() - U << browse(null, "window=pda") - return + U << "PDA not found." + else + U.unset_machine() + U << browse(null, "window=pda") + return //pAI FUNCTIONS=================================== - if("pai") - switch(href_list["option"]) - if("1") // Configure pAI device - pai.attack_self(U) - if("2") // Eject pAI device - var/turf/T = get_turf_or_move(src.loc) - if(T) - pai.loc = T + if("pai") + switch(href_list["option"]) + if("1") // Configure pAI device + pai.attack_self(U) + if("2") // Eject pAI device + var/turf/T = get_turf_or_move(src.loc) + if(T) + pai.loc = T //LINK FUNCTIONS=================================== - else//Cartridge menu linking - mode = text2num(href_list["choice"]) - cartridge.mode = mode - cartridge.unlock() - else//If can't interact. - U.unset_machine() - U << browse(null, "window=pda") - return + else//Cartridge menu linking + mode = text2num(href_list["choice"]) + cartridge.mode = mode + cartridge.unlock() else//If not in range or not using the pda. U.unset_machine() U << browse(null, "window=pda") @@ -866,7 +861,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if(issilicon(usr)) return - if ( !(usr.stat || usr.restrained()) ) + if ( can_use(usr) ) if(id) remove_id() else @@ -883,7 +878,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if(issilicon(usr)) return - if ( !(usr.stat || usr.restrained()) ) + if ( can_use(usr) ) var/obj/item/weapon/pen/O = locate() in src if(O) if (istype(loc, /mob)) @@ -943,7 +938,7 @@ var/global/list/obj/item/device/pda/PDAs = list() else //Basic safety check. If either both objects are held by user or PDA is on ground and card is in hand. if(((src in user.contents) && (C in user.contents)) || (istype(loc, /turf) && in_range(src, user) && (C in user.contents)) ) - if(!(user.stat || user.restrained()) )//If they can still act. + if( can_use(user) )//If they can still act. id_check(user, 2) user << "You put the ID into \the [src]'s slot." updateSelfDialog()//Update self dialog on success. diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 1bd4b34547a..803f2b12545 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2029,17 +2029,13 @@ if("virus") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","V") - var/answer = alert("Do you want this to be a random disease or do you have something in mind?",,"Make Your Own","Random","Choose") - if(answer=="Random") - viral_outbreak() - message_admins("[key_name_admin(usr)] has triggered a virus outbreak", 1) - else if(answer == "Choose") - var/list/viruses = list("fake gbs","gbs","magnitis","wizarditis",/*"beesease",*/"brain rot","cold","retrovirus","flu","pierrot's throat","rhumba beat") - var/V = input("Choose the virus to spread", "BIOHAZARD") in viruses - viral_outbreak(V) - message_admins("[key_name_admin(usr)] has triggered a virus outbreak of [V]", 1) + var/answer = alert("Do you want this to be a greater disease or a lesser one?",,"Greater","Lesser") + if(answer=="Lesser") + virus2_lesser_infection() + message_admins("[key_name_admin(usr)] has triggered a lesser virus outbreak.", 1) else - AdminCreateVirus(usr) + virus2_greater_infection() + message_admins("[key_name_admin(usr)] has triggered a greater virus outbreak.", 1) if("retardify") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","RET") diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 162a69b49c7..245a372d2a0 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -269,6 +269,15 @@ if(iscarbon(src)) var/mob/living/carbon/C = src C.handcuffed = initial(C.handcuffed) + if(ishuman(src)) + var/mob/living/carbon/human/H = src + for(var/datum/organ/external/O in H.organs) + O.heal_damage(1000,1000,1,1) + for(var/datum/organ/internal/I in H.internal_organs) + I.damage = 0 + for (var/ID in H.virus2) + var/datum/disease2/disease/V = H.virus2[ID] + V.cure(src) for(var/datum/disease/D in viruses) D.cure(0) if(stat == 2) diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm index 84fcf486e4f..8efff4f1ca4 100644 --- a/code/modules/virus2/disease2.dm +++ b/code/modules/virus2/disease2.dm @@ -162,3 +162,27 @@ var/global/list/virusDB = list() v.fields["spread type"] = spreadtype virusDB["[uniqueID]"] = v return 1 + +proc/virus2_lesser_infection() + var/list/candidates = list() //list of candidate keys + + for(var/mob/living/carbon/human/G in player_list) + if(G.client && G.stat != DEAD) + candidates += G + if(!candidates.len) return + + candidates = shuffle(candidates) + + infect_mob_random_lesser(candidates[1]) + +proc/virus2_greater_infection() + var/list/candidates = list() //list of candidate keys + + for(var/mob/living/carbon/human/G in player_list) + if(G.client && G.stat != DEAD) + candidates += G + if(!candidates.len) return + + candidates = shuffle(candidates) + + infect_mob_random_greater(candidates[1]) From 166a7e57a6231f67b7f94d865baa1a10d1defe51 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Sun, 11 Aug 2013 17:38:12 +0100 Subject: [PATCH 03/10] Cult 'raise' rune how completely heals raised corpse. --- code/game/gamemodes/cult/runes.dm | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index e73cfeb9422..e5be5d60a7a 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -271,21 +271,7 @@ var/list/sacrificed = list() usr << "\red You require a restless spirit which clings to this world. Beckon their prescence with the sacred chants of Nar-Sie." return fizzle() - for(var/datum/organ/external/affecting in corpse_to_raise.organs) - affecting.heal_damage(1000, 1000) - corpse_to_raise.setToxLoss(0) - corpse_to_raise.setOxyLoss(0) - corpse_to_raise.SetParalysis(0) - corpse_to_raise.SetStunned(0) - corpse_to_raise.SetWeakened(0) - corpse_to_raise.radiation = 0 -// corpse_to_raise.buckled = null -// if(corpse_to_raise.handcuffed) -// del(corpse_to_raise.handcuffed) -// corpse_to_raise.update_inv_handcuffed(0) - corpse_to_raise.stat = CONSCIOUS - corpse_to_raise.updatehealth() - corpse_to_raise.UpdateDamageIcon() + corpse_to_raise.revive() corpse_to_raise.key = ghost.key //the corpse will keep its old mind! but a new player takes ownership of it (they are essentially possessed) //This means, should that player leave the body, the original may re-enter From 459aafd5238b5688f495bc7f761dd401f33cd1e6 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Sun, 11 Aug 2013 21:32:02 +0100 Subject: [PATCH 04/10] Fixed borg sprites no resetting with reset board. --- code/game/objects/items/robot/robot_upgrades.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 6020cc834a2..9fccf2e0604 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -30,6 +30,7 @@ R.uneq_all() R.hands.icon_state = "nomod" R.icon_state = "robot" + R.base_icon = "robot" del(R.module) R.module = null R.updatename("Default") From 8d7e75e619911bcd0a8a82fd2ecbfc1deeb8038f Mon Sep 17 00:00:00 2001 From: Erthilo Date: Sun, 11 Aug 2013 21:35:29 +0100 Subject: [PATCH 05/10] Changelog. --- html/changelog.html | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/html/changelog.html b/html/changelog.html index 6f635fef91d..1b7d6690d0b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,15 @@ Changelog Section Stuff which is in development and not yet visible to players or just code related (ie. code improvements for expandability, etc.) should not be listed here. They should be listed in the changelog upon commit though. Thanks. --> +
+

August 8th, 2013

+

Erthilo updated:

+
    +
  • Raise Dead rune now properly heals and revives dead corpse.
  • +
  • Admin-only rejuvenate verb now heals all organs, limbs, and diseases.
  • +
  • Cyborg sprites now correctly reset with reset boards. This means cyborg appearances can now be changed without admin intervention.
  • +
+

2013-11-07

Chinsky updated:

From 16e976035fe1328a30bf25fcb227d6e0373f6bf3 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Mon, 12 Aug 2013 11:50:14 -0700 Subject: [PATCH 06/10] Cortical borer fixes. --- code/modules/mob/living/simple_animal/borer.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index 46ff70493c9..df5ab8b6810 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -193,6 +193,12 @@ mob/living/simple_animal/borer/proc/detatch() src.loc = get_turf(host) controlling = 0 + reset_view(null) + machine = null + + host.reset_view(null) + host.machine = null + host.verbs -= /mob/living/carbon/human/proc/release_control host.verbs -= /mob/living/carbon/human/proc/punish_host host.verbs -= /mob/living/carbon/human/proc/spawn_larvae @@ -230,6 +236,7 @@ mob/living/simple_animal/borer/proc/detatch() if(M.has_brain_worms()) src << "You cannot infest someone who is already infested!" + return M << "Something slimy begins probing at the opening of your ear canal..." src << "You slither up [M] and begin probing at their ear canal..." From 5f0515fb503ee0612f92d44f2de29dc9cb58df00 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Mon, 12 Aug 2013 13:36:21 -0700 Subject: [PATCH 07/10] Further borer tweaks. --- code/modules/mob/living/simple_animal/borer.dm | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index df5ab8b6810..970bd26181e 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -42,7 +42,6 @@ var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin. var/mob/living/carbon/human/host // Human host for the brain worm. var/truename // Name used for brainworm-speak. - var/bonded // Var for full bonding with the host brain. var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. var/controlling // Used in human death check. @@ -135,7 +134,7 @@ spawn(300+(host.brainloss*5)) - if(!host || !src) return + if(!host || !src || controlling) return else src << "\red You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system." @@ -165,7 +164,6 @@ mob/living/simple_animal/borer/verb/release_host() if(!host || !src) return src << "You begin disconnecting from [host]'s synapses and prodding at their internal ear canal." - bonded = 0 if(!host.stat) host << "An odd, uncomfortable pressure begins to build inside your skull, behind your ear..." @@ -264,7 +262,6 @@ mob/living/simple_animal/borer/proc/detatch() var/datum/organ/external/head = M.get_organ("head") head.implants += src src.loc = M - bonded = 0 host_brain.name = M.name host_brain.real_name = M.real_name From b23c68522169515d69c37b77754778464edaf8a6 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Mon, 12 Aug 2013 13:44:51 -0700 Subject: [PATCH 08/10] Borer surgery fix. --- code/modules/surgery/implant.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 7e240f737e3..edc89ac0ac2 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -184,7 +184,10 @@ //Handle possessive brain borers. if(istype(obj,/mob/living/simple_animal/borer)) - target.release_control() + var/mob/living/simple_animal/borer/worm = obj + if(worm.controlling) + target.release_control() + worm.detatch() obj.loc = get_turf(target) if(istype(obj,/obj/item/weapon/implant)) From 5ecee57a2c9de9ad0fd468b907a9d33e2666bb47 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Mon, 12 Aug 2013 14:45:42 -0700 Subject: [PATCH 09/10] Fixed failure to remove borer verbs on successful resist. --- code/modules/mob/screen.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/mob/screen.dm b/code/modules/mob/screen.dm index c83ba829a9d..441a0d961fe 100644 --- a/code/modules/mob/screen.dm +++ b/code/modules/mob/screen.dm @@ -631,6 +631,10 @@ H.name = "host brain" H.real_name = "host brain" + verbs -= /mob/living/carbon/human/proc/release_control + verbs -= /mob/living/carbon/human/proc/punish_host + verbs -= /mob/living/carbon/human/proc/spawn_larvae + return //resisting grabs (as if it helps anyone...) From bcad5a787dcbb2d0c772e74e537d9d631f5208cc Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Mon, 12 Aug 2013 14:46:03 -0700 Subject: [PATCH 10/10] Fixed listing of unrelated creatures when infesting. --- code/modules/mob/living/simple_animal/borer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index 970bd26181e..647f9318afa 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -224,7 +224,7 @@ mob/living/simple_animal/borer/proc/detatch() return var/list/choices = list() - for(var/mob/living/C in view(1,src)) + for(var/mob/living/carbon/human/C in view(1,src)) if(istype(C,/mob/living/carbon/human) && C.stat != 2) choices += C