Files
Aurora.3/code/modules/holodeck/HolodeckObjects.dm
Matt Atlas 99b4033ca5 Aurora 2: The 3/4thening (#17186)
* after dark

* FIXES

* breakin

* butt

* Update code/game/objects/items/devices/floor_painter.dm

Co-authored-by: Cody Brittain <cbrittain10@yahoo.com>

* Update code/game/objects/items/devices/floor_painter.dm

Co-authored-by: Cody Brittain <cbrittain10@yahoo.com>

* Update code/game/objects/structures/lattice.dm

Co-authored-by: Cody Brittain <cbrittain10@yahoo.com>

* testing 1

* a

* FUCK THIS PRESET!!!

* allah

* OTEMACHI

* tis' done

* Project Exorcism : Sneed's Snairs (Formerly Chuck's)

* Update code/game/objects/structures/stool_bed_chair_nest/chairs.dm

* Update code/game/objects/structures/stool_bed_chair_nest/chairs.dm

* Update stools.dm

* Update code/game/objects/structures/stool_bed_chair_nest/stools.dm

* Update code/game/objects/structures/stool_bed_chair_nest/stools.dm

* Update stools.dm

* Update chairs.dm

* Update code/game/objects/structures/stool_bed_chair_nest/chairs.dm

* inhand fixes

* airlocks (matt has cooked)

fuck

* my cody plays the mamba

* fuck

* fixes layering issue

* airlocks and everything else Please fucking kill me

* underlays

* unfuck blending

* finished replacing old ass shit

* your ass is geass

* conflicts die now

* public fat'wa

* progress on walls and windows

* more mapping

* baltimore accents be like

* minor progress

* monitors

* fire alarms and apc adjustments

* apcs pixel adjustments, final airlock look

* also grilles

* shuttle wall start plus shuttle windows

* starting consoles

* table outlines

* I love broke ass sprites

* fixing the stupid ass exterior walls

* light fuckery

* terminal directionals, external airlocks, table fixes, blahblahblah

* fix 1

* fix 2

* some more fixes

* fix chairs

* basic untested railings and updating colors from atteria

* bridge and some fixes

* removing some artifacts on the new walls

* breaking wood tables and adding 4 wall materials

* fix

* compile & wood fixes

* make the horizon compile again

* railings, firedoors, ATMs, intercomms and tables again

* mapping begins also some tweaks to map view of icons

* full tile steel walls

* i sure hope nothing bad happens

* airlock updates (untested)

* reverts most wall machinery

* skull

* wall coloring

* makes the tg wood chill out

* work on airlocks

* hull consistency

* cause you live forever in the lights you make

* whoops can't show that in a christian manga

* terminals should be on walls and everything's hunky dory now

also i changed the wood stuff as per atteria's suggestion

* fixing airlocks

* fixes

* window resprite, coloring adjustments

* scc hull resprite

* new grilles, frame edits, and borosilicate

* greyscale wood palette improvement

* shuttle windows

* window frame fix

* apc update

* refit and reshaded fire alarms

* mapping icon fixes

* table fixes

* map fixes, platforms and stairs

* updates cutter, new walls and terminals

* mapping fixes

* fix preview

* preview fix stone

* stairs

* initial work for the map

* railing and windowpane fuckery

* new external airlocks

* a

* fix the maps in preparation

* wall object pixel offsets

* air alarms D1

* extinguisher cabinets

* APC DESTROYED MISSION ACCOMPLISHED GOOD WORK

* deck 3: floor decals, APCs, air alarms, fire extinguisher cabinets

* deck 3: fireaxe cabinet

* /shuttle_landmark/distress/blue, move base_turf from map to obj def

* intercom presets

* formatting

* deck 1: floor decals

* deck 2: named area fix (LMAO), signs to use single quotes

* deck 2: floor decals, APCs, air alarms, fire extinguisher cabinets, fireaxe cabinets

* Platforms and stairs!

* grates and bugfixes

* Angled ship walls + grate color fix

* corrects apc anim overlay

* deck 2 and away site fixes

# Conflicts:
#	maps/sccv_horizon/sccv_horizon-2_deck_2.dmm

