Touches Up the Surface Somewhat

Changes the rock texture to hopefully be a bit better.  It's a recolored version of /tg/'s lavaland rock, and modified slightly to look less repetitive.
Ports the lavaland rock tile sprite entirely for future away missions.
Adds tree chopping down feature.  All trees now have health, and hitting it with things will reduce it.  Generally you need something sharp to have a chance of actually felling the tree.
Adds log material, which is obtained from chopping trees.  Hitting these with a sharp weapon converts them into two planks per log.  Can be used to build log walls but otherwise can't be used to craft, at the moment.
Ports /tg/ tree sprites.  Might have a use for them in away missions, who knows.
Makes crystals start anchored and glow.
Shoveling snow checks toolspeed now.
This commit is contained in:
Neerti
2017-10-18 12:00:06 -04:00
parent 56ec5ec94c
commit 95d93dae00
23 changed files with 289 additions and 73 deletions

View File

@@ -1,78 +1,6 @@
//trees
/obj/structure/flora/tree
name = "tree"
anchored = 1
density = 1
pixel_x = -16
layer = MOB_LAYER // You know what, let's play it safe.
/obj/structure/flora/tree/pine
name = "pine tree"
icon = 'icons/obj/flora/pinetrees.dmi'
icon_state = "pine_1"
/obj/structure/flora/tree/pine/New()
..()
icon_state = "pine_[rand(1, 3)]"
/obj/structure/flora/tree/pine/xmas
name = "xmas tree"
icon = 'icons/obj/flora/pinetrees.dmi'
icon_state = "pine_c"
/obj/structure/flora/tree/pine/xmas/New()
..()
icon_state = "pine_c"
/obj/structure/flora/tree/dead
icon = 'icons/obj/flora/deadtrees.dmi'
icon_state = "tree_1"
/obj/structure/flora/tree/dead/New()
..()
icon_state = "tree_[rand(1, 6)]"
/obj/structure/flora/tree/sif
name = "glowing tree"
desc = "It's a tree, except this one seems quite alien. It glows a deep blue."
icon = 'icons/obj/flora/deadtrees.dmi'
icon_state = "tree_sif"
/obj/structure/flora/tree/sif/New()
update_icon()
/obj/structure/flora/tree/sif/update_icon()
set_light(5, 1, "#33ccff")
overlays.Cut()
overlays.Add(image(icon = 'icons/obj/flora/deadtrees.dmi', icon_state = "[icon_state]_glow", layer = LIGHTING_LAYER + 0.1))
//grass
/obj/structure/flora/grass
name = "grass"
icon = 'icons/obj/flora/snowflora.dmi'
anchored = 1
/obj/structure/flora/grass/brown
icon_state = "snowgrass1bb"
/obj/structure/flora/grass/brown/New()
..()
icon_state = "snowgrass[rand(1, 3)]bb"
/obj/structure/flora/grass/green
icon_state = "snowgrass1gb"
/obj/structure/flora/grass/green/New()
..()
icon_state = "snowgrass[rand(1, 3)]gb"
/obj/structure/flora/grass/both
icon_state = "snowgrassall1"
/obj/structure/flora/grass/both/New()
..()
icon_state = "snowgrassall[rand(1, 3)]"
//bushes //bushes

View File

@@ -0,0 +1,27 @@
//grass
/obj/structure/flora/grass
name = "grass"
icon = 'icons/obj/flora/snowflora.dmi'
anchored = 1
/obj/structure/flora/grass/brown
icon_state = "snowgrass1bb"
/obj/structure/flora/grass/brown/New()
..()
icon_state = "snowgrass[rand(1, 3)]bb"
/obj/structure/flora/grass/green
icon_state = "snowgrass1gb"
/obj/structure/flora/grass/green/New()
..()
icon_state = "snowgrass[rand(1, 3)]gb"
/obj/structure/flora/grass/both
icon_state = "snowgrassall1"
/obj/structure/flora/grass/both/New()
..()
icon_state = "snowgrassall[rand(1, 3)]"

