Fishing!
@@ -19,6 +19,7 @@
|
||||
/turf/simulated/floor/water/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
handle_fish()
|
||||
|
||||
/turf/simulated/floor/water/update_icon()
|
||||
..() // To get the edges.
|
||||
|
||||
202
code/modules/fishing/fishing.dm
Normal file
@@ -0,0 +1,202 @@
|
||||
/*
|
||||
* Fishing! Contains normal fishing rods and nets.
|
||||
*/
|
||||
|
||||
GLOBAL_LIST_INIT(generic_fishing_rare_list, list(
|
||||
/mob/living/simple_mob/animal/passive/fish/solarfish = 1,
|
||||
/mob/living/simple_mob/animal/passive/fish/icebass = 5,
|
||||
/mob/living/simple_mob/animal/passive/fish/koi = 3
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(generic_fishing_uncommon_list, list(
|
||||
/mob/living/simple_mob/animal/passive/fish/salmon = 6,
|
||||
/mob/living/simple_mob/animal/passive/fish/pike = 10,
|
||||
/mob/living/simple_mob/animal/passive/fish/javelin = 3,
|
||||
/mob/living/simple_mob/animal/passive/crab/sif = 1
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(generic_fishing_common_list, list(
|
||||
/mob/living/simple_mob/animal/passive/fish/bass = 10,
|
||||
/mob/living/simple_mob/animal/passive/fish/trout = 8,
|
||||
/mob/living/simple_mob/animal/passive/fish/perch = 6,
|
||||
/mob/living/simple_mob/animal/passive/fish/murkin = 8,
|
||||
/mob/living/simple_mob/animal/passive/fish/rockfish = 5,
|
||||
/mob/living/simple_mob/animal/passive/crab = 1
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(generic_fishing_junk_list, list(
|
||||
/obj/item/clothing/shoes/boots/cowboy = 1,
|
||||
/obj/random/fishing_junk = 10
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(generic_fishing_pool_list, list(
|
||||
/obj/item/weapon/bikehorn/rubberducky = 5,
|
||||
/obj/item/toy/plushie/carp = 20,
|
||||
/obj/random/junk = 80,
|
||||
/obj/random/trash = 80,
|
||||
/obj/item/weapon/spacecash/c1 = 10,
|
||||
/obj/item/weapon/spacecash/c10 = 5,
|
||||
/obj/item/weapon/spacecash/c100 = 1
|
||||
))
|
||||
|
||||
#define FISHING_RARE "rare"
|
||||
#define FISHING_UNCOMMON "uncommon"
|
||||
#define FISHING_COMMON "common"
|
||||
#define FISHING_JUNK "junk"
|
||||
#define FISHING_NOTHING "nothing"
|
||||
|
||||
GLOBAL_LIST_INIT(generic_fishing_chance_list, list(FISHING_RARE = 5, FISHING_UNCOMMON = 15, FISHING_COMMON = 30, FISHING_JUNK = 30, FISHING_NOTHING = 40))
|
||||
|
||||
/turf/simulated/floor/water
|
||||
var/has_fish = TRUE //If the water has fish or not.
|
||||
|
||||
var/list/rare_fish_list // Rare list.
|
||||
|
||||
var/list/uncommon_fish_list // Uncommon list.
|
||||
|
||||
var/list/common_fish_list // Common list.
|
||||
|
||||
var/list/junk_list // Junk item list.
|
||||
|
||||
var/list/fishing_loot // Chance list.
|
||||
|
||||
var/fishing_cooldown = 30 SECONDS
|
||||
var/last_fished = 0
|
||||
|
||||
var/fish_type
|
||||
var/min_fishing_time = 30 // Time in seconds.
|
||||
var/max_fishing_time = 90
|
||||
|
||||
var/being_fished = FALSE
|
||||
|
||||
/turf/simulated/floor/water/proc/handle_fish() // Subtypes should over-ride this, and supply their own GLOB lists for maximum Mix and Match power.
|
||||
if(has_fish)
|
||||
rare_fish_list = GLOB.generic_fishing_rare_list
|
||||
uncommon_fish_list = GLOB.generic_fishing_uncommon_list
|
||||
common_fish_list = GLOB.generic_fishing_common_list
|
||||
junk_list = GLOB.generic_fishing_junk_list
|
||||
fishing_loot = GLOB.generic_fishing_chance_list
|
||||
|
||||
/turf/simulated/floor/water/pool
|
||||
has_fish = FALSE
|
||||
|
||||
/turf/simulated/floor/water/deep/pool
|
||||
has_fish = TRUE
|
||||
|
||||
/turf/simulated/floor/water/deep/pool/handle_fish()
|
||||
if(has_fish)
|
||||
rare_fish_list = GLOB.generic_fishing_pool_list
|
||||
uncommon_fish_list = GLOB.generic_fishing_pool_list
|
||||
common_fish_list = GLOB.generic_fishing_pool_list
|
||||
junk_list = GLOB.generic_fishing_pool_list
|
||||
fishing_loot = GLOB.generic_fishing_chance_list
|
||||
|
||||
/turf/simulated/floor/water/ex_act(severity) // Explosive fishing.
|
||||
if(prob(5 * severity))
|
||||
pick_fish()
|
||||
if(fish_type)
|
||||
var/fished = new fish_type(get_turf(src))
|
||||
if(isliving(fished))
|
||||
var/mob/living/L = fished
|
||||
L.death()
|
||||
has_fish = FALSE
|
||||
..(severity)
|
||||
|
||||
/turf/simulated/floor/water/proc/pick_fish()
|
||||
if(has_fish)
|
||||
var/table = pickweight(fishing_loot)
|
||||
if(table == FISHING_RARE && rare_fish_list.len)
|
||||
fish_type = pickweight(rare_fish_list)
|
||||
else if(table == FISHING_UNCOMMON && uncommon_fish_list.len)
|
||||
fish_type = pickweight(uncommon_fish_list)
|
||||
else if(table == FISHING_COMMON && common_fish_list.len)
|
||||
fish_type = pickweight(common_fish_list)
|
||||
else if(table == FISHING_JUNK && junk_list.len)
|
||||
fish_type = pickweight(junk_list)
|
||||
else
|
||||
fish_type = null
|
||||
else
|
||||
fish_type = null
|
||||
|
||||
/turf/simulated/floor/water/attackby(obj/item/weapon/P as obj, mob/user as mob)
|
||||
//If you use a fishing rod on an open body of water that var/has_fish enabled
|
||||
if(istype(P, /obj/item/weapon/material/fishing_rod) && !being_fished)
|
||||
var/obj/item/weapon/material/fishing_rod/R = P
|
||||
if(!R.strung)
|
||||
to_chat(user, "<span class='notice'>It is hard to go fishing without any line!</span>")
|
||||
return
|
||||
if(R.cast)
|
||||
to_chat(user, "<span class='notice'>You can only cast one line at a time!</span>")
|
||||
return
|
||||
playsound(src, 'sound/effects/slosh.ogg', 5, 1, 5)
|
||||
to_chat(user,"You cast \the [P.name] into \the [src].")
|
||||
being_fished = TRUE
|
||||
R.cast = TRUE
|
||||
var/fishing_time = rand(min_fishing_time SECONDS,max_fishing_time SECONDS) * R.toolspeed
|
||||
if(do_after(user,fishing_time,user))
|
||||
playsound(src, 'sound/effects/slosh.ogg', 5, 1, 5)
|
||||
to_chat(user,"<span class='notice'>You feel a tug and begin pulling!</span>")
|
||||
if(world.time >= last_fished + fishing_cooldown)
|
||||
pick_fish()
|
||||
last_fished = world.time
|
||||
else
|
||||
fish_type = null
|
||||
if(prob(3)) // No fish left here..
|
||||
has_fish = FALSE
|
||||
//List of possible outcomes.
|
||||
if(!fish_type)
|
||||
to_chat(user,"You caught... nothing. How sad.")
|
||||
else
|
||||
var/fished = new fish_type(get_turf(user))
|
||||
if(isliving(fished))
|
||||
R.consume_bait()
|
||||
var/mob/living/L = fished
|
||||
if(prob(rand(L.mob_size) + 10) && R.line_break)
|
||||
R.strung = FALSE
|
||||
R.update_icon()
|
||||
user.visible_message("<span class='danger'>\The [R]'s string snaps!</span>")
|
||||
if(prob(33)) // Dead on hook. Good for food, not so much for live catch.
|
||||
L.death()
|
||||
to_chat(user,"<span class='notice'>You fish out \the [fished] from the water with [P.name]!</span>")
|
||||
R.cast = FALSE
|
||||
being_fished = FALSE
|
||||
else ..()
|
||||
|
||||
/obj/random/fishing_junk
|
||||
name = "junk"
|
||||
desc = "This is a random fishing junk item."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "red"
|
||||
|
||||
/obj/random/fishing_junk/item_to_spawn()
|
||||
return pickweight(list(
|
||||
/obj/random/toy = 60,
|
||||
/obj/random/maintenance/engineering = 50,
|
||||
/obj/random/maintenance/clean = 40,
|
||||
/obj/random/maintenance/security = 40,
|
||||
/obj/random/maintenance/research = 40,
|
||||
/obj/structure/closet/crate/secure/loot = 30,
|
||||
/obj/random/bomb_supply = 30,
|
||||
/obj/random/powercell = 30,
|
||||
/obj/random/tech_supply/component = 30,
|
||||
/obj/random/unidentified_medicine/old_medicine = 30,
|
||||
/obj/random/plushie = 30,
|
||||
/obj/random/contraband = 20,
|
||||
/obj/random/coin = 20,
|
||||
/obj/random/medical = 15,
|
||||
/obj/random/unidentified_medicine/fresh_medicine = 15,
|
||||
/obj/random/action_figure = 15,
|
||||
/obj/random/plushielarge = 15,
|
||||
/obj/random/firstaid = 10,
|
||||
/obj/random/tool/powermaint = 5,
|
||||
/obj/random/unidentified_medicine/combat_medicine = 1,
|
||||
/obj/random/tool/alien = 1,
|
||||
/obj/random/handgun = 1,
|
||||
/mob/living/simple_mob/animal/sif/hooligan_crab = 1
|
||||
))
|
||||
|
||||
#undef FISHING_RARE
|
||||
#undef FISHING_UNCOMMON
|
||||
#undef FISHING_COMMON
|
||||
#undef FISHING_JUNK
|
||||
#undef FISHING_NOTHING
|
||||
109
code/modules/fishing/fishing_net.dm
Normal file
@@ -0,0 +1,109 @@
|
||||
/obj/item/weapon/material/fishing_net
|
||||
name = "fishing net"
|
||||
desc = "A crude fishing net."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "net"
|
||||
item_state = "net"
|
||||
description_info = "This object can be used to capture certain creatures easily, most commonly fish. \
|
||||
It has a reach of two tiles, and can be emptied by activating it in-hand. \
|
||||
This version will not keep creatures inside in stasis, and will be heavier if it contains a mob."
|
||||
|
||||
var/empty_state = "net"
|
||||
var/contain_state = "net_full"
|
||||
|
||||
w_class = ITEMSIZE_SMALL
|
||||
flags = NOBLUDGEON
|
||||
|
||||
slowdown = 0.25
|
||||
|
||||
reach = 2
|
||||
|
||||
default_material = "cloth"
|
||||
|
||||
var/list/accepted_mobs = list(/mob/living/simple_mob/animal/passive/fish)
|
||||
|
||||
/obj/item/weapon/material/fishing_net/Initialize()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/material/fishing_net/afterattack(var/atom/A, var/mob/user, var/proximity)
|
||||
if(get_dist(get_turf(src), A) > reach)
|
||||
return
|
||||
|
||||
if(istype(A, /turf))
|
||||
var/mob/living/Target
|
||||
for(var/type in accepted_mobs)
|
||||
Target = locate(type) in A.contents
|
||||
if(Target)
|
||||
afterattack(Target, user, proximity)
|
||||
break
|
||||
|
||||
if(istype(A, /mob))
|
||||
var/accept = FALSE
|
||||
for(var/D in accepted_mobs)
|
||||
if(istype(A, D))
|
||||
accept = TRUE
|
||||
for(var/atom/At in src.contents)
|
||||
if(isliving(At))
|
||||
to_chat(user, "<span class='notice'>Your net is already holding something!</span>")
|
||||
accept = FALSE
|
||||
if(!accept)
|
||||
to_chat(user, "[A] can't be trapped in \the [src].")
|
||||
return
|
||||
var/mob/L = A
|
||||
user.visible_message("<span class='notice'>[user] snatches [L] with \the [src].</span>", "<span class='notice'>You snatch [L] with \the [src].</span>")
|
||||
L.forceMove(src)
|
||||
update_icon()
|
||||
update_weight()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/material/fishing_net/attack_self(var/mob/user)
|
||||
for(var/mob/M in src)
|
||||
M.forceMove(get_turf(src))
|
||||
user.visible_message("<span class='notice'>[user] releases [M] from \the [src].</span>", "<span class='notice'>You release [M] from \the [src].</span>")
|
||||
for(var/obj/item/I in src)
|
||||
I.forceMove(get_turf(src))
|
||||
user.visible_message("<span class='notice'>[user] dumps \the [I] out of \the [src].</span>", "<span class='notice'>You dump \the [I] out of \the [src].</span>")
|
||||
update_icon()
|
||||
update_weight()
|
||||
return
|
||||
|
||||
/obj/item/weapon/material/fishing_net/attackby(var/obj/item/W, var/mob/user)
|
||||
if(contents)
|
||||
for(var/mob/living/L in contents)
|
||||
if(prob(25))
|
||||
L.attackby(W, user)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/material/fishing_net/update_icon() // Also updates name and desc
|
||||
underlays.Cut()
|
||||
overlays.Cut()
|
||||
|
||||
..()
|
||||
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
var/contains_mob = FALSE
|
||||
for(var/mob/M in src)
|
||||
var/image/victim = image(M.icon, M.icon_state)
|
||||
underlays += victim
|
||||
name = "filled net"
|
||||
desc = "A net with [M] inside."
|
||||
contains_mob = TRUE
|
||||
|
||||
if(contains_mob)
|
||||
icon_state = contain_state
|
||||
|
||||
else
|
||||
icon_state = empty_state
|
||||
|
||||
return
|
||||
|
||||
/obj/item/weapon/material/fishing_net/proc/update_weight()
|
||||
if(icon_state == contain_state) // Let's not do a for loop just to see if a mob is in here.
|
||||
slowdown = initial(slowdown) * 2
|
||||
reach = 1
|
||||
else
|
||||
slowdown = initial(slowdown)
|
||||
reach = initial(reach)
|
||||
124
code/modules/fishing/fishing_rod.dm
Normal file
@@ -0,0 +1,124 @@
|
||||
|
||||
/obj/item/weapon/material/fishing_rod
|
||||
name = "crude fishing rod"
|
||||
desc = "A crude rod made for catching fish."
|
||||
description_info = "A tool usable on water-tiles to attempt to catch fish by swiping it over them.\
|
||||
You can add or remove cable by wirecutter or coil respectively to allow its use.\
|
||||
Any food containing things like protein, sugar, or standard nutriment can be attached to the rod, allowing for faster fishing based on the amount.\
|
||||
You can examine the rod to check if it has bait attached, and examine it automatically if so.\
|
||||
\
|
||||
Ctrl clicking the rod will remove any attached bait from the rod."
|
||||
description_antag = "Some fishing rods can be utilized as long-range, sharp weapons, though their pseudo ranged ability comes at the cost of slow speed."
|
||||
icon_state = "fishing_rod"
|
||||
item_state = "fishing_rod"
|
||||
force_divisor = 0.25
|
||||
throwforce = 7
|
||||
sharp = TRUE
|
||||
attack_verb = list("whipped", "battered", "slapped", "fished", "hooked")
|
||||
hitsound = 'sound/weapons/punchmiss.ogg'
|
||||
applies_material_colour = TRUE
|
||||
default_material = "wood"
|
||||
can_dull = FALSE
|
||||
var/strung = TRUE
|
||||
var/line_break = TRUE
|
||||
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/Bait
|
||||
var/bait_type = /obj/item/weapon/reagent_containers/food/snacks
|
||||
|
||||
var/cast = FALSE
|
||||
|
||||
attackspeed = 3 SECONDS
|
||||
|
||||
/obj/item/weapon/material/fishing_rod/built
|
||||
strung = FALSE
|
||||
|
||||
/obj/item/weapon/material/fishing_rod/examine(mob/M as mob)
|
||||
..()
|
||||
if(Bait)
|
||||
to_chat(M, "<span class='notice'>\The [src] has \the [Bait] hanging on its hook.</span>")
|
||||
Bait.examine(M)
|
||||
|
||||
/obj/item/weapon/material/fishing_rod/CtrlClick(mob/user)
|
||||
if((src.loc == user || Adjacent(user)) && Bait)
|
||||
Bait.forceMove(get_turf(user))
|
||||
to_chat(user, "<span class='notice'>You remove the bait from \the [src].</span>")
|
||||
Bait = null
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/material/fishing_rod/Initialize()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/material/fishing_rod/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(I.is_wirecutter() && strung)
|
||||
strung = FALSE
|
||||
to_chat(user, "<span class='notice'>You cut \the [src]'s string!</span>")
|
||||
update_icon()
|
||||
return
|
||||
else if(istype(I, /obj/item/stack/cable_coil) && !strung)
|
||||
var/obj/item/stack/cable_coil/C = I
|
||||
if(C.amount < 5)
|
||||
to_chat(user, "<span class='warning'>You do not have enough length in \the [C] to string this!</span>")
|
||||
return
|
||||
if(do_after(user, rand(10 SECONDS, 20 SECONDS)))
|
||||
C.use(5)
|
||||
strung = TRUE
|
||||
to_chat(user, "<span class='notice'>You string \the [src]!</span>")
|
||||
update_icon()
|
||||
return
|
||||
else if(istype(I, bait_type))
|
||||
if(Bait)
|
||||
Bait.forceMove(get_turf(user))
|
||||
to_chat(user, "<span class='notice'>You swap \the [Bait] with \the [I].</span>")
|
||||
Bait = I
|
||||
user.drop_from_inventory(Bait)
|
||||
Bait.forceMove(src)
|
||||
update_bait()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/material/fishing_rod/update_icon()
|
||||
overlays.Cut()
|
||||
..()
|
||||
if(strung)
|
||||
overlays += image(icon, "[icon_state]_string")
|
||||
|
||||
/obj/item/weapon/material/fishing_rod/proc/update_bait()
|
||||
if(istype(Bait, bait_type))
|
||||
var/foodvolume
|
||||
for(var/datum/reagent/re in Bait.reagents.reagent_list)
|
||||
if(re.id == "nutriment" || re.id == "protein" || re.id == "glucose")
|
||||
foodvolume += re.volume
|
||||
|
||||
toolspeed = initial(toolspeed) * min(0.75, (0.5 / max(0.5, (foodvolume / Bait.reagents.maximum_volume))))
|
||||
|
||||
else
|
||||
toolspeed = initial(toolspeed)
|
||||
|
||||
/obj/item/weapon/material/fishing_rod/proc/consume_bait()
|
||||
if(Bait)
|
||||
qdel(Bait)
|
||||
Bait = null
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/weapon/material/fishing_rod/attack(var/mob/M as mob, var/mob/user as mob, var/def_zone)
|
||||
if(cast)
|
||||
to_chat(user, "<span class='notice'>You cannot cast \the [src] when it is already in use!</span>")
|
||||
return FALSE
|
||||
update_bait()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/material/fishing_rod/modern
|
||||
name = "fishing rod"
|
||||
desc = "A refined rod for catching fish."
|
||||
icon_state = "fishing_rod_modern"
|
||||
item_state = "fishing_rod"
|
||||
reach = 4
|
||||
attackspeed = 2 SECONDS
|
||||
default_material = "titanium"
|
||||
|
||||
toolspeed = 0.75
|
||||
|
||||
/obj/item/weapon/material/fishing_rod/modern/built
|
||||
strung = FALSE
|
||||
@@ -715,18 +715,36 @@
|
||||
bitesize = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
|
||||
name = "carp fillet"
|
||||
desc = "A fillet of spess carp meat"
|
||||
name = "fillet"
|
||||
desc = "A fillet of carp meat"
|
||||
icon_state = "fishfillet"
|
||||
filling_color = "#FFDEFE"
|
||||
center_of_mass = list("x"=17, "y"=13)
|
||||
|
||||
var/toxin_type = "carpotoxin"
|
||||
var/toxin_amount = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("protein", 3)
|
||||
reagents.add_reagent("carpotoxin", 3)
|
||||
reagents.add_reagent(toxin_type, toxin_amount)
|
||||
src.bitesize = 6
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
|
||||
desc = "A fillet of sivian fish meat."
|
||||
filling_color = "#2c2cff"
|
||||
color = "#2c2cff"
|
||||
toxin_type = "neurotoxic_protein"
|
||||
toxin_amount = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish
|
||||
toxin_type = "murk_protein"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish
|
||||
desc = "A fillet of fish meat."
|
||||
toxin_type = "neurotoxic_protein"
|
||||
toxin_amount = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fishfingers
|
||||
name = "Fish Fingers"
|
||||
desc = "A finger of fish."
|
||||
|
||||
@@ -129,6 +129,7 @@
|
||||
recipes += new/datum/stack_recipe("airtight plastic flaps", /obj/structure/plasticflaps/mining, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 10, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1)
|
||||
recipes += new/datum/stack_recipe("plastic net", /obj/item/weapon/material/fishing_net, 25, time = 1 MINUTE)
|
||||
|
||||
/material/wood/generate_recipes()
|
||||
..()
|
||||
@@ -148,6 +149,7 @@
|
||||
recipes += new/datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0)
|
||||
recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5)
|
||||
recipes += new/datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS)
|
||||
|
||||
/material/wood/log/generate_recipes()
|
||||
recipes = list()
|
||||
@@ -200,3 +202,20 @@
|
||||
/material/supermatter/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("supermatter shard", /obj/machinery/power/supermatter/shard, 30 , one_per_turf = 1, time = 600, on_floor = 1)
|
||||
|
||||
/material/cloth/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("woven net", /obj/item/weapon/material/fishing_net, 10, time = 30 SECONDS)
|
||||
recipes += new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS)
|
||||
recipes += new/datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS)
|
||||
recipes += new/datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS)
|
||||
recipes += new/datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS)
|
||||
recipes += new/datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS)
|
||||
recipes += new/datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES)
|
||||
recipes += new/datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS)
|
||||
recipes += new/datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS)
|
||||
recipes += new/datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS)
|
||||
recipes += new/datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS)
|
||||
recipes += new/datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS)
|
||||
recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS)
|
||||
recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE)
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
new /datum/data/mining_equipment("Resonator", /obj/item/resonator, 900),
|
||||
new /datum/data/mining_equipment("Fulton Pack", /obj/item/extraction_pack, 1200),
|
||||
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1200),
|
||||
<<<<<<< HEAD
|
||||
//new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffelbag/mining_conscript, 1000),
|
||||
new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c100, 1000),
|
||||
new /datum/data/mining_equipment("Industrial Hardsuit - Control Module", /obj/item/weapon/rig/industrial, 2000),
|
||||
@@ -54,6 +55,18 @@
|
||||
new /datum/data/mining_equipment("KA Efficiency Increase", /obj/item/borg/upgrade/modkit/efficiency, 1200),
|
||||
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000),
|
||||
new /datum/data/mining_equipment("KA Holster", /obj/item/clothing/accessory/holster/waist/kinetic_accelerator, 350)
|
||||
=======
|
||||
// new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 2000),
|
||||
// new /datum/data/mining_equipment("Industrial Hardsuit - Control Module", /obj/item/weapon/rig/industrial, 2000),
|
||||
// new /datum/data/mining_equipment("Industrial Hardsuit - Plasma Cutter", /obj/item/rig_module/device/plasmacutter, 800),
|
||||
// new /datum/data/mining_equipment("Industrial Hardsuit - Drill", /obj/item/rig_module/device/drill, 2000),
|
||||
// new /datum/data/mining_equipment("Industrial Hardsuit - Ore Scanner", /obj/item/rig_module/device/orescanner, 1000),
|
||||
// new /datum/data/mining_equipment("Industrial Hardsuit - Material Scanner", /obj/item/rig_module/vision/material, 500),
|
||||
// new /datum/data/mining_equipment("Industrial Hardsuit - Maneuvering Jets", /obj/item/rig_module/maneuvering_jets, 1250),
|
||||
// new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000),
|
||||
new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 500),
|
||||
new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 1000)
|
||||
>>>>>>> a033ac4... Merge pull request #6113 from Mechoid/FishingFtWorldServer
|
||||
)
|
||||
//VOREStation Edit End
|
||||
|
||||
|
||||
@@ -104,6 +104,22 @@ var/list/holder_mob_icon_cache = list()
|
||||
/obj/item/weapon/holder/borer
|
||||
origin_tech = list(TECH_BIO = 6)
|
||||
|
||||
/obj/item/weapon/holder/fish
|
||||
attack_verb = list("fished", "disrespected", "smacked", "smackereled")
|
||||
hitsound = 'sound/effects/slime_squish.ogg'
|
||||
slot_flags = SLOT_HOLSTER
|
||||
origin_tech = list(TECH_BIO = 3)
|
||||
|
||||
/obj/item/weapon/holder/fish/afterattack(var/atom/target, var/mob/living/user, proximity)
|
||||
if(!target)
|
||||
return
|
||||
if(!proximity)
|
||||
return
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
if(prob(10))
|
||||
L.Stun(2)
|
||||
|
||||
/obj/item/weapon/holder/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
for(var/mob/M in src.contents)
|
||||
M.attackby(W,user)
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
response_harm = "stomps"
|
||||
friendly = "pinches"
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/crab
|
||||
|
||||
say_list_type = /datum/say_list/crab
|
||||
|
||||
//COFFEE! SQUEEEEEEEEE!
|
||||
@@ -23,3 +25,33 @@
|
||||
name = "Coffee"
|
||||
real_name = "Coffee"
|
||||
desc = "It's Coffee, the other pet!"
|
||||
|
||||
// Sif!
|
||||
|
||||
/datum/category_item/catalogue/fauna/sif_crab
|
||||
name = "Sivian Fauna - Shelf Crab"
|
||||
desc = "Classification: S Ocypode glacian\
|
||||
<br><br>\
|
||||
A small crustacean sometimes considered a pest to Sivian fisheries, \
|
||||
as the creatures often tend to ignore non-native fish species when feeding. This \
|
||||
results in an unfortunate advantage for invasive species. \
|
||||
<br>\
|
||||
Otherwise, these animals are enjoyed as a reliable source of high-grade meat."
|
||||
value = CATALOGUER_REWARD_EASY
|
||||
|
||||
/mob/living/simple_mob/animal/passive/crab/sif
|
||||
icon = 'icons/mob/fish.dmi'
|
||||
tt_desc = "S Ocypode glacian"
|
||||
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/sif_crab)
|
||||
|
||||
/mob/living/simple_mob/animal/passive/crab/sif/Initialize()
|
||||
..()
|
||||
adjust_scale(rand(5,15) / 10)
|
||||
|
||||
// Meat!
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/crab
|
||||
name = "meat"
|
||||
desc = "A chunk of meat."
|
||||
icon_state = "crustacean-meat"
|
||||
|
||||
@@ -1,14 +1,27 @@
|
||||
// Different types of fish! They are all subtypes of this tho
|
||||
/datum/category_item/catalogue/fauna/invasive_fish
|
||||
name = "Invasive Fauna - Fish"
|
||||
desc = "This fish is considered an invasive species according \
|
||||
to Sivian wildlife regulations. Removal or relocation is advised."
|
||||
value = CATALOGUER_REWARD_TRIVIAL
|
||||
|
||||
/mob/living/simple_mob/animal/passive/fish
|
||||
name = "fish"
|
||||
desc = "Its a fishy. No touchy fishy."
|
||||
icon = 'icons/mob/fish.dmi'
|
||||
item_state = "fish"
|
||||
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/invasive_fish)
|
||||
|
||||
mob_size = MOB_SMALL
|
||||
// So fish are actually underwater.
|
||||
plane = TURF_PLANE
|
||||
layer = UNDERWATER_LAYER
|
||||
|
||||
holder_type = /obj/item/weapon/holder/fish
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish
|
||||
|
||||
// By default they can be in any water turf. Subtypes might restrict to deep/shallow etc
|
||||
var/global/list/suitable_turf_types = list(
|
||||
/turf/simulated/floor/beach/water,
|
||||
@@ -75,3 +88,212 @@
|
||||
icon_living = "koi-swim"
|
||||
icon_dead = "koi-dead"
|
||||
|
||||
/datum/category_item/catalogue/fauna/javelin
|
||||
name = "Sivian Fauna - Javelin Shark"
|
||||
desc = "Classification: S Cetusan minimalix\
|
||||
<br><br>\
|
||||
A small breed of fatty shark native to the waters near the Ullran Expanse.\
|
||||
The creatures are not known to attack humans or larger animals, possibly \
|
||||
due to their size. It is speculated that they are actually scavengers, \
|
||||
as they are most commonly found near the gulf floor. \
|
||||
<br>\
|
||||
The Javelin's reproductive cycle only recurs between three and four \
|
||||
Sivian years. \
|
||||
<br>\
|
||||
These creatures are considered a protected species, and thus require an \
|
||||
up-to-date license to be hunted."
|
||||
value = CATALOGUER_REWARD_EASY
|
||||
|
||||
/mob/living/simple_mob/animal/passive/fish/javelin
|
||||
name = "javelin"
|
||||
tt_desc = "S Cetusan minimalix"
|
||||
icon_state = "javelin-swim"
|
||||
icon_living = "javelin-swim"
|
||||
icon_dead = "javelin-dead"
|
||||
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/javelin)
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
|
||||
|
||||
/datum/category_item/catalogue/fauna/icebass
|
||||
name = "Sivian Fauna - Glitter Bass"
|
||||
desc = "Classification: X Micropterus notius crotux\
|
||||
<br><br>\
|
||||
Initially a genetically engineered hybrid of the common Earth bass and \
|
||||
the Sivian Rock-Fish. These were designed to deal with the invasive \
|
||||
fish species, however to their creators' dismay, they instead \
|
||||
began to form their own passive niche. \
|
||||
<br>\
|
||||
Due to the brilliant reflective scales earning them their name, the \
|
||||
animals pose a specific issue for Sivian animals relying on \
|
||||
bioluminesence to aid in their hunt. \
|
||||
<br>\
|
||||
Despite their beauty, they are considered an invasive species."
|
||||
value = CATALOGUER_REWARD_EASY
|
||||
|
||||
/mob/living/simple_mob/animal/passive/fish/icebass
|
||||
name = "glitter bass"
|
||||
tt_desc = "X Micropterus notius crotux"
|
||||
icon_state = "sifbass-swim"
|
||||
icon_living = "sifbass-swim"
|
||||
icon_dead = "sifbass-dead"
|
||||
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/icebass)
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
|
||||
|
||||
var/max_red = 150
|
||||
var/min_red = 50
|
||||
|
||||
var/max_blue = 255
|
||||
var/min_blue = 50
|
||||
|
||||
var/max_green = 150
|
||||
var/min_green = 50
|
||||
|
||||
var/dorsal_color = "#FFFFFF"
|
||||
var/belly_color = "#FFFFFF"
|
||||
|
||||
var/image/dorsal_image
|
||||
var/image/belly_image
|
||||
|
||||
/mob/living/simple_mob/animal/passive/fish/icebass/Initialize()
|
||||
..()
|
||||
dorsal_color = rgb(rand(min_red,max_red), rand(min_green,max_green), rand(min_blue,max_blue))
|
||||
belly_color = rgb(rand(min_red,max_red), rand(min_green,max_green), rand(min_blue,max_blue))
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_mob/animal/passive/fish/icebass/update_icon()
|
||||
overlays.Cut()
|
||||
..()
|
||||
if(!dorsal_image)
|
||||
dorsal_image = image(icon, "[icon_state]_mask-body")
|
||||
if(!belly_image)
|
||||
belly_image = image(icon, "[icon_state]_mask-belly")
|
||||
|
||||
dorsal_image.color = dorsal_color
|
||||
belly_image.color = belly_color
|
||||
|
||||
overlays += dorsal_image
|
||||
overlays += belly_image
|
||||
|
||||
/datum/category_item/catalogue/fauna/rockfish
|
||||
name = "Sivian Fauna - Rock Puffer"
|
||||
desc = "Classification: S Tetraodontidae scopulix\
|
||||
<br><br>\
|
||||
A species strangely resembling the puffer-fish of Earth. These \
|
||||
creatures do not use toxic spines to protect themselves, instead \
|
||||
utilizing an incredibly durable exoskeleton that is molded by the \
|
||||
expansion of its ventral fluid bladders. \
|
||||
<br>\
|
||||
Rock Puffers or 'Rock-fish' are often host to smaller creatures which \
|
||||
maneuver their way into the gap between the fish's body and shell. \
|
||||
<br>\
|
||||
The species is also capable of pulling its vibrantly colored head into \
|
||||
the safer confines of its shell, the action being utilized in their \
|
||||
attempts to find a mate."
|
||||
value = CATALOGUER_REWARD_EASY
|
||||
|
||||
/mob/living/simple_mob/animal/passive/fish/rockfish
|
||||
name = "rock-fish"
|
||||
tt_desc = "S Tetraodontidae scopulix"
|
||||
icon_state = "rockfish-swim"
|
||||
icon_living = "rockfish-swim"
|
||||
icon_dead = "rockfish-dead"
|
||||
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/rockfish)
|
||||
|
||||
armor = list(
|
||||
"melee" = 90,
|
||||
"bullet" = 50,
|
||||
"laser" = -15,
|
||||
"energy" = 30,
|
||||
"bomb" = 30,
|
||||
"bio" = 100,
|
||||
"rad" = 100)
|
||||
|
||||
var/max_red = 255
|
||||
var/min_red = 50
|
||||
|
||||
var/max_blue = 255
|
||||
var/min_blue = 50
|
||||
|
||||
var/max_green = 255
|
||||
var/min_green = 50
|
||||
|
||||
var/head_color = "#FFFFFF"
|
||||
|
||||
var/image/head_image
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
|
||||
|
||||
/mob/living/simple_mob/animal/passive/fish/rockfish/Initialize()
|
||||
..()
|
||||
head_color = rgb(rand(min_red,max_red), rand(min_green,max_green), rand(min_blue,max_blue))
|
||||
|
||||
/mob/living/simple_mob/animal/passive/fish/rockfish/update_icon()
|
||||
overlays.Cut()
|
||||
..()
|
||||
if(!head_image)
|
||||
head_image = image(icon, "[icon_state]_mask")
|
||||
|
||||
head_image.color = head_color
|
||||
|
||||
overlays += head_image
|
||||
|
||||
/datum/category_item/catalogue/fauna/solarfish
|
||||
name = "Sivian Fauna - Solar Fin"
|
||||
desc = "Classification: S Exocoetidae solarin\
|
||||
<br><br>\
|
||||
An incredibly rare species of Sivian fish.\
|
||||
The solar-fin missile fish is a specialized omnivore capable of \
|
||||
catching insects or small birds venturing too close to the water's \
|
||||
surface. \
|
||||
<br>\
|
||||
The glimmering fins of the solar-fin are actually biofluorescent, \
|
||||
'charged' by the creature basking at the surface of the water, most \
|
||||
commonly by the edge of an ice-shelf, as a rapid means of cover. \
|
||||
<br>\
|
||||
These creatures are considered a protected species, and thus require an \
|
||||
up-to-date license to be hunted."
|
||||
value = CATALOGUER_REWARD_HARD
|
||||
|
||||
/mob/living/simple_mob/animal/passive/fish/solarfish
|
||||
name = "sun-fin"
|
||||
tt_desc = "S Exocoetidae solarin"
|
||||
icon_state = "solarfin-swim"
|
||||
icon_living = "solarfin-swim"
|
||||
icon_dead = "solarfin-dead"
|
||||
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/solarfish)
|
||||
|
||||
has_eye_glow = TRUE
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
|
||||
|
||||
/datum/category_item/catalogue/fauna/murkin
|
||||
name = "Sivian Fauna - Murkfish"
|
||||
desc = "Classification: S Perca lutux\
|
||||
<br><br>\
|
||||
A small, Sivian fish most known for its bland-ness.\
|
||||
<br>\
|
||||
The species is incredibly close in appearance to the Earth \
|
||||
perch, aside from its incredibly tall dorsal fin. The animals use \
|
||||
the fin to assess the wind direction while near the surface. \
|
||||
<br>\
|
||||
The murkfish earns its name from the fact its dense meat tastes like mud \
|
||||
thanks to a specially formed protein, most likely an adaptation to \
|
||||
protect the species from predation."
|
||||
value = CATALOGUER_REWARD_TRIVIAL
|
||||
|
||||
/mob/living/simple_mob/animal/passive/fish/murkin
|
||||
name = "murkin"
|
||||
tt_desc = "S Perca lutux"
|
||||
|
||||
icon_state = "murkin-swim"
|
||||
icon_living = "murkin-swim"
|
||||
icon_dead = "murkin-dead"
|
||||
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/murkin)
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish
|
||||
|
||||
@@ -92,6 +92,12 @@
|
||||
taste_description = "egg"
|
||||
color = "#FFFFAA"
|
||||
|
||||
/datum/reagent/nutriment/protein/murk
|
||||
name = "murkfin protein"
|
||||
id = "murk_protein"
|
||||
taste_description = "mud"
|
||||
color = "#664330"
|
||||
|
||||
/datum/reagent/nutriment/honey
|
||||
name = "Honey"
|
||||
id = "honey"
|
||||
|
||||
@@ -50,6 +50,25 @@
|
||||
color = "#003333"
|
||||
strength = 10
|
||||
|
||||
/datum/reagent/toxin/neurotoxic_protein
|
||||
name = "toxic protein"
|
||||
id = "neurotoxic_protein"
|
||||
description = "A weak neurotoxic chemical commonly found in Sivian fish meat."
|
||||
taste_description = "fish"
|
||||
reagent_state = LIQUID
|
||||
color = "#005555"
|
||||
strength = 8
|
||||
|
||||
/datum/reagent/toxin/neurotoxic_protein/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
..()
|
||||
if(alien != IS_DIONA)
|
||||
if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
|
||||
step(M, pick(cardinal))
|
||||
if(prob(5))
|
||||
M.emote(pick("twitch", "drool", "moan"))
|
||||
if(prob(20))
|
||||
M.adjustBrainLoss(0.1)
|
||||
|
||||
//R-UST port
|
||||
// Produced during deuterium synthesis. Super poisonous, SUPER flammable (doesn't need oxygen to burn).
|
||||
/datum/reagent/toxin/hydrophoron
|
||||
|
||||
@@ -2378,4 +2378,17 @@
|
||||
id = "biomass"
|
||||
result = "biomass"
|
||||
required_reagents = list("protein" = 1, "sugar" = 1, "phoron" = 1)
|
||||
<<<<<<< HEAD
|
||||
result_amount = 6 // Roughly 120u per phoron sheet //VOREStation Edit
|
||||
=======
|
||||
result_amount = 1 // Roughly 20u per phoron sheet
|
||||
|
||||
// Neutralization.
|
||||
|
||||
/datum/chemical_reaction/neutralize_neurotoxic_protein
|
||||
name = "Neutralize Toxic Proteins"
|
||||
id = "neurotoxic_protein_neutral"
|
||||
result = "protein"
|
||||
required_reagents = list("anti_toxin" = 1, "neurotoxic_protein" = 2)
|
||||
result_amount = 2
|
||||
>>>>>>> a033ac4... Merge pull request #6113 from Mechoid/FishingFtWorldServer
|
||||
|
||||
37
html/changelogs/Mechoid - Fishing.yml
Normal file
@@ -0,0 +1,37 @@
|
||||
################################
|
||||
# Example Changelog File
|
||||
#
|
||||
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||
#
|
||||
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||
# When it is, any changes listed below will disappear.
|
||||
#
|
||||
# Valid Prefixes:
|
||||
# bugfix
|
||||
# wip (For works in progress)
|
||||
# tweak
|
||||
# soundadd
|
||||
# sounddel
|
||||
# rscadd (general adding of nice things)
|
||||
# rscdel (general deleting of nice things)
|
||||
# imageadd
|
||||
# imagedel
|
||||
# maptweak
|
||||
# spellcheck (typo fixes)
|
||||
# experiment
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: Mechoid
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
delete-after: True
|
||||
|
||||
# Any changes you've made. See valid prefix list above.
|
||||
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
|
||||
# SCREW THIS UP AND IT WON'T WORK.
|
||||
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- rscadd: "Added fishing mechanics, and fishing gear."
|
||||
- tweak: "Cloth can make normal cloth things."
|
||||
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 44 KiB |
@@ -1793,6 +1793,9 @@
|
||||
#include "code\modules\examine\descriptions\weapons.dm"
|
||||
#include "code\modules\ext_scripts\irc.dm"
|
||||
#include "code\modules\ext_scripts\python.dm"
|
||||
#include "code\modules\fishing\fishing.dm"
|
||||
#include "code\modules\fishing\fishing_net.dm"
|
||||
#include "code\modules\fishing\fishing_rod.dm"
|
||||
#include "code\modules\flufftext\Dreaming.dm"
|
||||
#include "code\modules\flufftext\Hallucination.dm"
|
||||
#include "code\modules\flufftext\look_up.dm"
|
||||
|
||||