* deck 2 missing grate

* warning stripes

* railings and ledges

* windows and fixtures

* windoorsagain

* airlocks pt1

* windows de-seamed and transparent

* airlocks and pixel offsets

* fixes for airlocks

* more airlock fixes

* presets for ringer, request console and newscaster

* 132

* asfsaf

* kitchen tiling

* thicker freezer tile bevels

* More angled walls

* New shutters and blast doors

* directional corrections

* ops railing fixes

* updated window map things and shutters

* value changes and blast door changes

* Ledges and platforms galore (D2/D3)

* all decks: fix door dirs

* all decks: newscasters, intercoms, requests consoles, ringer consoles

* helm light blue decals to dark blue

* supermatter door dir fix

* fix directional presets (dirs/offsets): newscaster, intercom, requests console, ringer console

* firedoor changes

* deck 3: overlapping wall mountables fixes

* map changes

* airlock changes

* map tweaks

* airlock & stair icons

* various mapping modifications

* Double airlocks + fixing denied states + fixing airlocks on all levels

* Rebase

* directional terminals buttons and lights again, platform tweaks

terminal north facing sprites, atm/food terminal directionals
proper door control and lightswitch directionals (presets still need to be set up, mapping)
re-adds new light tube sprites, again
new sprites for floor lights and the other stuff that got added
adjusted platforms to be recolorable, added light and dark versions, fixed some shading

* missing ERT outfit thingy fix

* floor lights fixed

* deck 3: various small fixes

* deck 1: various small fixes

* deck 2: various small fixes

* fixes

* d2 fixes & multitile door fix

* d2 fixes, remove unused airlock files, button icon fixes, window icon fixes

* make it actually compile, oops!

* make it actually compile, pt2

* CE office camera

* pew pew pew

* pew pew pew 2

* fixes

* deck 3: buttons fixes

* deck 3: button and other fixes

* deck 3: fixes and stuff

* D1 fixes & skrell airlocks

* minor D2 tweaks

* a lot of airlock-related fixes, glass tables, paint sprayer fixes, decal fixes, changelog

* maintenance hatch sprites

* fixing double doors

* flips multi-tiles, fixes multi-tiles, adds desk windoors

* new plastic flaps

* deck 2: a few buttons

* side + middle doors

* created paths for 3-tiles doors

* apply to map the 3 tiles airlocks

* some fixes, windoor alpha

* remove this random ass potted plant

* more map fixes

* holodeck disposal pipe fix

* secure airlock sprites

no code or obj definitions yet

* vault airlock

* vault door fixes

* scc window alpha

* adjusts double door glass, firedoor open state

* adjusts construction states for doors

* remove some defunct icons and fix anims

* assembly stuff

* pharma fixes

* vault door dir

* firedoor smart generation moved to its own proc

* lift doors, d1 fixes

* firedoor smart generation: adjacent wall check

* firedoor smart generation: adjacent firedoor check

* all decks: missing firedoor and other fixes

* deck 2: weird maint stairs fix

* oops

* diona airlock fix

* the shuttle wall gigadeath

* fixes

* some fixes for leftover map item paths, and double lattices

* new diona walls

* more fixes

* and more

* deck 1: fix out of bounds keys

* deck 3: fix out of bounds keys

* runtime 3: duplicate APCs fix

* all decks: make all 3 tile wide doors glass

---------

Co-authored-by: Wezzy <wowzewow@gmail.com>
Co-authored-by: Wowzewow (Wezzy) <42310821+alsoandanswer@users.noreply.github.com>
Co-authored-by: Cody Brittain <cbrittain10@yahoo.com>
Co-authored-by: kyres1 <noodle.buster31@gmail.com>
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: atteria <tarkona@protonmail.com>
Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>
Co-authored-by: DreamySkrell <107256943+DreamySkrell@users.noreply.github.com>
Co-authored-by: naut <nautilussplat@gmail.com>
Co-authored-by: naut <55491249+nauticall@users.noreply.github.com>
2023-08-30 21:18:10 +00:00

508 lines
14 KiB
Plaintext

