diff --git a/baystation12.dme b/baystation12.dme
index ed96270696..4851c962cb 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -746,6 +746,7 @@
#include "code\modules\client\client defines.dm"
#include "code\modules\client\client procs.dm"
#include "code\modules\client\preferences.dm"
+#include "code\modules\client\preferences_factions.dm"
#include "code\modules\client\preferences_gear.dm"
#include "code\modules\client\preferences_savefile.dm"
#include "code\modules\client\preferences_spawnpoints.dm"
diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
index 9a097030d5..0777c6aa41 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -113,6 +113,11 @@ datum/controller/game_controller/proc/setup_objects()
asteroid_ore_map = new /datum/ore_distribution()
asteroid_ore_map.populate_distribution_map()
+ //Shitty hack to fix mining turf overlays, for some reason New() is not being called.
+ for(var/turf/simulated/floor/plating/airless/asteroid/T in world)
+ T.updateMineralOverlays()
+ T.name = "asteroid"
+
//Set up spawn points.
populate_spawn_points()
@@ -301,7 +306,7 @@ datum/controller/game_controller/proc/process_machines_power()
//check if the area has power for M's channel
//this will keep stat updated in case the machine is moved from one area to another.
M.power_change(A) //we've already made sure A is a master area, above.
-
+
if(!(M.stat & NOPOWER) && M.use_power)
M.auto_use_power()
diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm
index 0c8a7aa8bd..797afab1d4 100644
--- a/code/game/gamemodes/gameticker.dm
+++ b/code/game/gamemodes/gameticker.dm
@@ -297,6 +297,7 @@ var/global/datum/controller/gameticker/ticker
captainless=0
if(player.mind.assigned_role != "MODE")
job_master.EquipRank(player, player.mind.assigned_role, 0)
+ UpdateFactionList(player)
EquipCustomItems(player)
if(captainless)
for(var/mob/M in player_list)
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index ee0a20a33a..3d83666a46 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -171,7 +171,7 @@
selection_color = "#dddddd"
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mint, access_mining, access_mining_station)
minimal_access = list(access_mining, access_mint, access_mining_station, access_mailsorting)
-
+ alt_titles = list("Drill Technician","Prospector")
equip(var/mob/living/carbon/human/H)
if(!H) return 0
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index a471aeba39..38ef31dbf1 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -77,6 +77,12 @@ datum/preferences
var/language = "None" //Secondary language
var/list/gear //Custom/fluff item loadout.
+ //Some faction information.
+ var/home_system = "Unset" //System of birth.
+ var/citizenship = "None" //Current home system.
+ var/faction = "None" //Antag faction/general associated faction.
+ var/religion = "None" //Religious association.
+
//Mob preview
var/icon/preview_icon = null
var/icon/preview_icon_front = null
@@ -406,7 +412,14 @@ datum/preferences
dat += "
Body Color
"
dat += "Change Color "
+ dat += "
Background Information
"
+ dat += "Home system: [home_system]
"
+ dat += "Citizenship: [citizenship]
"
+ dat += "Faction: [faction]
"
+ dat += "Religion: [religion]
"
+
dat += "
"
+
if(jobban_isbanned(user, "Syndicate"))
dat += "You are banned from antagonist roles."
src.be_special = 0
@@ -1343,6 +1356,46 @@ datum/preferences
return
spawnpoint = choice
+ if("home_system")
+ var/choice = input(user, "Please choose a home system.") as null|anything in home_system_choices + list("Unset","Other")
+ if(!choice)
+ return
+ if(choice == "Other")
+ var/raw_choice = input(user, "Please enter a home system.") as text|null
+ if(raw_choice)
+ home_system = sanitize(copytext(raw_choice,1,MAX_MESSAGE_LEN))
+ return
+ home_system = choice
+ if("citizenship")
+ var/choice = input(user, "Please choose your current citizenship.") as null|anything in citizenship_choices + list("None","Other")
+ if(!choice)
+ return
+ if(choice == "Other")
+ var/raw_choice = input(user, "Please enter your current citizenship.", "Character Preference") as text|null
+ if(raw_choice)
+ citizenship = sanitize(copytext(raw_choice,1,MAX_MESSAGE_LEN))
+ return
+ citizenship = choice
+ if("faction")
+ var/choice = input(user, "Please choose a faction to work for.") as null|anything in faction_choices + list("None","Other")
+ if(!choice)
+ return
+ if(choice == "Other")
+ var/raw_choice = input(user, "Please enter a faction.") as text|null
+ if(raw_choice)
+ faction = sanitize(copytext(raw_choice,1,MAX_MESSAGE_LEN))
+ return
+ faction = choice
+ if("religion")
+ var/choice = input(user, "Please choose a religion.") as null|anything in religion_choices + list("None","Other")
+ if(!choice)
+ return
+ if(choice == "Other")
+ var/raw_choice = input(user, "Please enter a religon.") as text|null
+ if(raw_choice)
+ religion = sanitize(copytext(raw_choice,1,MAX_MESSAGE_LEN))
+ return
+ religion = choice
else
switch(href_list["preference"])
if("gender")
diff --git a/code/modules/client/preferences_factions.dm b/code/modules/client/preferences_factions.dm
new file mode 100644
index 0000000000..2293be7dd6
--- /dev/null
+++ b/code/modules/client/preferences_factions.dm
@@ -0,0 +1,53 @@
+var/global/list/seen_citizenships = list()
+var/global/list/seen_systems = list()
+var/global/list/seen_factions = list()
+var/global/list/seen_religions = list()
+
+//Commenting this out for now until I work the lists it into the event generator/journalist/chaplain.
+/proc/UpdateFactionList(mob/living/carbon/human/M)
+ /*if(M && M.client && M.client.prefs)
+ seen_citizenships |= M.client.prefs.citizenship
+ seen_systems |= M.client.prefs.home_system
+ seen_factions |= M.client.prefs.faction
+ seen_religions |= M.client.prefs.religion*/
+ return
+
+var/global/list/citizenship_choices = list(
+ "Earth",
+ "Mars",
+ "Moghes",
+ "Ahdomai",
+ "Qerrbalak"
+ )
+
+var/global/list/home_system_choices = list(
+ "Sol",
+ "Nyx",
+ "Tau Ceti",
+ "Epsilon Ursae Majoris",
+ "S'randarr"
+ )
+
+var/global/list/faction_choices = list(
+ "Sol Central",
+ "Vey Med",
+ "Einstein Engines",
+ "Free Trade Union",
+ "NanoTrasen",
+ "Ward-Takahashi GMB",
+ "Gilthari Exports",
+ "Grayson Manufactories Ltd.",
+ "Aether Atmospherics",
+ "Zeng-Hu Pharmaceuticals",
+ "Hesphaistos Industries"
+ )
+
+var/global/list/religion_choices = list(
+ "Unitarianism",
+ "Hinduism",
+ "Buddhist",
+ "Islamic",
+ "Christian",
+ "Agnostic",
+ "Deist"
+ )
\ No newline at end of file
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 896be32bac..dd205c3862 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -166,6 +166,10 @@
S["skill_specialization"] >> skill_specialization
S["organ_data"] >> organ_data
S["gear"] >> gear
+ S["home_system"] >> home_system
+ S["citizenship"] >> citizenship
+ S["faction"] >> faction
+ S["religion"] >> religion
S["nanotrasen_relation"] >> nanotrasen_relation
//S["skin_style"] >> skin_style
@@ -225,6 +229,11 @@
if(!gear) src.gear = list()
//if(!skin_style) skin_style = "Default"
+ if(!home_system) home_system = "Unset"
+ if(!citizenship) citizenship = "None"
+ if(!faction) faction = "None"
+ if(!religion) religion = "None"
+
return 1
/datum/preferences/proc/save_character()
@@ -297,6 +306,10 @@
S["skill_specialization"] << skill_specialization
S["organ_data"] << organ_data
S["gear"] << gear
+ S["home_system"] << home_system
+ S["citizenship"] << citizenship
+ S["faction"] << faction
+ S["religion"] << religion
S["nanotrasen_relation"] << nanotrasen_relation
//S["skin_style"] << skin_style
diff --git a/code/modules/mining/drilling/distribution.dm b/code/modules/mining/drilling/distribution.dm
index bf32d417cd..e152a60b34 100644
--- a/code/modules/mining/drilling/distribution.dm
+++ b/code/modules/mining/drilling/distribution.dm
@@ -163,7 +163,6 @@ Deep minerals:
target_turf = locate(tx+j, ty+i, asteroid_z)
if(target_turf && target_turf.has_resources)
-
target_turf.resources = list()
target_turf.resources["silicates"] = rand(3,5)
target_turf.resources["carbonaceous rock"] = rand(3,5)
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index c54853355e..f695621d97 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -181,3 +181,70 @@
icon_opened = "miningcaropen"
icon_closed = "miningcar"
+// Flags.
+
+/obj/item/stack/flag
+ name = "flags"
+ desc = "Some colourful flags."
+ singular_name = "flag"
+ amount = 10
+ max_amount = 10
+ icon = 'icons/obj/mining.dmi'
+ var/upright = 0
+ var/base_state
+
+/obj/item/stack/flag/New()
+ ..()
+ base_state = icon_state
+
+/obj/item/stack/flag/red
+ name = "red flags"
+ singular_name = "red flag"
+ icon_state = "redflag"
+
+/obj/item/stack/flag/yellow
+ name = "yellow flags"
+ singular_name = "yellow flag"
+ icon_state = "yellowflag"
+
+/obj/item/stack/flag/green
+ name = "green flags"
+ singular_name = "green flag"
+ icon_state = "greenflag"
+
+/obj/item/stack/flag/attackby(obj/item/W as obj, mob/user as mob)
+ if(upright && istype(W,src.type))
+ src.attack_hand(user)
+ else
+ ..()
+
+/obj/item/stack/flag/attack_hand(user as mob)
+ if(upright)
+ upright = 0
+ icon_state = base_state
+ anchored = 0
+ src.visible_message("[user] knocks down [src].")
+ else
+ ..()
+
+/obj/item/stack/flag/attack_self(mob/user as mob)
+
+ var/obj/item/stack/flag/F = locate() in get_turf(src)
+
+ var/turf/T = get_turf(src)
+ if(!T || !istype(T,/turf/simulated/floor/plating/airless/asteroid))
+ user << "The flag won't stand up in this terrain."
+ return
+
+ if(F && F.upright)
+ user << "There is already a flag here."
+ return
+
+ var/obj/item/stack/flag/newflag = new src.type(T)
+ newflag.amount = 1
+ newflag.upright = 1
+ anchored = 1
+ newflag.name = newflag.singular_name
+ newflag.icon_state = "[newflag.base_state]_open"
+ newflag.visible_message("[user] plants [newflag] firmly in the ground.")
+ src.use(1)
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 207b331535..bf70bb5c76 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -26,353 +26,333 @@
has_resources = 1
- New()
- . = ..()
+/turf/simulated/mineral/New()
- MineralSpread()
+ . = ..()
- spawn(1)
- var/turf/T
- if((istype(get_step(src, NORTH), /turf/simulated/floor)) || (istype(get_step(src, NORTH), /turf/space)) || (istype(get_step(src, NORTH), /turf/simulated/shuttle/floor)))
- T = get_step(src, NORTH)
- if (T)
- T.overlays += image('icons/turf/walls.dmi', "rock_side_s", layer=2)
- if((istype(get_step(src, SOUTH), /turf/simulated/floor)) || (istype(get_step(src, SOUTH), /turf/space)) || (istype(get_step(src, SOUTH), /turf/simulated/shuttle/floor)))
- T = get_step(src, SOUTH)
- if (T)
- T.overlays += image('icons/turf/walls.dmi', "rock_side_n", layer=2)
- if((istype(get_step(src, EAST), /turf/simulated/floor)) || (istype(get_step(src, EAST), /turf/space)) || (istype(get_step(src, EAST), /turf/simulated/shuttle/floor)))
- T = get_step(src, EAST)
- if (T)
- T.overlays += image('icons/turf/walls.dmi', "rock_side_w", layer=2)
- if((istype(get_step(src, WEST), /turf/simulated/floor)) || (istype(get_step(src, WEST), /turf/space)) || (istype(get_step(src, WEST), /turf/simulated/shuttle/floor)))
- T = get_step(src, WEST)
- if (T)
- T.overlays += image('icons/turf/walls.dmi', "rock_side_e", layer=2)
+ MineralSpread()
+ spawn(2)
+ var/list/step_overlays = list("s" = NORTH, "n" = SOUTH, "w" = EAST, "e" = WEST)
+ for(var/direction in step_overlays)
+ var/turf/turf_to_check = get_step(src,step_overlays[direction])
- ex_act(severity)
- switch(severity)
- if(2.0)
- if (prob(70))
- mined_ore = 1 //some of the stuff gets blown up
- GetDrilled()
- if(1.0)
- mined_ore = 2 //some of the stuff gets blown up
+ if(istype(turf_to_check,/turf/simulated/floor/plating/airless/asteroid))
+ var/turf/simulated/floor/plating/airless/asteroid/T = turf_to_check
+ T.updateMineralOverlays()
+
+ else if(istype(turf_to_check,/turf/space) || istype(turf_to_check,/turf/simulated/floor))
+ turf_to_check.overlays += image('icons/turf/walls.dmi', "rock_side_[direction]")
+
+/turf/simulated/mineral/ex_act(severity)
+ switch(severity)
+ if(2.0)
+ if (prob(70))
+ mined_ore = 1 //some of the stuff gets blown up
GetDrilled()
+ if(1.0)
+ mined_ore = 2 //some of the stuff gets blown up
+ GetDrilled()
+
+/turf/simulated/mineral/Bumped(AM)
+ . = ..()
+ if(istype(AM,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = AM
+ if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand))
+ attackby(H.l_hand,H)
+ else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand)
+ attackby(H.r_hand,H)
+
+ else if(istype(AM,/mob/living/silicon/robot))
+ var/mob/living/silicon/robot/R = AM
+ if(istype(R.module_active,/obj/item/weapon/pickaxe))
+ attackby(R.module_active,R)
+
+ else if(istype(AM,/obj/mecha))
+ var/obj/mecha/M = AM
+ if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/tool/drill))
+ M.selected.action(src)
+
+/turf/simulated/mineral/proc/MineralSpread()
+ if(mineral && mineral.spread)
+ for(var/trydir in cardinal)
+ if(prob(mineral.spread_chance))
+ var/turf/simulated/mineral/random/target_turf = get_step(src, trydir)
+ if(istype(target_turf) && !target_turf.mineral)
+ target_turf.mineral = mineral
+ target_turf.UpdateMineral()
+ target_turf.MineralSpread()
- Bumped(AM)
- . = ..()
- if(istype(AM,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = AM
- if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand))
- attackby(H.l_hand,H)
- else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand)
- attackby(H.r_hand,H)
+/turf/simulated/mineral/proc/UpdateMineral()
+ if(!mineral)
+ name = "\improper Rock"
+ icon_state = "rock"
+ return
+ name = "\improper [mineral.display_name] deposit"
+ overlays.Cut()
+ overlays += "rock_[mineral.name]"
- else if(istype(AM,/mob/living/silicon/robot))
- var/mob/living/silicon/robot/R = AM
- if(istype(R.module_active,/obj/item/weapon/pickaxe))
- attackby(R.module_active,R)
+//Not even going to touch this pile of spaghetti
+/turf/simulated/mineral/attackby(obj/item/weapon/W as obj, mob/user as mob)
- else if(istype(AM,/obj/mecha))
- var/obj/mecha/M = AM
- if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/tool/drill))
- M.selected.action(src)
+ 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/device/core_sampler))
+ geologic_data.UpdateNearbyArtifactInfo(src)
+ var/obj/item/device/core_sampler/C = W
+ C.sample_item(src, user)
+ return
- proc/MineralSpread()
- if(mineral && mineral.spread)
- for(var/trydir in cardinal)
- if(prob(mineral.spread_chance))
- var/turf/simulated/mineral/random/target_turf = get_step(src, trydir)
- if(istype(target_turf) && !target_turf.mineral)
- target_turf.mineral = mineral
- target_turf.UpdateMineral()
- target_turf.MineralSpread()
+ if (istype(W, /obj/item/device/depth_scanner))
+ var/obj/item/device/depth_scanner/C = W
+ C.scan_atom(user, src)
+ return
+ if (istype(W, /obj/item/device/measuring_tape))
+ var/obj/item/device/measuring_tape/P = W
+ user.visible_message("\blue[user] extends [P] towards [src].","\blue You extend [P] towards [src].")
+ if(do_after(user,25))
+ user << "\blue \icon[P] [src] has been excavated to a depth of [2*excavation_level]cm."
+ return
- proc/UpdateMineral()
- if(!mineral)
- name = "\improper Rock"
- icon_state = "rock"
- return
- name = "\improper [mineral.display_name] deposit"
- overlays.Cut()
- overlays += "rock_[mineral.name]"
-
-
- //Not even going to touch this pile of spaghetti
- 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!"
+ if (istype(W, /obj/item/weapon/pickaxe))
+ var/turf/T = user.loc
+ if (!( istype(T, /turf) ))
return
- if (istype(W, /obj/item/device/core_sampler))
- geologic_data.UpdateNearbyArtifactInfo(src)
- var/obj/item/device/core_sampler/C = W
- C.sample_item(src, user)
+ var/obj/item/weapon/pickaxe/P = W
+ if(last_act + P.digspeed > world.time)//prevents message spam
return
+ last_act = world.time
- if (istype(W, /obj/item/device/depth_scanner))
- var/obj/item/device/depth_scanner/C = W
- C.scan_atom(user, src)
- return
+ playsound(user, P.drill_sound, 20, 1)
- if (istype(W, /obj/item/device/measuring_tape))
- var/obj/item/device/measuring_tape/P = W
- user.visible_message("\blue[user] extends [P] towards [src].","\blue You extend [P] towards [src].")
- if(do_after(user,25))
- user << "\blue \icon[P] [src] has been excavated to a depth of [2*excavation_level]cm."
- return
+ //handle any archaeological finds we might uncover
+ var/fail_message
+ if(finds && finds.len)
+ var/datum/find/F = finds[1]
+ if(excavation_level + P.excavation_amount > F.excavation_required)
+ //Chance to destroy / extract any finds here
+ fail_message = ". [pick("There is a crunching noise","[W] collides with some different rock","Part of the rock face crumbles away","Something breaks under [W]")]"
- if (istype(W, /obj/item/weapon/pickaxe))
- var/turf/T = user.loc
- if (!( istype(T, /turf) ))
- return
+ user << "\red You start [P.drill_verb][fail_message ? fail_message : ""]."
- var/obj/item/weapon/pickaxe/P = W
- if(last_act + P.digspeed > world.time)//prevents message spam
- return
- last_act = world.time
+ if(fail_message && prob(90))
+ if(prob(25))
+ excavate_find(5, finds[1])
+ else if(prob(50))
+ finds.Remove(finds[1])
+ if(prob(50))
+ artifact_debris()
- playsound(user, P.drill_sound, 20, 1)
+ if(do_after(user,P.digspeed))
+ user << "\blue You finish [P.drill_verb] the rock."
- //handle any archaeological finds we might uncover
- var/fail_message
if(finds && finds.len)
var/datum/find/F = finds[1]
- if(excavation_level + P.excavation_amount > F.excavation_required)
- //Chance to destroy / extract any finds here
- fail_message = ", [pick("there is a crunching noise","[W] collides with some different rock","part of the rock face crumbles away","something breaks under [W]")]"
-
- user << "\red You start [P.drill_verb][fail_message ? fail_message : ""]."
-
- if(fail_message && prob(90))
- if(prob(25))
- excavate_find(5, finds[1])
- else if(prob(50))
- finds.Remove(finds[1])
- if(prob(50))
- artifact_debris()
-
- if(do_after(user,P.digspeed))
- user << "\blue You finish [P.drill_verb] the rock."
-
- if(finds && finds.len)
- var/datum/find/F = finds[1]
- if(round(excavation_level + P.excavation_amount) == F.excavation_required)
- //Chance to extract any items here perfectly, otherwise just pull them out along with the rock surrounding them
- if(excavation_level + P.excavation_amount > F.excavation_required)
- //if you can get slightly over, perfect extraction
- excavate_find(100, F)
- else
- excavate_find(80, F)
-
- else if(excavation_level + P.excavation_amount > F.excavation_required - F.clearance_range)
- //just pull the surrounding rock out
- excavate_find(0, F)
-
- if( excavation_level + P.excavation_amount >= 100 )
- //if players have been excavating this turf, leave some rocky debris behind
- var/obj/structure/boulder/B
- if(artifact_find)
- if( excavation_level > 0 || prob(15) )
- //boulder with an artifact inside
- B = new(src)
- if(artifact_find)
- B.artifact_find = artifact_find
- else
- artifact_debris(1)
- else if(prob(15))
- //empty boulder
- B = new(src)
-
- if(B)
- GetDrilled(0)
+ if(round(excavation_level + P.excavation_amount) == F.excavation_required)
+ //Chance to extract any items here perfectly, otherwise just pull them out along with the rock surrounding them
+ if(excavation_level + P.excavation_amount > F.excavation_required)
+ //if you can get slightly over, perfect extraction
+ excavate_find(100, F)
else
- GetDrilled(1)
- return
+ excavate_find(80, F)
- excavation_level += P.excavation_amount
+ else if(excavation_level + P.excavation_amount > F.excavation_required - F.clearance_range)
+ //just pull the surrounding rock out
+ excavate_find(0, F)
- //archaeo overlays
- if(!archaeo_overlay && finds && finds.len)
- var/datum/find/F = finds[1]
- if(F.excavation_required <= excavation_level + F.view_range)
- archaeo_overlay = "overlay_archaeo[rand(1,3)]"
- overlays += archaeo_overlay
+ if( excavation_level + P.excavation_amount >= 100 )
+ //if players have been excavating this turf, leave some rocky debris behind
+ var/obj/structure/boulder/B
+ if(artifact_find)
+ if( excavation_level > 0 || prob(15) )
+ //boulder with an artifact inside
+ B = new(src)
+ if(artifact_find)
+ B.artifact_find = artifact_find
+ else
+ artifact_debris(1)
+ else if(prob(15))
+ //empty boulder
+ B = new(src)
- //there's got to be a better way to do this
- var/update_excav_overlay = 0
- if(excavation_level >= 75)
- if(excavation_level - P.excavation_amount < 75)
- update_excav_overlay = 1
- else if(excavation_level >= 50)
- if(excavation_level - P.excavation_amount < 50)
- update_excav_overlay = 1
- else if(excavation_level >= 25)
- if(excavation_level - P.excavation_amount < 25)
- update_excav_overlay = 1
-
- //update overlays displaying excavation level
- if( !(excav_overlay && excavation_level > 0) || update_excav_overlay )
- var/excav_quadrant = round(excavation_level / 25) + 1
- excav_overlay = "overlay_excv[excav_quadrant]_[rand(1,3)]"
- overlays += excav_overlay
-
- /* Nope.
- //extract pesky minerals while we're excavating
- while(excavation_minerals.len && excavation_level > excavation_minerals[excavation_minerals.len])
- DropMineral()
- pop(excavation_minerals)
- mineralAmt-- */
-
- //drop some rocks
- next_rock += P.excavation_amount * 10
- while(next_rock > 100)
- next_rock -= 100
- var/obj/item/weapon/ore/O = new(src)
- geologic_data.UpdateNearbyArtifactInfo(src)
- O.geologic_data = geologic_data
-
- else
- return attack_hand(user)
-
-
- proc/DropMineral()
- if(!mineral)
- return
-
- var/obj/item/weapon/ore/O = new mineral.ore (src)
- if(istype(O))
- geologic_data.UpdateNearbyArtifactInfo(src)
- O.geologic_data = geologic_data
- return O
-
-
- proc/GetDrilled(var/artifact_fail = 0)
- //var/destroyed = 0 //used for breaking strange rocks
- if (mineral && mineral.result_amount)
-
- //if the turf has already been excavated, some of it's ore has been removed
- for (var/i = 1 to mineral.result_amount - mined_ore)
- DropMineral()
-
- //destroyed artifacts have weird, unpleasant effects
- //make sure to destroy them before changing the turf though
- if(artifact_find && artifact_fail)
- var/pain = 0
- if(prob(50))
- pain = 1
- for(var/mob/living/M in range(src, 200))
- M << "[pick("A high pitched [pick("keening","wailing","whistle")]","A rumbling noise like [pick("thunder","heavy machinery")]")] somehow penetrates your mind before fading away!"
- if(pain)
- flick("pain",M.pain)
- if(prob(50))
- M.adjustBruteLoss(5)
+ if(B)
+ GetDrilled(0)
else
- flick("flash",M.flash)
- if(prob(50))
- M.Stun(5)
- M.apply_effect(25, IRRADIATE)
+ GetDrilled(1)
+ return
- var/turf/simulated/floor/plating/airless/asteroid/N = ChangeTurf(/turf/simulated/floor/plating/airless/asteroid)
- N.fullUpdateMineralOverlays()
+ excavation_level += P.excavation_amount
- if(rand(1,500) == 1)
- visible_message("An old dusty crate was buried within!")
- new /obj/structure/closet/crate/secure/loot(src)
+ //archaeo overlays
+ if(!archaeo_overlay && finds && finds.len)
+ var/datum/find/F = finds[1]
+ if(F.excavation_required <= excavation_level + F.view_range)
+ archaeo_overlay = "overlay_archaeo[rand(1,3)]"
+ overlays += archaeo_overlay
+
+ //there's got to be a better way to do this
+ var/update_excav_overlay = 0
+ if(excavation_level >= 75)
+ if(excavation_level - P.excavation_amount < 75)
+ update_excav_overlay = 1
+ else if(excavation_level >= 50)
+ if(excavation_level - P.excavation_amount < 50)
+ update_excav_overlay = 1
+ else if(excavation_level >= 25)
+ if(excavation_level - P.excavation_amount < 25)
+ update_excav_overlay = 1
+
+ //update overlays displaying excavation level
+ if( !(excav_overlay && excavation_level > 0) || update_excav_overlay )
+ var/excav_quadrant = round(excavation_level / 25) + 1
+ excav_overlay = "overlay_excv[excav_quadrant]_[rand(1,3)]"
+ overlays += excav_overlay
+
+ //drop some rocks
+ next_rock += P.excavation_amount * 10
+ while(next_rock > 100)
+ next_rock -= 100
+ var/obj/item/weapon/ore/O = new(src)
+ geologic_data.UpdateNearbyArtifactInfo(src)
+ O.geologic_data = geologic_data
+
+ else
+ return attack_hand(user)
+
+/turf/simulated/mineral/proc/DropMineral()
+ if(!mineral)
+ return
+
+ var/obj/item/weapon/ore/O = new mineral.ore (src)
+ if(istype(O))
+ geologic_data.UpdateNearbyArtifactInfo(src)
+ O.geologic_data = geologic_data
+ return O
+
+/turf/simulated/mineral/proc/GetDrilled(var/artifact_fail = 0)
+ //var/destroyed = 0 //used for breaking strange rocks
+ if (mineral && mineral.result_amount)
+
+ //if the turf has already been excavated, some of it's ore has been removed
+ for (var/i = 1 to mineral.result_amount - mined_ore)
+ DropMineral()
+
+ //destroyed artifacts have weird, unpleasant effects
+ //make sure to destroy them before changing the turf though
+ if(artifact_find && artifact_fail)
+ var/pain = 0
+ if(prob(50))
+ pain = 1
+ for(var/mob/living/M in range(src, 200))
+ M << "[pick("A high pitched [pick("keening","wailing","whistle")]","A rumbling noise like [pick("thunder","heavy machinery")]")] somehow penetrates your mind before fading away!"
+ if(pain)
+ flick("pain",M.pain)
+ if(prob(50))
+ M.adjustBruteLoss(5)
+ else
+ flick("flash",M.flash)
+ if(prob(50))
+ M.Stun(5)
+ M.apply_effect(25, IRRADIATE)
+
+ var/turf/simulated/floor/plating/airless/asteroid/N = ChangeTurf(/turf/simulated/floor/plating/airless/asteroid)
+ for(var/i=0;iAn old dusty crate was buried within!")
+ new /obj/structure/closet/crate/secure/loot(src)
- proc/excavate_find(var/prob_clean = 0, var/datum/find/F)
- //with skill and luck, players can cleanly extract finds
- //otherwise, they come out inside a chunk of rock
- var/obj/item/weapon/X
- if(prob_clean)
- X = new /obj/item/weapon/archaeological_find(src, new_item_type = F.find_type)
- else
- X = new /obj/item/weapon/ore/strangerock(src, inside_item_type = F.find_type)
- geologic_data.UpdateNearbyArtifactInfo(src)
- X:geologic_data = geologic_data
+/turf/simulated/mineral/proc/excavate_find(var/prob_clean = 0, var/datum/find/F)
+ //with skill and luck, players can cleanly extract finds
+ //otherwise, they come out inside a chunk of rock
+ var/obj/item/weapon/X
+ if(prob_clean)
+ X = new /obj/item/weapon/archaeological_find(src, new_item_type = F.find_type)
+ else
+ X = new /obj/item/weapon/ore/strangerock(src, inside_item_type = F.find_type)
+ geologic_data.UpdateNearbyArtifactInfo(src)
+ X:geologic_data = geologic_data
- //some find types delete the /obj/item/weapon/archaeological_find and replace it with something else, this handles when that happens
- //yuck
- var/display_name = "something"
- if(!X)
- X = last_find
- if(X)
- display_name = X.name
+ //some find types delete the /obj/item/weapon/archaeological_find and replace it with something else, this handles when that happens
+ //yuck
+ var/display_name = "something"
+ if(!X)
+ X = last_find
+ if(X)
+ display_name = X.name
- //many finds are ancient and thus very delicate - luckily there is a specialised energy suspension field which protects them when they're being extracted
- if(prob(F.prob_delicate))
- var/obj/effect/suspension_field/S = locate() in src
- if(!S || S.field_type != get_responsive_reagent(F.find_type))
- if(X)
- visible_message("\red[pick("[display_name] crumbles away into dust","[display_name] breaks apart")].")
- del(X)
+ //many finds are ancient and thus very delicate - luckily there is a specialised energy suspension field which protects them when they're being extracted
+ if(prob(F.prob_delicate))
+ var/obj/effect/suspension_field/S = locate() in src
+ if(!S || S.field_type != get_responsive_reagent(F.find_type))
+ if(X)
+ visible_message("\red[pick("[display_name] crumbles away into dust","[display_name] breaks apart")].")
+ del(X)
- finds.Remove(F)
+ finds.Remove(F)
- proc/artifact_debris(var/severity = 0)
- //cael's patented random limited drop componentized loot system!
- //sky's patented not-fucking-retarded overhaul!
+/turf/simulated/mineral/proc/artifact_debris(var/severity = 0)
+ //cael's patented random limited drop componentized loot system!
+ //sky's patented not-fucking-retarded overhaul!
- //Give a random amount of loot from 1 to 3 or 5, varying on severity.
- for(var/j in 1 to rand(1, 3 + max(min(severity, 1), 0) * 2))
- switch(rand(1,7))
- if(1)
- var/obj/item/stack/rods/R = new(src)
- R.amount = rand(5,25)
+ //Give a random amount of loot from 1 to 3 or 5, varying on severity.
+ for(var/j in 1 to rand(1, 3 + max(min(severity, 1), 0) * 2))
+ switch(rand(1,7))
+ if(1)
+ var/obj/item/stack/rods/R = new(src)
+ R.amount = rand(5,25)
- if(2)
- var/obj/item/stack/tile/R = new(src)
- R.amount = rand(1,5)
+ if(2)
+ var/obj/item/stack/tile/R = new(src)
+ R.amount = rand(1,5)
- if(3)
- var/obj/item/stack/sheet/metal/R = new(src)
- R.amount = rand(5,25)
+ if(3)
+ var/obj/item/stack/sheet/metal/R = new(src)
+ R.amount = rand(5,25)
- if(4)
- var/obj/item/stack/sheet/plasteel/R = new(src)
- R.amount = rand(5,25)
+ if(4)
+ var/obj/item/stack/sheet/plasteel/R = new(src)
+ R.amount = rand(5,25)
- if(5)
- var/quantity = rand(1,3)
- for(var/i=0, i