diff --git a/code/defines/mob/living/silicon/robot.dm b/code/defines/mob/living/silicon/robot.dm index ebcf1457b69..41256bd2de6 100644 --- a/code/defines/mob/living/silicon/robot.dm +++ b/code/defines/mob/living/silicon/robot.dm @@ -3,6 +3,7 @@ icon = 'robots.dmi'// icon_state = "robot" health = 300 + canmove = 0 #define BORGMESON 1 #define BORGTHERM 2 diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 3cf33b28c45..ec058932b43 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -13,11 +13,10 @@ /proc/event() event = 1 - var/eventNumbersToPickFrom = list(1,2,4,5,6,7,8,9,10,11,12,13) //so ninjas don't cause "empty" events. + var/eventNumbersToPickFrom = list(1,2,4,5,6,7,8,9,10,11,12,13,14) //so ninjas don't cause "empty" events. if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round. eventNumbersToPickFrom += 3 - switch(pick(eventNumbersToPickFrom)) if(1) command_alert("Meteors have been detected on collision course with the station.", "Meteor Alert") @@ -83,7 +82,8 @@ appendicitis() if(13) IonStorm() - + if(14) + spacevine_infestation() /proc/power_failure() command_alert("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure") diff --git a/code/game/gamemodes/events/miniblob.dm b/code/game/gamemodes/events/miniblob.dm index 5827f9cabed..84c3598cef7 100644 --- a/code/game/gamemodes/events/miniblob.dm +++ b/code/game/gamemodes/events/miniblob.dm @@ -1,7 +1,7 @@ /proc/mini_blob_event() var/turf/T = pick(blobstart) - var/obj/effect/blob/bl = new /obj/effect/blob( T.loc, 30 ) + var/obj/effect/blob/bl = new /obj/effect/blob( T, 30 ) spawn(0) bl.Life() bl.Life() diff --git a/code/game/gamemodes/events/kudzu.dm b/code/game/gamemodes/events/spacevines.dm similarity index 51% rename from code/game/gamemodes/events/kudzu.dm rename to code/game/gamemodes/events/spacevines.dm index 5281f43cf57..85426583467 100644 --- a/code/game/gamemodes/events/kudzu.dm +++ b/code/game/gamemodes/events/spacevines.dm @@ -1,19 +1,17 @@ -// SPACE VINE OR KUDZU - +// SPACE VINES /obj/effect/spacevine - name = "Space Kudzu" + name = "space vines" desc = "An extremely expansionistic species of vine." - icon = 'kudzu.dmi' + icon = 'spacevines.dmi' icon_state = "Light1" anchored = 1 density = 0 - var/energy = 0 //Energy sounds like an arbitrary-enough variable name. + pass_flags = PASSTABLE | PASSGRILLE + var/energy = 0 var/obj/effect/spacevine_controller/master = null New() - if(istype(src.loc, /turf/space)) - del(src) - return + return Del() if(master) @@ -22,37 +20,63 @@ ..() attackby(obj/item/weapon/W as obj, mob/user as mob) - if (!W) return - if (!user) return - if (istype(W, /obj/item/weapon/circular_saw)) del src - if (istype(W, /obj/item/weapon/kitchen/utensil/knife)) del src - if (istype(W, /obj/item/weapon/scalpel)) del src - if (istype(W, /obj/item/weapon/screwdriver)) del src - if (istype(W, /obj/item/weapon/shard)) del src - if (istype(W, /obj/item/weapon/weldingtool)) del src - if (istype(W, /obj/item/weapon/wirecutters)) del src + if (!W || !user || !W.type) return + switch(W.type) + if(/obj/item/weapon/circular_saw) del src + if(/obj/item/weapon/kitchen/utensil/knife) del src + if(/obj/item/weapon/scalpel) del src + if(/obj/item/weapon/fireaxe) del src + + //less effective weapons + if(/obj/item/weapon/wirecutters) + if(prob(25)) del src + if(/obj/item/weapon/shard) + if(prob(25)) del src + + else //weapons with subtypes + if(istype(W, /obj/item/weapon/melee/energy/sword)) del src + else if(istype(W, /obj/item/weapon/weldingtool)) + if(W:welding) del src + //TODO: add plant-b-gone ..() + attack_hand(mob/user as mob) + for(var/mob/M in src.loc) + if(M.buckled == src) + if(prob(50)) + if(M == user) + user << "\red You break free from the vines!" + else + user << "\red You rip away at the vines and free [M]!" + M << "\red [user] frees you from the vines!" + M.buckled = null + else + user << "\red You rip away at the vines..." + break //only process one captured mob. + + attack_paw(mob/user as mob) + return src.attack_hand(user) + /obj/effect/spacevine_controller var/list/obj/effect/spacevine/vines = list() var/list/growth_queue = list() var/reached_collapse_size var/reached_slowdown_size //What this does is that instead of having the grow minimum of 1, required to start growing, the minimum will be 0, - //meaning if you get the kudzu's size to something less than 20 plots, it won't grow anymore. + //meaning if you get the spacevines' size to something less than 20 plots, it won't grow anymore. New() if(!istype(src.loc,/turf/simulated/floor)) del(src) - spawn_kudzu_piece(src.loc) + spawn_spacevine_piece(src.loc) processing_objects.Add(src) Del() processing_objects.Remove(src) ..() - proc/spawn_kudzu_piece(var/turf/location) + proc/spawn_spacevine_piece(var/turf/location) var/obj/effect/spacevine/SV = new(location) growth_queue += SV vines += SV @@ -60,7 +84,7 @@ process() if(!vines) - del(src) //Kudzu exterminated + del(src) //space vines exterminated. Remove the controller return if(!growth_queue) del(src) //Sanity check @@ -88,39 +112,47 @@ i++ queue_end += SV growth_queue -= SV - if(SV.energy < 2) - if(prob(10)) + if(SV.energy < 2) //If tile isn't fully grown + if(prob(20)) SV.grow() + else //If tile is fully grown + SV.grab() + //if(prob(25)) SV.spread() if(i >= length) break growth_queue = growth_queue + queue_end - //sleep(5) //src.process() /obj/effect/spacevine/proc/grow() - switch(energy) - if (0) - src.icon_state = pick("Med1", "Med2", "Med3") - energy = 1 - src.opacity = 1 - if (1) - src.icon_state = pick("Hvy1", "Hvy2", "Hvy3") - energy = 2 - src.density = 1 + if(!energy) + src.icon_state = pick("Med1", "Med2", "Med3") + energy = 1 + src.opacity = 1 + layer = 5 + else + src.icon_state = pick("Hvy1", "Hvy2", "Hvy3") + energy = 2 + +/obj/effect/spacevine/proc/grab() + for(var/mob/living/carbon/V in src.loc) + if((V.stat != DEAD) && (V.buckled != src)) //if mob not dead or captured + V.buckled = src + V << "\red The vines [pick("wind", "tangle")] around you!" + break //only capture one mob at a time. /obj/effect/spacevine/proc/spread() var/direction = pick(cardinal) - if(istype(get_step(src,direction),/turf/simulated/floor)) - var/turf/simulated/floor/F = get_step(src,direction) + var/step = get_step(src,direction) + if(istype(step,/turf/simulated/floor)) + var/turf/simulated/floor/F = step if(!locate(/obj/effect/spacevine,F)) if(F.Enter(src)) if(master) - master.spawn_kudzu_piece( F ) - + master.spawn_spacevine_piece( F ) /* /obj/effect/spacevine/proc/Life() @@ -169,8 +201,22 @@ if (prob(50)) del(src) return - else return -/obj/effect/spacevine/temperature_expose(null, temp, volume) - del src \ No newline at end of file +/obj/effect/spacevine/temperature_expose(null, temp, volume) //hotspots kill vines + del src + +//Carn: Spacevines random event. +/proc/spacevine_infestation() + + spawn() //to stop the secrets panel hanging + var/list/turf/simulated/floor/turfs = list() //list of all the empty floor turfs in the hallway areas + for(var/area/hallway/A) + for(var/turf/simulated/floor/F in A) + if(!F.contents.len) + turfs += F + + if(turfs.len) //Pick a turf to spawn at if we can + var/turf/simulated/floor/T = pick(turfs) + new/obj/effect/spacevine_controller(T) //spawn a controller at turf + message_admins("\blue Event: Spacevines spawned at [T.loc] ([T.x],[T.y],[T.z])") diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 0f456ca82ca..efe8eb5b863 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -112,7 +112,7 @@ attackby(obj/item/I as obj, mob/user as mob) - if(src.operating) return + if(src.operating || isrobot(user)) return //borgs can't attack doors open because it conflicts with their AI-like interaction with them. src.add_fingerprint(user) if(!src.requiresID()) user = null diff --git a/code/game/objects/items/robot_parts.dm b/code/game/objects/items/robot_parts.dm index adb586fcc59..1d4a2ab63f2 100644 --- a/code/game/objects/items/robot_parts.dm +++ b/code/game/objects/items/robot_parts.dm @@ -169,7 +169,7 @@ return if(M.brainmob.mind in ticker.mode.head_revolutionaries) - user << "\red The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the MMI." + user << "\red The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the MMI." return if(jobban_isbanned(M.brainmob, "Cyborg")) @@ -202,8 +202,8 @@ O << "You are playing a Robot. The Robot can interact with most electronic objects in its view point." O << "You must follow the laws that the AI has. You are the AI's assistant to the station basically." - O << "To use something, simply double-click it." - O << {"Use say ":s to speak to fellow cyborgs and the AI through binary."} + O << "To use something, simply click it." + O << {"Use say ":b to speak to fellow cyborgs and the AI through binary."} O.job = "Cyborg" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index f2f32357d05..9da10040d34 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1626,6 +1626,11 @@ else alert("You cannot perform this action. You must be of a higher administrative rank!") return + if("spacevines") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","K") + spacevine_infestation() + message_admins("[key_name_admin(usr)] has spawned spacevines", 1) if (usr) log_admin("[key_name(usr)] used secret [href_list["secretsfun"]]") if (ok) @@ -2047,6 +2052,7 @@ Spawn an Immovable Rod
Toggle a "lights out" event
Spawn an Ion Storm
+Spawn Space-Vines