View File

@@ -0,0 +1,202 @@
//trees
/obj/structure/flora/tree
name = "tree"
anchored = 1
density = 1
pixel_x = -16
layer = MOB_LAYER // You know what, let's play it safe.
var/base_state = null // Used for stumps.
var/health = 200 // Used for chopping down trees.
var/max_health = 200
var/shake_animation_degrees = 4 // How much to shake the tree when struck. Larger trees should have smaller numbers or it looks weird.
var/obj/item/stack/material/product = null // What you get when chopping this tree down. Generally it will be a type of wood.
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.
/obj/structure/flora/tree/attackby(var/obj/item/weapon/W, var/mob/living/user)
if(!istype(W))
return ..()
if(is_stump)
return
visible_message("<span class='danger'>\The [user] hits \the [src] with \the [W]!</span>")
var/damage_to_do = W.force
if(!W.sharp && !W.edge)
damage_to_do = round(damage_to_do / 4)
if(damage_to_do > 0)
if(W.sharp && W.edge)
playsound(get_turf(src), 'sound/effects/woodcutting.ogg', 50, 1)
else
playsound(get_turf(src), W.hitsound, 50, 1)
if(damage_to_do > 5)
adjust_health(-damage_to_do)
else
to_chat(user, "<span class='warning'>\The [W] is ineffective at harming \the [src].</span>")
hit_animation()
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
user.do_attack_animation(src)
// Shakes the tree slightly, more or less stolen from lockers.
/obj/structure/flora/tree/proc/hit_animation()
var/init_px = pixel_x
var/shake_dir = pick(-1, 1)
animate(src, transform=turn(matrix(), shake_animation_degrees * shake_dir), pixel_x=init_px + 2*shake_dir, time=1)
animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING)
// Used when the tree gets hurt.
/obj/structure/flora/tree/proc/adjust_health(var/amount)
if(is_stump)
return
health = between(0, health + amount, max_health)
if(health <= 0)
die()
// Called when the tree loses all health, for whatever reason.
/obj/structure/flora/tree/proc/die()
if(is_stump)
return
if(product && product_amount) // Make wooden logs.
var/obj/item/stack/material/M = new product(get_turf(src))
M.amount = product_amount
M.update_icon()
visible_message("<span class='danger'>\The [src] is felled!</span>")
stump()
// Makes the tree into a mostly non-interactive stump.
/obj/structure/flora/tree/proc/stump()
if(is_stump)
return
is_stump = TRUE
icon_state = "[base_state]_stump"
overlays.Cut() // For the Sif tree and other future glowy trees.
set_light(0)
/obj/structure/flora/tree/ex_act(var/severity)
adjust_health(-(max_health / severity))
/obj/structure/flora/tree/get_description_interaction()
var/list/results = list()
if(!is_stump)
results += "[desc_panel_image("hatchet")]to cut down this tree into logs. Any sharp and strong weapon will do."
results += ..()
return results
// Subtypes.
// Pine trees
/obj/structure/flora/tree/pine
name = "pine tree"
icon = 'icons/obj/flora/pinetrees.dmi'
icon_state = "pine_1"
base_state = "pine"
product = /obj/item/stack/material/log
shake_animation_degrees = 3
/obj/structure/flora/tree/pine/New()
..()
icon_state = "[base_state]_[rand(1, 3)]"
/obj/structure/flora/tree/pine/xmas
name = "xmas tree"
icon = 'icons/obj/flora/pinetrees.dmi'
icon_state = "pine_c"
/obj/structure/flora/tree/pine/xmas/New()
..()
icon_state = "pine_c"
// Palm trees
/obj/structure/flora/tree/palm
icon = 'icons/obj/flora/palmtrees.dmi'
icon_state = "palm1"
base_state = "palm"
product = /obj/item/stack/material/log
product_amount = 5
health = 200
max_health = 200
pixel_x = 0
/obj/structure/flora/tree/palm/New()
..()
icon_state = "[base_state][rand(1, 2)]"
// Dead trees
/obj/structure/flora/tree/dead
icon = 'icons/obj/flora/deadtrees.dmi'
icon_state = "tree_1"
base_state = "tree"
product = /obj/item/stack/material/log
product_amount = 5
health = 200
max_health = 200
/obj/structure/flora/tree/dead/New()
..()
icon_state = "[base_state]_[rand(1, 6)]"
// Small jungle trees
/obj/structure/flora/tree/jungle_small
icon = 'icons/obj/flora/jungletreesmall.dmi'
icon_state = "tree"
base_state = "tree"
product = /obj/item/stack/material/log
product_amount = 10
health = 400
max_health = 400
pixel_x = -32
/obj/structure/flora/tree/jungle_small/New()
..()
icon_state = "[base_state][rand(1, 6)]"
// Big jungle trees
/obj/structure/flora/tree/jungle
icon = 'icons/obj/flora/jungletree.dmi'
icon_state = "tree"
base_state = "tree"
product = /obj/item/stack/material/log
product_amount = 20
health = 800
max_health = 800
pixel_x = -48
pixel_y = -16
shake_animation_degrees = 2
/obj/structure/flora/tree/jungle/New()
..()
icon_state = "[base_state][rand(1, 6)]"
// Sif trees
/obj/structure/flora/tree/sif
name = "glowing tree"
desc = "It's a tree, except this one seems quite alien. It glows a deep blue."
icon = 'icons/obj/flora/deadtrees.dmi'
icon_state = "tree_sif"
base_state = "tree_sif"
product = /obj/item/stack/material/log/sif
/obj/structure/flora/tree/sif/New()
update_icon()
/obj/structure/flora/tree/sif/update_icon()
set_light(5, 1, "#33ccff")
overlays.Cut()
overlays.Add(image(icon = 'icons/obj/flora/deadtrees.dmi', icon_state = "[icon_state]_glow", layer = LIGHTING_LAYER + 0.1))

