This commit is contained in:
Atermonera
2019-05-06 10:15:23 -08:00
committed by VirgoBot
parent 3ec181dace
commit 90ee680dd5
23 changed files with 837 additions and 3 deletions

View File

@@ -19,6 +19,7 @@
/turf/simulated/floor/water/Initialize()
. = ..()
update_icon()
handle_fish()
/turf/simulated/floor/water/update_icon()
..() // To get the edges.

View 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

View 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)

View 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

View File

@@ -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."

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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"

View File

@@ -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

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View 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."

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View File

@@ -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"