// Holographic Items!
// Holographic tables are in code/modules/tables/presets.dm
// Holographic racks are in code/modules/tables/rack.dm
/turf/simulated/floor/holofloor
thermal_conductivity = 0
/turf/simulated/floor/holofloor/attackby(obj/item/W as obj, mob/user as mob)
return
// HOLOFLOOR DOES NOT GIVE A FUCK
/turf/simulated/floor/holofloor/set_flooring()
return
/turf/simulated/floor/holofloor/carpet
name = "carpet"
icon = 'icons/turf/flooring/carpet.dmi'
icon_state = "carpet"
initial_flooring = /singleton/flooring/carpet
footstep_sound = /singleton/sound_category/carpet_footstep
/turf/simulated/floor/holofloor/carpet/rubber
name = "rubber carpet"
icon = 'icons/turf/flooring/carpet.dmi'
icon_state = "rub_carpet"
initial_flooring = /singleton/flooring/carpet/rubber
/turf/simulated/floor/holofloor/tiled
name = "floor"
icon = 'icons/turf/flooring/tiles.dmi'
icon_state = "tiled_preview"
initial_flooring = /singleton/flooring/tiling
/turf/simulated/floor/holofloor/tiled/ramp
name = "foot ramp"
icon = 'icons/turf/flooring/tiles.dmi'
icon_state = "ramptop"
initial_flooring = /singleton/flooring/reinforced/ramp
/turf/simulated/floor/holofloor/tiled/ramp/bottom
name = "foot ramp"
icon = 'icons/turf/flooring/tiles.dmi'
icon_state = "rampbot"
initial_flooring = /singleton/flooring/reinforced/ramp/bottom
/turf/simulated/floor/holofloor/tiled/dark
name = "dark floor"
icon_state = "dark_preview"
initial_flooring = /singleton/flooring/tiling/dark
/turf/simulated/floor/holofloor/lino
name = "lino"
icon = 'icons/turf/flooring/linoleum.dmi'
icon_state = "lino_diamond"
initial_flooring = /singleton/flooring/linoleum/diamond
color = COLOR_LINOLEUM
/turf/simulated/floor/holofloor/wood
name = "wooden floor"
icon = 'icons/turf/flooring/tiles.dmi'
icon_state = "wood"
initial_flooring = /singleton/flooring/wood
tile_outline = "wood"
tile_outline_blend_process = ICON_ADD
color = WOOD_COLOR_GENERIC
/turf/simulated/floor/holofloor/grass
name = "lush grass"
icon = 'icons/turf/flooring/grass.dmi'
icon_state = "grass0"
initial_flooring = /singleton/flooring/grass
/turf/simulated/floor/holofloor/snow
name = "snow"
base_name = "snow"
icon = 'icons/turf/flooring/snow.dmi'
icon_state = "snow0"
initial_flooring = /singleton/flooring/snow
/turf/simulated/floor/holofloor/reinforced
icon = 'icons/turf/flooring/tiles.dmi'
initial_flooring = /singleton/flooring/reinforced
name = "reinforced holofloor"
icon_state = "reinforced"
footstep_sound = /singleton/sound_category/tiles_footstep
/turf/simulated/floor/holofloor/space
icon = 'icons/turf/space.dmi'
name = "\proper space"
icon_state = "0"
footstep_sound = null
plane = PLANE_SPACE_BACKGROUND
dynamic_lighting = 0
/turf/simulated/floor/holofloor/space/Initialize()
. = ..()
icon_state = "[((x + y) ^ ~(x * y) + z) % 25]"
var/image/I = image('icons/turf/space_parallax1.dmi',"[icon_state]")
I.plane = PLANE_SPACE_DUST
I.alpha = 80
I.blend_mode = BLEND_ADD
add_overlay(I)
/turf/simulated/floor/holofloor/beach
desc = "Uncomfortably gritty for a hologram."
base_desc = "Uncomfortably gritty for a hologram."
icon = 'icons/misc/beach.dmi'
icon_state = "sand"
base_icon_state = "sand"
base_icon = 'icons/misc/beach.dmi'
initial_flooring = null
footstep_sound = /singleton/sound_category/sand_footstep
/turf/simulated/floor/holofloor/beach/sand
name = "sand"
/turf/simulated/floor/holofloor/beach/coastline
name = "coastline"
icon = 'icons/misc/beach2.dmi'
icon_state = "sandwater"
base_icon_state = "sandwater"
footstep_sound = /singleton/sound_category/water_footstep
/turf/simulated/floor/holofloor/beach/water
name = "water"
icon_state = "seashallow"
base_icon_state = "seashallow"
footstep_sound = /singleton/sound_category/water_footstep
/turf/simulated/floor/holofloor/desert
name = "desert sand"
base_name = "desert sand"
desc = "Uncomfortably gritty for a hologram."
base_desc = "Uncomfortably gritty for a hologram."
icon_state = "asteroid"
base_icon_state = "asteroid"
icon = 'icons/turf/flooring/asteroid.dmi'
base_icon = 'icons/turf/flooring/asteroid.dmi'
initial_flooring = null
footstep_sound = /singleton/sound_category/sand_footstep
/turf/simulated/floor/holofloor/desert/Initialize()
. = ..()
if(prob(10))
add_overlay("asteroid[rand(0,9)]")
/obj/structure/holostool
name = "stool"
desc = "Apply butt."
icon = 'icons/obj/structure/chairs.dmi'
icon_state = "stool_padded_preview"
anchored = 1.0
/obj/item/clothing/gloves/boxing/hologlove
name = "boxing gloves"
desc = "Because you really needed another excuse to punch your crewmates."
icon_state = "boxing"
item_state = "boxing"
/obj/structure/window/reinforced/holowindow/Destroy()
return ..()
/obj/structure/window/reinforced/holowindow/attackby(obj/item/W as obj, mob/user as mob)
if(!istype(W)) return//I really wish I did not need this
if (istype(W, /obj/item/grab) && get_dist(src,user)<2)
var/obj/item/grab/G = W
if(istype(G.affecting,/mob/living))
grab_smash_attack(G, DAMAGE_PAIN)
return
if(W.flags & NOBLUDGEON) return
if(W.isscrewdriver())
to_chat(user, ("<span class='notice'>It's a holowindow, you can't unfasten it!</span>"))
else if(W.iscrowbar() && reinf && state <= 1)
to_chat(user, ("<span class='notice'>It's a holowindow, you can't pry it!</span>"))
else if(W.iswrench() && !anchored && (!state || !reinf))
to_chat(user, ("<span class='notice'>It's a holowindow, you can't dismantle it!</span>"))
else
if(W.damtype == DAMAGE_BRUTE || W.damtype == DAMAGE_BURN)
hit(W.force)
if(health <= 7)
anchored = 0
update_nearby_icons()
step(src, get_dir(user, src))
else
playsound(loc, 'sound/effects/glass_hit.ogg', 75, 1)
..()
return
/obj/structure/window/reinforced/holowindow/shatter(var/display_message = 1)
playsound(src, /singleton/sound_category/glass_break_sound, 70, 1)
if(display_message)
visible_message("[src] fades away as it shatters!")
qdel(src)
return
/obj/structure/window/reinforced/holowindow/disappearing/Destroy()
return ..()
/obj/machinery/door/window/holowindoor/Destroy()
return ..()
/obj/machinery/door/window/holowindoor/attackby(obj/item/I as obj, mob/user as mob)
if (src.operating == 1)
return
if(src.density && istype(I, /obj/item) && !istype(I, /obj/item/card))
var/aforce = I.force
playsound(src.loc, 'sound/effects/glass_hit.ogg', 75, 1)
visible_message("<span class='danger'>[src] was hit by [I].</span>")
if(I.damtype == DAMAGE_BRUTE || I.damtype == DAMAGE_BURN)
take_damage(aforce)
return
src.add_fingerprint(user)
if (!src.requiresID())
user = null
if (src.allowed(user))
if (src.density)
open()
else
close()
else if (src.density)
flick(text("[]deny", src.base_state), src)
return
/obj/machinery/door/window/holowindoor/shatter(var/display_message = 1)
src.density = 0
playsound(src, /singleton/sound_category/glass_break_sound, 70, 1)
if(display_message)
visible_message("[src] fades away as it shatters!")
qdel(src)
/obj/structure/bed/stool/chair/holochair
held_item = null
/obj/structure/bed/stool/chair/holochair/Destroy()
return ..()
/obj/structure/bed/stool/chair/holochair/attackby(obj/item/W as obj, mob/user as mob)
if(W.iswrench())
to_chat(user, ("<span class='notice'>It's a holochair, you can't dismantle it!</span>"))
return
/obj/item/holo
damtype = DAMAGE_PAIN
no_attack_log = 1
/obj/item/holo/esword
name = "energy sword"
desc = "May the force be within you. Sorta."
icon = 'icons/obj/weapons.dmi'
icon_state = "sword0"
force = 3.0
throw_speed = 1
throw_range = 5
throwforce = 0
w_class = ITEMSIZE_SMALL
flags = NOBLOODY
item_icons = list(
slot_l_hand_str = 'icons/mob/items/weapons/lefthand_energy.dmi',
slot_r_hand_str = 'icons/mob/items/weapons/righthand_energy.dmi'
)
var/active = 0
var/item_color
/obj/item/holo/esword/green
item_color = "green"
/obj/item/holo/esword/red
item_color = "red"
/obj/item/holo/esword/handle_shield(mob/user, var/on_back, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
if(active && default_parry_check(user, attacker, damage_source) && prob(50))
user.visible_message("<span class='danger'>\The [user] parries [attack_text] with \the [src]!</span>")
spark(user.loc, 5)
playsound(user.loc, 'sound/weapons/blade.ogg', 50, 1)
return PROJECTILE_STOPPED
return FALSE
/obj/item/holo/esword/New()
if(!item_color)
item_color = pick("red","blue","green","purple")
/obj/item/holo/esword/attack_self(mob/living/user as mob)
active = !active
if (active)
force = 30
icon_state = "sword[item_color]"
w_class = ITEMSIZE_LARGE
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
to_chat(user, "<span class='notice'>[src] is now active.</span>")
else
force = 3
icon_state = "sword0"
w_class = ITEMSIZE_SMALL
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
to_chat(user, "<span class='notice'>[src] can now be concealed.</span>")
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
H.update_inv_l_hand()
H.update_inv_r_hand()
add_fingerprint(user)
return
//BASKETBALL OBJECTS
/obj/item/beach_ball/holoball
icon = 'icons/obj/basketball.dmi'
icon_state = "basketball"
name = "basketball"
item_state = "basketball"
desc = "Here's your chance, do your dance at the Space Jam."
w_class = ITEMSIZE_LARGE //Stops people from hiding it in their bags/pockets
drop_sound = 'sound/items/drop/basketball.ogg'
pickup_sound = 'sound/items/pickup/basketball.ogg'
/obj/structure/holohoop
name = "basketball hoop"
desc = "Boom, Shakalaka!"
icon = 'icons/obj/basketball.dmi'
icon_state = "hoop"
anchored = 1
density = 1
throwpass = 1
/obj/structure/holohoop/attackby(obj/item/W as obj, mob/user as mob)
if (istype(W, /obj/item/grab) && get_dist(src,user)<2)
var/obj/item/grab/G = W
if(G.state<2)
to_chat(user, "<span class='warning'>You need a better grip to do that!</span>")
return
G.affecting.forceMove(src.loc)
G.affecting.Weaken(5)
visible_message("<span class='warning'>[G.assailant] dunks [G.affecting] into the [src]!</span>", range = 3)
qdel(W)
return
else if (istype(W, /obj/item) && get_dist(src,user)<2)
user.drop_from_inventory(W,get_turf(src))
visible_message("<span class='notice'>[user] dunks [W] into the [src]!</span>", range = 3)
return
/obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if (istype(mover,/obj/item) && mover.throwing)
var/obj/item/I = mover
if(istype(I, /obj/item/projectile))
return
if(prob(50))
I.forceMove(src.loc)
visible_message("<span class='notice'>Swish! \the [I] lands in \the [src].</span>", range = 3)
else
visible_message("<span class='warning'>\The [I] bounces off of \the [src]'s rim!</span>", range = 3)
return 0
else
return ..(mover, target, height, air_group)
/obj/machinery/readybutton
name = "Ready Declaration Device"
desc = "This device is used to declare ready. If all devices in an area are ready, the event will begin!"
icon = 'icons/obj/monitors.dmi'
icon_state = "auth_off"
var/ready = 0
var/area/currentarea = null
var/eventstarted = 0
anchored = 1.0
use_power = POWER_USE_OFF // reason is because the holodeck already takes power so this can be powered as a result.
/obj/machinery/readybutton/attack_ai(mob/user as mob)
to_chat(user, "The station AI is not to interact with these devices!")
return
/obj/machinery/readybutton/attackby(obj/item/W as obj, mob/user as mob)
to_chat(user, "The device is a solid button, there's nothing you can do with it!")
/obj/machinery/readybutton/attack_hand(mob/user as mob)
if(user.stat || stat & (NOPOWER|BROKEN))
to_chat(user, "This device is not powered.")
return
if(!user.IsAdvancedToolUser())
return 0
currentarea = get_area(src.loc)
if(!currentarea)
qdel(src)
if(eventstarted)
to_chat(usr, "The event has already begun!")
return
ready = !ready
update_icon()
var/numbuttons = 0
var/numready = 0
for(var/obj/machinery/readybutton/button in currentarea)
numbuttons++
if (button.ready)
numready++
if(numbuttons == numready)
begin_event()
/obj/machinery/readybutton/update_icon()
if(ready)
icon_state = "auth_on"
else
icon_state = "auth_off"
/obj/machinery/readybutton/proc/begin_event()
eventstarted = 1
for(var/obj/structure/window/reinforced/holowindow/disappearing/W in currentarea)
qdel(W)
for(var/mob/M in currentarea)
to_chat(M, "FIGHT!")
//Holocarp
/mob/living/simple_animal/hostile/carp/holodeck
icon = 'icons/mob/AI.dmi'
icon_state = "carp"
icon_living = "carp"
icon_dead = "carp"
alpha = 127
icon_gib = null
meat_amount = 0
meat_type = null
light_range = 2
/mob/living/simple_animal/hostile/carp/holodeck/proc/set_safety(var/safe)
if (safe)
faction = "neutral"
melee_damage_lower = 0
melee_damage_upper = 0
environment_smash = 0
destroy_surroundings = 0
else
faction = "carp"
melee_damage_lower = initial(melee_damage_lower)
melee_damage_upper = initial(melee_damage_upper)
environment_smash = initial(environment_smash)
destroy_surroundings = initial(destroy_surroundings)
/mob/living/simple_animal/hostile/carp/holodeck/gib()
derez() //holograms can't gib
/mob/living/simple_animal/hostile/carp/holodeck/death()
..()
derez()
/mob/living/simple_animal/hostile/carp/holodeck/proc/derez()
visible_message("<span class='notice'>\The [src] fades away!</span>")
qdel(src)
//Holo-penguin
/mob/living/simple_animal/penguin/holodeck
icon = 'icons/mob/npc/penguins.dmi'
icon_state = "penguin"
icon_living = "penguin"
icon_dead = "penguin_dead"
icon_gib = null
meat_amount = 0
meat_type = null
light_range = 2
hunger_enabled = FALSE
/mob/living/simple_animal/penguin/holodeck/can_name(var/mob/living/M)
return FALSE
/mob/living/simple_animal/penguin/holodeck/baby
name = "baby penguin"
desc = "Can't fly and barely waddles, yet the prince of all chicks."
icon_state = "penguin_baby"
icon_living = "penguin_baby"
icon_dead = "penguin_baby_dead"
/mob/living/simple_animal/penguin/holodeck/emperor
name = "emperor penguin"
desc = "Emperor of all he surveys."
/mob/living/simple_animal/penguin/holodeck/gib()
derez() //holograms can't gib
/mob/living/simple_animal/penguin/holodeck/death()
..()
derez()
/mob/living/simple_animal/penguin/holodeck/proc/derez()
visible_message("<span class='notice'>\The [src] fades away!</span>")
qdel(src)