View File

@@ -25,7 +25,7 @@
/turf/simulated/floor/outdoors/snow/attackby(var/obj/item/W, var/mob/user) /turf/simulated/floor/outdoors/snow/attackby(var/obj/item/W, var/mob/user)
if(istype(W, /obj/item/weapon/shovel)) if(istype(W, /obj/item/weapon/shovel))
to_chat(user, "<span class='notice'>You begin to remove \the [src] with your [W].</span>") to_chat(user, "<span class='notice'>You begin to remove \the [src] with your [W].</span>")
if(do_after(user, 4 SECONDS)) if(do_after(user, 4 SECONDS * W.toolspeed))
to_chat(user, "<span class='notice'>\The [src] has been dug up, and now lies in a pile nearby.</span>") to_chat(user, "<span class='notice'>\The [src] has been dug up, and now lies in a pile nearby.</span>")
new /obj/item/stack/material/snow(src) new /obj/item/stack/material/snow(src)
demote() demote()

View File

@@ -53,6 +53,12 @@
/turf/simulated/wall/sifwood/New(var/newloc) /turf/simulated/wall/sifwood/New(var/newloc)
..(newloc,"alien wood") ..(newloc,"alien wood")
/turf/simulated/wall/log/New(var/newloc)
..(newloc,"log")
/turf/simulated/wall/log_sif/New(var/newloc)
..(newloc,"alien log")
// Shuttle Walls // Shuttle Walls
/turf/simulated/shuttle/wall /turf/simulated/shuttle/wall
name = "autojoin wall" name = "autojoin wall"

View File

@@ -29,4 +29,6 @@ var/global/list/description_icons = list(
"power cell" = image(icon='icons/obj/power.dmi',icon_state="hcell"), "power cell" = image(icon='icons/obj/power.dmi',icon_state="hcell"),
"device cell" = image(icon='icons/obj/power.dmi',icon_state="dcell"), "device cell" = image(icon='icons/obj/power.dmi',icon_state="dcell"),
"weapon cell" = image(icon='icons/obj/power.dmi',icon_state="wcell"), "weapon cell" = image(icon='icons/obj/power.dmi',icon_state="wcell"),
"hatchet" = image(icon='icons/obj/weapons.dmi',icon_state="hatchet"),
) )

