diff --git a/code/WorkInProgress/carn/Explosion2.dm b/code/WorkInProgress/carn/Explosion2.dm index a1f2687cc85..06b85690024 100644 --- a/code/WorkInProgress/carn/Explosion2.dm +++ b/code/WorkInProgress/carn/Explosion2.dm @@ -9,7 +9,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa if(!epicenter) return if(adminlog) - message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ") + message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z] - JMP)") log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ") playsound(epicenter, 'sound/effects/explosionfar.ogg', 100, 1, round(devastation_range*2,1) ) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index d160e662e84..784ba44c188 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -490,7 +490,7 @@ its easier to just keep the beam vertical. var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblClickNew() proc is being tested) -/*/atom/proc/DblClickNew() +/atom/proc/DblClickNew() if(!usr) return // TODO DOOHL: Intergrate params to new proc. Saved for another time because var/valid_place is a fucking brainfuck @@ -792,7 +792,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl if (in_range) if ( !animal.restrained() ) - attack_animal(animal)*/ + attack_animal(animal) /atom/DblClick(location, control, params) //TODO: DEFERRED: REWRITE if(!usr) return @@ -943,9 +943,9 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl // ------- ( CAN USE ITEM OR HAS 1 SECOND USE DELAY ) AND NOT CLICKING ON SCREEN ------- - if (usr.last_click + usr.click_delay < world.time) - usr.last_click = world.time - usr.click_delay = 0 + if (usr.next_move < world.time) + usr.prev_move = usr.next_move + usr.next_move = world.time + 10 else // ------- ALREADY USED ONE ITEM WITH USE DELAY IN THE PREVIOUS SECOND ------- return @@ -1109,9 +1109,10 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl // ------- ITEM INACESSIBLE OR CLICKING ON SCREEN ------- if (istype(src, /obj/screen)) // ------- IT'S THE HUD YOU'RE CLICKING ON ------- - usr.delay_click(2) - if (usr.last_click + usr.click_delay < world.time) - usr.last_click = world.time + usr.prev_move = usr.next_move + usr:lastDblClick = world.time + 2 + if (usr.next_move < world.time) + usr.next_move = world.time + 2 else return @@ -1143,7 +1144,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl src.hand_al(usr, usr.hand) else // ------- YOU ARE CLICKING ON AN OBJECT THAT'S INACCESSIBLE TO YOU AND IS NOT YOUR HUD ------- - if((LASER in usr:mutations) && usr:a_intent == "hurt" && usr.last_click + usr.click_delay < world.time) + if((LASER in usr:mutations) && usr:a_intent == "hurt" && world.time >= usr.next_move) // ------- YOU HAVE THE LASER MUTATION, YOUR INTENT SET TO HURT AND IT'S BEEN MORE THAN A DECISECOND SINCE YOU LAS TATTACKED ------- var/turf/T = get_turf(usr) @@ -1168,7 +1169,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl spawn( 1 ) A.process() - usr.delay_click(6) + usr.next_move = world.time + 6 return /atom/proc/ShiftClick(var/mob/M as mob) 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 diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 5a1e12a191b..4e269152ff9 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -102,6 +102,8 @@ var/global/vox_kills = 0 //Used to check the Inviolate. vox.age = rand(12,20) vox.dna.mutantrace = "vox" vox.set_species("Vox") + vox.languages = list() // Removing language from chargen. + vox.flavor_text = "" vox.add_language("Vox-pidgin") vox.h_style = "Short Vox Quills" vox.flavor_text = "" diff --git a/code/game/machinery/podmen.dm b/code/game/machinery/podmen.dm index 1e8eb4e5368..730f69e6643 100644 --- a/code/game/machinery/podmen.dm +++ b/code/game/machinery/podmen.dm @@ -74,17 +74,16 @@ Growing it to term with nothing injected will grab a ghost from the observers. * ghost = source else // If no sample was injected or revival is not allowed, we grab an interested observer. for(var/mob/dead/observer/O in player_list) - if(O.client) - var/response = alert(O, "Someone is harvesting a replica pod. Would you like to play as a Dionaea?", "Replica pod harvest", "Yes", "No") + if(O.client && O.client.prefs.be_special & BE_PLANT) + var/response = alert(O, "Someone is harvesting a replica pod. Would you like to play as a Dionaea?", "Replica pod harvest", "Yes", "No", "Never for this round.") if(response == "Yes") candidates += O + else if(response == "Never for this round") + O.client.prefs.be_special ^= BE_PLANT if(!do_after(user, 100)) return - if(!src || !user) - return - if(candidates.len) ghost = pick(candidates) diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index 91ea8124393..cc4d766f25a 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -19,10 +19,10 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa epicenter = get_turf(epicenter) if(!epicenter) return - + playsound(epicenter, 'sound/effects/explosionfar.ogg', 100, 1, round(devastation_range*2,1) ) playsound(epicenter, "explosion", 100, 1, round(devastation_range,1) ) - + var/close = range(world.view+round(devastation_range,1), epicenter) // to all distanced mobs play a different sound for(var/mob/M in world) if(M.z == epicenter.z) if(!(M in close)) @@ -30,7 +30,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa if(M.ear_deaf <= 0 || !M.ear_deaf) if(!istype(M.loc,/turf/space)) M << 'explosionfar.ogg' if(adminlog) - message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])") + message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (JMP)") log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ") var/lighting_controller_was_processing = lighting_controller.processing //Pause the lighting updates for a bit @@ -85,4 +85,4 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa proc/secondaryexplosion(turf/epicenter, range) for(var/turf/tile in range(range, epicenter)) - tile.ex_act(2) + tile.ex_act(2) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 281c23f0fd0..c55684eb197 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -131,7 +131,8 @@ else if(isliving(src.loc)) return - user.delay_click(2) + user.lastDblClick = world.time + 2 + user.next_move = world.time + 2 src.pickup(user) add_fingerprint(user) user.put_in_active_hand(src) @@ -165,7 +166,8 @@ if(istype(src.loc, /mob/living)) return src.pickup(user) - user.delay_click(2) + user.lastDblClick = world.time + 2 + user.next_move = world.time + 2 user.put_in_active_hand(src) return @@ -227,8 +229,6 @@ log_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(src.damtype)])" ) msg_admin_attack("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG - user.delay_click(10) - //spawn(1800) // this wont work right // M.lastattacker = null ///////////////////////// 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/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 7a76812b34e..5011f5346ee 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.camera.network.Remove(list("Medical","MINE")) diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 6a26f70e1f5..77cf343de21 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -14,6 +14,7 @@ m_amt = 90 attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") var/max_water = 50 + var/last_use = 1.0 var/safety = 1 var/sprite_name = "fire_extinguisher" @@ -66,6 +67,11 @@ usr << "\red \The [src] is empty." return + if (world.time < src.last_use + 20) + return + + src.last_use = world.time + playsound(src.loc, 'sound/effects/extinguish.ogg', 75, 1, -3) var/direction = get_dir(src,target) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index a0c3be517b1..a6c3b2fede4 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -159,9 +159,14 @@ Implant Specifics:
"} return if(istype(imp_in, /mob/)) var/mob/T = imp_in + + message_admins("Explosive implant triggered in [T] ([T.key]). (JMP) ") + log_game("Explosive implant triggered in [T] ([T.key]).") + T.gib() explosion(get_turf(imp_in), 1, 3, 4, 6, 3) var/turf/t = get_turf(imp_in) + if(t) t.hotspot_expose(3500,125) @@ -455,8 +460,8 @@ the implant may become unstable and either pre-maturely inject the subject or si implanted(mob/source as mob) src.activation_emote = input("Choose activation emote:") in list("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") if (source.mind) - source.mind.store_memory("Freedom implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) - source << "The implanted freedom implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate." + source.mind.store_memory("Compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) + source << "The implanted compressed matter implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate." return 1 islegal() @@ -464,4 +469,4 @@ the implant may become unstable and either pre-maturely inject the subject or si /obj/item/weapon/implant/cortical name = "cortical stack" - desc = "A fist-sized mass of biocircuits and chips." \ No newline at end of file + desc = "A fist-sized mass of biocircuits and chips." diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 48c51cdacff..c2514a11241 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -35,7 +35,6 @@ user.visible_message("[user] kicks [src].", \ "You kick [src].", \ "You hear twisting metal.") - user.delay_click(10) if(shock(user, 70)) return @@ -52,7 +51,6 @@ user.visible_message("[user] mangles [src].", \ "You mangle [src].", \ "You hear twisting metal.") - user.delay_click(10) if(!shock(user, 70)) health -= 5 @@ -66,7 +64,6 @@ user.visible_message("[user] smashes against [src].", \ "You smash against [src].", \ "You hear twisting metal.") - user.delay_click(10) health -= rand(2,3) healthcheck() @@ -79,7 +76,6 @@ M.visible_message("[M] smashes against [src].", \ "You smash against [src].", \ "You hear twisting metal.") - M.delay_click(10) health -= M.melee_damage_upper healthcheck() @@ -164,10 +160,8 @@ else if(istype(W, /obj/item/weapon/shard)) health -= W.force * 0.1 - user.delay_click(10) else if(!shock(user, 70)) playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) - user.delay_click(10) switch(W.damtype) if("fire") health -= W.force diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 65fefec03c7..28791229725 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -104,19 +104,16 @@ new /obj/item/weapon/shard(loc) if(reinf) new /obj/item/stack/rods(loc) del(src) - usr.delay_click(10) else if (usr.a_intent == "hurt") playsound(src.loc, 'glassknock.ogg', 80, 1) usr.visible_message("\red [usr.name] bangs against the [src.name]!", \ "\red You bang against the [src.name]!", \ "You hear a banging sound.") - usr.delay_click(5) else playsound(src.loc, 'glassknock.ogg', 80, 1) usr.visible_message("[usr.name] knocks on the [src.name].", \ "You knock on the [src.name].", \ "You hear a knocking sound.") - usr.delay_click(5) return @@ -131,11 +128,9 @@ new /obj/item/weapon/shard(loc) if(reinf) new /obj/item/stack/rods(loc) del(src) - user.delay_click(10) else //for nicer text~ user.visible_message("[user] smashes into [src]!") playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) - user.delay_click(10) /obj/structure/window/attack_alien(mob/user as mob) @@ -163,7 +158,6 @@ var/mob/living/M = G.affecting var/state = G.state del(W) //gotta delete it here because if window breaks, it won't get deleted - user.delay_click(10) switch (state) if(1) M.apply_damage(7) @@ -203,7 +197,6 @@ else if(W.damtype == BRUTE || W.damtype == BURN) hit(W.force) - user.delay_click(10) if(health <= 7) anchored = 0 update_nearby_icons() diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 44f1cfdd820..1b55ca6b039 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -470,12 +470,15 @@ dat += "" if(ticker.mode.raiders.len > 0) + dat += "
" for(var/datum/mind/raider in ticker.mode.raiders) var/mob/M = raider.current if(M) dat += "" dat += "" dat += "" + dat += "
Raiders
[M.real_name][M.client ? "" : " (logged out)"][M.stat == 2 ? " (DEAD)" : ""]PMShow Objective
" + /* if(ticker.mode.ninjas.len > 0) dat += "
" 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/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index dad75f8219a..1e328970fd8 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -62,7 +62,7 @@ */ /client/proc/fix_next_move() -/* set category = "Debug" + set category = "Debug" set name = "Unfreeze Everyone" var/largest_move_time = 0 var/largest_click_time = 0 @@ -90,7 +90,6 @@ message_admins("[key_name_admin(largest_click_mob)] had the largest click delay with [largest_click_time] frames / [largest_click_time/10] seconds!", 1) message_admins("world.time = [world.time]", 1) feedback_add_details("admin_verb","UFE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - */ return /client/proc/radio_report() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 92f30dc8f36..8e977bbc7d1 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -16,6 +16,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set "infested monkey" = IS_MODE_COMPILED("monkey"), // 9 "ninja" = "true", // 10 "vox raider" = IS_MODE_COMPILED("heist"), // 11 + "diona" = 1, // 12 ) var/const/MAX_SAVE_SLOTS = 10 @@ -806,7 +807,7 @@ datum/preferences if(config.usealienwhitelist) //If we're using the whitelist, make sure to check it! for(var/S in whitelisted_species) - if(is_alien_whitelisted(user,S)) + if(is_alien_whitelisted(user,S) || (S == "Unathi" && is_alien_whitelisted(user,"Soghun"))) new_species += S whitelisted = 1 if(!whitelisted) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f70d3956b03..8c41ec8c9a3 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1030,6 +1030,7 @@ if (!O.amputated) O.status &= ~ORGAN_DESTROYED O.wounds.Cut() + O.heal_damage(1000,1000,1,1) var/datum/organ/external/head/h = organs_by_name["head"] h.disfigured = 0 @@ -1049,6 +1050,10 @@ for (var/datum/disease/virus in viruses) virus.cure() + for (var/ID in virus2) + var/datum/disease2/disease/V = virus2[ID] + V.cure(src) + ..() /mob/living/carbon/human/proc/is_lung_ruptured() @@ -1116,9 +1121,9 @@ mob/living/carbon/human/yank_out_object() set desc = "Remove an embedded item at the cost of bleeding and pain." set src in view(1) - if(!isliving(usr) || usr.last_click + usr.click_delay > world.time) + if(!isliving(usr) || usr.next_move > world.time) return - usr.delay_click(20) + usr.next_move = world.time + 20 if(usr.stat == 1) usr << "You are unconcious and cannot do that!" @@ -1353,4 +1358,4 @@ mob/living/carbon/human/yank_out_object() else src << "You do not have enough chemicals stored to reproduce." - return \ No newline at end of file + return diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index 46ff70493c9..4ea4a23553f 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -38,11 +38,11 @@ attacktext = "nips" friendly = "prods" wander = 0 + pass_flags = PASSTABLE 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. @@ -110,6 +110,21 @@ src << "You drop words into [host]'s mind: \"[message]\"" host << "Your own thoughts speak: \"[message]\"" +/mob/living/simple_animal/borer/Stat() + ..() + statpanel("Status") + + if(emergency_shuttle) + if(emergency_shuttle.online && emergency_shuttle.location < 2) + var/timeleft = emergency_shuttle.timeleft() + if (timeleft) + stat(null, "ETA-[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]") + + if (client.statpanel == "Status") + stat("Chemicals", chemicals) + +// VERBS! + /mob/living/simple_animal/borer/proc/borer_speak(var/message) if(!message) return @@ -135,7 +150,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." @@ -149,7 +164,31 @@ host.verbs += /mob/living/carbon/human/proc/punish_host host.verbs += /mob/living/carbon/human/proc/spawn_larvae -mob/living/simple_animal/borer/verb/release_host() +/mob/living/simple_animal/borer/verb/secrete_chemicals() + set category = "Alien" + set name = "Secrete Chemicals" + set desc = "Push some chemicals into your host's bloodstream." + + if(!host) + src << "You are not inside a host body." + return + + if(stat) + src << "You cannot secrete chemicals in your current state." + + if(chemicals < 50) + src << "You don't have enough chemicals!" + + var/chem = input("Select a chemical to secrete.", "Chemicals") in list("bicaridine","tramadol","hyperzine") + + if(chemicals < 50 || !host || controlling || !src || stat) //Sanity check. + return + + src << "\red You squirt a measure of [chem] from your reservoirs into [host]'s bloodstream." + host.reagents.add_reagent(chem, 15) + chemicals -= 50 + +/mob/living/simple_animal/borer/verb/release_host() set category = "Alien" set name = "Release Host" set desc = "Slither out of your host." @@ -165,7 +204,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..." @@ -193,6 +231,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 @@ -220,7 +264,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 @@ -230,6 +274,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..." @@ -257,7 +302,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 @@ -265,4 +309,62 @@ mob/living/simple_animal/borer/proc/detatch() return else src << "They are no longer in range!" - return \ No newline at end of file + return + +/mob/living/simple_animal/borer/verb/ventcrawl() + set name = "Crawl through Vent" + set desc = "Enter an air vent and crawl through the pipe system." + set category = "Alien" + +// if(!istype(V,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent)) +// return + var/obj/machinery/atmospherics/unary/vent_pump/vent_found + var/welded = 0 + for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src)) + if(!v.welded) + vent_found = v + break + else + welded = 1 + if(vent_found) + if(vent_found.network&&vent_found.network.normal_members.len) + var/list/vents = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in vent_found.network.normal_members) + if(temp_vent.loc == loc) + continue + vents.Add(temp_vent) + var/list/choices = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/vent in vents) + if(vent.loc.z != loc.z) + continue + var/atom/a = get_turf(vent) + choices.Add(a.loc) + var/turf/startloc = loc + var/obj/selection = input("Select a destination.", "Duct System") in choices + var/selection_position = choices.Find(selection) + if(loc==startloc) + var/obj/target_vent = vents[selection_position] + if(target_vent) + loc = target_vent.loc + else + src << "\blue You need to remain still while entering a vent." + else + src << "\blue This vent is not connected to anything." + else if(welded) + src << "\red That vent is welded." + else + src << "\blue You must be standing on or beside an air vent to enter it." + return + +//copy paste from alien/larva, if that func is updated please update this one alsoghost +/mob/living/simple_animal/borer/verb/hide() + set name = "Hide" + set desc = "Allows to hide beneath tables or certain items. Toggled on or off." + set category = "Alien" + + if (layer != TURF_LAYER+0.2) + layer = TURF_LAYER+0.2 + src << text("\blue You are now hiding.") + else + layer = MOB_LAYER + src << text("\blue You have stopped hiding.") \ No newline at end of file diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index be1fb566b7a..1c3498802d1 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -33,7 +33,7 @@ if(hud_used) del(hud_used) //remove the hud objects hud_used = new /datum/hud(src) - last_click = world.time + next_move = 1 sight |= SEE_SELF ..() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ded645a11ef..08aad3d7ad6 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -607,6 +607,11 @@ var/list/slot_equipment_priority = list( \ src.pulling = AM AM.pulledby = src + //Attempted fix for people flying away through space when cuffed and dragged. + if(ismob(AM)) + var/mob/pulled = AM + pulled.inertia_dir = 0 + /mob/proc/can_use_hands() return @@ -900,9 +905,9 @@ mob/verb/yank_out_object() set desc = "Remove an embedded item at the cost of bleeding and pain." set src in view(1) - if(!isliving(usr) || usr.last_click + usr.click_delay > world.time) + if(!isliving(usr) || usr.next_move > world.time) return - usr.delay_click(20) + usr.next_move = world.time + 20 if(usr.stat == 1) usr << "You are unconcious and cannot do that!" @@ -955,4 +960,4 @@ mob/verb/yank_out_object() pinned -= O if(!pinned.len) anchored = 0 - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 6cbd091c0c1..b82f6736bbe 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -54,8 +54,8 @@ var/sdisabilities = 0 //Carbon var/disabilities = 0 //Carbon var/atom/movable/pulling = null - var/last_click = null - var/click_delay = 0 + var/next_move = null + var/prev_move = null var/monkeyizing = null //Carbon var/other = 0.0 var/hand = null diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 68941a4d090..5363c05a116 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -128,7 +128,7 @@ return if(killing) return - if (assailant.last_click + assailant.click_delay > world.time) + if (assailant.next_move > world.time) return if ((!( assailant.canmove ) || assailant.lying)) //SN src = null @@ -140,7 +140,7 @@ if (!( killing )) assailant.visible_message("\red [assailant] has temporarily tightened \his grip on [affecting]!") //Foreach goto(97) - assailant.delay_click(10) + assailant.next_move = world.time + 10 //affecting.stunned = max(2, affecting.stunned) //affecting.paralysis = max(1, affecting.paralysis) affecting.losebreath = min(affecting.losebreath + 1, 3) @@ -235,7 +235,7 @@ assailant.attack_log += text("\[[time_stamp()]\] Strangled (kill intent) [affecting.name] ([affecting.ckey])") log_attack("[assailant.name] ([assailant.ckey]) Strangled (kill intent) [affecting.name] ([affecting.ckey])") - assailant.delay_click(10) + assailant.next_move = world.time + 10 affecting.losebreath += 1 else assailant.visible_message("\red [assailant] was unable to tighten \his grip on [affecting]'s neck!") diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 981d03962e7..29b2bfeac3c 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -454,7 +454,3 @@ var/list/intents = list("help","disarm","grab","hurt") hud_used.action_intent.icon_state = "harm" else hud_used.action_intent.icon_state = "help" - -/mob/proc/delay_click(var/delay) - src.click_delay = max(src.click_delay, delay) - return src.click_delay diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 7bb662f91ea..ca9e3078246 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -351,7 +351,7 @@ if(client.prefs.species) chosen_species = all_species[client.prefs.species] if(chosen_species) - if(is_alien_whitelisted(src, client.prefs.species) || !config.usealienwhitelist || !(chosen_species.flags & WHITELISTED)) + if(is_alien_whitelisted(src, client.prefs.species) || (client.prefs.species == "Unathi" && is_alien_whitelisted(src, "Soghun")) || !config.usealienwhitelist || !(chosen_species.flags & WHITELISTED)) new_character.set_species(client.prefs.species) if(chosen_species.language) new_character.add_language(chosen_species.language) diff --git a/code/modules/mob/screen.dm b/code/modules/mob/screen.dm index c83ba829a9d..5742b95cb2d 100644 --- a/code/modules/mob/screen.dm +++ b/code/modules/mob/screen.dm @@ -600,9 +600,9 @@ set name = "Resist" set category = "IC" - if(!isliving(usr) || usr.last_click + usr.click_delay > world.time) + if(!isliving(usr) || usr.next_move > world.time) return - usr.delay_click(20) + usr.next_move = world.time + 20 var/mob/living/L = usr @@ -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...) @@ -666,7 +670,7 @@ if(iscarbon(L)) var/mob/living/carbon/C = L if( C.handcuffed ) - C.delay_click(100) + C.next_move = world.time + 100 C.last_special = world.time + 100 C << "\red You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)" for(var/mob/O in viewers(L)) @@ -700,7 +704,7 @@ // breakout_time++ //Harder to get out of welded lockers than locked lockers //okay, so the closet is either welded or locked... resist!!! - usr.delay_click(100) + usr.next_move = world.time + 100 L.last_special = world.time + 100 L << "\red You lean on the back of \the [C] and start pushing the door open. (this will take about [breakout_time] minutes)" for(var/mob/O in viewers(usr.loc)) @@ -753,7 +757,7 @@ else if(iscarbon(L)) var/mob/living/carbon/CM = L if(CM.handcuffed && CM.canmove && (CM.last_special <= world.time)) - CM.delay_click(100) + CM.next_move = world.time + 100 CM.last_special = world.time + 100 if(isalienadult(CM) || (HULK in usr.mutations))//Don't want to do a lot of logic gating here. usr << "\red You attempt to break your handcuffs. (This will take around 5 seconds and you need to stand still)" @@ -791,7 +795,7 @@ CM.handcuffed = null CM.update_inv_handcuffed() else if(CM.legcuffed && CM.canmove && (CM.last_special <= world.time)) - CM.delay_click(100) + CM.next_move = world.time + 100 CM.last_special = world.time + 100 if(isalienadult(CM) || (HULK in usr.mutations))//Don't want to do a lot of logic gating here. usr << "\red You attempt to break your legcuffs. (This will take around 5 seconds and you need to stand still)" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 7eabd7e59c2..35af50877cb 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -131,7 +131,7 @@ in_chamber.loc = get_turf(user) in_chamber.starting = get_turf(user) in_chamber.shot_from = src - usr.delay_click(4) + user.next_move = world.time + 4 in_chamber.silenced = silenced in_chamber.current = curloc in_chamber.yo = targloc.y - curloc.y diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index f5d3fee5bb4..5d639fc3ba1 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -1019,7 +1019,7 @@ datum required_other = 1 on_reaction(var/datum/reagents/holder) - var/blocked = list(/mob/living/simple_animal/hostile, + /*var/blocked = list(/mob/living/simple_animal/hostile, /mob/living/simple_animal/hostile/pirate, /mob/living/simple_animal/hostile/pirate/ranged, /mob/living/simple_animal/hostile/russian, @@ -1051,7 +1051,9 @@ datum C.loc = get_turf_loc(holder.my_atom) if(prob(50)) for(var/j = 1, j <= rand(1, 3), j++) - step(C, pick(NORTH,SOUTH,EAST,WEST)) + step(C, pick(NORTH,SOUTH,EAST,WEST))*/ + for(var/mob/O in viewers(get_turf_loc(holder.my_atom), null)) + O.show_message(text("\red The slime core fizzles disappointingly,"), 1) //Silver slimebork diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index a70ba4ab8ea..f14712865aa 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -68,11 +68,17 @@ /obj/item/weapon/reagent_containers/hypospray/autoinjector/attack(mob/M as mob, mob/user as mob) ..() - if(reagents.total_volume <= 0) +/*if(reagents.total_volume <= 0) //Prevents autoinjectors to be refilled. flags &= ~OPENCONTAINER +*/ update_icon() return +/obj/item/weapon/reagent_containers/hypospray/autoinjector/attackby(obj/item/I as obj, mob/user as mob) + ..() + update_icon() //Allows the autoinjector to be reset. + return + /obj/item/weapon/reagent_containers/hypospray/autoinjector/update_icon() if(reagents.total_volume > 0) icon_state = "[initial(icon_state)]1" 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)) 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]) diff --git a/code/setup.dm b/code/setup.dm index 7e6f0cb7a98..e4beb3781df 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -641,6 +641,7 @@ var/list/TAGGERLOCATIONS = list("Disposals", #define BE_MONKEY 512 #define BE_NINJA 1024 #define BE_RAIDER 2048 +#define BE_PLANT 4096 var/list/be_special_flags = list( "Traitor" = BE_TRAITOR, @@ -654,7 +655,8 @@ var/list/be_special_flags = list( "Cultist" = BE_CULTIST, "Monkey" = BE_MONKEY, "Ninja" = BE_NINJA, - "Raider" = BE_RAIDER + "Raider" = BE_RAIDER, + "Diona" = BE_PLANT ) #define AGE_MIN 17 //youngest a character can be diff --git a/html/changelog.html b/html/changelog.html index bb4b1216868..844c8ce2bc3 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -57,7 +57,16 @@ Stuff which is in development and not yet visible to players or just code relate (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:

+ +
+

2013/08/4

Chinsky updated:

Ninjas