diff --git a/code/defines/procs/helpers.dm b/code/defines/procs/helpers.dm
index 8107839b324..f2a10e3bcb4 100644
--- a/code/defines/procs/helpers.dm
+++ b/code/defines/procs/helpers.dm
@@ -1872,3 +1872,12 @@ proc/get_mob_with_client_list()
proc/worldtime2text()
return "[round(world.time / 36000)+12]:[(world.time / 600 % 60) < 10 ? add_zero(world.time / 600 % 60, 1) : world.time / 600 % 60]"
+
+/atom/proc/transfer_fingerprints_to(var/atom/A)
+ if(!istype(A.fingerprints,/list))
+ A.fingerprints = list()
+ if(!istype(A.fingerprintshidden,/list))
+ A.fingerprintshidden = list()
+ A.fingerprints |= fingerprints //detective
+ A.fingerprintshidden |= fingerprintshidden //admin
+ A.fingerprintslast = fingerprintslast
\ No newline at end of file
diff --git a/code/game/objects/devices/PDA/PDA.dm b/code/game/objects/devices/PDA/PDA.dm
index aff5cfdf240..adb9bcf5e94 100644
--- a/code/game/objects/devices/PDA/PDA.dm
+++ b/code/game/objects/devices/PDA/PDA.dm
@@ -347,7 +347,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/count = 0
if (!toff)
- for (var/obj/item/device/pda/P in PDAs)
+ for (var/obj/item/device/pda/P in sortList(PDAs))
if (!P.owner||P.toff||P == src) continue
dat += "
[P]"
if (istype(cartridge, /obj/item/weapon/cartridge/syndicate) && !istype(P, /obj/item/device/pda/ai))
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 2aa51adac39..b7ae0eefbd7 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -524,6 +524,7 @@
istype(W, /obj/item/weapon/scalpel) || \
istype(W, /obj/item/weapon/kitchen/utensil/knife) || \
istype(W, /obj/item/weapon/shard) || \
+ istype(W, /obj/item/weapon/broken_bottle) || \
istype(W, /obj/item/weapon/reagent_containers/syringe) || \
istype(W, /obj/item/weapon/kitchen/utensil/fork) && W.icon_state != "forkloaded" || \
istype(W, /obj/item/weapon/twohanded/fireaxe) \
diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm
index e38437fccbb..24b50824b54 100644
--- a/code/modules/chemical/Chemistry-Tools.dm
+++ b/code/modules/chemical/Chemistry-Tools.dm
@@ -2732,12 +2732,135 @@
icon_state = "water_cup_e"
///////////////////////////////////////////////Alchohol bottles! -Agouri //////////////////////////
-//Notes by Darem: Functionally identical to regular drinks. The only difference is that the default bottle size is 100.
+//Functionally identical to regular drinks. The only difference is that the default bottle size is 100. - Darem
+//Bottles now weaken and break when smashed on people's heads. - Giacom
+
/obj/item/weapon/reagent_containers/food/drinks/bottle
amount_per_transfer_from_this = 10
volume = 100
item_state = "beer" //Generic held-item sprite until unique ones are made.
+// Bottles only last for one attack before breaking and becoming broken bottles
+ // Force is also part of the duration calculation. Meaning if you make a small bottle then give it a small force
+ // so it isn't too strong.
+ force = 15
+ var/const/duration = 13 //Directly relates to the 'weaken' duration. Lowered by armor (i.e. helmets)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/smash(mob/living/target as mob, mob/living/user as mob)
+
+ //Creates a shattering noise and replaces the bottle with a broken_bottle
+ user.drop_item()
+ var/obj/item/weapon/broken_bottle/B = new /obj/item/weapon/broken_bottle(user)
+ if(prob(33))
+ new/obj/item/weapon/shard(target.loc) // Create a glass shard at the target's location!
+ B.icon_state = src.icon_state
+
+ var/icon/I = new('drinks.dmi', src.icon_state)
+ I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
+ I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
+ B.icon = I
+
+ playsound(src, "shatter", 70, 1)
+ user.put_in_active_hand(B)
+ src.transfer_fingerprints_to(B)
+
+ del(src)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/attack(mob/living/target as mob, mob/living/user as mob)
+
+ if(!target)
+ return
+
+ if(user.a_intent != "hurt" || user == target)
+ return ..()
+
+
+ var/datum/organ/external/affecting = user.zone_sel.selecting //Find what the player is aiming at
+
+ var/armor_block = 0 //Get the target's armour values for normal attack damage.
+ var/armor_duration = 0 //The more force the bottle has, the longer the duration.
+
+ //Calculating duration and calculating damage.
+ if(ishuman(target))
+
+ var/mob/living/carbon/human/H = target
+ var/headarmor = 0 // Target's head armour
+ armor_block = H.run_armor_check(affecting, "melee") // For normal attack damage
+
+ //If they have a hat/helmet and the user is targeting their head.
+ if(istype(H.head, /obj/item/clothing/head) && affecting == "head")
+
+ // If their head has an armour value, assign headarmor to it, else give it 0.
+ if(H.head.armor["melee"])
+ headarmor = H.head.armor["melee"]
+ else
+ headarmor = 0
+ else
+ headarmor = 0
+
+ //Calculate the weakening duration for the target.
+ armor_duration = (duration - headarmor) + force
+
+ else
+ //Only humans can have armour, right?
+ armor_block = target.run_armor_check(affecting, "melee")
+ if(affecting == "head")
+ armor_duration = duration + force
+ armor_duration /= 10
+
+ //Apply the damage!
+ target.apply_damage(force, BRUTE, affecting, armor_block)
+
+ // You are going to knock someone out for longer if they are not wearing a helmet.
+ if(affecting == "head" && istype(target, /mob/living/carbon/))
+
+ //Display an attack message.
+ for(var/mob/O in viewers(user, null))
+ O.show_message(text("\red [target] has been hit over the head with a bottle of [src.name], by [user]!"), 1)
+
+ //Weaken the target for the duration that we calculated and divide it by 5.
+ if(armor_duration)
+ target.apply_effect(min(armor_duration, 10) , WEAKEN) // Never weaken more than a flash!
+
+ else
+ //Default attack message and don't weaken the target.
+ for(var/mob/O in viewers(user, null))
+ O.show_message(text("\red [target] has been attacked with a bottle of [src.name], by [user]!"), 1)
+
+ //Attack logs
+ user.attack_log += text("\[[time_stamp()]\] Has attacked [target.name] ([target.ckey]) with a bottle!")
+ target.attack_log += text("\[[time_stamp()]\] Has been smashed with a bottle by [user.name] ([user.ckey])")
+ log_attack("[user.name] ([user.ckey]) attacked [target.name] with a bottle. ([target.ckey])")
+
+ //The reagents in the bottle splash all over the target, thanks for the idea Nodrak
+ if(src.reagents)
+ for(var/mob/O in viewers(user, null))
+ O.show_message(text("\blue The contents of the [src] splashes all over [target]!"), 1)
+ src.reagents.reaction(target, TOUCH)
+
+ //Finally, smash the bottle. This kills (del) the bottle.
+ src.smash(target, user)
+
+ return
+
+//Keeping this here for now, I'll ask if I should keep it here.
+/obj/item/weapon/broken_bottle
+
+ name = "Broken Bottle"
+ desc = "A bottle with a sharp broken bottom."
+ icon = 'drinks.dmi'
+ icon_state = "broken_bottle"
+ force = 9.0
+ throwforce = 5.0
+ throw_speed = 3
+ throw_range = 5
+ item_state = "beer"
+ //item_state - Need to find a bottle sprite
+ var/icon/broken_outline = icon('drinks.dmi', "broken")
+
+
+
+
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin
name = "Griffeater Gin"
desc = "A bottle of high quality gin, produced in the New London Space Station."
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 37471dba251..f8def31b1a8 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -30,7 +30,7 @@
aiPDA = new/obj/item/device/pda/ai(src)
aiPDA.owner = name
aiPDA.ownjob = "AI"
- aiPDA.name = name + " (" + aiPDA.ownjob + ")"
+ aiPDA.name = "AI - " + name + " (" + aiPDA.ownjob + ")"
if (istype(loc, /turf))
verbs.Add(/mob/living/silicon/ai/proc/ai_call_shuttle,/mob/living/silicon/ai/proc/ai_camera_track, \
diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm
index 37b0513ba5d..c5a70dac5f7 100644
--- a/code/modules/mob/living/silicon/ai/life.dm
+++ b/code/modules/mob/living/silicon/ai/life.dm
@@ -16,7 +16,7 @@
if(aiPDA && aiPDA.name != name)
aiPDA.owner = name
- aiPDA.name = name + " (" + aiPDA.ownjob + ")"
+ aiPDA.name = "AI - " + name + " (" + aiPDA.ownjob + ")"
if (src.malfhack)
if (src.malfhack.aidisabled)
diff --git a/html/changelog.html b/html/changelog.html
index f1ed66ee4a4..cbfcc1eed29 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -47,7 +47,17 @@ should be listed in the changelog upon commit tho. Thanks. -->
-
05 July 2012
+
Friday July 6th, 2012
+
Giacom updated:
+
+ - Bottles can now be broken over people's heads! To do this, you must have the harm intent on and you must be targeting the person's head. This change affects alcoholic bottles only. It does not change pill bottles or chemistry bottles. Helmets help protect you from damage and the regents of the bottles will splash over the victim.
+ - AI's now have access to a PDA. Note: It is not PDA-bomb-able
+ - Health analyzers and medical PDAs now give a time of death when used on corpses.
+
+
+
+
+
Thursday July 5th, 2012
Carn updated:
- Alien larva now chestburst even after their host has died.
@@ -57,7 +67,7 @@ should be listed in the changelog upon commit tho. Thanks. -->
-
Wed 4th July 2012
+
Wednesday July 4th, 2012
39kk9t & Carn updated:
- Added alien nests. They're basically beds made of thick sticky resin which aliums can 'stick' (buckle) people to for sexytimes
@@ -68,7 +78,7 @@ should be listed in the changelog upon commit tho. Thanks. -->
-
Saturday, June 30th
+
Saturday June 30th, 2012
Icarus updated:
- Added Petethegoat's basic mirrors to the map. They allow you to change hairstyles.
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index fb84d5fd442..1a3675622fc 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 230f98f8244..b07a012e382 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -5,6 +5,203 @@
// END_INTERNALS
// BEGIN_FILE_DIR
#define FILE_DIR .
+#define FILE_DIR "code"
+#define FILE_DIR "code/ATMOSPHERICS"
+#define FILE_DIR "code/ATMOSPHERICS/components"
+#define FILE_DIR "code/ATMOSPHERICS/components/binary_devices"
+#define FILE_DIR "code/ATMOSPHERICS/components/trinary_devices"
+#define FILE_DIR "code/ATMOSPHERICS/components/unary"
+#define FILE_DIR "code/datums"
+#define FILE_DIR "code/datums/diseases"
+#define FILE_DIR "code/datums/helper_datums"
+#define FILE_DIR "code/datums/spells"
+#define FILE_DIR "code/defines"
+#define FILE_DIR "code/defines/area"
+#define FILE_DIR "code/defines/mob"
+#define FILE_DIR "code/defines/mob/dead"
+#define FILE_DIR "code/defines/mob/living"
+#define FILE_DIR "code/defines/mob/living/carbon"
+#define FILE_DIR "code/defines/mob/living/silicon"
+#define FILE_DIR "code/defines/obj"
+#define FILE_DIR "code/defines/procs"
+#define FILE_DIR "code/defines/tanning"
+#define FILE_DIR "code/FEA"
+#define FILE_DIR "code/game"
+#define FILE_DIR "code/game/area"
+#define FILE_DIR "code/game/asteroid"
+#define FILE_DIR "code/game/gamemodes"
+#define FILE_DIR "code/game/gamemodes/blob"
+#define FILE_DIR "code/game/gamemodes/blob/blobs"
+#define FILE_DIR "code/game/gamemodes/changeling"
+#define FILE_DIR "code/game/gamemodes/cult"
+#define FILE_DIR "code/game/gamemodes/events"
+#define FILE_DIR "code/game/gamemodes/events/holidays"
+#define FILE_DIR "code/game/gamemodes/extended"
+#define FILE_DIR "code/game/gamemodes/malfunction"
+#define FILE_DIR "code/game/gamemodes/meteor"
+#define FILE_DIR "code/game/gamemodes/nuclear"
+#define FILE_DIR "code/game/gamemodes/revolution"
+#define FILE_DIR "code/game/gamemodes/sandbox"
+#define FILE_DIR "code/game/gamemodes/traitor"
+#define FILE_DIR "code/game/gamemodes/wizard"
+#define FILE_DIR "code/game/jobs"
+#define FILE_DIR "code/game/jobs/job"
+#define FILE_DIR "code/game/machinery"
+#define FILE_DIR "code/game/machinery/atmoalter"
+#define FILE_DIR "code/game/machinery/bots"
+#define FILE_DIR "code/game/machinery/computer"
+#define FILE_DIR "code/game/machinery/doors"
+#define FILE_DIR "code/game/machinery/embedded_controller"
+#define FILE_DIR "code/game/machinery/kitchen"
+#define FILE_DIR "code/game/machinery/pipe"
+#define FILE_DIR "code/game/machinery/telecomms"
+#define FILE_DIR "code/game/magic"
+#define FILE_DIR "code/game/magic/cultist"
+#define FILE_DIR "code/game/mecha"
+#define FILE_DIR "code/game/mecha/combat"
+#define FILE_DIR "code/game/mecha/equipment"
+#define FILE_DIR "code/game/mecha/equipment/tools"
+#define FILE_DIR "code/game/mecha/equipment/weapons"
+#define FILE_DIR "code/game/mecha/medical"
+#define FILE_DIR "code/game/mecha/working"
+#define FILE_DIR "code/game/objects"
+#define FILE_DIR "code/game/objects/alien"
+#define FILE_DIR "code/game/objects/closets"
+#define FILE_DIR "code/game/objects/closets/secure"
+#define FILE_DIR "code/game/objects/devices"
+#define FILE_DIR "code/game/objects/devices/PDA"
+#define FILE_DIR "code/game/objects/items"
+#define FILE_DIR "code/game/objects/items/weapons"
+#define FILE_DIR "code/game/objects/items/weapons/implants"
+#define FILE_DIR "code/game/objects/radio"
+#define FILE_DIR "code/game/objects/secstorage"
+#define FILE_DIR "code/game/objects/stacks"
+#define FILE_DIR "code/game/objects/storage"
+#define FILE_DIR "code/game/objects/tanks"
+#define FILE_DIR "code/game/vehicles"
+#define FILE_DIR "code/game/vehicles/airtight"
+#define FILE_DIR "code/game/verbs"
+#define FILE_DIR "code/js"
+#define FILE_DIR "code/modules"
+#define FILE_DIR "code/modules/admin"
+#define FILE_DIR "code/modules/admin/DB ban"
+#define FILE_DIR "code/modules/admin/verbs"
+#define FILE_DIR "code/modules/assembly"
+#define FILE_DIR "code/modules/chemical"
+#define FILE_DIR "code/modules/client"
+#define FILE_DIR "code/modules/clothing"
+#define FILE_DIR "code/modules/clothing/glasses"
+#define FILE_DIR "code/modules/clothing/gloves"
+#define FILE_DIR "code/modules/clothing/head"
+#define FILE_DIR "code/modules/clothing/masks"
+#define FILE_DIR "code/modules/clothing/shoes"
+#define FILE_DIR "code/modules/clothing/spacesuits"
+#define FILE_DIR "code/modules/clothing/suits"
+#define FILE_DIR "code/modules/clothing/under"
+#define FILE_DIR "code/modules/clothing/uniforms"
+#define FILE_DIR "code/modules/critters"
+#define FILE_DIR "code/modules/critters/hivebots"
+#define FILE_DIR "code/modules/detectivework"
+#define FILE_DIR "code/modules/flufftext"
+#define FILE_DIR "code/modules/food"
+#define FILE_DIR "code/modules/maps"
+#define FILE_DIR "code/modules/mining"
+#define FILE_DIR "code/modules/mob"
+#define FILE_DIR "code/modules/mob/dead"
+#define FILE_DIR "code/modules/mob/dead/observer"
+#define FILE_DIR "code/modules/mob/living"
+#define FILE_DIR "code/modules/mob/living/blob"
+#define FILE_DIR "code/modules/mob/living/carbon"
+#define FILE_DIR "code/modules/mob/living/carbon/alien"
+#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid"
+#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid/caste"
+#define FILE_DIR "code/modules/mob/living/carbon/alien/larva"
+#define FILE_DIR "code/modules/mob/living/carbon/brain"
+#define FILE_DIR "code/modules/mob/living/carbon/human"
+#define FILE_DIR "code/modules/mob/living/carbon/metroid"
+#define FILE_DIR "code/modules/mob/living/carbon/monkey"
+#define FILE_DIR "code/modules/mob/living/silicon"
+#define FILE_DIR "code/modules/mob/living/silicon/ai"
+#define FILE_DIR "code/modules/mob/living/silicon/decoy"
+#define FILE_DIR "code/modules/mob/living/silicon/pai"
+#define FILE_DIR "code/modules/mob/living/silicon/robot"
+#define FILE_DIR "code/modules/mob/living/simple_animal"
+#define FILE_DIR "code/modules/mob/new_player"
+#define FILE_DIR "code/modules/mob/organ"
+#define FILE_DIR "code/modules/paperwork"
+#define FILE_DIR "code/modules/power"
+#define FILE_DIR "code/modules/power/antimatter"
+#define FILE_DIR "code/modules/power/singularity"
+#define FILE_DIR "code/modules/power/singularity/particle_accelerator"
+#define FILE_DIR "code/modules/projectiles"
+#define FILE_DIR "code/modules/projectiles/ammunition"
+#define FILE_DIR "code/modules/projectiles/guns"
+#define FILE_DIR "code/modules/projectiles/guns/energy"
+#define FILE_DIR "code/modules/projectiles/guns/projectile"
+#define FILE_DIR "code/modules/projectiles/projectile"
+#define FILE_DIR "code/modules/recycling"
+#define FILE_DIR "code/modules/research"
+#define FILE_DIR "code/modules/scripting"
+#define FILE_DIR "code/modules/scripting/AST"
+#define FILE_DIR "code/modules/scripting/AST/Operators"
+#define FILE_DIR "code/modules/scripting/Implementations"
+#define FILE_DIR "code/modules/scripting/Interpreter"
+#define FILE_DIR "code/modules/scripting/Parser"
+#define FILE_DIR "code/modules/scripting/Scanner"
+#define FILE_DIR "code/modules/security levels"
+#define FILE_DIR "code/unused"
+#define FILE_DIR "code/unused/beast"
+#define FILE_DIR "code/unused/computer2"
+#define FILE_DIR "code/unused/disease2"
+#define FILE_DIR "code/unused/gamemodes"
+#define FILE_DIR "code/unused/hivebot"
+#define FILE_DIR "code/unused/mining"
+#define FILE_DIR "code/unused/optics"
+#define FILE_DIR "code/unused/pda2"
+#define FILE_DIR "code/unused/powerarmor"
+#define FILE_DIR "code/unused/spacecraft"
+#define FILE_DIR "code/WorkInProgress"
+#define FILE_DIR "code/WorkInProgress/carn"
+#define FILE_DIR "code/WorkInProgress/mapload"
+#define FILE_DIR "code/WorkInProgress/organs"
+#define FILE_DIR "code/WorkInProgress/virus2"
+#define FILE_DIR "html"
+#define FILE_DIR "icons"
+#define FILE_DIR "icons/48x48"
+#define FILE_DIR "icons/effects"
+#define FILE_DIR "icons/mecha"
+#define FILE_DIR "icons/misc"
+#define FILE_DIR "icons/mob"
+#define FILE_DIR "icons/obj"
+#define FILE_DIR "icons/obj/assemblies"
+#define FILE_DIR "icons/obj/atmospherics"
+#define FILE_DIR "icons/obj/clothing"
+#define FILE_DIR "icons/obj/doors"
+#define FILE_DIR "icons/obj/machines"
+#define FILE_DIR "icons/obj/pipes"
+#define FILE_DIR "icons/pda_icons"
+#define FILE_DIR "icons/spideros_icons"
+#define FILE_DIR "icons/Testing"
+#define FILE_DIR "icons/turf"
+#define FILE_DIR "icons/unused"
+#define FILE_DIR "icons/vehicles"
+#define FILE_DIR "icons/vending_icons"
+#define FILE_DIR "interface"
+#define FILE_DIR "maps"
+#define FILE_DIR "maps/RandomZLevels"
+#define FILE_DIR "Redirector"
+#define FILE_DIR "sound"
+#define FILE_DIR "sound/AI"
+#define FILE_DIR "sound/ambience"
+#define FILE_DIR "sound/effects"
+#define FILE_DIR "sound/hallucinations"
+#define FILE_DIR "sound/items"
+#define FILE_DIR "sound/machines"
+#define FILE_DIR "sound/mecha"
+#define FILE_DIR "sound/misc"
+#define FILE_DIR "sound/piano"
+#define FILE_DIR "sound/voice"
+#define FILE_DIR "sound/weapons"
// END_FILE_DIR
// BEGIN_PREFERENCES