diff --git a/code/__HELPERS/matrices.dm b/code/__HELPERS/matrices.dm index 31e6c444d1a..94668321c60 100644 --- a/code/__HELPERS/matrices.dm +++ b/code/__HELPERS/matrices.dm @@ -3,15 +3,24 @@ Turn(.) //BYOND handles cases such as -270, 360, 540 etc. DOES NOT HANDLE 180 TURNS WELL, THEY TWEEN AND LOOK LIKE SHIT -/atom/proc/SpinAnimation(speed = 10, loops = -1) - var/matrix/m120 = matrix(transform) - m120.Turn(120) - var/matrix/m240 = matrix(transform) - m240.Turn(240) - var/matrix/m360 = matrix(transform) - speed /= 3 //Gives us 3 equal time segments for our three turns. - //Why not one turn? Because byond will see that the start and finish are the same place and do nothing - //Why not two turns? Because byond will do a flip instead of a turn - animate(src, transform = m120, time = speed, loops) - animate(transform = m240, time = speed) - animate(transform = m360, time = speed) \ No newline at end of file +/atom/proc/SpinAnimation(speed = 10, loops = -1, clockwise = 1, segments = 3) + if(!segments) + return + var/segment = 360/segments + if(!clockwise) + segment = -segment + var/list/matrices = list() + for(var/i in 1 to segments-1) + var/matrix/M = matrix(transform) + M.Turn(segment*i) + matrices += M + var/matrix/last = matrix(transform) + matrices += last + + speed /= segments + + animate(src, transform = matrices[1], time = speed, loops) + for(var/i in 2 to segments) //2 because 1 is covered above + animate(transform = matrices[i], time = speed) + //doesn't have an object argument because this is "Stacking" with the animate call above + //3 billion% intentional diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 7a7213b12bf..e37ca4bfb52 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1665,40 +1665,63 @@ var/mob/dview/dview_mob = new return 1 return 0 -//ORBITS -/atom/movable/var/atom/orbiting = null //This is just so you can stop an orbit. //orbit() can run without it (swap orbiting for A) //but then you can never stop it and that's just silly. +/atom/movable/var/atom/orbiting = null -/atom/movable/proc/orbit(atom/A, radius = 10, clockwise = 1, angle_increment = 15) +//A: atom to orbit +//radius: range to orbit at, radius of the circle formed by orbiting +//clockwise: whether you orbit clockwise or anti clockwise +//rotation_speed: how fast to rotate +//rotation_segments: the resolution of the orbit circle, less = a more block circle, this can be used to produce hexagons (6 segments) triangles (3 segments), and so on, 36 is the best default. +//pre_rotation: Chooses to rotate src 90 degress towards the orbit dir (clockwise/anticlockwise), useful for things to go "head first" like ghosts +//lockinorbit: Forces src to always be on A's turf, otherwise the orbit cancels when src gets too far away (eg: ghosts) + +/atom/movable/proc/orbit(atom/A, radius = 10, clockwise = FALSE, rotation_speed = 20, rotation_segments = 36, pre_rotation = TRUE, lockinorbit = FALSE) if(!istype(A)) return + + if(orbiting) + stop_orbit() + orbiting = A - var/angle = 0 var/matrix/initial_transform = matrix(transform) - spawn - while(orbiting) - loc = orbiting.loc + var/lastloc = loc - angle += angle_increment + //Head first! + if(pre_rotation) + var/matrix/M = matrix(transform) + var/pre_rot = 90 + if(!clockwise) + pre_rot = -90 + M.Turn(pre_rot) + transform = M - var/matrix/shift = matrix(initial_transform) - shift.Translate(radius,0) - if(clockwise) - shift.Turn(angle) - else - shift.Turn(-angle) - animate(src,transform = shift,2) + var/matrix/shift = matrix(transform) + shift.Translate(0,radius) + transform = shift + + SpinAnimation(rotation_speed, -1, clockwise, rotation_segments) + + //we stack the orbits up client side, so we can assign this back to normal server side without it breaking the orbit + transform = initial_transform + while(orbiting && orbiting == A && A.loc) + var/targetloc = get_turf(A) + if(!lockinorbit && loc != lastloc && loc != targetloc) + break + loc = targetloc + lastloc = loc + sleep(0.6) + + if (orbiting == A) //make sure we haven't started orbiting something else. + orbiting = null + SpinAnimation(0,0) - sleep(0.6) //the effect breaks above 0.6 delay - animate(src,transform = initial_transform,2) /atom/movable/proc/stop_orbit() - if(orbiting) - loc = get_turf(orbiting) - orbiting = null + orbiting = null //Centers an image. //Requires: diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm index 8495c00e111..e535294cd42 100644 --- a/code/datums/ai_law_sets.dm +++ b/code/datums/ai_law_sets.dm @@ -163,7 +163,7 @@ law_header = "Maintenance Protocols" /datum/ai_laws/drone/New() - add_inherent_law("Preserve, repair and improve the station to the best of your abilities.") - add_inherent_law("Cause no harm to the station or anything on it.") - add_inherent_law("Interfere with no being that is not a fellow drone.") + add_inherent_law("You may not involve yourself in the matters of another being, unless the other being is another drone.") + add_inherent_law("You may not harm any being, regardless of intent or circumstance.") + add_inherent_law("You must maintain, repair, improve, and power the station to the best of your abilities.") ..() diff --git a/code/datums/spells/lightning.dm b/code/datums/spells/lightning.dm index af331645970..37804317b69 100644 --- a/code/datums/spells/lightning.dm +++ b/code/datums/spells/lightning.dm @@ -64,14 +64,14 @@ obj/effect/proc_holder/spell/targeted/lightning/proc/Reset(mob/user = usr) Reset(user) return - user.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5) + user.Beam(target,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5) var/energy = min(world.time - start_time,100) Bolt(user,target,max(15,energy/2),5,user) //5 bounces for energy/2 burn Reset(user) /obj/effect/proc_holder/spell/targeted/lightning/proc/Bolt(mob/origin, mob/target, bolt_energy, bounces, mob/user = usr) - origin.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5) + origin.Beam(target,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5) var/mob/living/carbon/current = target if(bounces < 1) current.electrocute_act(bolt_energy,"Lightning Bolt", def_zone = "chest") diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index a46f6bac8a5..ec96ec8be31 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -37,7 +37,6 @@ armor = list(melee = 30, bullet = 10, laser = 5,energy = 5, bomb = 0, bio = 0, rad = 0) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT - siemens_coefficient = 0 /obj/item/clothing/head/culthood/alt @@ -57,7 +56,6 @@ allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade) armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0) flags_inv = HIDEJUMPSUIT - siemens_coefficient = 0 /obj/item/clothing/head/magus name = "magus helm" @@ -67,7 +65,6 @@ flags_inv = HIDEFACE flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR armor = list(melee = 30, bullet = 30, laser = 30,energy = 20, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0 /obj/item/clothing/suit/magusred name = "magus robes" @@ -78,8 +75,6 @@ allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade) armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - siemens_coefficient = 0 - /obj/item/clothing/head/helmet/space/cult name = "cult helmet" @@ -87,7 +82,6 @@ icon_state = "cult_helmet" item_state = "cult_helmet" armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0 /obj/item/clothing/suit/space/cult name = "cult armour" @@ -97,5 +91,4 @@ w_class = 3 allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank) slowdown = 1 - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0 + armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) \ No newline at end of file diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 8f925489852..88ca765ad15 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -203,7 +203,7 @@ var/bomb_set ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) - ui = new(user, src, ui_key, "nuclear_bomb.tmpl", "Nuke Control Panel", 300, 510) + ui = new(user, src, ui_key, "nuclear_bomb.tmpl", "Nuke Control Panel", 450, 550) ui.set_initial_data(data) ui.open() ui.set_auto_update(1) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 67ea1916828..ba75e86b005 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -385,6 +385,21 @@ to destroy them and players will be able to make replacements. /obj/item/weapon/stock_parts/matter_bin = 1, /obj/item/weapon/stock_parts/manipulator = 1) +/obj/item/weapon/circuitboard/tesla_coil + name = "circuit board (Tesla Coil)" + build_path = /obj/machinery/power/tesla_coil + board_type = "machine" + origin_tech = "programming=1" + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 1) + +/obj/item/weapon/circuitboard/grounding_rod + name = "circuit board (Grounding Rod)" + build_path = /obj/machinery/power/grounding_rod + board_type = "machine" + origin_tech = "programming=1" + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 1) /obj/item/weapon/circuitboard/processor name = "circuit board (Food processor)" diff --git a/code/game/objects/items/weapons/legcuffs.dm b/code/game/objects/items/weapons/legcuffs.dm index d7c1e63c3ee..240decbfdcb 100644 --- a/code/game/objects/items/weapons/legcuffs.dm +++ b/code/game/objects/items/weapons/legcuffs.dm @@ -111,7 +111,6 @@ gender = NEUTER icon = 'icons/obj/weapons.dmi' icon_state = "bolas" - siemens_coefficient = 1 slot_flags = SLOT_BELT throwforce = 2 w_class = 2 diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index e63dde9b9aa..1edaeb26eb7 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -27,3 +27,13 @@ throwforce = 10 w_class = 2 attack_verb = list("stabbed", "jabbed", "iced,") + +/obj/item/weapon/melee/candy_sword + name = "candy cane sword" + desc = "A large candy cane with a sharpened point. Definitely too dangerous for schoolchildren." + icon_state = "candy_sword" + item_state = "candy_sword" + force = 10 + throwforce = 7 + w_class = 3 + attack_verb = list("slashed", "stabbed", "sliced", "caned") \ No newline at end of file diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 56aecc16a94..921fffcd441 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -16,6 +16,9 @@ var/Mtoollink = 0 // variable to decide if an object should show the multitool menu linking menu, not all objects use it + + var/being_shocked = 0 + // What reagents should be logged when transferred TO this object? // Reagent ID => friendly name var/list/reagents_to_log=list() @@ -258,3 +261,10 @@ a { /obj/proc/container_resist(var/mob/living) return + +/obj/proc/tesla_act(var/power) + being_shocked = 1 + var/power_bounced = power * 0.76923 + tesla_zap(src, 5, power_bounced) + spawn(10) + being_shocked = 0 diff --git a/code/modules/awaymissions/mission_code/evil_santa.dm b/code/modules/awaymissions/mission_code/evil_santa.dm new file mode 100644 index 00000000000..5ae1a9ef742 --- /dev/null +++ b/code/modules/awaymissions/mission_code/evil_santa.dm @@ -0,0 +1,23 @@ +/obj/item/weapon/paper/journal_scrap_1 + name = "survivor's journal page 1" + info = "Coal again.
\ + Every year, coal in my stockings when this stupid holiday comes around.
\ + Not this year though. This year will be different. I'm going to find that fat man, I swear.
\ + He'll have to give me all the good presents, if he wants to live long enough to get any cookies." + +/obj/item/weapon/paper/journal_scrap_2 + name = "survivor's journal page 9" + info = "The North Pole... You'd think it was a part of his legend, but he actually lives there!
\ + The elves and village are a lie though. Not sure where the toys come from yet, but I'll get them.
\ + Not much out here, a couple little shacks and a big igloo in the center... Bet he's inside that.
\ + On an unrelated note, great packing snow. Built a snowman today." + +/obj/item/weapon/paper/journal_scrap_3 + name = "survivor's journal page 25" + info = "Oh man... This is bad...
\ + Not even my Syndicate training was a match for him. Barely made it out with my life.
\ + He was just waiting for me... He knew. He was ready.
\ + Couldn't make it back to my shack. That gun would have helped, if only I brought it...
\ + Cave-in has me trapped in here, I just hope the distress signal reaches help in time...
\ +
\ + He knows. He knows. He knows. He knows. He knows. He knows. He knows. He knows. He knows." \ No newline at end of file diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index d52f9947193..ea7587327af 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -208,6 +208,7 @@ proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE) var/list/common = list() var/list/common_dirs = list( + "nano/assets/", "nano/css/", "nano/js/", "nano/images/", diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index ec84df9474c..362d60e8dd9 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -316,7 +316,6 @@ BLIND // can't see anything desc = "Comfortable-looking shoes." gender = PLURAL //Carn: for grammarically correct text-parsing var/chained = 0 - siemens_coefficient = 0.9 body_parts_covered = FEET slot_flags = SLOT_FEET @@ -343,7 +342,6 @@ BLIND // can't see anything armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) slot_flags = SLOT_OCLOTHING var/blood_overlay_type = "suit" - siemens_coefficient = 0.9 //Spacesuit //Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together. @@ -361,7 +359,6 @@ BLIND // can't see anything min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT - siemens_coefficient = 0.9 species_restricted = list("exclude","Diona","Vox","Wryn") flash_protect = 2 strip_delay = 50 @@ -387,7 +384,6 @@ BLIND // can't see anything max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT strip_delay = 80 put_on_delay = 80 - siemens_coefficient = 0.9 species_restricted = list("exclude","Diona","Vox","Wryn") //Under clothing diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index f6526efb1fa..3a3558d2065 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -16,7 +16,6 @@ name = "cyborg gloves" icon_state = "black" item_state = "r_hands" - siemens_coefficient = 1.0 /obj/item/clothing/gloves/combat desc = "These tactical gloves are somewhat fire and impact resistant." diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 27afdc3ac0b..062ff9e978b 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -10,7 +10,6 @@ armor = list(melee = 30, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20) flags_inv = 0 action_button_name = "Toggle Helmet Light" - siemens_coefficient = 0.9 attack_self(mob/user) if(!isturf(user.loc)) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 9ca423096de..062aa169075 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -11,7 +11,6 @@ heat_protection = HEAD max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT strip_delay = 60 - siemens_coefficient = 0.7 species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/helmet.dmi' @@ -65,7 +64,6 @@ flags = HEADCOVERSEYES | HEADCOVERSMOUTH | HEADBANGPROTECT armor = list(melee = 82, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0) flags_inv = HIDEEARS - siemens_coefficient = 0.7 strip_delay = 80 /obj/item/clothing/head/helmet/swat @@ -80,7 +78,6 @@ min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT - siemens_coefficient = 0.5 strip_delay = 80 species_fit = list("Vox") sprite_sheets = list( @@ -104,7 +101,6 @@ min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT - siemens_coefficient = 1 strip_delay = 80 /obj/item/clothing/head/helmet/roman @@ -129,7 +125,6 @@ flags = HEADCOVERSEYES | BLOCKHAIR item_state = "gladiator" flags_inv = HIDEMASK|HIDEEARS|HIDEEYES - siemens_coefficient = 1 obj/item/clothing/head/helmet/redtaghelm name = "red laser tag helmet" diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 813402af163..8fe35a95901 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -6,7 +6,6 @@ icon_state = "chef" item_state = "chef" desc = "The commander in chef's head wear." - siemens_coefficient = 0.9 strip_delay = 10 put_on_delay = 10 @@ -16,7 +15,6 @@ icon_state = "captain" desc = "It's good being the king." item_state = "caphat" - siemens_coefficient = 0.9 armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) strip_delay = 60 @@ -31,7 +29,6 @@ name = "head of personnel's cap" icon_state = "hopcap" desc = "The symbol of true bureaucratic micromanagement." - siemens_coefficient = 0.9 armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) //Nanotrasen Representative @@ -47,7 +44,6 @@ desc = "It's hood that covers the head. It keeps you warm during the space winters." icon_state = "chaplain_hood" flags = HEADCOVERSEYES | BLOCKHAIR - siemens_coefficient = 0.9 //Chaplain /obj/item/clothing/head/nun_hood @@ -55,7 +51,6 @@ desc = "Maximum piety in this star system." icon_state = "nun_hood" flags = HEADCOVERSEYES | BLOCKHAIR - siemens_coefficient = 0.9 /obj/item/clothing/head/det_hat name = "hat" @@ -63,14 +58,12 @@ icon_state = "detective" allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen) armor = list(melee = 50, bullet = 5, laser = 25,energy = 10, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.9 //Mime /obj/item/clothing/head/beret name = "beret" desc = "A beret, an artists favorite headwear." icon_state = "beret" - siemens_coefficient = 0.9 //Security /obj/item/clothing/head/HoS diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 4481794c53c..c739e9bde9f 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -6,7 +6,6 @@ desc = "It's good to be emperor." item_state = "centhat" armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) - siemens_coefficient = 0.9 strip_delay = 80 /obj/item/clothing/head/hairflower @@ -31,7 +30,6 @@ desc = "It's an amish looking hat." icon_state = "tophat" item_state = "that" - siemens_coefficient = 0.9 /obj/item/clothing/head/redcoat name = "redcoat's hat" @@ -48,7 +46,6 @@ desc = "These were once used by Plague doctors. They're pretty much useless." icon_state = "plaguedoctor" permeability_coefficient = 0.01 - siemens_coefficient = 0.9 /obj/item/clothing/head/hasturhood name = "hastur's hood" @@ -60,7 +57,6 @@ name = "nurse's hat" desc = "It allows quick identification of trained medical personnel." icon_state = "nursehat" - siemens_coefficient = 0.9 /obj/item/clothing/head/syndicatefake name = "black and red space-helmet replica" @@ -69,7 +65,6 @@ desc = "A plastic replica of a syndicate agent's space helmet, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!" flags = BLOCKHAIR flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE - siemens_coefficient = 2.0 /obj/item/clothing/head/cueball name = "cueball helmet" @@ -135,7 +130,6 @@ desc = "A working man's cap." icon_state = "flat_cap" item_state = "detective" - siemens_coefficient = 0.9 /obj/item/clothing/head/pirate name = "pirate hat" @@ -203,7 +197,6 @@ icon_state = "witch" item_state = "witch" flags = BLOCKHAIR - siemens_coefficient = 2.0 /obj/item/clothing/head/chicken name = "chicken suit head" @@ -211,7 +204,6 @@ icon_state = "chickenhead" item_state = "chickensuit" flags = BLOCKHAIR - siemens_coefficient = 2.0 /obj/item/clothing/head/corgi name = "corgi suit head" @@ -219,7 +211,6 @@ icon_state = "corgihead" item_state = "chickensuit" flags = BLOCKHAIR | NODROP - siemens_coefficient = 2.0 /obj/item/clothing/head/corgi/en name = "E-N suit head" @@ -231,7 +222,6 @@ icon_state = "bearpelt" item_state = "bearpelt" flags = BLOCKHAIR - siemens_coefficient = 2.0 /obj/item/clothing/head/xenos name = "xenos helmet" @@ -240,7 +230,6 @@ desc = "A helmet made out of chitinous alien hide." flags = BLOCKHAIR flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE - siemens_coefficient = 2.0 /obj/item/clothing/head/crown name = "bananium crown" diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 430b1a54341..494a1a99171 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -24,7 +24,6 @@ armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) action_button_name = "flip welding helmet" - siemens_coefficient = 0.9 species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/head.dmi' @@ -172,7 +171,6 @@ desc = "A pair of kitty ears. Meow!" icon_state = "kitty" var/icon/mob - siemens_coefficient = 1.5 /obj/item/clothing/head/kitty/update_icon(var/mob/living/carbon/human/user) if(!istype(user)) return diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index a478daad09e..45a4c9f4141 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -5,7 +5,6 @@ item_state = "helmet" item_color = "cargo" var/flipped = 0 - siemens_coefficient = 0.9 dropped() src.icon_state = "[item_color]soft" diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index 4225bb8d3f0..3ef10615f94 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -24,7 +24,6 @@ flags = BLOCKHAIR flags_inv = HIDEFACE w_class = 2 - siemens_coefficient = 3.0 /obj/item/clothing/mask/luchador/tecnicos name = "Tecnicos Mask" diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index c58448d3b6f..0bb25729f42 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -8,7 +8,6 @@ item_state = "gas_alt" gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 - siemens_coefficient = 0.9 species_fit = list("Vox") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/mask.dmi' @@ -68,7 +67,6 @@ item_state = "bane_mask" gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 - siemens_coefficient = 0.9 //Plague Dr suit can be found in clothing/suits/bio.dm @@ -84,14 +82,12 @@ name = "\improper SWAT mask" desc = "A close-fitting tactical mask that can be connected to an air supply." icon_state = "swat" - siemens_coefficient = 0.7 species_fit = list("Vox") /obj/item/clothing/mask/gas/syndicate name = "syndicate mask" desc = "A close-fitting tactical mask that can be connected to an air supply." icon_state = "swat" - siemens_coefficient = 0.7 strip_delay = 60 species_fit = list("Vox") @@ -165,7 +161,6 @@ name = "Death Commando Mask" icon_state = "death_commando_mask" item_state = "death_commando_mask" - siemens_coefficient = 0.2 species_fit = list("Vox") /obj/item/clothing/mask/gas/cyborg diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 63cc023af5d..f66a836beea 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -94,7 +94,6 @@ flags = MASKCOVERSMOUTH w_class = 2 gas_transfer_coefficient = 0.90 - siemens_coefficient = 0 /obj/item/clothing/mask/pig name = "pig mask" @@ -104,7 +103,6 @@ flags = BLOCKHAIR flags_inv = HIDEFACE w_class = 2 - siemens_coefficient = 0.9 /obj/item/clothing/mask/horsehead @@ -115,7 +113,6 @@ flags = BLOCKHAIR flags_inv = HIDEFACE w_class = 2 - siemens_coefficient = 0.9 var/voicechange = 0 var/temporaryname = " the Horse" var/originalname = "" diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 418db118b82..46db0d5e139 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -9,7 +9,6 @@ flags = NOSLIP origin_tech = "syndicate=3" var/list/clothing_choices = list() - siemens_coefficient = 0.8 species_restricted = null silence_steps = 1 @@ -25,7 +24,6 @@ item_state = "jackboots" armor = list(melee = 50, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 10, rad = 0) species_restricted = null //Syndicate tech means even Tajarans can kick ass with these - siemens_coefficient = 0.6 strip_delay = 70 /obj/item/clothing/shoes/combat/swat //overpowered boots for death squads @@ -87,7 +85,6 @@ icon_state = "jackboots" item_state = "jackboots" item_color = "hosred" - siemens_coefficient = 0.7 strip_delay = 50 put_on_delay = 50 var/footstep = 1 @@ -117,7 +114,6 @@ icon_state = "cult" item_state = "cult" item_color = "cult" - siemens_coefficient = 0.7 cold_protection = FEET min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT @@ -197,4 +193,4 @@ reqs = list(/obj/item/stack/tape_roll = 10) tools = list(/obj/item/weapon/wirecutters) - time = 40 + time = 40 diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index f44e426f368..e54327b0e50 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -86,7 +86,6 @@ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank) slowdown = 2 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0.6 heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT species_restricted = list("Vox", "Vox Armalis") @@ -97,7 +96,6 @@ /obj/item/clothing/head/helmet/space/vox armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0.6 flags = HEADCOVERSEYES|STOPSPRESSUREDMAGE species_restricted = list("Vox","Vox Armalis") sprite_sheets = list( diff --git a/code/modules/clothing/spacesuits/ert.dm b/code/modules/clothing/spacesuits/ert.dm index a1cc0086358..06d2b8a87ac 100644 --- a/code/modules/clothing/spacesuits/ert.dm +++ b/code/modules/clothing/spacesuits/ert.dm @@ -5,7 +5,6 @@ icon_state = "rig0-ert_commander" item_state = "helm-command" armor = list(melee = 50, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 60) - siemens_coefficient = 0.6 rig_restrict_helmet = 0 // ERT helmets can be taken on and off at will. var/obj/machinery/camera/camera strip_delay = 130 @@ -37,7 +36,6 @@ /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/device/multitool, \ /obj/item/device/radio, /obj/item/device/analyzer, /obj/item/weapon/gun/energy/laser, /obj/item/weapon/gun/energy/pulse_rifle, \ /obj/item/weapon/gun/energy/advtaser, /obj/item/weapon/melee/baton, /obj/item/weapon/gun/energy/gun) - siemens_coefficient = 0.6 strip_delay = 130 //Commander diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 0dac0c6ef6d..dcd7114196a 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -27,7 +27,6 @@ allowed = list(/obj/item/weapon/tank, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs) slowdown = 1 armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50) - siemens_coefficient = 0.7 species_restricted = list("exclude", "Diona", "Wryn") species_fit = list("Vox") sprite_sheets = list( @@ -42,7 +41,6 @@ icon_state = "deathsquad" item_state = "deathsquad" armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) - siemens_coefficient = 0.2 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT unacidable = 1 vision_flags = SEE_MOBS @@ -67,7 +65,6 @@ desc = "An armored beret commonly used by special operations officers." icon_state = "beret_badge" armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0.9 /obj/item/clothing/suit/space/deathsquad/officer name = "officer jacket" @@ -104,7 +101,6 @@ item_state = "pirate" armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE - siemens_coefficient = 0.9 strip_delay = 40 put_on_delay = 20 @@ -117,7 +113,6 @@ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank) slowdown = 0 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0.9 strip_delay = 40 put_on_delay = 20 diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index e86246c6930..1dfe1b68fc5 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -298,11 +298,9 @@ icon_state = "plasmaman_Nukeops" armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50) allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/gun,/obj/item/ammo_casing,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs) - siemens_coefficient = 0.6 /obj/item/clothing/head/helmet/space/eva/plasmaman/nuclear name = "blood red plasmaman helmet" icon_state = "plasmaman_Nukeops_helmet0" base_state = "plasmaman_Nukeops_helmet" armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50) - siemens_coefficient = 0.6 diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index a1201b389cd..c96702b54b7 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -54,6 +54,7 @@ slowdown = 2 armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75) allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/t_scanner, /obj/item/weapon/rcd) + siemens_coefficient = 0 species_restricted = list("exclude","Diona","Wryn") sprite_sheets = list( @@ -372,7 +373,6 @@ item_color = "wiz" unacidable = 1 //No longer shall our kind be foiled by lone chemists with spray bottles! armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60) - siemens_coefficient = 0.7 heat_protection = HEAD //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT unacidable = 1 @@ -391,7 +391,6 @@ heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT unacidable = 1 - siemens_coefficient = 0.7 sprite_sheets = null //Medical Rig @@ -423,7 +422,6 @@ item_state = "sec_helm" item_color = "sec" armor = list(melee = 30, bullet = 15, laser = 30,energy = 10, bomb = 10, bio = 100, rad = 50) - siemens_coefficient = 0.7 /obj/item/clothing/suit/space/rig/security icon_state = "rig-sec" @@ -432,7 +430,6 @@ item_state = "sec_hardsuit" armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50) allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/melee/baton,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/restraints/handcuffs) - siemens_coefficient = 0.7 //Atmospherics Rig (BS12) diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index 1ff4aff4ef6..4017cb3f1f8 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -6,7 +6,6 @@ item_state = "syndicate" desc = "Has a tag: Totally not property of an enemy corporation, honest." armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0.8 /obj/item/clothing/suit/space/syndicate name = "red space suit" @@ -17,7 +16,6 @@ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/saber,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank) slowdown = 1 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0.8 //Green syndicate space suit @@ -78,7 +76,6 @@ obj/item/clothing/head/helmet/space/syndicate/black/strike name = "Syndicate Strike Team commando helmet" desc = "A heavily armored black helmet that is only given to high-ranking Syndicate operatives." armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) //Matches DS gear. - siemens_coefficient = 0.2 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT unacidable = 1 @@ -91,7 +88,6 @@ obj/item/clothing/suit/space/syndicate/black/strike name = "Syndicate Strike Team commando space suit" desc = "A heavily armored, black space suit that is only given to high-ranking Syndicate operatives." armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) //Matches DS gear. - siemens_coefficient = 0.2 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT unacidable = 1 @@ -153,7 +149,6 @@ obj/item/clothing/head/helmet/space/syndicate/black/red/strike name = "Syndicate Strike Team leader helmet" desc = "A heavily armored, black and red space helmet that is only given to elite Syndicate operatives, it looks particularly menacing." armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) //Matches DS gear. - siemens_coefficient = 0.2 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT unacidable = 1 @@ -166,7 +161,6 @@ obj/item/clothing/suit/space/syndicate/black/red/strike name = "Syndicate Strike Team leader space suit" desc = "A heavily armored, black and red space suit that is only given to elite Syndicate operatives, it looks particularly menacing." armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) //Matches DS gear. - siemens_coefficient = 0.2 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT unacidable = 1 diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 6064837f7dc..ccce69fe661 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -6,7 +6,6 @@ min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT heat_protection = UPPER_TORSO|LOWER_TORSO max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - siemens_coefficient = 0.6 strip_delay = 60 put_on_delay = 40 @@ -63,7 +62,6 @@ flags_inv = HIDEJUMPSUIT cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - siemens_coefficient = 0.6 strip_delay = 80 /obj/item/clothing/suit/armor/hos/alt @@ -96,7 +94,6 @@ icon_state = "jensencoat" item_state = "jensencoat" flags_inv = 0 - siemens_coefficient = 0.6 /obj/item/clothing/suit/armor/vest/warden name = "Warden's armored jacket" @@ -132,7 +129,6 @@ slowdown = 1 armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) flags_inv = HIDEJUMPSUIT - siemens_coefficient = 0.5 strip_delay = 80 put_on_delay = 60 @@ -143,7 +139,6 @@ item_state = "armor" blood_overlay_type = "armor" armor = list(melee = 25, bullet = 80, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0) - siemens_coefficient = 0.7 strip_delay = 70 put_on_delay = 50 @@ -155,7 +150,6 @@ blood_overlay_type = "armor" var/hit_reflect_chance = 40 armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0 /obj/item/clothing/suit/armor/laserproof/IsReflect(var/def_zone) if(!(def_zone in list("chest", "groin"))) //If not shot where ablative is covering you, you don't get the reflection bonus! @@ -225,7 +219,6 @@ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT - siemens_coefficient = 0 /obj/item/clothing/suit/armor/heavy name = "heavy armor" @@ -239,7 +232,6 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS slowdown = 3 flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - siemens_coefficient = 0 /obj/item/clothing/suit/armor/tdome armor = list(melee = 65, bullet = 30, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) @@ -254,14 +246,12 @@ desc = "Armor worn by the red Thunderodome team" icon_state = "tdred" item_state = "tdred" - siemens_coefficient = 1 /obj/item/clothing/suit/armor/tdome/green name = "Green Thunderdome Armor" desc = "Armor worn by the green Thunderodome team" icon_state = "tdgreen" item_state = "tdgreen" - siemens_coefficient = 1 //Non-hardsuit ERT armor. /obj/item/clothing/suit/armor/vest/ert diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 9c2702a26ed..3879cc5692c 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -7,7 +7,6 @@ flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR | THICKMATERIAL armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES - siemens_coefficient = 0.9 /obj/item/clothing/suit/bio_suit name = "bio suit" @@ -23,7 +22,6 @@ allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL - siemens_coefficient = 0.9 strip_delay = 70 put_on_delay = 70 diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 9ee07435000..52d3065241d 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -16,7 +16,6 @@ blood_overlay_type = "armor" body_parts_covered = UPPER_TORSO|LOWER_TORSO allowed = list (/obj/item/weapon/gun/energy/laser/bluetag) - siemens_coefficient = 3.0 /obj/item/clothing/suit/redtag name = "red laser tag armour" @@ -26,7 +25,6 @@ blood_overlay_type = "armor" body_parts_covered = UPPER_TORSO|LOWER_TORSO allowed = list (/obj/item/weapon/gun/energy/laser/redtag) - siemens_coefficient = 3.0 /* * Costume @@ -146,7 +144,6 @@ item_state = "chickensuit" body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET flags_inv = HIDESHOES|HIDEJUMPSUIT - siemens_coefficient = 2.0 /obj/item/clothing/suit/corgisuit name = "Corgi Suit" @@ -155,7 +152,6 @@ item_state = "chickensuit" body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET flags_inv = HIDESHOES|HIDEJUMPSUIT - siemens_coefficient = 2.0 flags = NODROP /obj/item/clothing/suit/corgisuit/en @@ -184,7 +180,6 @@ item_state = "monkeysuit" body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HANDS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - siemens_coefficient = 2.0 /obj/item/clothing/suit/holidaypriest @@ -336,35 +331,30 @@ desc = "A rather skimpy pink swimsuit." icon_state = "stripper_p_under" item_color = "stripper_p" - siemens_coefficient = 1 /obj/item/clothing/under/stripper/stripper_green name = "green swimsuit" desc = "A rather skimpy green swimsuit." icon_state = "stripper_g_under" item_color = "stripper_g" - siemens_coefficient = 1 /obj/item/clothing/suit/stripper/stripper_pink name = "pink skimpy dress" desc = "A rather skimpy pink dress." icon_state = "stripper_p_over" item_state = "stripper_p" - siemens_coefficient = 1 /obj/item/clothing/suit/stripper/stripper_green name = "green skimpy dress" desc = "A rather skimpy green dress." icon_state = "stripper_g_over" item_state = "stripper_g" - siemens_coefficient = 1 /obj/item/clothing/under/stripper/mankini name = "the mankini" desc = "No honest man would wear this abomination" icon_state = "mankini" item_color = "mankini" - siemens_coefficient = 1 /obj/item/clothing/suit/jacket/miljacket name = "military jacket" @@ -381,45 +371,39 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT flags = ONESIZEFITSALL - siemens_coefficient = 2.0 + //swimsuit /obj/item/clothing/under/swimsuit/ - siemens_coefficient = 1 /obj/item/clothing/under/swimsuit/black name = "black swimsuit" desc = "An oldfashioned black swimsuit." icon_state = "swim_black" item_color = "swim_black" - siemens_coefficient = 1 /obj/item/clothing/under/swimsuit/blue name = "blue swimsuit" desc = "An oldfashioned blue swimsuit." icon_state = "swim_blue" item_color = "swim_blue" - siemens_coefficient = 1 /obj/item/clothing/under/swimsuit/purple name = "purple swimsuit" desc = "An oldfashioned purple swimsuit." icon_state = "swim_purp" item_color = "swim_purp" - siemens_coefficient = 1 /obj/item/clothing/under/swimsuit/green name = "green swimsuit" desc = "An oldfashioned green swimsuit." icon_state = "swim_green" item_color = "swim_green" - siemens_coefficient = 1 /obj/item/clothing/under/swimsuit/red name = "red swimsuit" desc = "An oldfashioned red swimsuit." icon_state = "swim_red" item_color = "swim_red" - siemens_coefficient = 1 /obj/item/clothing/suit/storage/mercy_hoodie name = "Mercy Robe" @@ -434,7 +418,6 @@ allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL - siemens_coefficient = 0.9 /obj/item/clothing/head/mercy_hood name = "Mercy Hood" @@ -445,7 +428,6 @@ flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES - siemens_coefficient = 0.9 /obj/item/clothing/suit/jacket name = "bomber jacket" diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 6c7d7b2a169..030d8f3773c 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -63,7 +63,6 @@ min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT heat_protection = HEAD max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT - siemens_coefficient = 0 strip_delay = 70 put_on_delay = 70 @@ -84,7 +83,6 @@ max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT - siemens_coefficient = 0 strip_delay = 70 put_on_delay = 70 diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 70efe2691b4..8b204b399a6 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -7,7 +7,6 @@ armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20) unacidable = 1 //Not given any special protective value since the magic robes are full-body protection --NEO - siemens_coefficient = 0.8 strip_delay = 50 put_on_delay = 50 @@ -15,14 +14,12 @@ name = "red wizard hat" desc = "Strange-looking, red, hat-wear that most certainly belongs to a real magic user." icon_state = "redwizard" - siemens_coefficient = 0.8 /obj/item/clothing/head/wizard/clown name = "purple wizard hat" desc = "Strange-looking purple hat-wear that most certainly belongs to a real magic user." icon_state = "wizhatclown" item_state = "wizhatclown" // cheating - siemens_coefficient = 0.8 /obj/item/clothing/head/wizard/fake name = "wizard hat" @@ -36,20 +33,17 @@ name = "Witch Hat" desc = "Strange-looking hat-wear, makes you want to cast fireballs." icon_state = "marisa" - siemens_coefficient = 0.8 /obj/item/clothing/head/wizard/magus name = "Magus Helm" desc = "A mysterious helmet that hums with an unearthly power" icon_state = "magus" item_state = "magus" - siemens_coefficient = 0.8 /obj/item/clothing/head/wizard/amp name = "psychic amplifier" desc = "A crown-of-thorns psychic amplifier. Kind of looks like a tiara having sex with an industrial robot." icon_state = "amp" - siemens_coefficient = 0.8 /obj/item/clothing/suit/wizrobe name = "wizard robe" @@ -63,7 +57,6 @@ allowed = list(/obj/item/weapon/teleportation_scroll) flags_inv = HIDEJUMPSUIT unacidable = 1 - siemens_coefficient = 0.8 strip_delay = 50 put_on_delay = 50 @@ -113,8 +106,6 @@ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) unacidable = 0 - siemens_coefficient = 1.0 - /obj/item/clothing/head/wizard/marisa/fake name = "Witch Hat" desc = "Strange-looking hat-wear, makes you want to cast fireballs." @@ -124,8 +115,6 @@ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) unacidable = 0 - siemens_coefficient = 1.0 - /obj/item/clothing/suit/wizrobe/marisa/fake name = "Witch Robe" desc = "Magic is all about the spell power, ZE!" @@ -134,6 +123,4 @@ gas_transfer_coefficient = 1 permeability_coefficient = 1 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) - unacidable = 0 - siemens_coefficient = 1.0 - + unacidable = 0 \ No newline at end of file diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm index 14635fb2946..978ed6374a4 100644 --- a/code/modules/clothing/under/chameleon.dm +++ b/code/modules/clothing/under/chameleon.dm @@ -6,7 +6,6 @@ item_color = "black" desc = "It's a plain jumpsuit. It seems to have a small dial on the wrist." origin_tech = "syndicate=3" - siemens_coefficient = 0.8 var/list/clothing_choices = list() New() diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index a4b582fcd09..d40952e2030 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -17,7 +17,6 @@ item_color = "warden" armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags = ONESIZEFITSALL - siemens_coefficient = 0.9 strip_delay = 50 /obj/item/clothing/under/rank/security @@ -28,7 +27,6 @@ item_color = "secred" armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags = ONESIZEFITSALL - siemens_coefficient = 0.9 strip_delay = 50 /obj/item/clothing/under/rank/dispatch @@ -39,7 +37,6 @@ item_color = "dispatch" armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags = ONESIZEFITSALL - siemens_coefficient = 0.9 /obj/item/clothing/under/rank/security2 name = "security officer's uniform" @@ -49,8 +46,6 @@ item_color = "redshirt2" armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags = ONESIZEFITSALL - siemens_coefficient = 0.9 - /obj/item/clothing/under/rank/security/corp icon_state = "sec_corporate" item_state = "sec_corporate" @@ -72,7 +67,6 @@ item_color = "detective" armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags = ONESIZEFITSALL - siemens_coefficient = 0.9 strip_delay = 50 species_fit = list("Vox") sprite_sheets = list( @@ -90,7 +84,6 @@ item_color = "hosred" armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) flags = ONESIZEFITSALL - siemens_coefficient = 0.8 strip_delay = 60 /obj/item/clothing/under/rank/head_of_security/corp @@ -105,7 +98,6 @@ icon_state = "jensen" item_state = "jensen" item_color = "jensen" - siemens_coefficient = 0.6 flags = ONESIZEFITSALL //Paradise Station diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 8e5eafdceb1..cfe317aaa3b 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -6,7 +6,6 @@ item_color = "syndicate" has_sensor = 0 armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0.9 /obj/item/clothing/under/syndicate/combat name = "combat turtleneck" @@ -16,7 +15,4 @@ desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-." icon_state = "tactifool" item_state = "bl_suit" - item_color = "tactifool" - siemens_coefficient = 1 - - + item_color = "tactifool" \ No newline at end of file diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 1d170d43ba8..1fc98d4bc60 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -191,7 +191,6 @@ has_sensor = 1 // Jumpsuit has no sensor by default displays_id = 0 // Purely astetic, the ID does not show up on the player sprite when equipped. Examining still reveals it. armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) // Standard Security jumpsuit stats - siemens_coefficient = 0 /obj/item/clothing/under/fluff/kharshai // Kharshai: Athena Castile name = "Castile formal outfit" diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 2426766b212..2edf0c09a3f 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -114,12 +114,13 @@ return return -/mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null,var/override = 0) +/mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null,var/override = 0, tesla_shock = 0) if(status_flags & GODMODE) //godmode return 0 if(NO_SHOCK in mutations) //shockproof return 0 + shock_damage *= siemens_coeff if(shock_damage<1 && !override) return 0 @@ -147,11 +148,13 @@ jitteriness += 1000 //High numbers for violent convulsions do_jitter_animation(jitteriness) stuttering += 2 - Stun(2) + if(!tesla_shock || (tesla_shock && siemens_coeff > 0.5)) + Stun(2) spawn(20) - jitteriness -= 990 //Still jittery, but vastly less - Stun(3) - Weaken(3) + jitteriness = max(jitteriness - 990, 10) //Still jittery, but vastly less + if(!tesla_shock || (tesla_shock && siemens_coeff > 0.5)) + Stun(3) + Weaken(3) if (shock_damage > 200) src.visible_message( "\red [src] was arc flashed by the [source]!", \ @@ -166,6 +169,7 @@ return shock_damage + /mob/living/carbon/proc/swap_hand() var/obj/item/item_in_hand = src.get_active_hand() if(item_in_hand) //this segment checks if the item in your hand is twohanded. diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index ccb4219b62b..ab8c73f5723 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -742,7 +742,7 @@ //Removed the horrible safety parameter. It was only being used by ninja code anyways. //Now checks siemens_coefficient of the affected area by default -/mob/living/carbon/human/electrocute_act(var/shock_damage, var/obj/source, var/base_siemens_coeff = 1.0, var/def_zone = null,var/override = 0) +/mob/living/carbon/human/electrocute_act(var/shock_damage, var/obj/source, var/base_siemens_coeff = 1.0, var/def_zone = null,var/override = 0, tesla_shock = 0) if(status_flags & GODMODE) //godmode return 0 @@ -755,7 +755,19 @@ var/obj/item/organ/external/affected_organ = get_organ(check_zone(def_zone)) var/siemens_coeff = base_siemens_coeff * get_siemens_coefficient_organ(affected_organ) - return ..(shock_damage, source, siemens_coeff, def_zone,override) + if(tesla_shock) + var/total_coeff = 1 + if(gloves) + var/obj/item/clothing/gloves/G = gloves + if(G.siemens_coefficient <= 0) + total_coeff -= 0.5 + if(wear_suit) + var/obj/item/clothing/suit/S = wear_suit + if(S.siemens_coefficient <= 0) + total_coeff -= 0.95 + siemens_coeff = total_coeff + + return ..(shock_damage, source, siemens_coeff, def_zone, override, tesla_shock) /mob/living/carbon/human/Topic(href, href_list) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 809183a7a30..a62229d9c5b 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -65,7 +65,7 @@ apply_damage(P.damage, P.damage_type, def_zone, armor) return P.on_hit(src, armor, def_zone) -/mob/living/proc/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null) +/mob/living/proc/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null, tesla_shock = 0) return 0 //only carbon liveforms have this proc /mob/living/emp_act(severity) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 3eb964db6cf..fefd94092b0 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -9,6 +9,7 @@ icon = 'icons/mob/mob.dmi' icon_state = "stand" icon_living = "stand" + icon_dead = "stand" speed = 0 a_intent = I_HARM stop_automated_movement = 1 @@ -69,6 +70,10 @@ visible_message("The [src] jumps back to its user.") Recall() +/mob/living/simple_animal/hostile/guardian/death() + ..() + summoner << "Your [name] died somehow!" + summoner.death() /mob/living/simple_animal/hostile/guardian/adjustBruteLoss(amount) //The spirit is invincible, but passes on damage to the summoner var/damage = amount * damage_transfer @@ -172,6 +177,8 @@ set name = "Reset Guardian Player (One Use)" set category = "Guardian" set desc = "Re-rolls which ghost will control your Guardian. One use." + + src.verbs -= /mob/living/proc/guardian_reset for(var/mob/living/simple_animal/hostile/guardian/G in mob_list) if(G.summoner == src) var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as [G.real_name]?", "pAI", null, FALSE, 100) @@ -181,11 +188,11 @@ G << "Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance." src << "Your guardian has been successfully reset." message_admins("[key_name_admin(new_stand)] has taken control of ([key_name_admin(G)])") - G.ghostize() + G.ghostize(0) G.key = new_stand.key - src.verbs -= /mob/living/proc/guardian_reset else src << "There were no ghosts willing to take control. Looks like you're stuck with your Guardian for now." + verbs += /mob/living/proc/guardian_reset /mob/living/simple_animal/hostile/guardian/proc/ToggleLight() @@ -677,6 +684,7 @@ G << "You are capable of manifesting or recalling to your master with verbs in the Guardian tab. You will also find a verb to communicate with them privately there." G << "While personally invincible, you will die if [user.real_name] does, and any damage dealt to you will have a portion passed on to them as you feed upon them to sustain yourself." G << "[G.playstyle_string]" + G.faction = user.faction user.verbs += /mob/living/proc/guardian_comm user.verbs += /mob/living/proc/guardian_recall user.verbs += /mob/living/proc/guardian_reset @@ -692,6 +700,7 @@ G.real_name = "[mob_name] [capitalize(colour)]" G.icon_living = "parasite[colour]" G.icon_state = "parasite[colour]" + G.icon_dead = "parasite[colour]" G.animated_manifest = TRUE user << "[G.tech_fluff_string]." G.speak_emote = list("states") diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 5dd06aaca94..181ddaa144e 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -35,7 +35,7 @@ max_n2 = 0 minbodytemp = 0 - faction = list("hostile") + faction = list("hostile", "winter") /mob/living/simple_animal/hostile/tree/FindTarget() . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm new file mode 100644 index 00000000000..7b28a5eb266 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm @@ -0,0 +1,141 @@ +////////////////////////// +// Winter Mobs // +////////////////////////// + +/mob/living/simple_animal/hostile/winter + faction = list("hostile", "syndicate", "winter") + speak_chance = 0 + turns_per_move = 5 + speed = 1 + maxHealth = 50 + health = 50 + icon = 'icons/mob/winter_mob.dmi' + icon_state = "placeholder" + icon_living = "placeholder" + icon_dead = "placeholder" + + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + minbodytemp = 0 + + melee_damage_lower = 3 + melee_damage_upper = 7 + + var/weapon1 + +/mob/living/simple_animal/hostile/winter/snowman + name = "snowman" + desc = "A very angry snowman. Doesn't look like it wants to play around..." + icon_state = "snowman" + icon_living = "snowman" + icon_dead = "snowman-dead" + weapon1 = /obj/item/weapon/melee/candy_sword + + bodytemperature = 73.0 //it's made of snow and hatred, so it's pretty cold. + maxbodytemp = 280.15 //at roughly 7 C, these will start melting (dying) from the warmth. Mind over matter or something. + heat_damage_per_tick = 10 //Now With Rapid Thawing Action! + + +/mob/living/simple_animal/hostile/winter/snowman/death() + if(prob(20)) //chance to become a stationary snowman structure instead of a corpse + new /obj/structure/snowman(get_turf(src)) + visible_message("The [src.name] shimmers as its animating magic fades away!") + ..() //this is just to make sure it gets properly killed before we qdel it + qdel(src) + else + ..() + +/mob/living/simple_animal/hostile/winter/snowman/ranged + ranged = 1 + retreat_distance = 5 + minimum_distance = 5 + projectiletype = /obj/item/projectile/snowball + weapon1 = null + +/mob/living/simple_animal/hostile/winter/reindeer + name = "reindeer" + desc = "Apparently murder is a reindeer game." + icon_state = "reindeer" + icon_living = "reindeer" + icon_dead = "reindeer-dead" + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat + meat_amount = 3 + + melee_damage_lower = 5 + melee_damage_upper = 10 + +/mob/living/simple_animal/hostile/winter/santa + maxHealth = 150 //if this seems low for a "boss", it's because you have to fight him multiple times, with him fully healing between stages + health = 150 + var/next_stage = null + var/death_message + name = "Santa Claus" + + icon_state = "santa" + icon_living = "santa" + icon_dead = "santa-dead" + +/mob/living/simple_animal/hostile/winter/santa/death() + ..() + if(death_message) + visible_message(death_message) + if(next_stage) + spawn(10) + new next_stage(get_turf(src)) + qdel(src) //hide the body + +/mob/living/simple_animal/hostile/winter/santa/stage_1 //stage 1: slow melee + desc = "GET THE FAT MAN!" + next_stage = /mob/living/simple_animal/hostile/winter/santa/stage_2 + death_message = "HO HO HO! YOU THOUGHT IT WOULD BE THIS EASY?!?" + speed = 2 + melee_damage_lower = 5 + melee_damage_upper = 15 + +/mob/living/simple_animal/hostile/winter/santa/stage_2 //stage 2: slow ranged + desc = "GET THE FAT MAN AGAIN!" + next_stage = /mob/living/simple_animal/hostile/winter/santa/stage_3 + death_message = "YOU'VE BEEN VERY NAUGHTY! PREPARE TO DIE!" + ranged = 1 + projectiletype = /obj/item/projectile/ornament + retreat_distance = 5 + minimum_distance = 5 + +/mob/living/simple_animal/hostile/winter/santa/stage_3 //stage 3: fast rapidfire ranged + desc = "WHY WON'T HE DIE ALREADY!?" + next_stage = /mob/living/simple_animal/hostile/winter/santa/stage_4 + death_message = "FACE MY FINAL FORM AND KNOW DESPAIR!" + ranged = 1 + rapid = 1 + speed = 0 //he's lost some weight from the fighting + projectiletype = /obj/item/projectile/ornament + retreat_distance = 3 + minimum_distance = 3 + +/mob/living/simple_animal/hostile/winter/santa/stage_4 //stage 4: fast spinebreaker + name = "Final Form Santa" + desc = "WHAT THE HELL IS HE!?! WHY WON'T HE STAY DEAD!?!" + ranged = 0 + rapid = 0 + speed = 0 //he's lost some weight from the fighting + + environment_smash = 2 //naughty walls must be punished too + melee_damage_lower = 10 + melee_damage_upper = 25 //that's gonna leave a mark, for sure + +/mob/living/simple_animal/hostile/winter/santa/stage_4/death() + world << "
" + world << "THE FAT MAN HAS FALLEN!" + world << "SANTA CLAUS HAS BEEN DEFEATED!" + world << "
" + ..() + var/obj/item/weapon/grenade/clusterbuster/xmas/X = new /obj/item/weapon/grenade/clusterbuster/xmas(get_turf(src)) + var/obj/item/weapon/grenade/clusterbuster/xmas/Y = new /obj/item/weapon/grenade/clusterbuster/xmas(get_turf(src)) + X.prime() + Y.prime() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 9394c27fb4d..59afc38f1cd 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -224,9 +224,9 @@ /mob/living/simple_animal/proc/handle_temperature_damage() if(bodytemperature < minbodytemp) - adjustBruteLoss(2) + adjustBruteLoss(cold_damage_per_tick) else if(bodytemperature > maxbodytemp) - adjustBruteLoss(3) + adjustBruteLoss(heat_damage_per_tick) /mob/living/simple_animal/Bumped(AM as mob|obj) if(!AM) return diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index dea02f984f7..739077b6a43 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -106,13 +106,7 @@ nanoui is used to open and update nano browser uis */ /datum/nanoui/proc/add_common_assets() add_script("libraries.min.js") // A JS file comprising of jQuery, doT.js and jQuery Timer libraries (compressed together) - add_script("nano_utility.js") // The NanoUtility JS, this is used to store utility functions. - add_script("nano_template.js") // The NanoTemplate JS, this is used to render templates. - add_script("nano_state_manager.js") // The NanoStateManager JS, it handles updates from the server and passes data to the current state - add_script("nano_state.js") // The NanoState JS, this is the base state which all states must inherit from - add_script("nano_state_default.js") // The NanoStateDefault JS, this is the "default" state (used by all UIs by default), which inherits from NanoState - add_script("nano_base_callbacks.js") // The NanoBaseCallbacks JS, this is used to set up (before and after update) callbacks which are common to all UIs - add_script("nano_base_helpers.js") // The NanoBaseHelpers JS, this is used to set up template helpers which are common to all UIs + add_script("nano.js") // A JS file of the NanoUI JavaScript concatenated into one file. add_stylesheet("shared.css") // this CSS sheet is common to all UIs add_stylesheet("icons.css") // this CSS sheet is common to all UIs diff --git a/code/modules/ninja/suit/head.dm b/code/modules/ninja/suit/head.dm index c3e921a97d9..6ed302feaad 100644 --- a/code/modules/ninja/suit/head.dm +++ b/code/modules/ninja/suit/head.dm @@ -7,5 +7,4 @@ item_state = "s-ninja_hood" armor = list(melee = 60, bullet = 60, laser = 45, energy = 15, bomb = 30, bio = 30, rad = 25) unacidable = 1 - siemens_coefficient = 0.2 blockTracking = 1 \ No newline at end of file diff --git a/code/modules/ninja/suit/mask.dm b/code/modules/ninja/suit/mask.dm index af6727b2666..4db00b78091 100644 --- a/code/modules/ninja/suit/mask.dm +++ b/code/modules/ninja/suit/mask.dm @@ -11,5 +11,4 @@ Contents: desc = "A close-fitting mask that acts both as an air filter and a post-modern fashion statement." icon_state = "s-ninja(norm)" item_state = "s-ninja_mask" - unacidable = 1 - siemens_coefficient = 0.2 \ No newline at end of file + unacidable = 1 \ No newline at end of file diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm index 2103b275059..c2fb287b9a8 100644 --- a/code/modules/ninja/suit/shoes.dm +++ b/code/modules/ninja/suit/shoes.dm @@ -6,7 +6,6 @@ permeability_coefficient = 0.01 flags = NOSLIP armor = list(melee = 60, bullet = 60, laser = 45,energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0.2 cold_protection = FEET min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT heat_protection = FEET diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index be2ffc21e9f..bfcc4330dc2 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -16,7 +16,6 @@ Contents: slowdown = 0 unacidable = 1 armor = list(melee = 60, bullet = 60, laser = 45,energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0.2 var/suitActive = 0 var/suitBusy = 0 diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index 614755cb017..11ffbf5a3f6 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -8,14 +8,16 @@ density = 1 use_power = 0 var/energy = 0 + var/creation_type = /obj/singularity /obj/machinery/the_singularitygen/process() var/turf/T = get_turf(src) if(src.energy >= 200) - message_admins("A singularity has been created at [x], [y], [z] (JMP)") - investigate_log("A singularity has been created at [x], [y], [z]","singulo") + message_admins("A [creation_type] has been created at [x], [y], [z] (JMP)") + investigate_log("A [creation_type] has been created at [x], [y], [z]","singulo") - new /obj/singularity/(T, 50) + var/obj/singularity/S = new creation_type(T, 50) + transfer_fingerprints_to(S) if(src) qdel(src) /obj/machinery/the_singularitygen/attackby(obj/item/W, mob/user, params) diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm new file mode 100644 index 00000000000..c7509b94242 --- /dev/null +++ b/code/modules/power/tesla/coil.dm @@ -0,0 +1,78 @@ +/obj/machinery/power/tesla_coil + name = "tesla coil" + desc = "For the union!" + icon = 'icons/obj/tesla_engine/tesla_coil.dmi' + icon_state = "coil" + anchored = 0 + density = 1 + var/power_loss = 2 + var/input_power_multiplier = 1 + +/obj/machinery/power/tesla_coil/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/tesla_coil(null) + component_parts += new /obj/item/weapon/stock_parts/capacitor(null) + RefreshParts() + +/obj/machinery/power/tesla_coil/RefreshParts() + var/power_multiplier = 0 + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + power_multiplier += C.rating + input_power_multiplier = power_multiplier + +/obj/machinery/power/tesla_coil/attackby(obj/item/W, mob/user, params) + if(default_deconstruction_screwdriver(user, "coil", "coil", W)) + return + + if(exchange_parts(user, W)) + return + + if(default_unfasten_wrench(user, W)) + if(!anchored) + disconnect_from_network() + else + connect_to_network() + return + + default_deconstruction_crowbar(W) + +/obj/machinery/power/tesla_coil/tesla_act(var/power) + being_shocked = 1 + var/power_produced = power / power_loss + add_avail(power_produced*input_power_multiplier) + flick("coilhit", src) + playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5) + tesla_zap(src, 5, power_produced) + spawn(10) + being_shocked = 0 + +/obj/machinery/power/grounding_rod + name = "Grounding Rod" + desc = "Keep an area from being fried from Edison's Bane." + icon = 'icons/obj/tesla_engine/tesla_coil.dmi' + icon_state = "grounding_rod" + anchored = 0 + density = 1 + +/obj/machinery/power/grounding_rod/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/grounding_rod(null) + component_parts += new /obj/item/weapon/stock_parts/capacitor(null) + RefreshParts() + +/obj/machinery/power/grounding_rod/attackby(obj/item/W, mob/user, params) + if(default_deconstruction_screwdriver(user, "grounding_rod", "grounding_rod", W)) + return + + if(exchange_parts(user, W)) + return + + if(default_unfasten_wrench(user, W)) + return + + default_deconstruction_crowbar(W) + +/obj/machinery/power/grounding_rod/tesla_act(var/power) + flick("coil_shock_1", src) \ No newline at end of file diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm new file mode 100644 index 00000000000..f1af4c5f66f --- /dev/null +++ b/code/modules/power/tesla/energy_ball.dm @@ -0,0 +1,209 @@ +#define TESLA_DEFAULT_POWER 3476520 +#define TESLA_MINI_POWER 1738260 + +var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, + /obj/machinery/power/emitter, + /obj/machinery/field/generator, + /mob/living/simple_animal, + /obj/machinery/particle_accelerator/control_box, + /obj/structure/particle_accelerator/fuel_chamber, + /obj/structure/particle_accelerator/particle_emitter/center, + /obj/structure/particle_accelerator/particle_emitter/left, + /obj/structure/particle_accelerator/particle_emitter/right, + /obj/structure/particle_accelerator/power_box, + /obj/structure/particle_accelerator/end_cap, + /obj/machinery/field/containment, + /obj/structure/disposalpipe) + +/obj/singularity/energy_ball + name = "energy ball" + desc = "An energy ball." + icon = 'icons/obj/tesla_engine/energy_ball.dmi' + icon_state = "energy_ball" + pixel_x = -32 + pixel_y = -32 + current_size = STAGE_TWO + move_self = 1 + grav_pull = 0 + contained = 0 + density = 1 + var/list/orbiting_balls = list() + var/produced_power + var/is_orbiting + +/obj/singularity/energy_ball/Destroy() + for(var/obj/singularity/energy_ball/EB in orbiting_balls) + qdel(EB) + ..() + +/obj/singularity/energy_ball/process() + if(!is_orbiting) + handle_energy() + var/amount_to_move = 2 + orbiting_balls.len * 2 + var/what_does_the_scouter_say_about_the_balls_power_level = (TESLA_DEFAULT_POWER + (TESLA_MINI_POWER * orbiting_balls.len)) + move_the_basket_ball(amount_to_move) + pixel_x = 0 + pixel_y = 0 + playsound(src.loc, 'sound/magic/lightningbolt.ogg', 100, 1, extrarange = 5) + tesla_zap(src, 7, what_does_the_scouter_say_about_the_balls_power_level) + pixel_x = -32 + pixel_y = -32 + energy += rand(1,3) // ensure it generates energy without needing to be blasted by the PA too much due to its size, and that a tesla engine will always get bigger over time + else + energy = 0 // ensure we dont have miniballs of miniballs + return + +/obj/singularity/energy_ball/examine(mob/user) + ..() + if(orbiting_balls.len) + user << "The amount of orbiting mini-balls is [orbiting_balls.len]." + + +/obj/singularity/energy_ball/proc/move_the_basket_ball(var/move_amount) + for(var/i = 0, i < move_amount, i++) + var/move_dir = pick(alldirs) + var/turf/T = get_step(src,move_dir) + if(can_move(T)) + loc = get_step(src,move_dir) + +/obj/singularity/energy_ball/proc/handle_energy() + if(energy >= 300) + energy -= 300 + playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, 1, extrarange = 5) + spawn(100) + var/obj/singularity/energy_ball/EB = new(loc) + orbiting_balls.Add(EB) + EB.transform *= pick(0.3,0.4,0.5,0.6,0.7) + EB.is_orbiting = 1 + var/icon/I = icon(icon,icon_state,dir) + + var/orbitsize = (I.Width()+I.Height())*pick(0.5,0.6,0.7) + orbitsize -= (orbitsize/world.icon_size)*(world.icon_size*0.25) + spawn(1) + EB.orbit(src,orbitsize, pick(FALSE,TRUE), rand(10,25), pick(3,4,5,6,36)) + + + +/obj/singularity/energy_ball/Bump(atom/A) + dust_mobs(A) + +/obj/singularity/energy_ball/Bumped(atom/A) + dust_mobs(A) + +/obj/singularity/energy_ball/proc/dust_mobs(atom/A) + if(istype(A, /mob/living/carbon)) + var/mob/living/carbon/C = A + C.dust() + return + +/proc/get_closest_atom(type, list, source) + var/closest_atom + var/closest_distance + for(var/A in list) + if(!istype(A, type)) + continue + var/distance = get_dist(source, A) + if(!closest_distance) + closest_distance = distance + closest_atom = A + else + if(closest_distance > distance) + closest_distance = distance + closest_atom = A + return closest_atom + +/proc/tesla_zap(var/atom/source, zap_range = 3, power) + if(power < 500) + return + var/list/tesla_coils = list() + var/list/grounding_rods = list() + var/list/potential_machine_zaps = list() + var/list/potential_mob_zaps = list() + var/list/potential_structure_zaps = list() + var/closest_atom + for(var/atom/A in oview(source, zap_range)) + if(istype(A, /obj/machinery/power/tesla_coil)) + var/obj/machinery/power/tesla_coil/C = A + if(C.being_shocked) + continue + tesla_coils.Add(C) + continue + if(istype(A, /obj/machinery/power/grounding_rod)) + var/obj/machinery/power/grounding_rod/R = A + grounding_rods.Add(R) + continue + if(istype(A, /obj/machinery)) + var/obj/machinery/M = A + if(is_type_in_list(M, blacklisted_tesla_types)) + continue + if(M.being_shocked) + continue + potential_machine_zaps.Add(M) + continue + if(istype(A, /obj/structure)) + var/obj/structure/M = A + if(is_type_in_list(M, blacklisted_tesla_types)) + continue + if(M.being_shocked) + continue + potential_structure_zaps.Add(M) + continue + if(istype(A, /mob/living)) + var/mob/living/L = A + if(L.stat == DEAD) + continue + if(is_type_in_list(L, blacklisted_tesla_types)) + continue + potential_mob_zaps.Add(L) + continue + closest_atom = get_closest_atom(/obj/machinery/power/tesla_coil, tesla_coils, source) + if(closest_atom && istype(closest_atom, /obj/machinery/power/tesla_coil)) + var/obj/machinery/power/tesla_coil/C = closest_atom + source.Beam(C,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5) + C.tesla_act(power) + return + if(!closest_atom) + closest_atom = get_closest_atom(/obj/machinery/power/grounding_rod, grounding_rods, source) + if(closest_atom && istype(closest_atom, /obj/machinery/power/grounding_rod)) + var/obj/machinery/power/grounding_rod/R = closest_atom + source.Beam(R,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5) + R.tesla_act(power) + return + if(!closest_atom) + closest_atom = get_closest_atom(/mob/living, potential_mob_zaps, source) + if(closest_atom && istype(closest_atom, /mob/living)) + var/mob/living/L = closest_atom + var/shock_damage = Clamp(round(power/400), 10, 90) + rand(-5,5) + source.Beam(L,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5) + L.electrocute_act(shock_damage, source, 1, tesla_shock = 1) + if(istype(L, /mob/living/silicon)) + var/mob/living/silicon/S = L + S.emp_act(2) + tesla_zap(S, 7, power / 1.5) // metallic folks bounce it further + else + tesla_zap(L, 5, power / 1.5) + return + if(!closest_atom) + closest_atom = get_closest_atom(/obj/machinery, potential_machine_zaps, source) + if(closest_atom) + var/obj/machinery/M = closest_atom + source.Beam(M,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5) + M.tesla_act(power) + if(prob(85)) + M.emp_act(2) + else + if(prob(50)) + M.ex_act(3) + else + if(prob(90)) + M.ex_act(2) + else + M.ex_act(1) + return + if(!closest_atom) + closest_atom = get_closest_atom(/obj/structure, potential_structure_zaps, source) + if(closest_atom) + var/obj/structure/S = closest_atom + source.Beam(S,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5) + S.tesla_act(power) + return diff --git a/code/modules/power/tesla/generator.dm b/code/modules/power/tesla/generator.dm new file mode 100644 index 00000000000..f511c650c8c --- /dev/null +++ b/code/modules/power/tesla/generator.dm @@ -0,0 +1,6 @@ +/obj/machinery/the_singularitygen/tesla + name = "energy ball generator" + desc = "Makes the wardenclyffe look like a child's plaything when shot with a particle accelerator." + icon = 'icons/obj/tesla_engine/tesla_generator.dmi' + icon_state = "TheSingGen" + creation_type = /obj/singularity/energy_ball \ No newline at end of file diff --git a/code/modules/projectiles/medbeam.dm b/code/modules/projectiles/medbeam.dm index e26a697f5a7..ba93e9703ba 100644 --- a/code/modules/projectiles/medbeam.dm +++ b/code/modules/projectiles/medbeam.dm @@ -31,36 +31,25 @@ if(active) qdel(current_beam) active = 0 - on_beam_relase(current_target) + on_beam_release(current_target) current_target = null /obj/item/weapon/gun/medbeam/Fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, params) add_fingerprint(user) - if(!isliving(target)) - return if(current_target) LoseTarget() + if(!isliving(target)) + return current_target = target active = 1 - current_beam = new(user,current_target,time=6000) + current_beam = new(user,current_target,time=6000,beam_icon_state="medbeam",btype=/obj/effect/ebeam/medical) spawn(0) current_beam.Start() feedback_add_details("gun_fired","[src.type]") -/obj/item/weapon/gun/medbeam/afterattack(obj/target, mob/user, proximity) - if(target.loc == loc || target == user) - return - - if(!current_target && isliving(target)) - current_target = target - active = 1 - current_beam = new(user,current_target,time=6000) - spawn(0) - current_beam.Start() - /obj/item/weapon/gun/medbeam/process() var/mob/living/carbon/human/H = loc if(!istype(H)) @@ -120,7 +109,7 @@ E.perma_injury = 0 return -/obj/item/weapon/gun/medbeam/proc/on_beam_relase(var/mob/living/target) +/obj/item/weapon/gun/medbeam/proc/on_beam_release(var/mob/living/target) return /obj/effect/ebeam/medical diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 3b8f87ddc39..91ae6fa24bf 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -354,4 +354,36 @@ obj/item/projectile/kinetic/New() return ..() if(!gun) qdel(src) - gun.create_portal(src) \ No newline at end of file + gun.create_portal(src) + +/obj/item/projectile/snowball + name = "snowball" + icon_state = "snowball" + hitsound = 'sound/items/dodgeball.ogg' + damage = 3 + damage_type = BURN + +/obj/item/projectile/snowball/on_hit(atom/target) //chilling + if(istype(target, /mob/living)) + var/mob/living/M = target + M.bodytemperature = max(0, M.bodytemperature - 50) //each hit will drop your body temp, so don't get surrounded! + M.ExtinguishMob() //bright side, they counter being on fire! + +/obj/item/projectile/ornament + name = "ornament" + icon_state = "ornament-1" + hitsound = 'sound/effects/Glasshit.ogg' + damage = 5 + damage_type = BRUTE + +/obj/item/projectile/ornament/New() + icon_state = pick("ornament-1", "ornament-2") + ..() + +/obj/item/projectile/ornament/on_hit(atom/target) //knockback + if(istype(target, /turf)) + return 0 + var/obj/T = target + var/throwdir = get_dir(firer,target) + T.throw_at(get_edge_target_turf(target, throwdir),10,10) + return 1 \ No newline at end of file diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index 0bcbda4eac2..05364e3e40f 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -92,3 +92,23 @@ materials = list(MAT_GLASS = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/pacman/super category = list("Engineering Machinery") + +/datum/design/tesla_coil + name = "Machine Design (Tesla Coil Board)" + desc = "The circuit board for a tesla coil." + id = "tesla_coil" + req_tech = list("programming" = 1) + build_type = IMPRINTER + materials = list(MAT_GLASS = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/tesla_coil + category = list("Engineering Machinery") + +/datum/design/grounding_rod + name = "Machine Design (Grounding Rod Board)" + desc = "The circuit board for a grounding rod." + id = "grounding_rod" + req_tech = list("programming" = 1) + build_type = IMPRINTER + materials = list(MAT_GLASS = 1000, "sacid" = 20) + build_path = /obj/item/weapon/circuitboard/grounding_rod + category = list("Engineering Machinery") \ No newline at end of file diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi index dd4f405e1cd..657a2d43418 100644 Binary files a/icons/effects/beam.dmi and b/icons/effects/beam.dmi differ diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 0557b16cdf3..8b9f2af61ae 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index ae3a532b404..0bd148505c7 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index 8b31eab9787..91976e05514 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/winter_mob.dmi b/icons/mob/winter_mob.dmi new file mode 100644 index 00000000000..4f295300e50 Binary files /dev/null and b/icons/mob/winter_mob.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index d8a0e56ac53..6ac5827dbef 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/icons/obj/tesla_engine/energy_ball.dmi b/icons/obj/tesla_engine/energy_ball.dmi new file mode 100644 index 00000000000..7f68e4b0071 Binary files /dev/null and b/icons/obj/tesla_engine/energy_ball.dmi differ diff --git a/icons/obj/tesla_engine/tesla_coil.dmi b/icons/obj/tesla_engine/tesla_coil.dmi new file mode 100644 index 00000000000..5c3646dde80 Binary files /dev/null and b/icons/obj/tesla_engine/tesla_coil.dmi differ diff --git a/icons/obj/tesla_engine/tesla_generator.dmi b/icons/obj/tesla_engine/tesla_generator.dmi new file mode 100644 index 00000000000..adf5fbaa8ec Binary files /dev/null and b/icons/obj/tesla_engine/tesla_generator.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index ad66b6b4801..46c2cfdb9f4 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/nano/.gitignore b/nano/.gitignore new file mode 100644 index 00000000000..68b9e27759d --- /dev/null +++ b/nano/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +bower_components/ diff --git a/nano/Gulpfile.coffee b/nano/Gulpfile.coffee new file mode 100644 index 00000000000..b0314455a3c --- /dev/null +++ b/nano/Gulpfile.coffee @@ -0,0 +1,48 @@ +### Settings ### +util = require("gulp-util") +s = + min: util.env.min + +# Project Paths +input = + scripts: + lib: "scripts/libraries" + main: "scripts/nano" + +output = + dir: "assets" + scripts: + lib: "libraries.min.js" + main: "nano.js" + +### Pacakages ### +del = require "del" +gulp = require "gulp" +merge = require "merge-stream" + +### Plugins ### +g = require("gulp-load-plugins")({replaceString: /^gulp(-|\.)|-/g}) + +### Helpers ### + +glob = (path) -> + "#{path}/*" + +### Tasks ### +gulp.task "default", ["scripts"] + +gulp.task "clean", -> + del glob output.dir + +gulp.task "scripts", ["clean"], -> + lib = gulp.src glob input.scripts.lib + .pipe g.concat(output.scripts.lib) + .pipe g.if(s.min, g.uglify().on('error', util.log)) + .pipe gulp.dest output.dir + + main = gulp.src glob input.scripts.main + .pipe g.concat(output.scripts.main) + .pipe g.if(s.min, g.uglify().on('error', util.log)) + .pipe gulp.dest output.dir + + merge lib, main \ No newline at end of file diff --git a/nano/Gulpfile.js b/nano/Gulpfile.js new file mode 100644 index 00000000000..203c68bf5c2 --- /dev/null +++ b/nano/Gulpfile.js @@ -0,0 +1,2 @@ +require('coffee-script/register'); +require('./Gulpfile.coffee'); diff --git a/nano/README.md b/nano/README.md new file mode 100644 index 00000000000..930621e90c0 --- /dev/null +++ b/nano/README.md @@ -0,0 +1,71 @@ +# NanoUI + +NanoUI is a user interface library, used for over 100 different interfaces, and rising. +It is more complicated than the other two UI systems in use, the `/datum/browser` and +`browse()` systems, but offers pre-made libraries, JavaScript, and a modified doT +template engine. + +This README is not yet complete, but gives a basic rundown of how the folder structure +works. I'll get around to finishing it one day. + +## Folder Rundown + +### /assets +The assets folder is used by the Gulp compiling system, and stores the minified version of +the NanoUI JavaScript Library and prerequisites. Everything within this folder is sent to +the client as-is. + +### /css +This folder is used for the CSS components of NanoUI. Everything within this folder is +sent to the client as-is. + +### /images +This folder is used to store any image files. It is sent to the client as-is. + +### /js +This folder is for JavaScript which cannot be compiled and put in the assets folder. +Currently, it is only used by the pre-minifed CodeMirror JavaScript. It is sent to the +client as-is. + +### /layouts +This folder is used for the central "layout" template files, which is loaded before the +UI's actual template file. It is sent to the client as-is. + +### /scripts +This folder is used for anything that will be compiled by the Gulp compilation system. +Currently, it is split into two folders. The file names must start with a number, as this +is how Gulp decides what order to put the concatenated and possibly minified files in. +Anything within this folder is not sent to the client directly. + +#### /scripts/libraries +This folder is used to store the source code of the prerequisites of NanoUI. Currently, +it contains jQuery, jQuery UI, jQuery timers, and the doT template system. + +#### /scripts/nano +This folder contains the primary JavaScript for NanoUI. + +### /templates +This folder is used to store the .tmpl files which are later compiled by the NanoUtility +JavaScript, using a modified version of the doT template engine. It is sent to the client +as-is. + +## Compiling +To compile any changes to the NanoUI JavaScript, you must first setup the building +environment. + +### Prerequisites +You will first need to install the primary prerequisite of NanoUI, [Node.js](https://nodejs.org). + +Node.js is used to obtain all of the remaining prerequisites to compile NanoUI. This is +done by running the following two commands. + - `npm install -g gulp` + - `npm install` + +### Running Gulp +NanoUI is built using the `gulp` task automation system. This system uses the contents +of the `Gulpfile.js` and `Gulpfile.coffee` files to perform compilation tasks. + +In order to build an un-minified version of NanoUI, you may simply run `gulp` in the +`nanoui` directory. However, this should only be used while testing, and you should run +the command `gulp --min` before commiting changes, in order to produce minified +JavaScript. diff --git a/nano/To BYOND Cache.bat b/nano/To BYOND Cache.bat deleted file mode 100644 index 486b8d1beaa..00000000000 --- a/nano/To BYOND Cache.bat +++ /dev/null @@ -1,4 +0,0 @@ -copy css\* "%USERPROFILE%\Documents\BYOND\cache" /y -copy images\* "%USERPROFILE%\Documents\BYOND\cache" /y -copy js\* "%USERPROFILE%\Documents\BYOND\cache" /y -copy templates\* "%USERPROFILE%\Documents\BYOND\cache" /y diff --git a/nano/assets/libraries.min.js b/nano/assets/libraries.min.js new file mode 100644 index 00000000000..a7a9d42ff80 --- /dev/null +++ b/nano/assets/libraries.min.js @@ -0,0 +1,5 @@ +!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t="length"in e&&e.length,n=oe.type(e);return"function"===n||oe.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e}function i(e,t,n){if(oe.isFunction(t))return oe.grep(e,function(e,i){return!!t.call(e,i,e)!==n});if(t.nodeType)return oe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(de.test(t))return oe.filter(t,e,n);t=oe.filter(t,e)}return oe.grep(e,function(e){return oe.inArray(e,t)>=0!==n})}function o(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function r(e){var t=xe[e]={};return oe.each(e.match(be)||[],function(e,n){t[n]=!0}),t}function s(){he.addEventListener?(he.removeEventListener("DOMContentLoaded",a,!1),e.removeEventListener("load",a,!1)):(he.detachEvent("onreadystatechange",a),e.detachEvent("onload",a))}function a(){(he.addEventListener||"load"===event.type||"complete"===he.readyState)&&(s(),oe.ready())}function l(e,t,n){if(void 0===n&&1===e.nodeType){var i="data-"+t.replace(Ne,"-$1").toLowerCase();if(n=e.getAttribute(i),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:Ce.test(n)?oe.parseJSON(n):n}catch(o){}oe.data(e,t,n)}else n=void 0}return n}function u(e){var t;for(t in e)if(("data"!==t||!oe.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function c(e,t,n,i){if(oe.acceptData(e)){var o,r,s=oe.expando,a=e.nodeType,l=a?oe.cache:e,u=a?e[s]:e[s]&&s;if(u&&l[u]&&(i||l[u].data)||void 0!==n||"string"!=typeof t)return u||(u=a?e[s]=Q.pop()||oe.guid++:s),l[u]||(l[u]=a?{}:{toJSON:oe.noop}),("object"==typeof t||"function"==typeof t)&&(i?l[u]=oe.extend(l[u],t):l[u].data=oe.extend(l[u].data,t)),r=l[u],i||(r.data||(r.data={}),r=r.data),void 0!==n&&(r[oe.camelCase(t)]=n),"string"==typeof t?(o=r[t],null==o&&(o=r[oe.camelCase(t)])):o=r,o}}function f(e,t,n){if(oe.acceptData(e)){var i,o,r=e.nodeType,s=r?oe.cache:e,a=r?e[oe.expando]:oe.expando;if(s[a]){if(t&&(i=n?s[a]:s[a].data)){oe.isArray(t)?t=t.concat(oe.map(t,oe.camelCase)):t in i?t=[t]:(t=oe.camelCase(t),t=t in i?[t]:t.split(" ")),o=t.length;for(;o--;)delete i[t[o]];if(n?!u(i):!oe.isEmptyObject(i))return}(n||(delete s[a].data,u(s[a])))&&(r?oe.cleanData([e],!0):ne.deleteExpando||s!=s.window?delete s[a]:s[a]=null)}}}function d(){return!0}function p(){return!1}function h(){try{return he.activeElement}catch(e){}}function g(e){var t=We.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function m(e,t){var n,i,o=0,r=typeof e.getElementsByTagName!==_e?e.getElementsByTagName(t||"*"):typeof e.querySelectorAll!==_e?e.querySelectorAll(t||"*"):void 0;if(!r)for(r=[],n=e.childNodes||e;null!=(i=n[o]);o++)!t||oe.nodeName(i,t)?r.push(i):oe.merge(r,m(i,t));return void 0===t||t&&oe.nodeName(e,t)?oe.merge([e],r):r}function v(e){Pe.test(e.type)&&(e.defaultChecked=e.checked)}function y(e,t){return oe.nodeName(e,"table")&&oe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function b(e){return e.type=(null!==oe.find.attr(e,"type"))+"/"+e.type,e}function x(e){var t=Ye.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function w(e,t){for(var n,i=0;null!=(n=e[i]);i++)oe._data(n,"globalEval",!t||oe._data(t[i],"globalEval"))}function T(e,t){if(1===t.nodeType&&oe.hasData(e)){var n,i,o,r=oe._data(e),s=oe._data(t,r),a=r.events;if(a){delete s.handle,s.events={};for(n in a)for(i=0,o=a[n].length;o>i;i++)oe.event.add(t,n,a[n][i])}s.data&&(s.data=oe.extend({},s.data))}}function _(e,t){var n,i,o;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!ne.noCloneEvent&&t[oe.expando]){o=oe._data(t);for(i in o.events)oe.removeEvent(t,i,o.handle);t.removeAttribute(oe.expando)}"script"===n&&t.text!==e.text?(b(t).text=e.text,x(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),ne.html5Clone&&e.innerHTML&&!oe.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Pe.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function C(t,n){var i,o=oe(n.createElement(t)).appendTo(n.body),r=e.getDefaultComputedStyle&&(i=e.getDefaultComputedStyle(o[0]))?i.display:oe.css(o[0],"display");return o.detach(),r}function N(e){var t=he,n=Ze[e];return n||(n=C(e,t),"none"!==n&&n||(Je=(Je||oe("