Fun Secrets

@@ -2529,7 +2535,6 @@ log_admin("[key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])") - else alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null) return diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index ff18e6aba82..bdd520a3b95 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -1,7 +1,7 @@ /**********************Mineral processing unit console**************************/ /obj/machinery/mineral/processing_unit_console - name = "Produciton machine console" + name = "production machine console" icon = 'mining_machines.dmi' icon_state = "console" density = 1 @@ -189,7 +189,7 @@ /obj/machinery/mineral/processing_unit - name = "Furnace" + name = "furnace" icon = 'mining_machines.dmi' icon_state = "furnace" density = 1 diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm index 301a2264ef9..ca56bde61ae 100644 --- a/code/modules/mining/machine_stacking.dm +++ b/code/modules/mining/machine_stacking.dm @@ -1,7 +1,7 @@ /**********************Mineral stacking unit console**************************/ /obj/machinery/mineral/stacking_unit_console - name = "Stacking machine console" + name = "stacking machine console" icon = 'mining_machines.dmi' icon_state = "console" density = 1 @@ -132,7 +132,7 @@ /obj/machinery/mineral/stacking_machine - name = "Stacking machine" + name = "stacking machine" icon = 'mining_machines.dmi' icon_state = "stacker" density = 1 diff --git a/code/modules/mining/machine_unloading.dm b/code/modules/mining/machine_unloading.dm index df524dfb650..66a84db5210 100644 --- a/code/modules/mining/machine_unloading.dm +++ b/code/modules/mining/machine_unloading.dm @@ -2,7 +2,7 @@ /obj/machinery/mineral/unloading_machine - name = "Unloading machine" + name = "unloading machine" icon = 'mining_machines.dmi' icon_state = "unloader" density = 1 diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 2ee69c5746e..783eef7b8dd 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -20,7 +20,8 @@ use_power() process_killswitch() process_locks() - update_canmove() + if(modtype != "robot") //only update canmove if we've selected a module + update_canmove() update_mind() diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm index 428e78d6c27..2e46cec1ca5 100644 --- a/code/modules/mob/living/silicon/robot/login.dm +++ b/code/modules/mob/living/silicon/robot/login.dm @@ -8,10 +8,6 @@ src.client.perspective = EYE_PERSPECTIVE if (src.stat == 2) src.verbs += /mob/proc/ghost - if(src.real_name == "Cyborg") - src.real_name += " " - src.real_name += "-[rand(1, 999)]" - src.name = src.real_name if(!src.connected_ai) for(var/mob/living/silicon/ai/A in world) src.connected_ai = A diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index a0209ededd8..61b0324a9d7 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -9,9 +9,6 @@ modtype = "robot" updateicon() // syndicate = syndie - if(real_name == "Cyborg") - real_name += " [pick(rand(1, 999))]" - name = real_name spawn (4) if (client) connected_ai = activeais() @@ -67,6 +64,7 @@ return switch(mod) if("Standard") + updatename("Cy") module = new /obj/item/weapon/robot_module/standard(src) hands.icon_state = "standard" icon_state = "robot" @@ -74,6 +72,7 @@ feedback_inc("cyborg_standard",1) if("Service") + updatename("Servi") module = new /obj/item/weapon/robot_module/butler(src) hands.icon_state = "service" var/icontype = input("Select an icon!", "Robot", null, null) in list("Waitress", "Bro", "Butler", "Kent", "Rich") @@ -91,6 +90,7 @@ feedback_inc("cyborg_service",1) if("Miner") + updatename("Digger") module = new /obj/item/weapon/robot_module/miner(src) hands.icon_state = "miner" icon_state = "Miner" @@ -98,6 +98,7 @@ feedback_inc("cyborg_miner",1) if("Medical") + updatename("Medi") module = new /obj/item/weapon/robot_module/medical(src) hands.icon_state = "medical" icon_state = "surgeon" @@ -106,6 +107,7 @@ feedback_inc("cyborg_medical",1) if("Security") + updatename("Securi") module = new /obj/item/weapon/robot_module/security(src) hands.icon_state = "security" icon_state = "bloodhound" @@ -113,6 +115,7 @@ feedback_inc("cyborg_security",1) if("Engineering") + updatename("Engi") module = new /obj/item/weapon/robot_module/engineering(src) hands.icon_state = "engineer" icon_state = "landmate" @@ -120,6 +123,7 @@ feedback_inc("cyborg_engineering",1) if("Janitor") + updatename("Jani") module = new /obj/item/weapon/robot_module/janitor(src) hands.icon_state = "janitor" icon_state = "mopgearrex" @@ -129,6 +133,18 @@ overlays -= "eyes" //Takes off the eyes that it started with updateicon() +/mob/living/silicon/robot/verb/updatename(var/prefix as text) + if(real_name == "Cyborg") + var/defaultname = "[prefix]borg -[rand(1,999)]" + var/newname = input("Please input a name", "Name selection", defaultname, null) + newname = copytext(sanitize(newname), 1, MAX_MESSAGE_LEN) //Sanitize the name + + if(!newname) + newname = "[defaultname]" + + real_name = newname + name = real_name + /mob/living/silicon/robot/verb/cmd_robot_alerts() set category = "Robot Commands" set name = "Show Alerts" diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index b729ec0e374..94b761882b4 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -7,6 +7,7 @@ anchored = 0 density = 1 directwired = 1 + req_access = list(access_engine) // use_power = 0 var obj/item/weapon/tank/plasma/P = null @@ -26,15 +27,14 @@ attack_hand(mob/user as mob) if(anchored) - if(!src.locked || istype(user, /mob/living/silicon)) + if(!src.locked) toggle_power() user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \ "You turn the [src.name] [active? "on":"off"].") return else - if(src.locked) - user << "\red The controls are locked." - return + user << "\red The controls are locked!" + return ..() @@ -44,10 +44,10 @@ return 1 else if(istype(W, /obj/item/weapon/tank/plasma)) if(!src.anchored) - user << "The [src] needs to be secured to the floor first." + user << "\red The [src] needs to be secured to the floor first." return 1 if(src.P) - user << "\red There appears to already be a plasma tank loaded!" + user << "\red There's already a plasma tank loaded." return 1 src.P = W W.loc = src @@ -56,28 +56,32 @@ user.u_equip(W) updateicon() else if(istype(W, /obj/item/weapon/crowbar)) - if(P) + if(P && !src.locked) eject() return 1 else if(istype(W, /obj/item/weapon/wrench)) if(P) - user << "\red Remove the plasma tank first." + user << "\blue Remove the plasma tank first." return 1 playsound(src.loc, 'Ratchet.ogg', 75, 1) src.anchored = !src.anchored user.visible_message("[user.name] [anchored? "secures":"unsecures"] the [src.name].", \ "You [anchored? "secure":"undo"] the external bolts.", \ - "You hear ratchet") + "You hear a ratchet") if(anchored) connect_to_network() else disconnect_from_network() else if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) if (src.allowed(user)) - src.locked = !src.locked - user << "Controls are now [src.locked ? "locked." : "unlocked."]" + if(active) + src.locked = !src.locked + user << "The controls are now [src.locked ? "locked." : "unlocked."]" + else + src.locked = 0 //just in case it somehow gets locked + user << "\red The controls can only be locked when the [src] is active" else - user << "\red Access denied." + user << "\red Access denied!" return 1 else ..() diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index c794fcbbbee..7d69701c710 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -47,7 +47,7 @@ attack_hand(mob/user as mob) src.add_fingerprint(user) if(state == 2) - if(!src.locked || istype(user, /mob/living/silicon)) + if(!src.locked) if(src.active==1) src.active = 0 user << "You turn off the [src]." @@ -60,9 +60,9 @@ src.use_power = 2 update_icon() else - user << "The controls are locked!" + user << "\red The controls are locked!" else - user << "The [src] needs to be firmly secured to the floor first." + user << "\red The [src] needs to be firmly secured to the floor first." return 1 @@ -90,8 +90,7 @@ src.fire_delay = rand(20,100) src.shot_number = 0 use_power(1000) - var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc ) - A.icon_state = "emitter" + var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc ) playsound(src.loc, 'emitter.ogg', 25, 1) if(prob(35)) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread @@ -128,14 +127,14 @@ playsound(src.loc, 'Ratchet.ogg', 75, 1) user.visible_message("[user.name] secures [src.name] to the floor.", \ "You secure the external reinforcing bolts to the floor.", \ - "You hear ratchet") + "You hear a ratchet") src.anchored = 1 if(1) state = 0 playsound(src.loc, 'Ratchet.ogg', 75, 1) user.visible_message("[user.name] unsecures [src.name] reinforcing bolts from the floor.", \ "You undo the external reinforcing bolts.", \ - "You hear ratchet") + "You hear a ratchet") src.anchored = 0 if(2) user << "\red The [src.name] needs to be unwelded from the floor." @@ -160,7 +159,7 @@ user << "You weld the [src] to the floor." W:welding = 1 else - user << "\blue You need more welding fuel to complete this task." + user << "\red You need more welding fuel to complete this task." if(2) if (W:remove_fuel(0,user)) W:welding = 2 @@ -173,16 +172,20 @@ user << "You cut the [src] free from the floor." W:welding = 1 else - user << "\blue You need more welding fuel to complete this task." + user << "\red You need more welding fuel to complete this task." return - if(istype(W, /obj/item/weapon/card/id))//The slot is too small for PDAs + if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda)) if(emagged) user << "\red The lock seems to be broken" return if(src.allowed(user)) - src.locked = !src.locked - user << "Controls are now [src.locked ? "locked." : "unlocked."]" + if(active) + src.locked = !src.locked + user << "The controls are now [src.locked ? "locked." : "unlocked."]" + else + src.locked = 0 //just in case it somehow gets locked + user << "\red The controls can only be locked when the [src] is online" else user << "\red Access denied." return diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 1dfb4e694e5..034269b94f3 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -190,7 +190,6 @@ field_generator power level display src.cleanup() update_icon() - turn_on() active = 1 warming_up = 1 @@ -342,3 +341,15 @@ field_generator power level display connected_gens.Remove(FG) connected_gens = list() clean_up = 0 + + //This is here to help fight the "hurr durr, release singulo cos nobody will notice before the + //singulo eats the evidence". It's not fool-proof but better than nothing. + //I want to avoid using global variables. + spawn(1) + var/temp = 1 //stops spam + for(var/obj/machinery/singularity/O in world) + if(O.last_warning && temp) + if((world.time - O.last_warning) > 50) //to stop message-spam + temp = 0 + message_admins("A singulo exists and a containment field has failed.",1) + O.last_warning = world.time diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index a88aed835c4..9cf20a8f394 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -42,11 +42,11 @@ if(anchored) user.visible_message("[user.name] secures [src.name] to the floor.", \ "You secure the [src.name] to the floor.", \ - "You hear ratchet") + "You hear a ratchet") else user.visible_message("[user.name] unsecures [src.name] from the floor.", \ "You unsecure the [src.name] from the floor.", \ - "You hear ratchet") + "You hear a ratchet") return return ..() diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 8690e9fcb2c..7093fe95e68 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -29,8 +29,17 @@ var/global/list/uneatable = list( target = null //its target. moves towards the target if it has one last_failed_movement = 0//Will not move in the same dir if it couldnt before, will help with the getting stuck on fields thing teleport_del = 0 + last_warning New(loc, var/starting_energy = 50, var/temp = 0) + //CARN: admin-alert for chuckle-fuckery. + last_warning = world.time + var/count = 0 + for(var/obj/machinery/containment_field/CF in world) + count = 1 + break + if(!count) message_admins("A singulo has been created without containment fields active ([x],[y],[z])",1) + src.energy = starting_energy if(temp) spawn(temp) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 24f24d39751..343841f0f3c 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -34,6 +34,9 @@ icon_state = "heavylaser" damage = 60 +/obj/item/projectile/beam/emitter + name = "emitter beam" + icon_state = "emitter" diff --git a/html/changelog.html b/html/changelog.html index ff7a7cb6ff3..4b77c119211 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -92,6 +92,16 @@ should be listed in the changelog upon commit tho. Thanks. --> +
+

14 February 2012

+

Carn updated:

+ +
+

13 February 2012

Khodoque updated:

diff --git a/icons/effects/kudzu.dmi b/icons/effects/kudzu.dmi deleted file mode 100644 index 5d00a913f38..00000000000 Binary files a/icons/effects/kudzu.dmi and /dev/null differ diff --git a/icons/effects/spacevines.dmi b/icons/effects/spacevines.dmi new file mode 100644 index 00000000000..7087416ae70 Binary files /dev/null and b/icons/effects/spacevines.dmi differ