From 45efc957a81ce8a6dd4ee58c17e47bcbd2ba01d7 Mon Sep 17 00:00:00 2001 From: "polyxenitopalidou@gmail.com" Date: Sun, 8 Apr 2012 09:22:07 +0000 Subject: [PATCH] =?UTF-8?q?=20=E2=80=A2Adding=20my=20stuff=20so=20I=20can?= =?UTF-8?q?=20work=20from=20my=20parents'=20computer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Happy easter to everyone. Fucking love you guys git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3412 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/obj.dm | 4 +- code/defines/obj/weapon.dm | 2 +- code/game/objects/contraband.dm | 177 +++ code/game/vehicles/airtight/airtight.dm | 165 +++ code/game/vehicles/airtight/land.dm | 0 code/game/vehicles/airtight/space.dm | 0 code/game/vehicles/vehicle.dm | 190 +++ code/unused/Agouri_stuff.dm | 1565 +++++++++++++++++++++++ icons/obj/contraband.dmi | Bin 0 -> 31728 bytes icons/obj/vehicles.dmi | Bin 0 -> 4193 bytes sound/items/poster_being_created.ogg | Bin 0 -> 32626 bytes sound/items/poster_ripped.ogg | Bin 0 -> 15494 bytes tgstation.dme | 7 + 13 files changed, 2107 insertions(+), 3 deletions(-) create mode 100644 code/game/objects/contraband.dm create mode 100644 code/game/vehicles/airtight/airtight.dm create mode 100644 code/game/vehicles/airtight/land.dm create mode 100644 code/game/vehicles/airtight/space.dm create mode 100644 code/game/vehicles/vehicle.dm create mode 100644 code/unused/Agouri_stuff.dm create mode 100644 icons/obj/contraband.dmi create mode 100644 icons/obj/vehicles.dmi create mode 100644 sound/items/poster_being_created.ogg create mode 100644 sound/items/poster_ripped.ogg diff --git a/code/defines/obj.dm b/code/defines/obj.dm index dfb1b4b5773..67d854f5bd2 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -229,7 +229,7 @@ del(src)*/ /obj/effect/sign/maltesefalcon1 //The sign is 64x32, so it needs two tiles. ;3 - desc = "The Maltese Falcon, Space Bar and Grill. Now with added monkey." + desc = "The Maltese Falcon, Space Bar and Grill." name = "The Maltese Falcon" icon = 'decals.dmi' icon_state = "maltesefalcon1" @@ -238,7 +238,7 @@ density = 0 /obj/effect/sign/maltesefalcon2 - desc = "The Maltese Falcon, Space Bar and Grill. Now with added monkey." + desc = "The Maltese Falcon, Space Bar and Grill." name = "The Maltese Falcon" icon = 'decals.dmi' icon_state = "maltesefalcon2" diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 464c600ebf4..2c01e104283 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -584,7 +584,7 @@ /obj/item/weapon/fireaxe // DEM AXES MAN, marker -Agouri icon_state = "fireaxe0" name = "fire axe" - desc = "Let me axe you a question." + desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" force = 5 w_class = 4.0 flags = ONBACK diff --git a/code/game/objects/contraband.dm b/code/game/objects/contraband.dm new file mode 100644 index 00000000000..17cce5d4f36 --- /dev/null +++ b/code/game/objects/contraband.dm @@ -0,0 +1,177 @@ + +//########################## CONTRABAND ;3333333333333333333 -Agouri ################################################### + +#define NUM_OF_POSTER_DESIGNS 17 + +/obj/item/weapon/contraband + name = "Contraband Item" + desc = "You probably shouldn't be holding this." + icon = 'contraband.dmi' + force = 5 + + +/obj/item/weapon/contraband/poster + name = "Rolled poster" + desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. Its vulgar themes have marked it as Contraband aboard Nanotrasen© Space Facilities." + icon_state = "rolled_poster" + var/serial_number = 0 + var/obj/effect/decal/poster/resulting_poster = null //The poster that will be created is initialised and stored through contraband/poster's constructor + + +/obj/item/weapon/contraband/poster/New(turf/loc,var/given_serial=0) + if(given_serial==0) + //world<<"HERP" + serial_number = rand(1,NUM_OF_POSTER_DESIGNS) + src.resulting_poster = new(serial_number) + else + //world<<"DERP" + serial_number = given_serial + //We don't give it a resulting_poster because if we called it with a given_serial it means that we're rerolling an already used poster. + src.name += " - No. [serial_number]" + ..(loc) + + +/*/obj/item/weapon/contraband/poster/attack(mob/M as mob, mob/user as mob) + src.add_fingerprint(user) + if(src.resulting_poster) + src.resulting_poster.add_fingerprint(user) + ..()*/ + +/*/obj/item/weapon/contraband/poster/attack(atom/A, mob/user as mob) //This shit is handled through the wall's attackby() + if (istype(A, /turf/simulated/wall)) + if(src.resulting_poster == null) + return + else + var/turf/simulated/wall/W = A + var/check = 0 + var/stuff_on_wall = 0 + for( var/obj/O in W.contents) //Let's see if it already has a poster on it or too much stuff + if(istype(O,/obj/effect/decal/poster)) + check = 1 + break + stuff_on_wall++ + if(stuff_on_wall==3) + check = 1 + break + + if(check) + user << "The wall is far too cluttered to place a poster!" + return + + src.resulting_poster.loc = W //Looks like it's uncluttered enough. Place the poster + W.contents += src.resulting_poster + + del(src)*/ + + + +//############################## THE ACTUAL DECALS ########################### + +obj/effect/decal/poster + name = "Poster" + desc = "A large piece of space-resistant printed paper. It's considered contraband." + icon = 'contraband.dmi' + anchored = 1 + var/serial_number //Will hold the value of src.loc if nobody initialises it + var/ruined = 0 + + +obj/effect/decal/poster/New(var/serial) + + src.serial_number = serial + + if(serial_number==src.loc){serial_number = rand(1,NUM_OF_POSTER_DESIGNS);} //This is for the mappers that want individual posters without having to use rolled posters. + + icon_state = "poster[serial_number]" + + switch(serial_number) + if(1) + name += " - Unlucky Space Explorer" + desc += " This particular one depicts a skeletal form within a space suit." + if(2) + name += " - Positronic Logic Conflicts" + desc += " This particular one depicts the cold, unmoving stare of a particular advanced AI." + if(3) + name += " - Paranoia" + desc += " This particular one warns of the dangers of trusting your co-workers too much." + if(4) + name += " - Keep Calm" + desc += " This particular one is of a famous New Earth design, although a bit modified." + if(5) + name += " - Martian Warlord" + desc += " This particular one depicts the cartoony mug of a certain Martial Warmonger." + if(6) + name += " - Technological Singularity" + desc += " This particular one is of the blood-curdling symbol of a long-since defeated enemy of humanity." + if(7) + name += " - Wasteland" + desc += " This particular one is of a couple of ragged gunmen, one male and one female, on top of a mound of rubble. The number \"13\" is visible on their blue jumpsuits." + if(8) + name += " - Pinup Girl Cindy" + desc += " This particular one is of Nanotrasen's PR girl, Cindy, in a particularly feminine pose." + if(9) + name += " - Pinup Girl Amy" + desc += " This particular one is of Amy, the nymphomaniac Urban Legend of Nanotrasen Space Stations. How this photograph came to be is not known." + if(10) + name += " - Don't Panic" + desc += " This particular one depicts some sort of star in a grimace. The \"Don't Panic\" is written in big, friendly letters." + if(11) + name += " - Underwater Laboratory" + desc += " This particular one is of the fabled last crew of Nanotrasen's previous project before going big on Asteroid mining, Sealab." + if(12) + name += " - Missing Gloves" + desc += " This particular one is about the uproar that followed Nanotrasen's financial cuts towards insulated-glove purchases." + if(13) + name += " - Rogue AI" + desc += " This particular one depicts the shell of the infamous AI that catastropically comandeered one of Nanotrasen's earliest space stations. Back then, the corporation was just known as TriOptimum." + if(14) + name += " - User of the Arcane Arts" + desc += " This particular one depicts a wizard, casting a spell. You can't really make out if it's an actial photograph or a computer-generated image." + if(15) + name += " - Leviating Skull" + desc += " This particular one is the portrait of a certain flying, friendly and somewhat sex-crazed enchanted skull. Its adventures along with its fabled companion are now fading through history..." + if(17) + name += " - Augmented Legend" + desc += " This particular one is of an obviously augmented individual, gazing towards the sky. The cyber-city in the backround is rather punkish." + if(18) + name += " - Dangerous Static" + desc += " This particular one depicts nothing remarkable other than a rather mesmerising pattern of monitor static. There's a tag on the sides of the poster, urging you to \"tear this poster in half to receive your free sample\"." + else + name = "This shit just bugged. Report it to Agouri - polyxenitopalidou@gmail.com" + desc = "Why are you still here?" + ..() + +obj/effect/decal/poster/attackby(obj/item/weapon/W as obj, mob/user as mob) + if( istype(W, /obj/item/weapon/wirecutters) ) + playsound(src.loc, 'Wirecutter.ogg', 100, 1) + if(src.ruined) + user << "You remove the remnants of the poster." + del(src) + else + user << "You carefully remove the poster from the wall." + var/obj/item/weapon/contraband/poster/P = new(src,src.serial_number) + P.resulting_poster = src + P.loc = user.loc + src.loc = P + return + + + +/obj/effect/decal/poster/attack_hand(mob/user as mob) + if(src.ruined) + return + var/temp_loc = user.loc + switch(alert("Do I want to rip the poster from the wall?","You think...","Yes","No")) + if("Yes") + if(user.loc != temp_loc) + return + for (var/mob/O in hearers(5, src.loc)) + O.show_message("[user.name] rips the [src.name] in a single, decisive motion!" ) + playsound(src.loc, 'poster_ripped.ogg', 100, 1) + src.ruined = 1 + src.icon_state = "poster_ripped" + src.name = "Ripped poster" + src.desc = "You can't make out anything from the poster's original print. It's ruined." + src.add_fingerprint(user) + if("No") + return \ No newline at end of file diff --git a/code/game/vehicles/airtight/airtight.dm b/code/game/vehicles/airtight/airtight.dm new file mode 100644 index 00000000000..cd589948fc6 --- /dev/null +++ b/code/game/vehicles/airtight/airtight.dm @@ -0,0 +1,165 @@ + +/obj/vehicle/airtight + //inner atmos + var/use_internal_tank = 0 + var/internal_tank_valve = ONE_ATMOSPHERE + var/obj/machinery/portable_atmospherics/canister/internal_tank + var/datum/gas_mixture/cabin_air + var/obj/machinery/atmospherics/portables_connector/connected_port = null + + var/datum/global_iterator/pr_int_temp_processor //normalizes internal air mixture temperature + var/datum/global_iterator/pr_give_air //moves air from tank to cabin + + +/obj/vehicle/airtight/New() + ..() + src.add_airtank() + src.add_cabin() + src.add_airtight_iterators() + + + + +//######################################### Helpers for airtight vehicles ######################################### + +/obj/vehicle/airtight/proc/add_cabin() + cabin_air = new + cabin_air.temperature = T20C + cabin_air.volume = 200 + cabin_air.oxygen = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) + cabin_air.nitrogen = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) + return cabin_air + +/obj/vehicle/airtight/proc/add_airtank() + internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src) + return internal_tank + +/obj/vehicle/airtight/proc/add_airtight_iterators() + pr_int_temp_processor = new /datum/global_iterator/vehicle_preserve_temp(list(src)) + pr_give_air = new /datum/global_iterator/vehicle_tank_give_air(list(src)) + + +//######################################### Specific datums for airtight vehicles ################################# + + +/datum/global_iterator/vehicle_preserve_temp //normalizing cabin air temperature to 20 degrees celsium + delay = 20 + + process(var/obj/vehicle/airtight/V) + if(V.cabin_air && V.cabin_air.return_volume() > 0) + var/delta = V.cabin_air.temperature - T20C + V.cabin_air.temperature -= max(-10, min(10, round(delta/4,0.1))) + return + + +/datum/global_iterator/vehicle_tank_give_air + delay = 15 + + process(var/obj/vehicle/airtight/V) + if(V.internal_tank) + var/datum/gas_mixture/tank_air = V.internal_tank.return_air() + var/datum/gas_mixture/cabin_air = V.cabin_air + + var/release_pressure = V.internal_tank_valve + var/cabin_pressure = cabin_air.return_pressure() + var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2) + var/transfer_moles = 0 + if(pressure_delta > 0) //cabin pressure lower than release pressure + if(tank_air.return_temperature() > 0) + transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION) + var/datum/gas_mixture/removed = tank_air.remove(transfer_moles) + cabin_air.merge(removed) + else if(pressure_delta < 0) //cabin pressure higher than release pressure + var/datum/gas_mixture/t_air = V.get_turf_air() + pressure_delta = cabin_pressure - release_pressure + if(t_air) + pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta) + if(pressure_delta > 0) //if location pressure is lower than cabin pressure + transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION) + var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles) + if(t_air) + t_air.merge(removed) + else //just delete the cabin gas, we're in space or some shit + del(removed) + else + return stop() + return + + +//######################################### Atmospherics for vehicles ############################################# + + +/obj/vehicle/proc/get_turf_air() + var/turf/T = get_turf(src) + if(T) + . = T.return_air() + return + +/obj/vehicle/airtight/remove_air(amount) + if(use_internal_tank) + return cabin_air.remove(amount) + else + var/turf/T = get_turf(src) + if(T) + return T.remove_air(amount) + return + +/obj/vehicle/airtight/return_air() + if(use_internal_tank) + return cabin_air + return get_turf_air() + +/obj/vehicle/airtight/proc/return_pressure() + . = 0 + if(use_internal_tank) + . = cabin_air.return_pressure() + else + var/datum/gas_mixture/t_air = get_turf_air() + if(t_air) + . = t_air.return_pressure() + return + + +/obj/vehicle/airtight/proc/return_temperature() + . = 0 + if(use_internal_tank) + . = cabin_air.return_temperature() + else + var/datum/gas_mixture/t_air = get_turf_air() + if(t_air) + . = t_air.return_temperature() + return + +/obj/vehicle/airtight/proc/connect(obj/machinery/atmospherics/portables_connector/new_port) + //Make sure not already connected to something else + if(connected_port || !new_port || new_port.connected_device) + return 0 + + //Make sure are close enough for a valid connection + if(new_port.loc != src.loc) + return 0 + + //Perform the connection + connected_port = new_port + connected_port.connected_device = src + + //Actually enforce the air sharing + var/datum/pipe_network/network = connected_port.return_network(src) + if(network && !(internal_tank.return_air() in network.gases)) + network.gases += internal_tank.return_air() + network.update = 1 + log_message("Vehicle airtank connected to external port.") + return 1 + +/obj/vehicle/airtight/proc/disconnect() + if(!connected_port) + return 0 + + var/datum/pipe_network/network = connected_port.return_network(src) + if(network) + network.gases -= internal_tank.return_air() + + connected_port.connected_device = null + connected_port = null + src.log_message("Vehicle airtank disconnected from external port.") + return 1 \ No newline at end of file diff --git a/code/game/vehicles/airtight/land.dm b/code/game/vehicles/airtight/land.dm new file mode 100644 index 00000000000..e69de29bb2d diff --git a/code/game/vehicles/airtight/space.dm b/code/game/vehicles/airtight/space.dm new file mode 100644 index 00000000000..e69de29bb2d diff --git a/code/game/vehicles/vehicle.dm b/code/game/vehicles/vehicle.dm new file mode 100644 index 00000000000..16e5abc2845 --- /dev/null +++ b/code/game/vehicles/vehicle.dm @@ -0,0 +1,190 @@ + + +/obj/vehicle + name = "Vehicle" + icon = 'vehicles.dmi' + density = 1 + anchored = 1 + unacidable = 1 //To avoid the pilot-deleting shit that came with mechas + layer = MOB_LAYER + //var/can_move = 1 + var/mob/living/carbon/occupant = null + //var/step_in = 10 //make a step in step_in/10 sec. + //var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South. + //var/step_energy_drain = 10 + var/health = 300 //health is health + //var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. + //the values in this list show how much damage will pass through, not how much will be absorbed. + var/list/damage_absorption = list("brute"=0.8,"fire"=1.2,"bullet"=0.9,"laser"=1,"energy"=1,"bomb"=1) + var/obj/item/weapon/cell/cell //Our power source + var/state = 0 + var/list/log = new + var/last_message = 0 + var/add_req_access = 1 + var/maint_access = 1 + //var/dna //dna-locking the mech + var/list/proc_res = list() //stores proc owners, like proc_res["functionname"] = owner reference + var/datum/effect/effect/system/spark_spread/spark_system = new + var/lights = 0 + var/lights_power = 6 + + //inner atmos //These go in airtight.dm, not all vehicles are space-faring -Agouri + //var/use_internal_tank = 0 + //var/internal_tank_valve = ONE_ATMOSPHERE + //var/obj/machinery/portable_atmospherics/canister/internal_tank + //var/datum/gas_mixture/cabin_air + //var/obj/machinery/atmospherics/portables_connector/connected_port = null + + var/obj/item/device/radio/radio = null + + var/max_temperature = 2500 + //var/internal_damage_threshold = 50 //health percentage below which internal damage is possible + var/internal_damage = 0 //contains bitflags + + var/list/operation_req_access = list()//required access level for mecha operation + var/list/internals_req_access = list(access_engine,access_robotics)//required access level to open cell compartment + + //var/datum/global_iterator/pr_int_temp_processor //normalizes internal air mixture temperature //In airtight.dm you go -Agouri + var/datum/global_iterator/pr_inertial_movement //controls intertial movement in spesss + + //var/datum/global_iterator/pr_give_air //moves air from tank to cabin //Y-you too -Agouri + + var/datum/global_iterator/pr_internal_damage //processes internal damage + + + var/wreckage + + var/list/equipment = new + var/obj/selected + //var/max_equip = 3 + + var/datum/events/events + + + +/obj/vehicle/New() + ..() + events = new + icon_state += "-unmanned" + add_radio() + //add_cabin() //No cabin for non-airtights + + spark_system.set_up(2, 0, src) + spark_system.attach(src) + add_cell() + add_iterators() + removeVerb(/obj/mecha/verb/disconnect_from_port) + removeVerb(/atom/movable/verb/pull) + log_message("[src.name]'s functions initialised. Work protocols active - Entering IDLE mode.") + loc.Entered(src) + return + + +//################ Helpers ########################################################### + + +/obj/vehicle/proc/removeVerb(verb_path) + verbs -= verb_path + +/obj/vehicle/proc/addVerb(verb_path) + verbs += verb_path + +/*/obj/vehicle/proc/add_airtank() //In airtight.dm -Agouri + internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src) + return internal_tank*/ + +/obj/vehicle/proc/add_cell(var/obj/item/weapon/cell/C=null) + if(C) + C.forceMove(src) + cell = C + return + cell = new(src) + cell.charge = 15000 + cell.maxcharge = 15000 + +/*/obj/vehicle/proc/add_cabin() //In airtight.dm -Agouri + cabin_air = new + cabin_air.temperature = T20C + cabin_air.volume = 200 + cabin_air.oxygen = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) + cabin_air.nitrogen = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) + return cabin_air*/ + +/obj/vehicle/proc/add_radio() + radio = new(src) + radio.name = "[src] radio" + radio.icon = icon + radio.icon_state = icon_state + radio.subspace_transmission = 1 + +/obj/vehicle/proc/add_iterators() + pr_inertial_movement = new /datum/global_iterator/vehicle_intertial_movement(null,0) + //pr_internal_damage = new /datum/global_iterator/vehicle_internal_damage(list(src),0) + //pr_int_temp_processor = new /datum/global_iterator/vehicle_preserve_temp(list(src)) //In airtight.dm's add_airtight_iterators -Agouri + //pr_give_air = new /datum/global_iterator/vehicle_tank_give_air(list(src) //Same here -Agouri + +/obj/vehicle/proc/check_for_support() + if(locate(/obj/structure/grille, orange(1, src)) || locate(/obj/structure/lattice, orange(1, src)) || locate(/turf/simulated, orange(1, src)) || locate(/turf/unsimulated, orange(1, src))) + return 1 + else + return 0 + +//################ Logs and messages ############################################ + + +/obj/vehicle/proc/log_message(message as text,red=null) + log.len++ + log[log.len] = list("time"=world.timeofday,"message"="[red?"":null][message][red?"":null]") + return log.len + + + +//################ Global Iterator Datums ###################################### + + +/datum/global_iterator/vehicle_intertial_movement //inertial movement in space + delay = 7 + + process(var/obj/vehicle/V as obj, direction) + if(direction) + if(!step(V, direction)||V.check_for_support()) + src.stop() + else + src.stop() + return + + +/datum/global_iterator/mecha_internal_damage // processing internal damage + + process(var/obj/mecha/mecha) + if(!mecha.hasInternalDamage()) + return stop() + if(mecha.hasInternalDamage(MECHA_INT_FIRE)) + if(!mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL) && prob(5)) + mecha.clearInternalDamage(MECHA_INT_FIRE) + if(mecha.internal_tank) + if(mecha.internal_tank.return_pressure()>mecha.internal_tank.maximum_pressure && !(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH))) + mecha.setInternalDamage(MECHA_INT_TANK_BREACH) + var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air() + if(int_tank_air && int_tank_air.return_volume()>0) //heat the air_contents + int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15)) + if(mecha.cabin_air && mecha.cabin_air.return_volume()>0) + mecha.cabin_air.temperature = min(6000+T0C, mecha.cabin_air.return_temperature()+rand(10,15)) + if(mecha.cabin_air.return_temperature()>mecha.max_temperature/2) + mecha.take_damage(4/round(mecha.max_temperature/mecha.cabin_air.return_temperature(),0.1),"fire") + if(mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL)) //stop the mecha_preserve_temp loop datum + mecha.pr_int_temp_processor.stop() + if(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)) //remove some air from internal tank + if(mecha.internal_tank) + var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air() + var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10) + if(mecha.loc && hascall(mecha.loc,"assume_air")) + mecha.loc.assume_air(leaked_gas) + else + del(leaked_gas) + if(mecha.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) + if(mecha.get_charge()) + mecha.spark_system.start() + mecha.cell.charge -= min(20,mecha.cell.charge) + mecha.cell.maxcharge -= min(20,mecha.cell.maxcharge) + return \ No newline at end of file diff --git a/code/unused/Agouri_stuff.dm b/code/unused/Agouri_stuff.dm new file mode 100644 index 00000000000..1f0270016fa --- /dev/null +++ b/code/unused/Agouri_stuff.dm @@ -0,0 +1,1565 @@ +/turf/DblClick() + if(istype(usr, /mob/living/silicon/ai)) + return move_camera_by_click() + if(usr.stat || usr.restrained() || usr.lying) + return ..() + + if(usr.hand && istype(usr.l_hand, /obj/item/weapon/flamethrower)) + var/turflist = getline(usr,src) + var/obj/item/weapon/flamethrower/F = usr.l_hand + F.flame_turf(turflist) + else if(!usr.hand && istype(usr.r_hand, /obj/item/weapon/flamethrower)) + var/turflist = getline(usr,src) + var/obj/item/weapon/flamethrower/F = usr.r_hand + F.flame_turf(turflist) + + return ..() + +/turf/New() + ..() + for(var/atom/movable/AM as mob|obj in src) + spawn( 0 ) + src.Entered(AM) + return + return + +/turf/ex_act(severity) + return 0 + + +/turf/bullet_act(var/obj/item/projectile/Proj) + if(istype(Proj ,/obj/item/projectile/beam/pulse)) + src.ex_act(2) + ..() + return 0 + +/turf/bullet_act(var/obj/item/projectile/Proj) + if(istype(Proj ,/obj/item/projectile/bullet/gyro)) + explosion(src, -1, 0, 2) + ..() + return 0 + +/turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area) + if (!mover || !isturf(mover.loc)) + return 1 + + + //First, check objects to block exit that are not on the border + for(var/obj/obstacle in mover.loc) + if((obstacle.flags & ~ON_BORDER) && (mover != obstacle) && (forget != obstacle)) + if(!obstacle.CheckExit(mover, src)) + mover.Bump(obstacle, 1) + return 0 + + //Now, check objects to block exit that are on the border + for(var/obj/border_obstacle in mover.loc) + if((border_obstacle.flags & ON_BORDER) && (mover != border_obstacle) && (forget != border_obstacle)) + if(!border_obstacle.CheckExit(mover, src)) + mover.Bump(border_obstacle, 1) + return 0 + + //Next, check objects to block entry that are on the border + for(var/obj/border_obstacle in src) + if(border_obstacle.flags & ON_BORDER) + if(!border_obstacle.CanPass(mover, mover.loc, 1, 0) && (forget != border_obstacle)) + mover.Bump(border_obstacle, 1) + return 0 + + //Then, check the turf itself + if (!src.CanPass(mover, src)) + mover.Bump(src, 1) + return 0 + + //Finally, check objects/mobs to block entry that are not on the border + for(var/atom/movable/obstacle in src) + if(obstacle.flags & ~ON_BORDER) + if(!obstacle.CanPass(mover, mover.loc, 1, 0) && (forget != obstacle)) + mover.Bump(obstacle, 1) + return 0 + return 1 //Nothing found to block so return success! + + +/turf/Entered(atom/movable/M as mob|obj) + var/loopsanity = 100 + if(ismob(M)) + if(!M:lastarea) + M:lastarea = get_area(M.loc) + if(M:lastarea.has_gravity == 0) + inertial_drift(M) + + /* + if(M.flags & NOGRAV) + inertial_drift(M) + */ + + + + else if(!istype(src, /turf/space)) + M:inertia_dir = 0 + ..() + var/objects = 0 + for(var/atom/A as mob|obj|turf|area in src) + if(objects > loopsanity) break + objects++ + spawn( 0 ) + if ((A && M)) + A.HasEntered(M, 1) + return + objects = 0 + for(var/atom/A as mob|obj|turf|area in range(1)) + if(objects > loopsanity) break + objects++ + spawn( 0 ) + if ((A && M)) + A.HasProximity(M, 1) + return + return + +/turf/proc/inertial_drift(atom/movable/A as mob|obj) + if(!(A.last_move)) return + if((istype(A, /mob/) && src.x > 2 && src.x < (world.maxx - 1) && src.y > 2 && src.y < (world.maxy-1))) + var/mob/M = A + if(M.Process_Spacemove(1)) + M.inertia_dir = 0 + return + spawn(5) + if((M && !(M.anchored) && (M.loc == src))) + if(M.inertia_dir) + step(M, M.inertia_dir) + return + M.inertia_dir = M.last_move + step(M, M.inertia_dir) + return + +/turf/proc/levelupdate() + for(var/obj/O in src) + if(O.level == 1) + O.hide(src.intact) + +// override for space turfs, since they should never hide anything +/turf/space/levelupdate() + for(var/obj/O in src) + if(O.level == 1) + O.hide(0) + +// Removes all signs of lattice on the pos of the turf -Donkieyo +/turf/proc/RemoveLattice() + var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) + if(L) + del L + +/turf/proc/ReplaceWithFloor(explode=0) + var/prior_icon = icon_old + var/old_dir = dir + + var/turf/simulated/floor/W = new /turf/simulated/floor( locate(src.x, src.y, src.z) ) + + W.RemoveLattice() + W.dir = old_dir + if(prior_icon) W.icon_state = prior_icon + else W.icon_state = "floor" + + if (!explode) + W.opacity = 1 + W.sd_SetOpacity(0) + //This is probably gonna make lighting go a bit wonky in bombed areas, but sd_SetOpacity was the primary reason bombs have been so laggy. --NEO + W.levelupdate() + return W + +/turf/proc/ReplaceWithPlating() + var/prior_icon = icon_old + var/old_dir = dir + + var/turf/simulated/floor/plating/W = new /turf/simulated/floor/plating( locate(src.x, src.y, src.z) ) + + W.RemoveLattice() + W.dir = old_dir + if(prior_icon) W.icon_state = prior_icon + else W.icon_state = "plating" + W.opacity = 1 + W.sd_SetOpacity(0) + W.levelupdate() + return W + +/turf/proc/ReplaceWithEngineFloor() + var/old_dir = dir + + var/turf/simulated/floor/engine/E = new /turf/simulated/floor/engine( locate(src.x, src.y, src.z) ) + + E.dir = old_dir + E.icon_state = "engine" + +/turf/simulated/Entered(atom/A, atom/OL) + if (istype(A,/mob/living/carbon)) + var/mob/living/carbon/M = A + if(M.lying) return + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(istype(H.shoes, /obj/item/clothing/shoes/clown_shoes)) + if(H.m_intent == "run") + if(H.footstep >= 2) + H.footstep = 0 + else + H.footstep++ + if(H.footstep == 0) + playsound(src, "clownstep", 50, 1) // this will get annoying very fast. + else + playsound(src, "clownstep", 20, 1) + + switch (src.wet) + if(1) + if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes + if ((M.m_intent == "run") && !(istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP)) + M.pulling = null + step(M, M.dir) + M << "\blue You slipped on the wet floor!" + playsound(src.loc, 'slip.ogg', 50, 1, -3) + M.Stun(8) + M.Weaken(5) + else + M.inertia_dir = 0 + return + else if(!istype(M, /mob/living/carbon/metroid)) + if (M.m_intent == "run") + M.pulling = null + step(M, M.dir) + M << "\blue You slipped on the wet floor!" + playsound(src.loc, 'slip.ogg', 50, 1, -3) + M.Stun(8) + M.Weaken(5) + else + M.inertia_dir = 0 + return + + if(2) //lube + if(!istype(M, /mob/living/carbon/metroid)) + M.pulling = null + step(M, M.dir) + spawn(1) step(M, M.dir) + spawn(2) step(M, M.dir) + spawn(3) step(M, M.dir) + spawn(4) step(M, M.dir) + M.take_organ_damage(2) // Was 5 -- TLE + M << "\blue You slipped on the floor!" + playsound(src.loc, 'slip.ogg', 50, 1, -3) + M.Weaken(10) + + ..() + +/turf/proc/ReplaceWithSpace() + var/old_dir = dir + var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) ) + S.dir = old_dir + return S + +/turf/proc/ReplaceWithLattice() + var/old_dir = dir + var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) ) + S.dir = old_dir + new /obj/structure/lattice( locate(src.x, src.y, src.z) ) + return S + +/turf/proc/ReplaceWithWall() + var/old_icon = icon_state + var/turf/simulated/wall/S = new /turf/simulated/wall( locate(src.x, src.y, src.z) ) + S.icon_old = old_icon + S.opacity = 0 + S.sd_NewOpacity(1) + return S + +/turf/proc/ReplaceWithRWall() + var/old_icon = icon_state + var/turf/simulated/wall/r_wall/S = new /turf/simulated/wall/r_wall( locate(src.x, src.y, src.z) ) + S.icon_old = old_icon + S.opacity = 0 + S.sd_NewOpacity(1) + return S + +/turf/simulated/wall/New() + ..() + +/turf/simulated/wall/proc/dismantle_wall(devastated=0, explode=0) + if(istype(src,/turf/simulated/wall/r_wall)) + if(!devastated) + playsound(src.loc, 'Welder.ogg', 100, 1) + new /obj/structure/girder/reinforced(src) + new /obj/item/stack/sheet/plasteel( src ) + else + new /obj/item/stack/sheet/metal( src ) + new /obj/item/stack/sheet/metal( src ) + new /obj/item/stack/sheet/plasteel( src ) + else if(istype(src,/turf/simulated/wall/cult)) + if(!devastated) + playsound(src.loc, 'Welder.ogg', 100, 1) + new /obj/effect/decal/remains/human(src) + else + new /obj/effect/decal/remains/human(src) + + else + if(!devastated) + playsound(src.loc, 'Welder.ogg', 100, 1) + new /obj/structure/girder(src) + new /obj/item/stack/sheet/metal( src ) + new /obj/item/stack/sheet/metal( src ) + else + new /obj/item/stack/sheet/metal( src ) + new /obj/item/stack/sheet/metal( src ) + new /obj/item/stack/sheet/metal( src ) + + ReplaceWithPlating(explode) + +/turf/simulated/wall/examine() + set src in oview(1) + + usr << "It looks like a regular wall." + return + +/turf/simulated/wall/ex_act(severity) + switch(severity) + if(1.0) + //SN src = null + src.ReplaceWithSpace() + del(src) + return + if(2.0) + if (prob(50)) + dismantle_wall(0,1) + else + dismantle_wall(1,1) + if(3.0) + var/proba + if (istype(src, /turf/simulated/wall/r_wall)) + proba = 15 + else + proba = 40 + if (prob(proba)) + dismantle_wall(0,1) + else + return + +/turf/simulated/wall/blob_act() + if(prob(50)) + dismantle_wall() + +/turf/simulated/wall/attack_paw(mob/user as mob) + if ((user.mutations & HULK)) + if (prob(40)) + usr << text("\blue You smash through the wall.") + dismantle_wall(1) + return + else + usr << text("\blue You punch the wall.") + return + + return src.attack_hand(user) + + +/turf/simulated/wall/attack_animal(mob/living/simple_animal/M as mob) + if(M.wall_smash) + if (istype(src, /turf/simulated/wall/r_wall)) + M << text("\blue This wall is far too strong for you to destroy.") + return + else + if (prob(40)) + M << text("\blue You smash through the wall.") + dismantle_wall(1) + return + else + M << text("\blue You smash against the wall.") + return + + M << "\blue You push the wall but nothing happens!" + return + +/turf/simulated/wall/attack_hand(mob/user as mob) + if ((user.mutations & HULK)) + if (prob(40)) + usr << text("\blue You smash through the wall.") + dismantle_wall(1) + return + else + usr << text("\blue You punch the wall.") + return + + user << "\blue You push the wall but nothing happens!" + playsound(src.loc, 'Genhit.ogg', 25, 1) + src.add_fingerprint(user) + return + +/turf/simulated/wall/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + usr << "\red You don't have the dexterity to do this!" + return + + if (istype(W, /obj/item/weapon/weldingtool) && W:welding) + var/turf/T = get_turf(user) + if (!( istype(T, /turf) )) + return + + if (thermite) + var/obj/effect/overlay/O = new/obj/effect/overlay( src ) + O.name = "Thermite" + O.desc = "Looks hot." + O.icon = 'fire.dmi' + O.icon_state = "2" + O.anchored = 1 + O.density = 1 + O.layer = 5 + var/turf/simulated/floor/F = ReplaceWithPlating() + F.burn_tile() + F.icon_state = "wall_thermite" + user << "\red The thermite melts the wall." + spawn(100) del(O) + F.sd_LumReset() + return + + if (W:remove_fuel(0,user)) + W:welding = 2 + user << "\blue Now disassembling the outer wall plating." + playsound(src.loc, 'Welder.ogg', 100, 1) + sleep(100) + if (W && istype(src, /turf/simulated/wall)) + if ((get_turf(user) == T && user.equipped() == W)) + user << "\blue You disassembled the outer wall plating." + dismantle_wall() + W:welding = 1 + else + user << "\blue You need more welding fuel to complete this task." + return + + else if (istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + var/turf/T = user.loc + if (!( istype(T, /turf) )) + return + + if (thermite) + var/obj/effect/overlay/O = new/obj/effect/overlay( src ) + O.name = "Thermite" + O.desc = "Looks hot." + O.icon = 'fire.dmi' + O.icon_state = "2" + O.anchored = 1 + O.density = 1 + O.layer = 5 + var/turf/simulated/floor/F = ReplaceWithPlating() + F.burn_tile() + F.icon_state = "wall_thermite" + user << "\red The thermite melts the wall." + spawn(100) del(O) + F.sd_LumReset() + return + + else + user << "\blue Now disassembling the outer wall plating." + playsound(src.loc, 'Welder.ogg', 100, 1) + sleep(60) + if (W && istype(src, /turf/simulated/wall)) + if ((get_turf(user) == T && user.equipped() == W)) + user << "\blue You disassembled the outer wall plating." + dismantle_wall() + for(var/mob/O in viewers(user, 5)) + O.show_message(text("\blue The wall was sliced apart by []!", user), 1, text("\red You hear metal being sliced apart."), 2) + return + + else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill)) + var/turf/T = user.loc + user << "\blue Now drilling through wall." + sleep(60) + if (W && istype(src, /turf/simulated/wall)) + if ((user.loc == T && user.equipped() == W)) + dismantle_wall(1) + for(var/mob/O in viewers(user, 5)) + O.show_message(text("\blue The wall was drilled apart by []!", user), 1, text("\red You hear metal being drilled appart."), 2) + return + + else if(istype(W, /obj/item/weapon/melee/energy/blade)) + var/turf/T = user.loc + user << "\blue Now slicing through wall." + W:spark_system.start() + playsound(src.loc, "sparks", 50, 1) + sleep(70) + if (W && istype(src, /turf/simulated/wall)) + if ((user.loc == T && user.equipped() == W)) + W:spark_system.start() + playsound(src.loc, "sparks", 50, 1) + playsound(src.loc, 'blade1.ogg', 50, 1) + dismantle_wall(1) + for(var/mob/O in viewers(user, 5)) + O.show_message(text("\blue The wall was sliced apart by []!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2) + return + + else if(istype(W,/obj/item/apc_frame)) + var/obj/item/apc_frame/AH = W + AH.try_build(src) + else if(istype(W,/obj/item/weapon/contraband/poster)) + var/obj/item/weapon/contraband/poster/P = W + if(P.resulting_poster) + var/check = 0 + var/stuff_on_wall = 0 + for( var/obj/O in src.contents) //Let's see if it already has a poster on it or too much stuff + if(istype(O,/obj/effect/decal/poster)) + check = 1 + break + stuff_on_wall++ + if(stuff_on_wall==3) + check = 1 + break + + if(check) + user << "The wall is far too cluttered to place a poster!" + return + + user << "You start placing the poster on the wall..." //Looks like it's uncluttered enough. Place the poster. + + P.resulting_poster.loc = src + var/temp = P.resulting_poster.icon_state + var/temp_loc = user.loc + P.resulting_poster.icon_state = "poster_being_set" + playsound(P.resulting_poster.loc, 'poster_being_created.ogg', 100, 1) + sleep(24) + + if(user.loc == temp_loc)//Let's check if he still is there + user << "You place the poster!" + P.resulting_poster.icon_state = temp + src.contents += P.resulting_poster + del(P) + else + user << "You stop placing the poster." + P.resulting_poster.loc = P + P.resulting_poster.icon_state = temp + else + return attack_hand(user) + return + + +/turf/simulated/wall/r_wall/attackby(obj/item/W as obj, mob/user as mob) + + if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + usr << "\red You don't have the dexterity to do this!" + return + + if(!istype(src, /turf/simulated/wall/r_wall)) + return // this may seem stupid and redundant but apparently floors can call this attackby() proc, it was spamming shit up. -- Doohl + + + if (istype(W, /obj/item/weapon/weldingtool) && W:welding) + W:eyecheck(user) + var/turf/T = user.loc + if (!( istype(T, /turf) )) + return + + if (thermite) + var/obj/effect/overlay/O = new/obj/effect/overlay( src ) + O.name = "Thermite" + O.desc = "Looks hot." + O.icon = 'fire.dmi' + O.icon_state = "2" + O.anchored = 1 + O.density = 1 + O.layer = 5 + var/turf/simulated/floor/F = ReplaceWithPlating() + F.burn_tile() + F.icon_state = "wall_thermite" + user << "\red The thermite melts the wall." + spawn(100) del(O) + F.sd_LumReset() + return + + if (src.d_state == 2) + W:welding = 2 + user << "\blue Slicing metal cover." + playsound(src.loc, 'Welder.ogg', 100, 1) + sleep(60) + if ((user.loc == T && user.equipped() == W)) + src.d_state = 3 + user << "\blue You removed the metal cover." + W:welding = 1 + + else if (src.d_state == 5) + W:welding = 2 + user << "\blue Removing support rods." + playsound(src.loc, 'Welder.ogg', 100, 1) + sleep(100) + if ((user.loc == T && user.equipped() == W)) + src.d_state = 6 + new /obj/item/stack/rods( src ) + user << "\blue You removed the support rods." + W:welding = 1 + + else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + var/turf/T = user.loc + if (!( istype(T, /turf) )) + return + + if (thermite) + var/obj/effect/overlay/O = new/obj/effect/overlay( src ) + O.name = "Thermite" + O.desc = "Looks hot." + O.icon = 'fire.dmi' + O.icon_state = "2" + O.anchored = 1 + O.density = 1 + O.layer = 5 + var/turf/simulated/floor/F = ReplaceWithPlating() + F.burn_tile() + F.icon_state = "wall_thermite" + user << "\red The thermite melts the wall." + spawn(100) del(O) + F.sd_LumReset() + return + + if (src.d_state == 2) + user << "\blue Slicing metal cover." + playsound(src.loc, 'Welder.ogg', 100, 1) + sleep(40) + if ((user.loc == T && user.equipped() == W)) + src.d_state = 3 + user << "\blue You removed the metal cover." + + else if (src.d_state == 5) + user << "\blue Removing support rods." + playsound(src.loc, 'Welder.ogg', 100, 1) + sleep(70) + if ((user.loc == T && user.equipped() == W)) + src.d_state = 6 + new /obj/item/stack/rods( src ) + user << "\blue You removed the support rods." + + else if(istype(W, /obj/item/weapon/melee/energy/blade)) + user << "\blue This wall is too thick to slice through. You will need to find a different path." + return + + else if (istype(W, /obj/item/weapon/wrench)) + if (src.d_state == 4) + var/turf/T = user.loc + user << "\blue Detaching support rods." + playsound(src.loc, 'Ratchet.ogg', 100, 1) + sleep(40) + if ((user.loc == T && user.equipped() == W)) + src.d_state = 5 + user << "\blue You detach the support rods." + + else if (istype(W, /obj/item/weapon/wirecutters)) + if (src.d_state == 0) + playsound(src.loc, 'Wirecutter.ogg', 100, 1) + src.d_state = 1 + new /obj/item/stack/rods( src ) + + else if (istype(W, /obj/item/weapon/screwdriver)) + if (src.d_state == 1) + var/turf/T = user.loc + playsound(src.loc, 'Screwdriver.ogg', 100, 1) + user << "\blue Removing support lines." + sleep(40) + if ((user.loc == T && user.equipped() == W)) + src.d_state = 2 + user << "\blue You removed the support lines." + + else if (istype(W, /obj/item/weapon/crowbar)) + + if (src.d_state == 3) + var/turf/T = user.loc + user << "\blue Prying cover off." + playsound(src.loc, 'Crowbar.ogg', 100, 1) + sleep(100) + if ((user.loc == T && user.equipped() == W)) + src.d_state = 4 + user << "\blue You removed the cover." + + else if (src.d_state == 6) + var/turf/T = user.loc + user << "\blue Prying outer sheath off." + playsound(src.loc, 'Crowbar.ogg', 100, 1) + sleep(100) + if(src) + if ((user.loc == T && user.equipped() == W)) + user << "\blue You removed the outer sheath." + dismantle_wall() + return + + else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill)) + var/turf/T = user.loc + user << "\blue You begin to drill though, this will take some time." + sleep(200) + if(src) + if ((user.loc == T && user.equipped() == W)) + user << "\blue Your drill tears though the reinforced plating." + dismantle_wall() + return + + else if ((istype(W, /obj/item/stack/sheet/metal)) && (src.d_state)) + var/turf/T = user.loc + user << "\blue Repairing wall." + sleep(100) + if ((user.loc == T && user.equipped() == W)) + src.d_state = 0 + src.icon_state = initial(src.icon_state) + user << "\blue You repaired the wall." + if (W:amount > 1) + W:amount-- + else + del(W) + + else if(istype(W,/obj/item/weapon/contraband/poster)) + var/obj/item/weapon/contraband/poster/P = W + if(P.resulting_poster) + var/check = 0 + var/stuff_on_wall = 0 + for( var/obj/O in src.contents) //Let's see if it already has a poster on it or too much stuff + if(istype(O,/obj/effect/decal/poster)) + check = 1 + break + stuff_on_wall++ + if(stuff_on_wall==3) + check = 1 + break + + if(check) + user << "The wall is far too cluttered to place a poster!" + return + + user << "You start placing the poster on the wall..." //Looks like it's uncluttered enough. Place the poster. + + P.resulting_poster.loc = src + var/temp = P.resulting_poster.icon_state + var/temp_loc = user.loc + P.resulting_poster.icon_state = "poster_being_set" + playsound(P.resulting_poster.loc, 'poster_being_created.ogg', 100, 1) + sleep(24) + + if(user.loc == temp_loc)//Let's check if he still is there + user << "You place the poster!" + P.resulting_poster.icon_state = temp + src.contents += P.resulting_poster + del(P) + else + user << "You stop placing the poster." + P.resulting_poster.loc = P + P.resulting_poster.icon_state = temp + return + + if(istype(W,/obj/item/apc_frame)) + var/obj/item/apc_frame/AH = W + AH.try_build(src) + return + + if(src.d_state > 0) + src.icon_state = "r_wall-[d_state]" + + else + return attack_hand(user) + return + +/turf/simulated/wall/meteorhit(obj/M as obj) + if (prob(15)) + dismantle_wall() + else if(prob(70)) + ReplaceWithPlating() + else + ReplaceWithLattice() + return 0 + + +//This is so damaged or burnt tiles or platings don't get remembered as the default tile +var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3","damaged4", + "damaged5","panelscorched","floorscorched1","floorscorched2","platingdmg1","platingdmg2", + "platingdmg3","plating","light_on","light_on_flicker1","light_on_flicker2", + "light_on_clicker3","light_on_clicker4","light_on_clicker5","light_broken", + "light_on_broken","light_off","wall_thermite","grass1","grass2","grass3","grass4", + "asteroid","asteroid_dug", + "asteroid0","asteroid1","asteroid2","asteroid3","asteroid4", + "asteroid5","asteroid6","asteroid7","asteroid8", + "burning","oldburning","light-on-r","light-on-y","light-on-g","light-on-b") + +var/list/plating_icons = list("plating","platingdmg1","platingdmg2","platingdmg3","asteroid","asteroid_dug") + +/turf/simulated/floor + + //Note to coders, the 'intact' var can no longer be used to determine if the floor is a plating or not. + //Use the is_plating(), is_plasteel_floor() and is_light_floor() procs instead. --Errorage + name = "floor" + icon = 'floors.dmi' + icon_state = "floor" + var/icon_regular_floor = "floor" //used to remember what icon the tile should have by default + var/icon_plating = "plating" + thermal_conductivity = 0.040 + heat_capacity = 10000 + var/broken = 0 + var/burnt = 0 + var/obj/item/stack/tile/floor_tile = new/obj/item/stack/tile/plasteel + + airless + icon_state = "floor" + name = "airless floor" + oxygen = 0.01 + nitrogen = 0.01 + temperature = TCMB + + New() + ..() + name = "floor" + + light + name = "Light floor" + luminosity = 5 + icon_state = "light_on" + floor_tile = new/obj/item/stack/tile/light + + New() + floor_tile.New() //I guess New() isn't run on objects spawned without the definition of a turf to house them, ah well. + var/n = name //just in case commands rename it in the ..() call + ..() + spawn(4) + update_icon() + name = n + + grass + name = "Grass patch" + icon_state = "grass1" + floor_tile = new/obj/item/stack/tile/grass + + New() + floor_tile.New() //I guess New() isn't run on objects spawned without the definition of a turf to house them, ah well. + icon_state = "grass[pick("1","2","3","4")]" + ..() + spawn(4) + update_icon() + for(var/direction in cardinal) + if(istype(get_step(src,direction),/turf/simulated/floor)) + var/turf/simulated/floor/FF = get_step(src,direction) + FF.update_icon() //so siding get updated properly + +/turf/simulated/floor/vault + icon_state = "rockvault" + + New(location,type) + ..() + icon_state = "[type]vault" + +/turf/simulated/wall/vault + icon_state = "rockvault" + + New(location,type) + ..() + icon_state = "[type]vault" + +/turf/simulated/floor/engine + name = "reinforced floor" + icon_state = "engine" + thermal_conductivity = 0.025 + heat_capacity = 325000 + +/turf/simulated/floor/engine/cult + name = "engraved floor" + icon_state = "cult" + + +/turf/simulated/floor/engine/n20 + New() + ..() + var/datum/gas_mixture/adding = new + var/datum/gas/sleeping_agent/trace_gas = new + + trace_gas.moles = 2000 + adding.trace_gases += trace_gas + adding.temperature = T20C + + assume_air(adding) + +/turf/simulated/floor/engine/vacuum + name = "vacuum floor" + icon_state = "engine" + oxygen = 0 + nitrogen = 0.001 + temperature = TCMB + +/turf/simulated/floor/plating + name = "plating" + icon_state = "plating" + floor_tile = null + intact = 0 + +/turf/simulated/floor/plating/airless + icon_state = "plating" + name = "airless plating" + oxygen = 0.01 + nitrogen = 0.01 + temperature = TCMB + + New() + ..() + name = "plating" + +/turf/simulated/floor/grid + icon = 'floors.dmi' + icon_state = "circuit" + +/turf/simulated/floor/New() + ..() + if(icon_state in icons_to_ignore_at_floor_init) //so damaged/burned tiles or plating icons aren't saved as the default + icon_regular_floor = "floor" + else + icon_regular_floor = icon_state + +//turf/simulated/floor/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) +// if ((istype(mover, /obj/machinery/vehicle) && !(src.burnt))) +// if (!( locate(/obj/machinery/mass_driver, src) )) +// return 0 +// return ..() + +/turf/simulated/floor/ex_act(severity) + //set src in oview(1) + switch(severity) + if(1.0) + src.ReplaceWithSpace() + if(2.0) + switch(pick(1,2;75,3)) + if (1) + src.ReplaceWithLattice() + if(prob(33)) new /obj/item/stack/sheet/metal(src) + if(2) + src.ReplaceWithSpace() + if(3) + if(prob(80)) + src.break_tile_to_plating() + else + src.break_tile() + src.hotspot_expose(1000,CELL_VOLUME) + if(prob(33)) new /obj/item/stack/sheet/metal(src) + if(3.0) + if (prob(50)) + src.break_tile() + src.hotspot_expose(1000,CELL_VOLUME) + return + +/turf/simulated/floor/blob_act() + return + +turf/simulated/floor/proc/update_icon() + if(is_plasteel_floor()) + if(!broken && !burnt) + icon_state = icon_regular_floor + if(is_plating()) + if(!broken && !burnt) + icon_state = icon_plating //Because asteroids are 'platings' too. + if(is_light_floor()) + var/obj/item/stack/tile/light/T = floor_tile + if(T.on) + switch(T.state) + if(0) + icon_state = "light_on" + sd_SetLuminosity(5) + if(1) + var/num = pick("1","2","3","4") + icon_state = "light_on_flicker[num]" + sd_SetLuminosity(5) + if(2) + icon_state = "light_on_broken" + sd_SetLuminosity(5) + if(3) + icon_state = "light_off" + sd_SetLuminosity(0) + else + sd_SetLuminosity(0) + icon_state = "light_off" + if(is_grass_floor()) + if(!broken && !burnt) + if(!(icon_state in list("grass1","grass2","grass3","grass4"))) + icon_state = "grass[pick("1","2","3","4")]" + spawn(1) + if(istype(src,/turf/simulated/floor)) //Was throwing runtime errors due to a chance of it changing to space halfway through. + if(air) + update_visuals(air) + +turf/simulated/floor/return_siding_icon_state() + ..() + if(is_grass_floor()) + var/dir_sum = 0 + for(var/direction in cardinal) + var/turf/T = get_step(src,direction) + if(!(T.is_grass_floor())) + dir_sum += direction + if(dir_sum) + return "wood_siding[dir_sum]" + else + return 0 + + +/turf/simulated/floor/attack_paw(mob/user as mob) + return src.attack_hand(user) + +/turf/simulated/floor/attack_hand(mob/user as mob) + if (is_light_floor()) + var/obj/item/stack/tile/light/T = floor_tile + T.on = !T.on + update_icon() + if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/mob/M = user.pulling + var/mob/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(user.pulling, get_dir(user.pulling.loc, src)) + return + +/turf/simulated/floor/engine/attackby(obj/item/weapon/C as obj, mob/user as mob) + if(!C) + return + if(!user) + return + if(istype(C, /obj/item/weapon/wrench)) + user << "\blue Removing rods..." + playsound(src.loc, 'Ratchet.ogg', 80, 1) + if(do_after(user, 30)) + new /obj/item/stack/rods(src, 2) + ReplaceWithFloor() + var/turf/simulated/floor/F = src + F.make_plating() + return + +/turf/simulated/floor/proc/gets_drilled() + return + +/turf/simulated/floor/proc/break_tile_to_plating() + if(!is_plating()) + make_plating() + break_tile() + +/turf/simulated/floor/is_plasteel_floor() + if(istype(floor_tile,/obj/item/stack/tile/plasteel)) + return 1 + else + return 0 + +/turf/simulated/floor/is_light_floor() + if(istype(floor_tile,/obj/item/stack/tile/light)) + return 1 + else + return 0 + +/turf/simulated/floor/is_grass_floor() + if(istype(floor_tile,/obj/item/stack/tile/grass)) + return 1 + else + return 0 + +/turf/simulated/floor/is_plating() + if(!floor_tile) + return 1 + return 0 + +/turf/simulated/floor/proc/break_tile() + if(istype(src,/turf/simulated/floor/engine)) return + if(istype(src,/turf/simulated/floor/mech_bay_recharge_floor)) + src.ReplaceWithPlating() + if(broken) return + if(is_plasteel_floor()) + src.icon_state = "damaged[pick(1,2,3,4,5)]" + broken = 1 + else if(is_plasteel_floor()) + src.icon_state = "light_broken" + broken = 1 + else if(is_plating()) + src.icon_state = "platingdmg[pick(1,2,3)]" + broken = 1 + else if(is_grass_floor()) + src.icon_state = "sand[pick("1","2","3")]" + broken = 1 + +/turf/simulated/floor/proc/burn_tile() + if(istype(src,/turf/simulated/floor/engine)) return + if(broken || burnt) return + if(is_plasteel_floor()) + src.icon_state = "damaged[pick(1,2,3,4,5)]" + burnt = 1 + else if(is_plasteel_floor()) + src.icon_state = "floorscorched[pick(1,2)]" + burnt = 1 + else if(is_plating()) + src.icon_state = "panelscorched" + burnt = 1 + else if(is_grass_floor()) + src.icon_state = "sand[pick("1","2","3")]" + burnt = 1 + +//This proc will delete the floor_tile and the update_iocn() proc will then change the icon_state of the turf +//This proc auto corrects the grass tiles' siding. +/turf/simulated/floor/proc/make_plating() + if(istype(src,/turf/simulated/floor/engine)) return + + if(is_grass_floor()) + for(var/direction in cardinal) + if(istype(get_step(src,direction),/turf/simulated/floor)) + var/turf/simulated/floor/FF = get_step(src,direction) + FF.update_icon() //so siding get updated properly + + if(!floor_tile) return + del(floor_tile) + icon_plating = "plating" + sd_SetLuminosity(0) + floor_tile = null + intact = 0 + broken = 0 + burnt = 0 + + update_icon() + levelupdate() + +//This proc will make the turf a plasteel floor tile. The expected argument is the tile to make the turf with +//If none is given it will make a new object. dropping or unequipping must be handled before or after calling +//this proc. +/turf/simulated/floor/proc/make_plasteel_floor(var/obj/item/stack/tile/plasteel/T = null) + broken = 0 + burnt = 0 + intact = 1 + sd_SetLuminosity(0) + if(T) + if(istype(T,/obj/item/stack/tile/plasteel)) + floor_tile = T + if (icon_regular_floor) + icon_state = icon_regular_floor + else + icon_state = "floor" + icon_regular_floor = icon_state + update_icon() + levelupdate() + return + //if you gave a valid parameter, it won't get thisf ar. + floor_tile = new/obj/item/stack/tile/plasteel + icon_state = "floor" + icon_regular_floor = icon_state + + update_icon() + levelupdate() + +//This proc will make the turf a light floor tile. The expected argument is the tile to make the turf with +//If none is given it will make a new object. dropping or unequipping must be handled before or after calling +//this proc. +/turf/simulated/floor/proc/make_light_floor(var/obj/item/stack/tile/light/T = null) + broken = 0 + burnt = 0 + intact = 1 + if(T) + if(istype(T,/obj/item/stack/tile/light)) + floor_tile = T + update_icon() + levelupdate() + return + //if you gave a valid parameter, it won't get thisf ar. + floor_tile = new/obj/item/stack/tile/light + + update_icon() + levelupdate() + +//This proc will make a turf into a grass patch. Fun eh? Insert the grass tile to be used as the argument +//If no argument is given a new one will be made. +/turf/simulated/floor/proc/make_grass_floor(var/obj/item/stack/tile/grass/T = null) + broken = 0 + burnt = 0 + intact = 1 + if(T) + if(istype(T,/obj/item/stack/tile/grass)) + floor_tile = T + update_icon() + levelupdate() + return + //if you gave a valid parameter, it won't get thisf ar. + floor_tile = new/obj/item/stack/tile/grass + + update_icon() + levelupdate() + +/turf/simulated/floor/attackby(obj/item/C as obj, mob/user as mob) + + if(!C || !user) + return 0 + + if(istype(C,/obj/item/weapon/light/bulb)) //only for light tiles + if(is_light_floor()) + var/obj/item/stack/tile/light/T = floor_tile + if(T.state) + user.u_equip(C) + del(C) + T.state = C //fixing it by bashing it with a light bulb, fun eh? + update_icon() + user << "\blue You replace the light bulb." + else + user << "\blue The lightbulb seems fine, no need to replace it." + + if(istype(C, /obj/item/weapon/crowbar) && (!(is_plating()))) + if(broken || burnt) + user << "\red You remove the broken plating." + else + user << "\red You remove the [floor_tile.name]." + new floor_tile.type(src) + + make_plating() + playsound(src.loc, 'Crowbar.ogg', 80, 1) + + return + + if(istype(C, /obj/item/stack/rods)) + var/obj/item/stack/rods/R = C + if (is_plating()) + if (R.amount >= 2) + user << "\blue Reinforcing the floor..." + if(do_after(user, 30) && R && R.amount >= 2 && is_plating()) + ReplaceWithEngineFloor() + playsound(src.loc, 'Deconstruct.ogg', 80, 1) + R.use(2) + return + else + user << "\red You need more rods." + else + user << "\red You must remove the plating first." + return + + if(istype(C, /obj/item/stack/tile)) + if(is_plating()) + if(!broken && !burnt) + var/obj/item/stack/tile/T = C + floor_tile = new T.type + intact = 1 + if(istype(T,/obj/item/stack/tile/light)) + var/obj/item/stack/tile/light/L = T + var/obj/item/stack/tile/light/F = floor_tile + F.state = L.state + F.on = L.on + if(istype(T,/obj/item/stack/tile/grass)) + for(var/direction in cardinal) + if(istype(get_step(src,direction),/turf/simulated/floor)) + var/turf/simulated/floor/FF = get_step(src,direction) + FF.update_icon() //so siding gets updated properly + T.use(1) + update_icon() + levelupdate() + playsound(src.loc, 'Genhit.ogg', 50, 1) + else + user << "\blue This section is too damaged to support a tile. Use a welder to fix the damage." + + + if(istype(C, /obj/item/weapon/cable_coil)) + if(is_plating()) + var/obj/item/weapon/cable_coil/coil = C + coil.turf_place(src, user) + else + user << "\red You must remove the plating first." + + if(istype(C, /obj/item/weapon/shovel)) + if(is_grass_floor()) + new /obj/item/weapon/ore/glass(src) + new /obj/item/weapon/ore/glass(src) //Make some sand if you shovel grass + user << "\blue You shovel the grass." + make_plating() + else + user << "\red You cannot shovel this." + + if(istype(C, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/welder = C + if(welder.welding && (is_plating())) + if(broken || burnt) + if(welder.remove_fuel(0,user)) + user << "\red You fix some dents on the broken plating." + playsound(src.loc, 'Welder.ogg', 80, 1) + icon_state = "plating" + burnt = 0 + broken = 0 + else + user << "\blue You need more welding fuel to complete this task." + +/turf/unsimulated/floor/attack_paw(user as mob) + return src.attack_hand(user) + +/turf/unsimulated/floor/attack_hand(var/mob/user as mob) + if ((!( user.canmove ) || user.restrained() || !( user.pulling ))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/mob/M = user.pulling + var/mob/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(user.pulling, get_dir(user.pulling.loc, src)) + return + +// imported from space.dm + +/turf/space/attack_paw(mob/user as mob) + return src.attack_hand(user) + +/turf/space/attack_hand(mob/user as mob) + if ((user.restrained() || !( user.pulling ))) + return + if (user.pulling.anchored) + return + if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)) + return + if (ismob(user.pulling)) + var/mob/M = user.pulling + var/t = M.pulling + M.pulling = null + step(user.pulling, get_dir(user.pulling.loc, src)) + M.pulling = t + else + step(user.pulling, get_dir(user.pulling.loc, src)) + return + +/turf/space/attackby(obj/item/C as obj, mob/user as mob) + + if (istype(C, /obj/item/stack/rods)) + var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) + if(L) + return + var/obj/item/stack/rods/R = C + user << "\blue Constructing support lattice ..." + playsound(src.loc, 'Genhit.ogg', 50, 1) + ReplaceWithLattice() + R.use(1) + return + + if (istype(C, /obj/item/stack/tile/plasteel)) + var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) + if(L) + var/obj/item/stack/tile/plasteel/S = C + del(L) + playsound(src.loc, 'Genhit.ogg', 50, 1) + S.build(src) + S.use(1) + return + else + user << "\red The plating is going to need some support." + return + + +// Ported from unstable r355 + +/turf/space/Entered(atom/movable/A as mob|obj) + ..() + if ((!(A) || src != A.loc || istype(null, /obj/effect/beam))) return + + inertial_drift(A) + + if(ticker && ticker.mode) + + // Okay, so let's make it so that people can travel z levels but not nuke disks! + // if(ticker.mode.name == "nuclear emergency") return + + if(ticker.mode.name == "extended"||ticker.mode.name == "sandbox") + Sandbox_Spacemove(A) + + else + if (src.x <= 2 || A.x >= (world.maxx - 1) || src.y <= 2 || A.y >= (world.maxy - 1)) + if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) + del(A) + return + + if(istype(A, /obj/item/weapon/disk/nuclear)) // Don't let nuke disks travel Z levels ... And moving this shit down here so it only fires when they're actually trying to change z-level. + return + + if(!isemptylist(A.search_contents_for(/obj/item/weapon/disk/nuclear))) + if(istype(A, /mob/living)) + var/mob/living/MM = A + if(MM.client) + MM << "\red Something you are carrying is preventing you from leaving. Don't play stupid; you know exactly what it is." + return + + + + var/move_to_z_str = pickweight(accessable_z_levels) + + var/move_to_z = text2num(move_to_z_str) + + if(!move_to_z) + return + + + + A.z = move_to_z + + + if(src.x <= 2) + A.x = world.maxx - 2 + + else if (A.x >= (world.maxx - 1)) + A.x = 3 + + else if (src.y <= 2) + A.y = world.maxy - 2 + + else if (A.y >= (world.maxy - 1)) + A.y = 3 + + spawn (0) + if ((A && A.loc)) + A.loc.Entered(A) + +// if(istype(A, /obj/structure/closet/coffin)) +// coffinhandler.Add(A) + +/turf/space/proc/Sandbox_Spacemove(atom/movable/A as mob|obj) + var/cur_x + var/cur_y + var/next_x + var/next_y + var/target_z + var/list/y_arr + + if(src.x <= 1) + if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) + del(A) + return + + var/list/cur_pos = src.get_global_map_pos() + if(!cur_pos) return + cur_x = cur_pos["x"] + cur_y = cur_pos["y"] + next_x = (--cur_x||global_map.len) + y_arr = global_map[next_x] + target_z = y_arr[cur_y] +/* + //debug + world << "Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]" + world << "Target Z = [target_z]" + world << "Next X = [next_x]" + //debug +*/ + if(target_z) + A.z = target_z + A.x = world.maxx - 2 + spawn (0) + if ((A && A.loc)) + A.loc.Entered(A) + else if (src.x >= world.maxx) + if(istype(A, /obj/effect/meteor)) + del(A) + return + + var/list/cur_pos = src.get_global_map_pos() + if(!cur_pos) return + cur_x = cur_pos["x"] + cur_y = cur_pos["y"] + next_x = (++cur_x > global_map.len ? 1 : cur_x) + y_arr = global_map[next_x] + target_z = y_arr[cur_y] +/* + //debug + world << "Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]" + world << "Target Z = [target_z]" + world << "Next X = [next_x]" + //debug +*/ + if(target_z) + A.z = target_z + A.x = 3 + spawn (0) + if ((A && A.loc)) + A.loc.Entered(A) + else if (src.y <= 1) + if(istype(A, /obj/effect/meteor)) + del(A) + return + var/list/cur_pos = src.get_global_map_pos() + if(!cur_pos) return + cur_x = cur_pos["x"] + cur_y = cur_pos["y"] + y_arr = global_map[cur_x] + next_y = (--cur_y||y_arr.len) + target_z = y_arr[next_y] +/* + //debug + world << "Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]" + world << "Next Y = [next_y]" + world << "Target Z = [target_z]" + //debug +*/ + if(target_z) + A.z = target_z + A.y = world.maxy - 2 + spawn (0) + if ((A && A.loc)) + A.loc.Entered(A) + + else if (src.y >= world.maxy) + if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) + del(A) + return + var/list/cur_pos = src.get_global_map_pos() + if(!cur_pos) return + cur_x = cur_pos["x"] + cur_y = cur_pos["y"] + y_arr = global_map[cur_x] + next_y = (++cur_y > y_arr.len ? 1 : cur_y) + target_z = y_arr[next_y] +/* + //debug + world << "Src.z = [src.z] in global map X = [cur_x], Y = [cur_y]" + world << "Next Y = [next_y]" + world << "Target Z = [target_z]" + //debug +*/ + if(target_z) + A.z = target_z + A.y = 3 + spawn (0) + if ((A && A.loc)) + A.loc.Entered(A) + return + +/obj/effect/vaultspawner + var/maxX = 6 + var/maxY = 6 + var/minX = 2 + var/minY = 2 + +/obj/effect/vaultspawner/New(turf/location as turf,lX = minX,uX = maxX,lY = minY,uY = maxY,var/type = null) + if(!type) + type = pick("sandstone","rock","alien") + + var/lowBoundX = location.x + var/lowBoundY = location.y + + var/hiBoundX = location.x + rand(lX,uX) + var/hiBoundY = location.y + rand(lY,uY) + + var/z = location.z + + for(var/i = lowBoundX,i<=hiBoundX,i++) + for(var/j = lowBoundY,j<=hiBoundY,j++) + if(i == lowBoundX || i == hiBoundX || j == lowBoundY || j == hiBoundY) + new /turf/simulated/wall/vault(locate(i,j,z),type) + else + new /turf/simulated/floor/vault(locate(i,j,z),type) + + del(src) + +/turf/proc/kill_creatures(mob/U = null)//Will kill people/creatures and damage mechs./N +//Useful to batch-add creatures to the list. + for(var/mob/living/M in src) + if(M==U) continue//Will not harm U. Since null != M, can be excluded to kill everyone. + spawn(0) + M.gib() + for(var/obj/mecha/M in src)//Mecha are not gibbed but are damaged. + spawn(0) + M.take_damage(100, "brute") + for(var/obj/effect/critter/M in src) + spawn(0) + M.Die() + +/turf/proc/Bless() + if(flags & NOJAUNT) + return + flags |= NOJAUNT + overlays += image('water.dmi',src,"holywater") \ No newline at end of file diff --git a/icons/obj/contraband.dmi b/icons/obj/contraband.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3edac97081be407b94953050a4e5ece4af91dd32 GIT binary patch literal 31728 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 literal 0 HcmV?d00001 diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi new file mode 100644 index 0000000000000000000000000000000000000000..2dbaedd6397289b460c38b027912a3d4bdbb7a79 GIT binary patch literal 4193 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 literal 0 HcmV?d00001 diff --git a/sound/items/poster_being_created.ogg b/sound/items/poster_being_created.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6f4e9bce684ef8f3cf47deeedd35193e929db969 GIT binary patch literal 32626 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 literal 0 HcmV?d00001 diff --git a/sound/items/poster_ripped.ogg b/sound/items/poster_ripped.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e42e36ce97dab184c3ffe0224688a871d9d75270 GIT binary patch literal 15494 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