mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-27 06:00:23 +01:00
Exploration Expansion 1: Or, How I Learned To Love The Tree
This commit is contained in:
@@ -97,6 +97,23 @@
|
||||
name = "seismic charge"
|
||||
desc = "Used to dig holes in specific areas without too much extra hole."
|
||||
|
||||
blast_heavy = 3
|
||||
blast_light = 5
|
||||
blast_flash = 8
|
||||
blast_heavy = 2
|
||||
blast_light = 4
|
||||
blast_flash = 7
|
||||
|
||||
/obj/item/weapon/plastique/seismic/attackby(var/obj/item/I, var/mob/user)
|
||||
. = ..()
|
||||
if(open_panel)
|
||||
if(istype(I, /obj/item/weapon/stock_parts/micro_laser))
|
||||
var/obj/item/weapon/stock_parts/SP = I
|
||||
var/new_blast_power = max(1, round(SP.rating / 2) + 1)
|
||||
if(new_blast_power > blast_heavy)
|
||||
to_chat(user, "<span class='notice'>You install \the [I] into \the [src].</span>")
|
||||
user.drop_from_inventory(I)
|
||||
qdel(I)
|
||||
blast_heavy = new_blast_power
|
||||
blast_light = blast_heavy + round(new_blast_power * 0.5)
|
||||
blast_flash = blast_light + round(new_blast_power * 0.75)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The [I] is not any better than the component already installed into this charge!</span>")
|
||||
return .
|
||||
@@ -31,6 +31,7 @@
|
||||
var/dorm = 0 // determines if this ID has claimed a dorm already
|
||||
|
||||
var/mining_points = 0 // For redeeming at mining equipment vendors
|
||||
var/survey_points = 0 // For redeeming at explorer equipment vendors.
|
||||
|
||||
/obj/item/weapon/card/id/examine(mob/user)
|
||||
set src in oview(1)
|
||||
|
||||
@@ -12,6 +12,12 @@
|
||||
var/lpower = 2
|
||||
var/lcolor = "#0099FF"
|
||||
|
||||
// If it uses energy.
|
||||
var/use_cell = FALSE
|
||||
var/hitcost = 120
|
||||
var/obj/item/weapon/cell/bcell = null
|
||||
var/cell_type = /obj/item/weapon/cell/device
|
||||
|
||||
/obj/item/weapon/melee/energy/proc/activate(mob/living/user)
|
||||
if(active)
|
||||
return
|
||||
@@ -38,7 +44,31 @@
|
||||
w_class = initial(w_class)
|
||||
set_light(0,0)
|
||||
|
||||
/obj/item/weapon/melee/energy/proc/use_charge(var/cost)
|
||||
if(active)
|
||||
if(bcell)
|
||||
if(bcell.checked_use(cost))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
return null
|
||||
|
||||
/obj/item/weapon/melee/energy/examine(mob/user)
|
||||
if(!..(user, 1))
|
||||
return
|
||||
|
||||
if(use_cell)
|
||||
if(bcell)
|
||||
to_chat(user, "<span class='notice'>The blade is [round(bcell.percent())]% charged.</span>")
|
||||
if(!bcell)
|
||||
to_chat(user, "<span class='warning'>The blade does not have a power source installed.</span>")
|
||||
|
||||
/obj/item/weapon/melee/energy/attack_self(mob/living/user as mob)
|
||||
if(use_cell)
|
||||
if((!bcell || bcell.charge < hitcost) && !active)
|
||||
to_chat(user, "<span class='notice'>\The [src] does not seem to have power.</span>")
|
||||
return
|
||||
|
||||
var/datum/gender/TU = gender_datums[user.get_visible_gender()]
|
||||
if (active)
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
@@ -64,6 +94,37 @@
|
||||
"<span class='danger'>\The [user] is falling on \the [src]! It looks like [TU.he] [TU.is] trying to commit suicide.</span>"))
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/obj/item/weapon/melee/energy/attack(mob/M, mob/user)
|
||||
if(active && use_cell)
|
||||
if(!use_charge(hitcost))
|
||||
deactivate(user)
|
||||
visible_message("<span class='notice'>\The [src]'s blade flickers, before deactivating.</span>")
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/melee/energy/attackby(obj/item/weapon/W, mob/user)
|
||||
if(use_cell)
|
||||
if(istype(W, cell_type))
|
||||
if(!bcell)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
bcell = W
|
||||
to_chat(user, "<span class='notice'>You install a cell in [src].</span>")
|
||||
update_icon()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] already has a cell.</span>")
|
||||
else if(W.is_screwdriver() && bcell)
|
||||
bcell.update_icon()
|
||||
bcell.forceMove(get_turf(loc))
|
||||
bcell = null
|
||||
to_chat(user, "<span class='notice'>You remove the cell from \the [src].</span>")
|
||||
deactivate()
|
||||
update_icon()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/melee/energy/get_cell()
|
||||
return bcell
|
||||
|
||||
/*
|
||||
* Energy Axe
|
||||
*/
|
||||
@@ -90,11 +151,13 @@
|
||||
|
||||
/obj/item/weapon/melee/energy/axe/activate(mob/living/user)
|
||||
..()
|
||||
damtype = SEARING
|
||||
icon_state = "axe1"
|
||||
to_chat(user, "<span class='notice'>\The [src] is now energised.</span>")
|
||||
|
||||
/obj/item/weapon/melee/energy/axe/deactivate(mob/living/user)
|
||||
..()
|
||||
damtype = BRUTE
|
||||
icon_state = initial(icon_state)
|
||||
to_chat(user, "<span class='notice'>\The [src] is de-energised. It's just a regular axe now.</span>")
|
||||
|
||||
@@ -103,6 +166,20 @@
|
||||
visible_message("<span class='warning'>\The [user] swings \the [src] towards [TU.his] head! It looks like [TU.he] [TU.is] trying to commit suicide.</span>")
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/obj/item/weapon/melee/energy/axe/charge
|
||||
name = "charge axe"
|
||||
desc = "An energised axe."
|
||||
active_force = 35
|
||||
active_throwforce = 20
|
||||
force = 15
|
||||
|
||||
use_cell = TRUE
|
||||
hitcost = 120
|
||||
|
||||
/obj/item/weapon/melee/energy/axe/charge/loaded/New()
|
||||
..()
|
||||
bcell = new/obj/item/weapon/cell/device/weapon(src)
|
||||
|
||||
/*
|
||||
* Energy Sword
|
||||
*/
|
||||
@@ -274,64 +351,7 @@
|
||||
armor_penetration = 25
|
||||
projectile_parry_chance = 40
|
||||
|
||||
var/hitcost = 75
|
||||
var/obj/item/weapon/cell/bcell = null
|
||||
var/cell_type = /obj/item/weapon/cell/device
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/charge/proc/use_charge(var/cost)
|
||||
if(active)
|
||||
if(bcell)
|
||||
if(bcell.checked_use(cost))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
return null
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/charge/examine(mob/user)
|
||||
if(!..(user, 1))
|
||||
return
|
||||
|
||||
if(bcell)
|
||||
to_chat(user, "<span class='notice'>The blade is [round(bcell.percent())]% charged.</span>")
|
||||
if(!bcell)
|
||||
to_chat(user, "<span class='warning'>The blade does not have a power source installed.</span>")
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/charge/attack_self(mob/user as mob)
|
||||
if((!bcell || bcell.charge < hitcost) && !active)
|
||||
to_chat(user, "<span class='notice'>\The [src] does not seem to have power.</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/charge/attack(mob/M, mob/user)
|
||||
if(active)
|
||||
if(!use_charge(hitcost))
|
||||
deactivate(user)
|
||||
visible_message("<span class='notice'>\The [src]'s blade flickers, before retracting.</span>")
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/charge/attackby(obj/item/weapon/W, mob/user)
|
||||
if(istype(W, cell_type))
|
||||
if(!bcell)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
bcell = W
|
||||
to_chat(user, "<span class='notice'>You install a cell in [src].</span>")
|
||||
update_icon()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] already has a cell.</span>")
|
||||
else if(W.is_screwdriver() && bcell)
|
||||
bcell.update_icon()
|
||||
bcell.forceMove(get_turf(loc))
|
||||
bcell = null
|
||||
to_chat(user, "<span class='notice'>You remove the cell from \the [src].</span>")
|
||||
deactivate()
|
||||
update_icon()
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/charge/get_cell()
|
||||
return bcell
|
||||
hitcost = 75
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/charge/loaded/New()
|
||||
..()
|
||||
|
||||
@@ -504,6 +504,14 @@
|
||||
mounted_pack.return_nozzle()
|
||||
to_chat(user, "<span class='notice'>\The [src] retracts to its fueltank.</span>")
|
||||
|
||||
/obj/item/weapon/weldingtool/tubefed/survival
|
||||
name = "tube-fed emergency welding tool"
|
||||
desc = "A bulky, cooler-burning welding tool that draws from a worn welding tank."
|
||||
icon_state = "tubewelder"
|
||||
max_fuel = 5
|
||||
toolspeed = 1.75
|
||||
eye_safety_modifier = 2
|
||||
|
||||
/*
|
||||
* Electric/Arc Welder
|
||||
*/
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
origin_tech = list(TECH_MATERIAL = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 18750)
|
||||
var/deployed = 0
|
||||
var/camo_net = FALSE
|
||||
var/stun_length = 0.25 SECONDS
|
||||
|
||||
/obj/item/weapon/beartrap/suicide_act(mob/user)
|
||||
var/datum/gender/T = gender_datums[user.get_visible_gender()]
|
||||
@@ -98,6 +100,7 @@
|
||||
set_dir(L.dir)
|
||||
can_buckle = 1
|
||||
buckle_mob(L)
|
||||
L.Stun(stun_length)
|
||||
L << "<span class='danger'>The steel jaws of \the [src] bite into you, trapping you in place!</span>"
|
||||
deployed = 0
|
||||
can_buckle = initial(can_buckle)
|
||||
@@ -122,6 +125,21 @@
|
||||
..()
|
||||
|
||||
if(!deployed)
|
||||
if(camo_net)
|
||||
alpha = 255
|
||||
|
||||
icon_state = "beartrap0"
|
||||
else
|
||||
if(camo_net)
|
||||
alpha = 50
|
||||
|
||||
icon_state = "beartrap1"
|
||||
|
||||
/obj/item/weapon/beartrap/hunting
|
||||
name = "hunting trap"
|
||||
desc = "A mechanically activated leg trap. High-tech and reliable. Looks like it could really hurt if you set it off."
|
||||
stun_length = 1 SECOND
|
||||
camo_net = TRUE
|
||||
color = "#C9DCE1"
|
||||
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 3, TECH_MAGNET = 4, TECH_PHORON = 2, TECH_ARCANE = 1)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
w_class = ITEMSIZE_LARGE
|
||||
var/max_fuel = 350
|
||||
var/obj/item/weapon/nozzle = null //Attached welder, or other spray device.
|
||||
var/nozzle_type = /obj/item/weapon/weldingtool/tubefed
|
||||
var/nozzle_attached = 0
|
||||
|
||||
/obj/item/weapon/weldpack/Initialize()
|
||||
@@ -15,7 +16,7 @@
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
R.add_reagent("fuel", max_fuel)
|
||||
nozzle = new/obj/item/weapon/weldingtool/tubefed(src)
|
||||
nozzle = new nozzle_type(src)
|
||||
nozzle_attached = 1
|
||||
|
||||
/obj/item/weapon/weldpack/Destroy()
|
||||
@@ -145,3 +146,14 @@
|
||||
..(user)
|
||||
user << text("\icon[] [] units of fuel left!", src, src.reagents.total_volume)
|
||||
return
|
||||
|
||||
/obj/item/weapon/weldpack/survival
|
||||
name = "emergency welding kit"
|
||||
desc = "A heavy-duty, portable welding fluid carrier."
|
||||
slot_flags = SLOT_BACK
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "welderpack-e"
|
||||
item_state = "welderpack"
|
||||
w_class = ITEMSIZE_LARGE
|
||||
max_fuel = 100
|
||||
nozzle_type = /obj/item/weapon/weldingtool/tubefed/survival
|
||||
|
||||
@@ -65,6 +65,21 @@
|
||||
prob(10);/obj/effect/mine/stun,
|
||||
prob(10);/obj/effect/mine/incendiary,)
|
||||
|
||||
/obj/random/humanoidremains
|
||||
name = "Random Humanoid Remains"
|
||||
desc = "This is a random pile of remains."
|
||||
spawn_nothing_percentage = 15
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "remains"
|
||||
|
||||
/obj/random/humanoidremains/item_to_spawn()
|
||||
return pick(prob(30);/obj/effect/decal/remains/human,
|
||||
prob(25);/obj/effect/decal/remains/ribcage,
|
||||
prob(25);/obj/effect/decal/remains/tajaran,
|
||||
prob(10);/obj/effect/decal/remains/unathi,
|
||||
prob(10);/obj/effect/decal/remains/posi
|
||||
)
|
||||
|
||||
/obj/random_multi/single_item/captains_spare_id
|
||||
name = "Multi Point - Captain's Spare"
|
||||
id = "Captain's spare id"
|
||||
@@ -396,5 +411,54 @@
|
||||
/obj/item/clothing/mask/luchador/rudos,
|
||||
/obj/item/clothing/mask/luchador/tecnicos,
|
||||
/obj/structure/closet/crate
|
||||
),
|
||||
prob(1);list(
|
||||
/obj/machinery/artifact,
|
||||
/obj/structure/anomaly_container
|
||||
),
|
||||
prob(1);list(
|
||||
/obj/random/curseditem,
|
||||
/obj/random/humanoidremains,
|
||||
/obj/structure/closet/crate
|
||||
)
|
||||
)
|
||||
|
||||
/*
|
||||
* Turf swappers.
|
||||
*/
|
||||
|
||||
/obj/random/turf
|
||||
name = "random Sif turf"
|
||||
desc = "This is a random Sif turf."
|
||||
|
||||
spawn_nothing_percentage = 20
|
||||
|
||||
var/override_outdoors = FALSE // Do we override our chosen turf's outdoors?
|
||||
var/turf_outdoors = TRUE // Will our turf be outdoors?
|
||||
|
||||
/obj/random/turf/spawn_item()
|
||||
var/build_path = item_to_spawn()
|
||||
|
||||
var/turf/T1 = get_turf(src)
|
||||
T1.ChangeTurf(build_path, 1, 1, FALSE)
|
||||
|
||||
if(override_outdoors)
|
||||
T1.outdoors = turf_outdoors
|
||||
|
||||
/obj/random/turf/item_to_spawn()
|
||||
return pick(prob(25);/turf/simulated/floor/outdoors/grass/sif,
|
||||
prob(25);/turf/simulated/floor/outdoors/dirt,
|
||||
prob(25);/turf/simulated/floor/outdoors/grass/sif/forest,
|
||||
prob(25);/turf/simulated/floor/outdoors/rocks)
|
||||
|
||||
/obj/random/turf/lava
|
||||
name = "random Lava spawn"
|
||||
desc = "This is a random lava spawn."
|
||||
|
||||
override_outdoors = TRUE
|
||||
turf_outdoors = FALSE
|
||||
|
||||
/obj/random/turf/lava/item_to_spawn()
|
||||
return pick(prob(5);/turf/simulated/floor/lava,
|
||||
prob(3);/turf/simulated/floor/outdoors/rocks/caves,
|
||||
prob(1);/turf/simulated/mineral)
|
||||
|
||||
@@ -529,3 +529,14 @@
|
||||
|
||||
/obj/random/janusmodule/item_to_spawn()
|
||||
return pick(subtypesof(/obj/item/weapon/circuitboard/mecha/imperion))
|
||||
|
||||
/obj/random/curseditem
|
||||
name = "random cursed item"
|
||||
desc = "For use in dungeons."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "red"
|
||||
|
||||
/obj/random/curseditem/item_to_spawn()
|
||||
var/possible_object_paths = list(/obj/item/weapon/paper/carbon/cursedform)
|
||||
possible_object_paths |= subtypesof(/obj/item/clothing/head/psy_crown)
|
||||
return pick(possible_object_paths)
|
||||
|
||||
@@ -1,14 +1,82 @@
|
||||
|
||||
/obj/structure/flora
|
||||
name = "flora"
|
||||
desc = "A perfectly generic plant."
|
||||
|
||||
anchored = TRUE // Usually, plants don't move. Usually.
|
||||
plane = DECAL_PLANE
|
||||
layer = BELOW_MOB_LAYER
|
||||
|
||||
var/randomize_size = FALSE
|
||||
var/max_x_scale = 1.25
|
||||
var/max_y_scale = 1.25
|
||||
var/min_x_scale = 0.9
|
||||
var/min_y_scale = 0.9
|
||||
|
||||
var/harvest_tool = null // The type of item used to harvest the plant.
|
||||
var/harvest_count = 0
|
||||
|
||||
var/randomize_harvest_count = TRUE
|
||||
var/max_harvests = 0
|
||||
var/min_harvests = -1
|
||||
var/list/harvest_loot = null // Should be an associative list for things to spawn, and their weights. An example would be a branch from a tree.
|
||||
|
||||
/obj/structure/flora/Initialize()
|
||||
..()
|
||||
|
||||
if(randomize_size)
|
||||
icon_scale_x = rand(min_x_scale * 100, max_x_scale * 100) / 100
|
||||
icon_scale_y = rand(min_y_scale * 100, max_y_scale * 100) / 100
|
||||
|
||||
if(prob(50))
|
||||
icon_scale_x *= -1
|
||||
update_transform()
|
||||
|
||||
if(randomize_harvest_count)
|
||||
max_harvests = max(0, rand(min_harvests, max_harvests)) // Incase you want to weight it more toward 'not harvestable', set min_harvests to a negative value.
|
||||
|
||||
/obj/structure/flora/examine(mob/user)
|
||||
. = ..(user)
|
||||
if(harvest_count < max_harvests)
|
||||
to_chat(user, "<span class='notice'>\The [src] seems to have something hanging from it.</span>")
|
||||
|
||||
/obj/structure/flora/attackby(var/obj/item/weapon/W, var/mob/living/user)
|
||||
if(can_harvest(W))
|
||||
var/harvest_spawn = pickweight(harvest_loot)
|
||||
var/atom/movable/AM = spawn_harvest(harvest_spawn, user)
|
||||
|
||||
if(!AM)
|
||||
to_chat(user, "<span class='notice'>You fail to harvest anything from \the [src].</span>")
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You harvest \the [AM] from \the [src].</span>")
|
||||
return
|
||||
|
||||
..(W, user)
|
||||
|
||||
/obj/structure/flora/proc/can_harvest(var/obj/item/I)
|
||||
. = FALSE
|
||||
if(harvest_tool && istype(I, harvest_tool) && harvest_loot && harvest_loot.len && harvest_count < max_harvests)
|
||||
. = TRUE
|
||||
return .
|
||||
|
||||
/obj/structure/flora/proc/spawn_harvest(var/path = null, var/mob/user = null)
|
||||
if(!ispath(path))
|
||||
return 0
|
||||
var/turf/Target = get_turf(src)
|
||||
if(user)
|
||||
Target = get_turf(user)
|
||||
|
||||
var/atom/movable/AM = new path(Target)
|
||||
|
||||
harvest_count++
|
||||
return AM
|
||||
|
||||
//bushes
|
||||
/obj/structure/flora/bush
|
||||
name = "bush"
|
||||
icon = 'icons/obj/flora/snowflora.dmi'
|
||||
icon_state = "snowbush1"
|
||||
anchored = 1
|
||||
|
||||
/obj/structure/flora/bush/New()
|
||||
..()
|
||||
@@ -20,6 +88,7 @@
|
||||
icon = 'icons/obj/plants.dmi'
|
||||
icon_state = "plant-26"
|
||||
|
||||
anchored = FALSE
|
||||
|
||||
//newbushes
|
||||
|
||||
@@ -27,7 +96,6 @@
|
||||
name = "bush"
|
||||
icon = 'icons/obj/flora/ausflora.dmi'
|
||||
icon_state = "firstbush_1"
|
||||
anchored = 1
|
||||
|
||||
/obj/structure/flora/ausbushes/New()
|
||||
..()
|
||||
@@ -144,6 +212,7 @@
|
||||
icon_state = "hangskele"
|
||||
desc = "It's an anatomical model of a human skeletal system made of plaster."
|
||||
|
||||
plane = OBJ_PLANE
|
||||
|
||||
//potted plants credit: Flashkirby
|
||||
/obj/structure/flora/pottedplant
|
||||
@@ -152,6 +221,8 @@
|
||||
icon = 'icons/obj/plants.dmi'
|
||||
icon_state = "plant-01"
|
||||
|
||||
plane = OBJ_PLANE
|
||||
|
||||
/obj/structure/flora/pottedplant/large
|
||||
name = "large potted plant"
|
||||
desc = "This is a large plant. Three branches support pairs of waxy leaves."
|
||||
@@ -348,4 +419,22 @@
|
||||
|
||||
/obj/structure/flora/sif/eyes/Initialize()
|
||||
icon_state = "[initial(icon_state)][rand(1,3)]"
|
||||
. = ..()
|
||||
. = ..()
|
||||
|
||||
/datum/category_item/catalogue/flora/mosstendrils
|
||||
name = "Sivian Flora - Moss Stalks"
|
||||
desc = "A plant native to Sif. The plant is most closely related to the common, dense moss found covering Sif's terrain. \
|
||||
It has evolved a method of camouflage utilizing white hairs on its dorsal sides to make it appear as a small mound of snow from \
|
||||
above. It has no known use, though it is a common furnishing in contemporary homes."
|
||||
value = CATALOGUER_REWARD_TRIVIAL
|
||||
|
||||
/obj/structure/flora/sif/tendrils
|
||||
name = "stocky tendrils"
|
||||
desc = "A 'plant' made up of hardened moss. It has tiny hairs that bunch together to look like snow."
|
||||
icon_state = "grass"
|
||||
randomize_size = TRUE
|
||||
catalogue_data = list(/datum/category_item/catalogue/flora/mosstendrils)
|
||||
|
||||
/obj/structure/flora/sif/tendrils/Initialize()
|
||||
icon_state = "[initial(icon_state)][rand(1,3)]"
|
||||
. = ..()
|
||||
|
||||
@@ -14,19 +14,10 @@
|
||||
var/product_amount = 10 // How much of a stack you get, if the above is defined.
|
||||
var/is_stump = FALSE // If true, suspends damage tracking and most other effects.
|
||||
var/indestructable = FALSE // If true, the tree cannot die.
|
||||
var/randomize_size = FALSE // If true, the tree will choose a random scale in the X and Y directions to stretch.
|
||||
|
||||
/obj/structure/flora/tree/Initialize()
|
||||
icon_state = choose_icon_state()
|
||||
|
||||
if(randomize_size)
|
||||
icon_scale_x = rand(90, 125) / 100
|
||||
icon_scale_y = rand(90, 125) / 100
|
||||
|
||||
if(prob(50))
|
||||
icon_scale_x *= -1
|
||||
update_transform()
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/structure/flora/tree/update_transform()
|
||||
@@ -39,7 +30,17 @@
|
||||
/obj/structure/flora/tree/proc/choose_icon_state()
|
||||
return icon_state
|
||||
|
||||
/obj/structure/flora/tree/can_harvest(var/obj/item/I)
|
||||
. = FALSE
|
||||
if(!is_stump && harvest_tool && istype(I, harvest_tool) && harvest_loot && harvest_loot.len && harvest_count < max_harvests)
|
||||
. = TRUE
|
||||
return .
|
||||
|
||||
/obj/structure/flora/tree/attackby(var/obj/item/weapon/W, var/mob/living/user)
|
||||
if(can_harvest(W))
|
||||
..(W, user)
|
||||
return
|
||||
|
||||
if(!istype(W))
|
||||
return ..()
|
||||
|
||||
@@ -267,6 +268,14 @@
|
||||
product = /obj/item/stack/material/log/sif
|
||||
catalogue_data = list(/datum/category_item/catalogue/flora/sif_tree)
|
||||
randomize_size = TRUE
|
||||
|
||||
harvest_tool = /obj/item/weapon/material/knife
|
||||
max_harvests = 2
|
||||
min_harvests = -4
|
||||
harvest_loot = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/siffruit = 5
|
||||
)
|
||||
|
||||
var/light_shift = 0
|
||||
|
||||
/obj/structure/flora/tree/sif/choose_icon_state()
|
||||
|
||||
@@ -105,4 +105,28 @@
|
||||
**16/FEB/2562**<BR>
|
||||
<B>Something chitters.</B><BR>
|
||||
<B>End of transcript.</B>
|
||||
"}
|
||||
"}
|
||||
|
||||
/obj/structure/prop/blackbox/xenofrigate
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/blackbox/xenofrigate)
|
||||
|
||||
/datum/category_item/catalogue/information/blackbox/xenofrigate
|
||||
name = "Black Box Data - MBT-540"
|
||||
desc = {"
|
||||
<BR>
|
||||
<B>Begin Log</B>
|
||||
<B>@$&@$& Human ##:##:##:</B> Attention unidentified vessel, state your designation and intent.<BR>
|
||||
<B>!#@$&&^ Human ##:##:##:</B> Commander I don't think they're going to stop.<BR>
|
||||
<B>@$&@$& Human ##:##:##:</B> Unidentified vessel, you have until the count of three before we engage weapon-<BR>
|
||||
<B>!#@$&&^ Human ##:##:##:</B> Commander! Think about what you're-<BR>
|
||||
<B>A repeating clicking, before silence.</B><BR>
|
||||
<B>End of first log.</B><BR>
|
||||
**<BR>
|
||||
<B>Begin Log</B><BR>
|
||||
<B>#!#^@$& Skrell ##:##:##:</B> Director, I think you should see this.<BR>
|
||||
<B>^@$& Skrell ##:##:##:</B> Yes? What is it?<BR>
|
||||
<B>#!#^@$& Skrell ##:##:##:</B> Another one of those ships has appeared near th-462$^ ---n colonies. I would strongly advise pursuing it.<BR>
|
||||
<B>^@$& Skrell ##:##:##:</B> A wise decision. If it is damaged like the last one, we may be able to finally see what is - What?<BR>
|
||||
<B>A repeating ping, before silence.</B><BR>
|
||||
<B>End of second log.</B>
|
||||
"}
|
||||
|
||||
Reference in New Issue
Block a user