mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-27 14:07:51 +01:00
Mining
Added sandstone. You get it by clicking a sand... block, I guess? with itself, and it'll convert the sand and all sand on that tile to sandstone bricks. Added mineral doors. They have a cool sound effect, can't be opened by AI or critters (including bots, carps and huggers), but can't be locked either. Blatantly stole DF music for ambience because I'm a dick :33 Chapel Removed imperium something robes. Just... no. Crayons Added the ability to draw graffiti and letters. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1594 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -978,6 +978,7 @@ proc/move_mining_shuttle()
|
||||
user << "\blue The satchel is full."
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/ore/uranium
|
||||
name = "Uranium ore"
|
||||
icon_state = "Uranium ore"
|
||||
@@ -993,6 +994,14 @@ proc/move_mining_shuttle()
|
||||
icon_state = "Glass ore"
|
||||
origin_tech = "materials=1"
|
||||
|
||||
attack_self(mob/living/user as mob) //It's magic I ain't gonna explain how instant conversion with no tool works. -- Urist
|
||||
var/location = get_turf(user)
|
||||
for(var/obj/item/weapon/ore/glass/sandToConvert in location)
|
||||
new /obj/item/stack/sheet/sandstone(location)
|
||||
del(sandToConvert)
|
||||
new /obj/item/stack/sheet/sandstone(location)
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/ore/plasma
|
||||
name = "Plasma ore"
|
||||
icon_state = "Plasma ore"
|
||||
|
||||
@@ -1169,6 +1169,15 @@
|
||||
throw_speed = 3
|
||||
throw_range = 3
|
||||
|
||||
/obj/item/stack/sheet/sandstone
|
||||
name = "Sandstone Bricks"
|
||||
singular_name = "sandstone brick"
|
||||
icon_state = "sheet-sandstone"
|
||||
force = 5.0
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
throw_range = 5
|
||||
|
||||
/obj/item/stack/sheet/glass
|
||||
name = "glass"
|
||||
singular_name = "glass sheet"
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
/proc/carpetsplosion(turf/location as turf,range = 10)
|
||||
var/obj/effects/spreader/spreadEpicentre = new /obj/effects/spreader(location,range)
|
||||
var/list/turf/spreadTurfs = list()
|
||||
|
||||
sleep(5)
|
||||
|
||||
for(var/obj/effects/spreader/spread in spreadEpicentre.spreadList)
|
||||
spreadTurfs += get_turf(spread)
|
||||
|
||||
del(spreadEpicentre)
|
||||
return
|
||||
|
||||
//DEBUG START
|
||||
/obj/carpetnade
|
||||
New()
|
||||
..()
|
||||
carpetsplosion(loc)
|
||||
|
||||
//DEBUG END
|
||||
|
||||
/obj/effects/spreader
|
||||
var/list/obj/effects/spreader/spreadList = list()
|
||||
|
||||
/obj/effects/spreader/Del()
|
||||
for(var/obj/effects/spreader/spread in spreadList)
|
||||
if(spread != src)
|
||||
del(spread)
|
||||
..()
|
||||
|
||||
/obj/effects/spreader/New(location,var/amount = 1,obj/effects/spreader/source = src) //just a copypaste job from foam
|
||||
if(amount <= 0)
|
||||
del(src)
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
for(var/direction in cardinal)
|
||||
var/turf/T = get_step(src,direction)
|
||||
if(!T)
|
||||
continue
|
||||
|
||||
if(!T.Enter(src))
|
||||
continue
|
||||
|
||||
var/obj/effects/spreader/S = locate() in T
|
||||
if(S)
|
||||
continue
|
||||
|
||||
new /obj/effects/spreader(T,amount-1,source)
|
||||
|
||||
source.spreadList += src
|
||||
|
||||
/*
|
||||
/obj/effects/foam/proc/process()
|
||||
if(--amount < 0)
|
||||
return
|
||||
|
||||
|
||||
while(expand) // keep trying to expand while true
|
||||
|
||||
for(var/direction in cardinal)
|
||||
|
||||
|
||||
var/turf/T = get_step(src,direction)
|
||||
if(!T)
|
||||
continue
|
||||
|
||||
if(!T.Enter(src))
|
||||
continue
|
||||
|
||||
var/obj/effects/foam/F = locate() in T
|
||||
if(F)
|
||||
continue
|
||||
|
||||
F = new(T, metal)
|
||||
F.amount = amount
|
||||
if(!metal)
|
||||
F.create_reagents(10)
|
||||
if (reagents)
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
F.reagents.add_reagent(R.id,1)
|
||||
sleep(15)
|
||||
*/
|
||||
@@ -76,7 +76,7 @@
|
||||
return
|
||||
|
||||
/obj/closet/wardrobe/chaplain_black/New()
|
||||
new /obj/item/clothing/suit/imperium_monk( src )
|
||||
//new /obj/item/clothing/suit/imperium_monk( src ) //No. -- Urist
|
||||
new /obj/item/clothing/under/rank/chaplain( src )
|
||||
new /obj/item/clothing/under/rank/chaplain( src )
|
||||
new /obj/item/clothing/shoes/black( src )
|
||||
|
||||
@@ -0,0 +1,165 @@
|
||||
//NOT using the existing /obj/machinery/door type, since that has some complications on its own, mainly based on its
|
||||
//machineryness
|
||||
|
||||
/obj/mineral_door
|
||||
name = "mineral door"
|
||||
density = 1
|
||||
anchored = 1
|
||||
opacity = 1
|
||||
|
||||
icon = 'mineral_doors.dmi'
|
||||
icon_state = "iron"
|
||||
|
||||
var/mineralType = "iron"
|
||||
var/state = 0 //closed, 1 == open
|
||||
var/isSwitchingStates = 0
|
||||
|
||||
New(location)
|
||||
..()
|
||||
icon_state = mineralType
|
||||
update_nearby_tiles(need_rebuild=1)
|
||||
|
||||
Del()
|
||||
update_nearby_tiles()
|
||||
..()
|
||||
|
||||
Bumped(atom/user)
|
||||
..()
|
||||
if(!state)
|
||||
return TryToSwitchState(user)
|
||||
return
|
||||
|
||||
attack_ai(mob/user as mob) //those aren't machinery, they're just big fucking slabs of a mineral
|
||||
if(isAI(user)) //so the AI can't open it
|
||||
return
|
||||
else if(isrobot(user)) //but cyborgs can
|
||||
if(get_dist(user,src) <= 1) //not remotely though
|
||||
return TryToSwitchState(user)
|
||||
|
||||
attack_paw(mob/user as mob)
|
||||
return TryToSwitchState(user)
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
return TryToSwitchState(user)
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group) return 0
|
||||
if(istype(mover, /obj/beam))
|
||||
return !opacity
|
||||
return !density
|
||||
|
||||
proc/TryToSwitchState(atom/user)
|
||||
if(isSwitchingStates) return
|
||||
if(ismob(user))
|
||||
var/mob/M = user
|
||||
if(world.time - user.last_bumped <= 60) return //NOTE do we really need that?
|
||||
if(M.client && !M:handcuffed)
|
||||
SwitchState()
|
||||
else if(istype(user, /obj/mecha))
|
||||
SwitchState()
|
||||
|
||||
proc/SwitchState()
|
||||
if(state)
|
||||
Close()
|
||||
else
|
||||
Open()
|
||||
|
||||
proc/Open()
|
||||
isSwitchingStates = 1
|
||||
playsound(loc, 'stonedoor_openclose.wav', 100, 1)
|
||||
flick("[mineralType]opening",src)
|
||||
sleep(10)
|
||||
density = 0
|
||||
opacity = 0
|
||||
state = 1
|
||||
update_icon()
|
||||
isSwitchingStates = 0
|
||||
|
||||
proc/Close()
|
||||
isSwitchingStates = 1
|
||||
playsound(loc, 'stonedoor_openclose.wav', 100, 1)
|
||||
flick("[mineralType]closing",src)
|
||||
sleep(10)
|
||||
density = 1
|
||||
opacity = 1
|
||||
state = 0
|
||||
update_icon()
|
||||
isSwitchingStates = 0
|
||||
|
||||
update_icon()
|
||||
if(state)
|
||||
icon_state = "[mineralType]open"
|
||||
else
|
||||
icon_state = mineralType
|
||||
|
||||
proc/update_nearby_tiles(need_rebuild) //Copypasta from airlock code
|
||||
if(!air_master) return 0
|
||||
|
||||
var/turf/simulated/source = loc
|
||||
var/turf/simulated/north = get_step(source,NORTH)
|
||||
var/turf/simulated/south = get_step(source,SOUTH)
|
||||
var/turf/simulated/east = get_step(source,EAST)
|
||||
var/turf/simulated/west = get_step(source,WEST)
|
||||
|
||||
if(need_rebuild)
|
||||
if(istype(source)) //Rebuild/update nearby group geometry
|
||||
if(source.parent)
|
||||
air_master.groups_to_rebuild += source.parent
|
||||
else
|
||||
air_master.tiles_to_update += source
|
||||
if(istype(north))
|
||||
if(north.parent)
|
||||
air_master.groups_to_rebuild += north.parent
|
||||
else
|
||||
air_master.tiles_to_update += north
|
||||
if(istype(south))
|
||||
if(south.parent)
|
||||
air_master.groups_to_rebuild += south.parent
|
||||
else
|
||||
air_master.tiles_to_update += south
|
||||
if(istype(east))
|
||||
if(east.parent)
|
||||
air_master.groups_to_rebuild += east.parent
|
||||
else
|
||||
air_master.tiles_to_update += east
|
||||
if(istype(west))
|
||||
if(west.parent)
|
||||
air_master.groups_to_rebuild += west.parent
|
||||
else
|
||||
air_master.tiles_to_update += west
|
||||
else
|
||||
if(istype(source)) air_master.tiles_to_update += source
|
||||
if(istype(north)) air_master.tiles_to_update += north
|
||||
if(istype(south)) air_master.tiles_to_update += south
|
||||
if(istype(east)) air_master.tiles_to_update += east
|
||||
if(istype(west)) air_master.tiles_to_update += west
|
||||
|
||||
return 1
|
||||
|
||||
/obj/mineral_door/iron
|
||||
mineralType = "iron"
|
||||
|
||||
/obj/mineral_door/silver
|
||||
mineralType = "silver"
|
||||
|
||||
/obj/mineral_door/gold
|
||||
mineralType = "gold"
|
||||
|
||||
/obj/mineral_door/uranium
|
||||
mineralType = "uranium"
|
||||
|
||||
/obj/mineral_door/sandstone
|
||||
mineralType = "sandstone"
|
||||
|
||||
/obj/mineral_door/transparent
|
||||
opacity = 0
|
||||
|
||||
Close()
|
||||
..()
|
||||
opacity = 0
|
||||
|
||||
/obj/mineral_door/transparent/plasma
|
||||
mineralType = "plasma"
|
||||
|
||||
/obj/mineral_door/transparent/diamond
|
||||
mineralType = "diamond"
|
||||
@@ -77,6 +77,8 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
|
||||
null, \
|
||||
new/datum/stack_recipe("apc frame", /obj/item/apc_frame, 2), \
|
||||
new/datum/stack_recipe("grenade casing", /obj/item/weapon/chem_grenade), \
|
||||
null, \
|
||||
new/datum/stack_recipe("iron door", /obj/mineral_door/iron, 20), \
|
||||
)
|
||||
|
||||
/obj/item/stack/sheet/metal
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
CONTAINS:
|
||||
SANDSTONE
|
||||
DIAMOND
|
||||
URANIUM
|
||||
PLASMA
|
||||
GOLD
|
||||
SILVER
|
||||
*/
|
||||
|
||||
//Sandstone
|
||||
var/global/list/datum/stack_recipe/sandstone_recipes = list ( \
|
||||
new/datum/stack_recipe("sandstone door", /obj/mineral_door/sandstone, 20), \
|
||||
/* new/datum/stack_recipe("sandstone wall", ???), \
|
||||
new/datum/stack_recipe("sandstone floor", ???),\*/
|
||||
)
|
||||
|
||||
/obj/item/stack/sheet/sandstone
|
||||
New(var/loc, var/amount=null)
|
||||
recipes = sandstone_recipes
|
||||
return ..()
|
||||
|
||||
//Diamond
|
||||
var/global/list/datum/stack_recipe/diamond_recipes = list ( \
|
||||
new/datum/stack_recipe("diamond door", /obj/mineral_door/transparent/diamond, 20), \
|
||||
)
|
||||
|
||||
/obj/item/stack/sheet/diamond
|
||||
New(var/loc, var/amount=null)
|
||||
recipes = diamond_recipes
|
||||
return ..()
|
||||
|
||||
//Uranium
|
||||
var/global/list/datum/stack_recipe/uranium_recipes = list ( \
|
||||
new/datum/stack_recipe("uranium door", /obj/mineral_door/uranium, 20), \
|
||||
)
|
||||
|
||||
/obj/item/stack/sheet/uranium
|
||||
New(var/loc, var/amount=null)
|
||||
recipes = uranium_recipes
|
||||
return ..()
|
||||
|
||||
//Plasma
|
||||
var/global/list/datum/stack_recipe/plasma_recipes = list ( \
|
||||
new/datum/stack_recipe("plasma door", /obj/mineral_door/transparent/plasma, 20), \
|
||||
)
|
||||
|
||||
/obj/item/stack/sheet/plasma
|
||||
New(var/loc, var/amount=null)
|
||||
recipes = plasma_recipes
|
||||
return ..()
|
||||
|
||||
//Gold
|
||||
var/global/list/datum/stack_recipe/gold_recipes = list ( \
|
||||
new/datum/stack_recipe("golden door", /obj/mineral_door/gold, 20), \
|
||||
)
|
||||
|
||||
/obj/item/stack/sheet/gold
|
||||
New(var/loc, var/amount=null)
|
||||
recipes = gold_recipes
|
||||
return ..()
|
||||
|
||||
//Silver
|
||||
var/global/list/datum/stack_recipe/silver_recipes = list ( \
|
||||
new/datum/stack_recipe("silver door", /obj/mineral_door/silver, 20), \
|
||||
)
|
||||
|
||||
/obj/item/stack/sheet/silver
|
||||
New(var/loc, var/amount=null)
|
||||
recipes = silver_recipes
|
||||
return ..()
|
||||
@@ -129,10 +129,18 @@ CRAYONS
|
||||
|
||||
/obj/item/toy/crayon/afterattack(atom/target, mob/user as mob)
|
||||
if(istype(target,/turf/simulated/floor))
|
||||
user << "You start drawing a rune on the [target.name]."
|
||||
var/drawtype = input("Choose what you'd like to draw.", "Crayon scribbles") in list("graffiti","rune","letter")
|
||||
switch(drawtype)
|
||||
if("letter")
|
||||
drawtype = input("Choose the letter.", "Crayon scribbles") in list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
|
||||
user << "You start drawing a letter on the [target.name]."
|
||||
if("graffiti")
|
||||
user << "You start drawing graffiti on the [target.name]."
|
||||
if("rune")
|
||||
user << "You start drawing a rune on the [target.name]."
|
||||
if(instant || do_after(user, 50))
|
||||
new /obj/decal/cleanable/crayon(target,colour,shadeColour)
|
||||
user << "You draw a rune on the [target.name]."
|
||||
new /obj/decal/cleanable/crayon(target,colour,shadeColour,drawtype)
|
||||
user << "You finish drawing."
|
||||
if(uses)
|
||||
uses--
|
||||
if(!uses)
|
||||
@@ -159,13 +167,21 @@ CRAYONS
|
||||
layer = 2.1
|
||||
anchored = 1
|
||||
|
||||
/obj/decal/cleanable/crayon/New(location,main = "#FFFFFF",shade = "#000000")
|
||||
/obj/decal/cleanable/crayon/New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune")
|
||||
..()
|
||||
loc = location
|
||||
var/runeShape = rand(1,6)
|
||||
|
||||
var/icon/mainOverlay = new/icon('rune.dmi',"main[runeShape]",2.1)
|
||||
var/icon/shadeOverlay = new/icon('rune.dmi',"shade[runeShape]",2.1)
|
||||
name = type
|
||||
desc = "A [type] drawn in crayon."
|
||||
|
||||
switch(type)
|
||||
if("rune")
|
||||
type = "rune[rand(1,6)]"
|
||||
if("graffiti")
|
||||
type = pick("amyjon","face","matt","revolution","engie","guy","end")
|
||||
|
||||
var/icon/mainOverlay = new/icon('crayondecal.dmi',"[type]",2.1)
|
||||
var/icon/shadeOverlay = new/icon('crayondecal.dmi',"[type]s",2.1)
|
||||
|
||||
mainOverlay.Blend(main,ICON_ADD)
|
||||
shadeOverlay.Blend(shade,ICON_ADD)
|
||||
|
||||
+5
-1
@@ -64,6 +64,7 @@ client/verb/Toggle_Soundscape()
|
||||
|
||||
/area/Entered(A)
|
||||
var/sound = null
|
||||
var/musVolume = 25
|
||||
sound = 'ambigen1.ogg'
|
||||
|
||||
if (ismob(A))
|
||||
@@ -82,11 +83,14 @@ client/verb/Toggle_Soundscape()
|
||||
// if ("Engine Control") sound = pick('ambieng1.ogg') Commenting out in favor of a new, more applicable sound./N
|
||||
if ("Engine Control") sound = pick('ambisin1.ogg','ambisin2.ogg','ambisin3.ogg','ambisin4.ogg')
|
||||
if ("Atmospherics") sound = pick('ambiatm1.ogg')
|
||||
if ("Mine")
|
||||
sound = pick('ambimine1.ogg','ambimine2.ogg')
|
||||
musVolume = 60
|
||||
else sound = pick('ambigen1.ogg','ambigen3.ogg','ambigen4.ogg','ambigen5.ogg','ambigen6.ogg','ambigen7.ogg','ambigen8.ogg','ambigen9.ogg','ambigen10.ogg','ambigen11.ogg','ambigen12.ogg','ambigen14.ogg')
|
||||
|
||||
if (prob(35))
|
||||
if(A && A:client && !A:client:played)
|
||||
A << sound(sound, repeat = 0, wait = 0, volume = 25, channel = 1)
|
||||
A << sound(sound, repeat = 0, wait = 0, volume = musVolume, channel = 1)
|
||||
A:client:played = 1
|
||||
spawn(600)
|
||||
if(A && A:client)
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 4.5 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 46 KiB |
+7627
-7629
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -475,6 +475,7 @@
|
||||
#include "code\game\objects\kitchen.dm"
|
||||
#include "code\game\objects\lamarr.dm"
|
||||
#include "code\game\objects\livestock.dm"
|
||||
#include "code\game\objects\mineral_doors.dm"
|
||||
#include "code\game\objects\new_year.dm"
|
||||
#include "code\game\objects\noticeboard.dm"
|
||||
#include "code\game\objects\object_procs.dm"
|
||||
@@ -582,6 +583,7 @@
|
||||
#include "code\game\objects\spawners\bomb.dm"
|
||||
#include "code\game\objects\stacks\glass.dm"
|
||||
#include "code\game\objects\stacks\metal.dm"
|
||||
#include "code\game\objects\stacks\minerals.dm"
|
||||
#include "code\game\objects\stacks\stack.dm"
|
||||
#include "code\game\objects\stacks\wood.dm"
|
||||
#include "code\game\objects\storage\backpack.dm"
|
||||
|
||||
Reference in New Issue
Block a user