View File

@@ -136,6 +136,9 @@
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("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("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0)
/material/wood/log/generate_recipes()
return // Feel free to add log-only recipes here later if desired.
/material/cardboard/generate_recipes() /material/cardboard/generate_recipes()
..() ..()
recipes += new/datum/stack_recipe("box", /obj/item/weapon/storage/box) recipes += new/datum/stack_recipe("box", /obj/item/weapon/storage/box)

View File

@@ -203,6 +203,35 @@
icon_state = "sheet-wood" icon_state = "sheet-wood"
default_type = "wood" default_type = "wood"
/obj/item/stack/material/log
name = "log"
icon_state = "sheet-log"
default_type = "log"
no_variants = FALSE
color = "#824B28"
max_amount = 25
w_class = ITEMSIZE_HUGE
/obj/item/stack/material/log/sif
name = "alien log"
color = "#0099cc"
/obj/item/stack/material/log/attackby(var/obj/item/W, var/mob/user)
if(!istype(W))
return ..()
if(W.sharp && W.edge && use(1))
to_chat(user, "<span class='notice'>You cut up a log into planks.</span>")
playsound(get_turf(src), 'sound/effects/woodcutting.ogg', 50, 1)
var/obj/item/stack/material/wood/existing_wood = locate() in user.loc
var/obj/item/stack/material/wood/new_wood = new(user.loc)
new_wood.amount = 2
if(existing_wood)
if(new_wood.transfer_to(existing_wood))
to_chat(user, "<span class='notice'>You add the newly-formed wood to the stack. It now contains [existing_wood.amount] planks.</span>")
else
return ..()
/obj/item/stack/material/cloth /obj/item/stack/material/cloth
name = "cloth" name = "cloth"
icon_state = "sheet-cloth" icon_state = "sheet-cloth"

View File

@@ -680,6 +680,18 @@ var/list/name_to_material
sheet_singular_name = "plank" sheet_singular_name = "plank"
sheet_plural_name = "planks" sheet_plural_name = "planks"
/material/wood/log
name = "log"
icon_base = "log"
stack_type = /obj/item/stack/material/log
sheet_singular_name = "log"
sheet_plural_name = "logs"
/material/wood/log/sif
name = "alien log"
icon_colour = "#0099cc" // Cyan-ish
stack_origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2)
/material/wood/holographic /material/wood/holographic
name = "holowood" name = "holowood"
display_name = "wood" display_name = "wood"

View File

@@ -6,10 +6,15 @@
name = "Crystal" name = "Crystal"
icon = 'icons/obj/mining.dmi' icon = 'icons/obj/mining.dmi'
icon_state = "crystal" icon_state = "crystal"
density = TRUE
anchored = TRUE
/obj/machinery/crystal/New() /obj/machinery/crystal/New()
if(prob(50)) if(prob(50))
icon_state = "crystal2" icon_state = "crystal2"
set_light(3, 3, "#CC00CC")
else
set_light(3, 3, "#33CC33")
//large finds //large finds
/* /*

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 KiB

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View File

@@ -1042,6 +1042,8 @@
#include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\security.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\security.dm"
#include "code\game\objects\structures\flora\grass.dm"
#include "code\game\objects\structures\flora\trees.dm"
#include "code\game\objects\structures\ghost_pods\ghost_pods.dm" #include "code\game\objects\structures\ghost_pods\ghost_pods.dm"
#include "code\game\objects\structures\ghost_pods\silicon.dm" #include "code\game\objects\structures\ghost_pods\silicon.dm"
#include "code\game\objects\structures\stool_bed_chair_nest\alien_nests.dm" #include "code\game\objects\structures\stool_bed_chair_nest\alien_nests.dm"