diff --git a/code/datums/organs/organ_external.dm b/code/datums/organs/organ_external.dm index 7be419b705c..3303fda93a3 100644 --- a/code/datums/organs/organ_external.dm +++ b/code/datums/organs/organ_external.dm @@ -307,8 +307,8 @@ var/obj/item/weapon/organ/H switch(body_part) - if(UPPER_TORSO) - owner.gib() + // if(UPPER_TORSO) just no. + // owner.gib() if(LOWER_TORSO) owner << "\red You are now sterile." if(HEAD) diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm index 2c0cd9da7b9..4fa8f095fe0 100644 --- a/code/game/machinery/bots/ed209bot.dm +++ b/code/game/machinery/bots/ed209bot.dm @@ -820,14 +820,14 @@ Auto Patrol: []"}, projectile = /obj/item/projectile/energy/electrode else if(lasercolor == "b") if (src.emagged == 2) - projectile = /obj/item/projectile/omnitag + projectile = /obj/item/projectile/beam/omnitag else - projectile = /obj/item/projectile/bluetag + projectile = /obj/item/projectile/beam/bluetag else if(lasercolor == "r") if (src.emagged == 2) - projectile = /obj/item/projectile/omnitag + projectile = /obj/item/projectile/beam/omnitag else - projectile = /obj/item/projectile/redtag + projectile = /obj/item/projectile/beam/redtag if (!( istype(U, /turf) )) return @@ -1011,7 +1011,7 @@ Auto Patrol: []"}, /obj/machinery/bot/ed209/bullet_act(var/obj/item/projectile/Proj) if((src.lasercolor == "b") && (src.disabled == 0)) - if(istype(Proj, /obj/item/projectile/redtag)) + if(istype(Proj, /obj/item/projectile/beam/redtag)) src.disabled = 1 del (Proj) sleep(100) @@ -1019,7 +1019,7 @@ Auto Patrol: []"}, else ..() else if((src.lasercolor == "r") && (src.disabled == 0)) - if(istype(Proj, /obj/item/projectile/bluetag)) + if(istype(Proj, /obj/item/projectile/beam/bluetag)) src.disabled = 1 del (Proj) sleep(100) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 1d7fccfc403..17c5ebcbb0c 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -27,6 +27,7 @@ var/const/STATE_STATUSDISPLAY = 7 var/const/STATE_ALERT_LEVEL = 8 var/const/STATE_CONFIRM_LEVEL = 9 + var/const/STATE_CREWTRANSFER = 10 var/status_display_freq = "1435" var/stat_msg1 @@ -121,6 +122,15 @@ if(emergency_shuttle.online) post_status("shuttle") src.state = STATE_DEFAULT + if("crewtransfer") + src.state= STATE_DEFAULT + if(src.authenticated) + src.state = STATE_CREWTRANSFER + if("crewtransfer2") + if(src.authenticated) + init_shift_change(usr) //key difference here + if(emergency_shuttle.online) + post_status("shuttle") if("cancelshuttle") src.state = STATE_DEFAULT if(src.authenticated) @@ -313,6 +323,7 @@ dat += "
\[ Cancel Shuttle Call \]" else dat += "
\[ Call Emergency Shuttle \]" + dat += "
\[ Initiate Crew Transfer \]" dat += "
\[ Set Status Display \]" else @@ -320,6 +331,8 @@ dat += "
\[ Message List \]" if(STATE_CALLSHUTTLE) dat += "Are you sure you want to call the shuttle? \[ OK | Cancel \]" + if(STATE_CREWTRANSFER) // this is the shiftchage screen. + dat += "Are you sure you want to initiate a crew transfer? This will call the shuttle. \[ OK | Cancel \]" if(STATE_CANCELSHUTTLE) dat += "Are you sure you want to cancel the shuttle? \[ OK | Cancel \]" if(STATE_MESSAGELIST) @@ -458,6 +471,47 @@ return +/proc/init_shift_change(var/mob/user, var/force = 0) + if ((!( ticker ) || emergency_shuttle.location)) + return + + if(emergency_shuttle.direction == -1) + user << "The shuttle may not be called while returning to CentCom." + return + + if(emergency_shuttle.online) + user << "The shuttle is already on its way." + return + + // if force is 0, some things may stop the shuttle call + if(!force) + if(emergency_shuttle.deny_shuttle) + user << "Centcom does not currently have a shuttle available in your sector. Please try again later." + return + + if(sent_strike_team == 1) + user << "Centcom will not allow the shuttle to be called. Consider all contracts terminated." + return + + if(world.time < 54000) // 30 minute grace period to let the game get going + user << "The shuttle is refueling. Please wait another [round((54000-world.time)/600)] minutes before trying again."//may need to change "/600" + return + + if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction" || ticker.mode.name == "sandbox") + //New version pretends to call the shuttle but cause the shuttle to return after a random duration. + emergency_shuttle.fake_recall = rand(300,500) + + if(ticker.mode.name == "blob" || ticker.mode.name == "epidemic") + user << "Under directive 7-10, [station_name()] is quarantined until further notice." + return + + emergency_shuttle.shuttlealert(1) + emergency_shuttle.incall() + log_game("[key_name(user)] has called the shuttle.") + message_admins("[key_name_admin(user)] has called the shuttle.", 1) + captain_announce("A crew transfer has been initiated. The shuttle has been called. It will arrive in [round(emergency_shuttle.timeleft()/60)] minutes.") + + return /proc/cancel_call_proc(var/mob/user) if ((!( ticker ) || emergency_shuttle.location || emergency_shuttle.direction == 0 || emergency_shuttle.timeleft() < 300)) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 77e5c7763c9..7be13d3d1e3 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -76,8 +76,8 @@ // All energy-based weapons are applicable switch(E.type) if(/obj/item/weapon/gun/energy/laser/bluetag) - projectile = /obj/item/projectile/bluetag - eprojectile = /obj/item/projectile/omnitag//This bolt will stun ERRYONE with a vest + projectile = /obj/item/projectile/beam/bluetag + eprojectile = /obj/item/projectile/beam/omnitag//This bolt will stun ERRYONE with a vest iconholder = null reqpower = 100 lasercolor = "b" @@ -90,8 +90,8 @@ shot_delay = 30 if(/obj/item/weapon/gun/energy/laser/redtag) - projectile = /obj/item/projectile/redtag - eprojectile = /obj/item/projectile/omnitag + projectile = /obj/item/projectile/beam/redtag + eprojectile = /obj/item/projectile/beam/omnitag iconholder = null reqpower = 100 lasercolor = "r" @@ -104,7 +104,7 @@ shot_delay = 30 if(/obj/item/weapon/gun/energy/laser/practice) - projectile = /obj/item/projectile/practice + projectile = /obj/item/projectile/beam/practice eprojectile = /obj/item/projectile/beam iconholder = null reqpower = 100 @@ -375,13 +375,13 @@ Status: []
"}, if (src.health <= 0) src.die() // the death process :( if((src.lasercolor == "b") && (src.disabled == 0)) - if(istype(Proj, /obj/item/projectile/redtag)) + if(istype(Proj, /obj/item/projectile/beam/redtag)) src.disabled = 1 del (Proj) sleep(100) src.disabled = 0 if((src.lasercolor == "r") && (src.disabled == 0)) - if(istype(Proj, /obj/item/projectile/bluetag)) + if(istype(Proj, /obj/item/projectile/beam/bluetag)) src.disabled = 1 del (Proj) sleep(100) diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm index 2bf3020782c..990b823ef15 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -221,9 +221,9 @@ if(4) A = new /obj/item/projectile/change( loc ) if(5) - A = new /obj/item/projectile/bluetag( loc ) + A = new /obj/item/projectile/beam/bluetag( loc ) if(6) - A = new /obj/item/projectile/redtag( loc ) + A = new /obj/item/projectile/beam/redtag( loc ) A.original = target.loc use_power(500) else diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index 94310b70fb9..dce87fda314 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -114,7 +114,7 @@ bmark.pixel_x-- bmark.pixel_y-- - if(Proj.damage >= 20 || istype(Proj, /obj/item/projectile/practice)) + if(Proj.damage >= 20 || istype(Proj, /obj/item/projectile/beam/practice)) bmark.icon_state = "scorch" bmark.dir = pick(NORTH,SOUTH,EAST,WEST) // random scorch design diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index bc403b705be..95f1c5435a4 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -93,7 +93,9 @@ "/obj/item/weapon/cigpacket", "/obj/item/weapon/storage/pill_bottle", "/obj/item/stack/medical", - "/obj/item/device/flashlight/pen" + "/obj/item/device/flashlight/pen", + "/obj/item/clothing/mask/surgical", + "/obj/item/clothing/gloves/latex" ) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 59edfd3ebb0..0fbebfdcbee 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -554,4 +554,8 @@ ..() return +/obj/item/weapon/storage/pill_bottle/New() + pixel_x = rand (-7,7) + pixel_y = rand (-7,7) + ..() //////////////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index b22685860d3..b71b60532f4 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -99,12 +99,12 @@ H.apply_effect(10, STUTTER, 0) charges-- - H.visible_message("[src] hits [H] with stunning end!") - H.attack_log += "\[[time_stamp()]\] Stunned by thrown [src.name]" - log_attack("Flying [src.name] stunned [H.name] ([H.ckey])" ) + H.visible_message("[src], thrown by ([src.fingerprintslast]) hits [H] with stunning end!") + H.attack_log += "\[[time_stamp()]\] Stunned by thrown [src.name] (([src.fingerprintslast]))" + log_attack("Flying [src.name], thrown by ([src.fingerprintslast]) stunned [H.name] ([H.ckey])" ) - log_admin("ATTACK: Flying [src.name] stunned [H.name] ([H.ckey])") - msg_admin_attack("ATTACK: Flying [src.name] stunned [H.name] ([H.ckey])") //BS12 EDIT ALG + log_admin("ATTACK: Flying [src.name], thrown by ([src.fingerprintslast]) stunned [H.name] ([H.ckey])") + msg_admin_attack("ATTACK: Flying [src.name], thrown by ([src.fingerprintslast]) stunned [H.name] ([H.ckey]).") //BS12 EDIT ALG return return ..() diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 2f6cb028f54..bcb67e292e2 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -90,7 +90,7 @@ obj/item/weapon/gun/energy/laser/retro name = "laser tag gun" icon_state = "bluetag" desc = "Standard issue weapon of the Imperial Guard" - projectile_type = "/obj/item/projectile/bluetag" + projectile_type = "/obj/item/projectile/beam/bluetag" origin_tech = "combat=1;magnets=2" clumsy_check = 0 var/charge_tick = 0 @@ -127,7 +127,7 @@ obj/item/weapon/gun/energy/laser/retro name = "laser tag gun" icon_state = "redtag" desc = "Standard issue weapon of the Imperial Guard" - projectile_type = "/obj/item/projectile/redtag" + projectile_type = "/obj/item/projectile/beam/redtag" origin_tech = "combat=1;magnets=2" clumsy_check = 0 var/charge_tick = 0 diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index e61af3b9cdf..8f2d39bf9de 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -1,14 +1,80 @@ +var/list/beam_master = list() +//Use: Caches beam state images and holds turfs that had these images overlaid. +//Structure: +//beam_master +// icon_states/dirs of beams +// image for that beam +// references for fired beams +// icon_states/dirs for each placed beam image +// turfs that have that icon_state/dir + /obj/item/projectile/beam name = "laser" icon_state = "laser" pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE - damage = 20 + damage = 40 damage_type = BURN flag = "laser" - eyeblur = 2 + eyeblur = 4 var/frequency = 1 + process() + var/reference = "\ref[src]" //So we do not have to recalculate it a ton + var/first = 1 //So we don't make the overlay in the same tile as the firer -/obj/item/projectile/practice + spawn(0) + while(!bumped) //Move until we hit something + step_towards(src, current) //Move~ + + for(var/mob/living/M in loc) + Bump(M) //Bump anyone we touch + + if((!( current ) || loc == current)) //If we pass our target + current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z) + + if((x == 1 || x == world.maxx || y == 1 || y == world.maxy)) + del(src) //Delete if it passes the world edge + return + + if(!first) //Add the overlay as we pass over tiles + var/target_dir = get_dir(src, current) //So we don't call this too much + + //If the icon has not been added yet + if( !("[icon_state][target_dir]" in beam_master) ) + var/image/I = image(icon,icon_state,10,target_dir) //Generate it. + beam_master["[icon_state][target_dir]"] = I //And cache it! + + //Finally add the overlay + src.loc.overlays += beam_master["[icon_state][target_dir]"] + + //Add the turf to a list in the beam master so they can be cleaned up easily. + if(reference in beam_master) + var/list/turf_master = beam_master[reference] + if("[icon_state][target_dir]" in turf_master) + var/list/turfs = turf_master["[icon_state][target_dir]"] + turfs += loc + else + turf_master["[icon_state][target_dir]"] = list(loc) + else + var/list/turfs = list() + turfs["[icon_state][target_dir]"] = list(loc) + beam_master[reference] = turfs + else + first = 0 + + cleanup(reference) + return + + proc/cleanup(reference) //Waits .3 seconds then removes the overlay. + src = null + sleep(3) + var/list/turf_master = beam_master[reference] + for(var/laser_state in turf_master) + var/list/turfs = turf_master[laser_state] + for(var/turf/T in turfs) + T.overlays -= beam_master[laser_state] + return + +/obj/item/projectile/beam/practice name = "laser" icon_state = "laser" pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE @@ -45,7 +111,7 @@ -/obj/item/projectile/bluetag +/obj/item/projectile/beam/bluetag name = "lasertag beam" icon_state = "bluelaser" pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE @@ -60,7 +126,7 @@ M.Weaken(5) return 1 -/obj/item/projectile/redtag +/obj/item/projectile/beam/redtag name = "lasertag beam" icon_state = "laser" pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE @@ -75,7 +141,7 @@ M.Weaken(5) return 1 -/obj/item/projectile/omnitag//A laser tag bolt that stuns EVERYONE +/obj/item/projectile/beam/omnitag//A laser tag bolt that stuns EVERYONE name = "lasertag beam" icon_state = "omnilaser" pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE diff --git a/code/modules/research/xenoarchaeology/artifact.dm b/code/modules/research/xenoarchaeology/artifact.dm index 8c63e2667aa..79c4b7c97cd 100644 --- a/code/modules/research/xenoarchaeology/artifact.dm +++ b/code/modules/research/xenoarchaeology/artifact.dm @@ -153,8 +153,8 @@ if(istype(P,/obj/item/projectile/beam)) src.Artifact_Activate() else if(istype(P,/obj/item/projectile/ion)) src.Artifact_Activate() else if(istype(P,/obj/item/projectile/energy)) src.Artifact_Activate() - else if(istype(P,/obj/item/projectile/bluetag)) src.Artifact_Activate() - else if(istype(P,/obj/item/projectile/redtag)) src.Artifact_Activate() + else if(istype(P,/obj/item/projectile/beam/bluetag)) src.Artifact_Activate() + else if(istype(P,/obj/item/projectile/beam/redtag)) src.Artifact_Activate() if (my_effect.trigger == "heat") if(istype(P,/obj/item/projectile/temp)) src.Artifact_Activate() diff --git a/code/stylesheet.dm b/code/stylesheet.dm index 4abe9b2a6aa..6c5768a084b 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -26,7 +26,7 @@ em {font-style: normal; font-weight: bold;} .deadsay {color: #5c00e6;} .radio {color: #008000;} .deptradio {color: #993399;} -.comradio {color: #ACA82D;} +.comradio {color: #885500;} .syndradio {color: #6D3F40;} .alert {color: #ff0000;} diff --git a/html/changelog.html b/html/changelog.html index 5d168f5e282..d27dfac9c0f 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,22 @@ Stuff which is in development and not yet visible to players or just code relate should be listed in the changelog upon commit though. Thanks. --> +
+

6.11.2012

+

Chinsky updated:

+ +
+

November 4th

SkyMarshal updated:

diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 41e7ddf761d..d22cdd8a236 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index aa6a1a893ad..308e139092d 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