mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 11:43:31 +00:00
Fish tank
This commit is contained in:
@@ -54,6 +54,10 @@
|
||||
name = "jar"
|
||||
path =/obj/item/glass_jar
|
||||
|
||||
/datum/category_item/autolathe/general/fishtank
|
||||
name = "fish tank"
|
||||
path =/obj/item/glass_jar
|
||||
|
||||
/datum/category_item/autolathe/general/radio_headset
|
||||
name = "radio headset"
|
||||
path =/obj/item/device/radio/headset
|
||||
|
||||
@@ -558,11 +558,13 @@
|
||||
/obj/item/weapon/storage/box/wormcan = 4,
|
||||
/obj/item/weapon/storage/box/wormcan/sickly = 10,
|
||||
/obj/item/weapon/material/fishing_net = 2,
|
||||
/obj/item/glass_jar/fish = 4,
|
||||
/obj/item/stack/cable_coil/random = 6)
|
||||
prices = list(/obj/item/weapon/material/fishing_rod/modern/cheap = 50,
|
||||
/obj/item/weapon/storage/box/wormcan = 12,
|
||||
/obj/item/weapon/storage/box/wormcan/sickly = 6,
|
||||
/obj/item/weapon/material/fishing_net = 40,
|
||||
/obj/item/glass_jar/fish = 10,
|
||||
/obj/item/stack/cable_coil/random = 4)
|
||||
premium = list(/obj/item/weapon/storage/box/wormcan/deluxe = 1)
|
||||
contraband = list(/obj/item/weapon/storage/box/wormcan/deluxe = 1)
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
|
||||
#define JAR_NOTHING 0
|
||||
#define JAR_MONEY 1
|
||||
#define JAR_ANIMAL 2
|
||||
#define JAR_SPIDER 3
|
||||
|
||||
/obj/item/glass_jar
|
||||
name = "glass jar"
|
||||
desc = "A small empty jar."
|
||||
@@ -27,7 +33,7 @@
|
||||
var/mob/L = A
|
||||
user.visible_message("<span class='notice'>[user] scoops [L] into \the [src].</span>", "<span class='notice'>You scoop [L] into \the [src].</span>")
|
||||
L.loc = src
|
||||
contains = 2
|
||||
contains = JAR_ANIMAL
|
||||
update_icon()
|
||||
return
|
||||
else if(istype(A, /obj/effect/spider/spiderling))
|
||||
@@ -35,40 +41,40 @@
|
||||
user.visible_message("<span class='notice'>[user] scoops [S] into \the [src].</span>", "<span class='notice'>You scoop [S] into \the [src].</span>")
|
||||
S.loc = src
|
||||
STOP_PROCESSING(SSobj, S) // No growing inside jars
|
||||
contains = 3
|
||||
contains = JAR_SPIDER
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/glass_jar/attack_self(var/mob/user)
|
||||
switch(contains)
|
||||
if(1)
|
||||
if(JAR_MONEY)
|
||||
for(var/obj/O in src)
|
||||
O.loc = user.loc
|
||||
to_chat(user, "<span class='notice'>You take money out of \the [src].</span>")
|
||||
contains = 0
|
||||
contains = JAR_NOTHING
|
||||
update_icon()
|
||||
return
|
||||
if(2)
|
||||
if(JAR_ANIMAL)
|
||||
for(var/mob/M in src)
|
||||
M.loc = user.loc
|
||||
user.visible_message("<span class='notice'>[user] releases [M] from \the [src].</span>", "<span class='notice'>You release [M] from \the [src].</span>")
|
||||
contains = 0
|
||||
contains = JAR_NOTHING
|
||||
update_icon()
|
||||
return
|
||||
if(3)
|
||||
if(JAR_SPIDER)
|
||||
for(var/obj/effect/spider/spiderling/S in src)
|
||||
S.loc = user.loc
|
||||
user.visible_message("<span class='notice'>[user] releases [S] from \the [src].</span>", "<span class='notice'>You release [S] from \the [src].</span>")
|
||||
START_PROCESSING(SSobj, S) // They can grow after being let out though
|
||||
contains = 0
|
||||
contains = JAR_NOTHING
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/glass_jar/attackby(var/obj/item/W, var/mob/user)
|
||||
if(istype(W, /obj/item/weapon/spacecash))
|
||||
if(contains == 0)
|
||||
contains = 1
|
||||
if(contains != 1)
|
||||
if(contains == JAR_NOTHING)
|
||||
contains = JAR_MONEY
|
||||
if(contains != JAR_MONEY)
|
||||
return
|
||||
var/obj/item/weapon/spacecash/S = W
|
||||
user.visible_message("<span class='notice'>[user] puts [S.worth] [S.worth > 1 ? "thalers" : "thaler"] into \the [src].</span>")
|
||||
@@ -80,10 +86,10 @@
|
||||
underlays.Cut()
|
||||
overlays.Cut()
|
||||
switch(contains)
|
||||
if(0)
|
||||
if(JAR_NOTHING)
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
if(1)
|
||||
if(JAR_MONEY)
|
||||
name = "tip jar"
|
||||
desc = "A small jar with money inside."
|
||||
for(var/obj/item/weapon/spacecash/S in src)
|
||||
@@ -92,7 +98,7 @@
|
||||
money.pixel_y = rand(-6, 6)
|
||||
money.transform *= 0.6
|
||||
underlays += money
|
||||
if(2)
|
||||
if(JAR_ANIMAL)
|
||||
for(var/mob/M in src)
|
||||
var/image/victim = image(M.icon, M.icon_state)
|
||||
victim.pixel_y = 6
|
||||
@@ -105,10 +111,109 @@
|
||||
underlays += victim
|
||||
name = "glass jar with [M]"
|
||||
desc = "A small jar with [M] inside."
|
||||
if(3)
|
||||
if(JAR_SPIDER)
|
||||
for(var/obj/effect/spider/spiderling/S in src)
|
||||
var/image/victim = image(S.icon, S.icon_state)
|
||||
underlays += victim
|
||||
name = "glass jar with [S]"
|
||||
desc = "A small jar with [S] inside."
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/glass_jar/fish
|
||||
name = "glass tank"
|
||||
desc = "A large glass tank."
|
||||
|
||||
var/filled = FALSE
|
||||
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
accept_mobs = list(/mob/living/simple_mob/animal/passive/lizard, /mob/living/simple_mob/animal/passive/mouse, /mob/living/simple_mob/animal/sif/leech, /mob/living/simple_mob/animal/sif/frostfly, /mob/living/simple_mob/animal/sif/glitterfly, /mob/living/simple_mob/animal/passive/fish)
|
||||
|
||||
/obj/item/glass_jar/fish/plastic
|
||||
name = "plastic tank"
|
||||
desc = "A large plastic tank."
|
||||
matter = list("plastic" = 4000)
|
||||
|
||||
/obj/item/glass_jar/fish/update_icon() // Also updates name and desc
|
||||
underlays.Cut()
|
||||
overlays.Cut()
|
||||
|
||||
if(filled)
|
||||
underlays += image(icon, "[icon_state]_water")
|
||||
|
||||
switch(contains)
|
||||
if(JAR_NOTHING)
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
if(JAR_MONEY)
|
||||
name = "tip tank"
|
||||
desc = "A large [name] with money inside."
|
||||
for(var/obj/item/weapon/spacecash/S in src)
|
||||
var/image/money = image(S.icon, S.icon_state)
|
||||
money.pixel_x = rand(-2, 3)
|
||||
money.pixel_y = rand(-6, 6)
|
||||
money.transform *= 0.6
|
||||
underlays += money
|
||||
if(JAR_ANIMAL)
|
||||
for(var/mob/M in src)
|
||||
var/image/victim = image(M.icon, M.icon_state)
|
||||
var/initial_x_scale = M.icon_scale_x
|
||||
var/initial_y_scale = M.icon_scale_y
|
||||
M.adjust_scale(0.7)
|
||||
victim.appearance = M.appearance
|
||||
M.adjust_scale(initial_x_scale, initial_y_scale)
|
||||
victim.pixel_y = 4
|
||||
underlays += victim
|
||||
name = "[name] with [M]"
|
||||
desc = "A large [name] with [M] inside."
|
||||
if(JAR_SPIDER)
|
||||
for(var/obj/effect/spider/spiderling/S in src)
|
||||
var/image/victim = image(S.icon, S.icon_state)
|
||||
underlays += victim
|
||||
name = "[name] with [S]"
|
||||
desc = "A large tank with [S] inside."
|
||||
|
||||
if(filled)
|
||||
desc = "[desc] It contains water."
|
||||
|
||||
return
|
||||
|
||||
/obj/item/glass_jar/fish/afterattack(var/atom/A, var/mob/user, var/proximity)
|
||||
if(!filled)
|
||||
if(istype(A, /obj/structure/sink) || istype(A, /turf/simulated/floor/water))
|
||||
if(contains && user.a_intent == "help")
|
||||
to_chat(user, "<span class='warning'>That probably isn't the best idea.</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You fill \the [src] with water!</span>")
|
||||
filled = TRUE
|
||||
update_icon()
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/glass_jar/fish/attack_self(var/mob/user)
|
||||
if(filled)
|
||||
if(contains == JAR_ANIMAL)
|
||||
if(user.a_intent == "help")
|
||||
to_chat(user, "<span class='notice'>Maybe you shouldn't empty the water...</span>")
|
||||
return
|
||||
|
||||
else
|
||||
filled = FALSE
|
||||
user.visible_message("<span class='warning'>[user] dumps out \the [src]'s water!</span>")
|
||||
update_icon()
|
||||
return
|
||||
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] dumps \the [src]'s water.</span>")
|
||||
filled = FALSE
|
||||
update_icon()
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
#undef JAR_NOTHING
|
||||
#undef JAR_MONEY
|
||||
#undef JAR_ANIMAL
|
||||
#undef JAR_SPIDER
|
||||
|
||||
@@ -138,6 +138,7 @@
|
||||
recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1, pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("plastic net", /obj/item/weapon/material/fishing_net, 25, time = 1 MINUTE, pass_stack_color = TRUE)
|
||||
recipes += new/datum/stack_recipe("plastic fishtank", /obj/item/glass_jar/fish/plastic, 2, time = 30 SECONDS)
|
||||
|
||||
/material/wood/generate_recipes()
|
||||
..()
|
||||
|
||||
@@ -31,6 +31,17 @@
|
||||
/turf/simulated/floor/water
|
||||
)
|
||||
|
||||
var/randomize_location = TRUE
|
||||
|
||||
/mob/living/simple_mob/animal/passive/fish/Initialize()
|
||||
..()
|
||||
|
||||
if(!default_pixel_x && randomize_location)
|
||||
default_pixel_x = rand(-12, 12)
|
||||
|
||||
if(!default_pixel_y && randomize_location)
|
||||
default_pixel_y = rand(-6, 10)
|
||||
|
||||
// Makes the AI unable to willingly go on land.
|
||||
/mob/living/simple_mob/animal/passive/fish/IMove(newloc)
|
||||
if(is_type_in_list(newloc, suitable_turf_types))
|
||||
@@ -39,6 +50,11 @@
|
||||
|
||||
// Take damage if we are not in water
|
||||
/mob/living/simple_mob/animal/passive/fish/handle_breathing()
|
||||
if(istype(loc, /obj/item/glass_jar/fish))
|
||||
var/obj/item/glass_jar/fish/F = loc
|
||||
if(F.filled)
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(T && !is_type_in_list(T, suitable_turf_types))
|
||||
if(prob(50))
|
||||
@@ -178,8 +194,8 @@
|
||||
dorsal_image.color = dorsal_color
|
||||
belly_image.color = belly_color
|
||||
|
||||
overlays += dorsal_image
|
||||
overlays += belly_image
|
||||
add_overlay(dorsal_image)
|
||||
add_overlay(belly_image)
|
||||
|
||||
/datum/category_item/catalogue/fauna/rockfish
|
||||
name = "Sivian Fauna - Rock Puffer"
|
||||
@@ -234,6 +250,7 @@
|
||||
/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))
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_mob/animal/passive/fish/rockfish/update_icon()
|
||||
overlays.Cut()
|
||||
@@ -245,7 +262,7 @@
|
||||
|
||||
head_image.color = head_color
|
||||
|
||||
overlays += head_image
|
||||
add_overlay(head_image)
|
||||
|
||||
/datum/category_item/catalogue/fauna/solarfish
|
||||
name = "Sivian Fauna - Solar Fin"
|
||||
|
||||
Reference in New Issue
Block a user