mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-29 11:02:05 +00:00
* Speeds up world init. * Armor is now new inited for obj and the first level of subpaths. * Actions is now lazyinited and deleted with empty. * Actiontypes is now only inited when actually used and deleted once it pre-fills actions with the action buttons. * Pipes now prefill their node list(s) in new() using new /list/ (count) syntax to speed up the list initaliztions and remove the init proc. * Pipes no longer store their item version, instead creating it on the fly when deconned * Walls no longer store their metal stacks, instead creating it on the fly when deconned. * obj, walls, floor, plating, item, machinery, structure, pipe, pipenet, atom, and movable no longer have an (init) proc. (along with a few other smaller examples) * Atmos can pass checking is now a var with the ability to have a proc be call in advance cases. * (as a side effect, I had to fix a few things that were calling atmosCanPass rather then using the pre-calculated list, this should speed up chemfoam and flame effects greatly) * Reverts upload limit (remind me one day to defuck this, it could easily be a config thats not editable by vv to make changes easier) * Makes apc update icon a bit faster. APC new is some what high on the profile of world init, still not sure why, but this stood out as a waste of cpu so i fixed it. * Fixes runtime with atmos backpack water tanks. * Makes smoothing faster (and fixes turfs smoothing twice at init) * Makes apcs init faster by replacing some spawns with addtimer * fix transit turfs.
222 lines
5.7 KiB
Plaintext
222 lines
5.7 KiB
Plaintext
/*
|
|
Items, Structures, Machines
|
|
*/
|
|
|
|
|
|
//
|
|
// Items
|
|
//
|
|
|
|
/obj/item/weapon/holo
|
|
damtype = STAMINA
|
|
|
|
/obj/item/weapon/holo/esword
|
|
name = "holographic energy sword"
|
|
desc = "May the force be with you. Sorta"
|
|
icon_state = "sword0"
|
|
force = 3.0
|
|
throw_speed = 2
|
|
throw_range = 5
|
|
throwforce = 0
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
hitsound = "swing_hit"
|
|
armour_penetration = 50
|
|
var/active = 0
|
|
|
|
/obj/item/weapon/holo/esword/green/New()
|
|
..()
|
|
item_color = "green"
|
|
|
|
|
|
/obj/item/weapon/holo/esword/red/New()
|
|
..()
|
|
item_color = "red"
|
|
|
|
/obj/item/weapon/holo/esword/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance)
|
|
if(active)
|
|
return ..()
|
|
return 0
|
|
|
|
/obj/item/weapon/holo/esword/attack(target as mob, mob/user as mob)
|
|
..()
|
|
|
|
/obj/item/weapon/holo/esword/New()
|
|
item_color = pick("red","blue","green","purple")
|
|
..()
|
|
|
|
/obj/item/weapon/holo/esword/attack_self(mob/living/user as mob)
|
|
active = !active
|
|
if (active)
|
|
force = 30
|
|
icon_state = "sword[item_color]"
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
hitsound = 'sound/weapons/blade1.ogg'
|
|
playsound(user, 'sound/weapons/saberon.ogg', 20, 1)
|
|
user << "<span class='warning'>[src] is now active.</span>"
|
|
else
|
|
force = 3
|
|
icon_state = "sword0"
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
hitsound = "swing_hit"
|
|
playsound(user, 'sound/weapons/saberoff.ogg', 20, 1)
|
|
user << "<span class='warning'>[src] can now be concealed.</span>"
|
|
return
|
|
|
|
//BASKETBALL OBJECTS
|
|
|
|
/obj/item/toy/beach_ball/holoball
|
|
name = "basketball"
|
|
icon = 'icons/obj/items.dmi'
|
|
icon_state = "basketball"
|
|
item_state = "basketball"
|
|
desc = "Here's your chance, do your dance at the Space Jam."
|
|
w_class = WEIGHT_CLASS_BULKY //Stops people from hiding it in their bags/pockets
|
|
|
|
/obj/item/toy/beach_ball/holoball/dodgeball
|
|
name = "dodgeball"
|
|
icon_state = "dodgeball"
|
|
item_state = "dodgeball"
|
|
desc = "Used for playing the most violent and degrading of childhood games."
|
|
|
|
/obj/item/toy/beach_ball/holoball/dodgeball/throw_impact(atom/hit_atom)
|
|
..()
|
|
if((ishuman(hit_atom)))
|
|
var/mob/living/carbon/M = hit_atom
|
|
playsound(src, 'sound/items/dodgeball.ogg', 50, 1)
|
|
M.apply_damage(10, STAMINA)
|
|
if(prob(5))
|
|
M.Weaken(3)
|
|
visible_message("<span class='danger'>[M] is knocked right off [M.p_their()] feet!</span>")
|
|
|
|
//
|
|
// Structures
|
|
//
|
|
|
|
/obj/structure/holohoop
|
|
name = "basketball hoop"
|
|
desc = "Boom, shakalaka!"
|
|
icon = 'icons/obj/basketball.dmi'
|
|
icon_state = "hoop"
|
|
anchored = 1
|
|
density = 1
|
|
|
|
/obj/structure/holohoop/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
|
if(get_dist(src,user)<2)
|
|
if(user.drop_item(src))
|
|
visible_message("<span class='warning'> [user] dunks [W] into \the [src]!</span>")
|
|
|
|
/obj/structure/holohoop/attack_hand(mob/user)
|
|
if(user.pulling && user.a_intent == INTENT_GRAB && isliving(user.pulling))
|
|
var/mob/living/L = user.pulling
|
|
if(user.grab_state < GRAB_AGGRESSIVE)
|
|
user << "<span class='warning'>You need a better grip to do that!</span>"
|
|
return
|
|
L.loc = src.loc
|
|
L.Weaken(5)
|
|
visible_message("<span class='danger'>[user] dunks [L] into \the [src]!</span>")
|
|
user.stop_pulling()
|
|
else
|
|
..()
|
|
|
|
/obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0)
|
|
if (istype(mover,/obj/item) && mover.throwing)
|
|
var/obj/item/I = mover
|
|
if(istype(I, /obj/item/projectile))
|
|
return
|
|
if(prob(50))
|
|
I.loc = src.loc
|
|
visible_message("<span class='warning'> Swish! \the [I] lands in \the [src].</span>")
|
|
else
|
|
visible_message("<span class='danger'> \the [I] bounces off of \the [src]'s rim!</span>")
|
|
return 0
|
|
else
|
|
return ..()
|
|
|
|
|
|
|
|
//
|
|
// Machines
|
|
//
|
|
|
|
/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 = 1
|
|
idle_power_usage = 2
|
|
active_power_usage = 6
|
|
power_channel = ENVIRON
|
|
|
|
/obj/machinery/readybutton/attack_ai(mob/user as mob)
|
|
user << "The station AI is not to interact with these devices"
|
|
return
|
|
|
|
/obj/machinery/readybutton/attack_paw(mob/user as mob)
|
|
user << "<span class='warning'>You are too primitive to use this device!</span>"
|
|
return
|
|
|
|
/obj/machinery/readybutton/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
|
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))
|
|
user << "<span class='warning'>This device is not powered!</span>"
|
|
return
|
|
|
|
currentarea = get_area(src.loc)
|
|
if(!currentarea)
|
|
qdel(src)
|
|
|
|
if(eventstarted)
|
|
usr << "<span class='warning'>The event has already begun!</span>"
|
|
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/W in currentarea)
|
|
if(W.flags&NODECONSTRUCT) // Just in case: only holo-windows
|
|
qdel(W)
|
|
|
|
for(var/mob/M in currentarea)
|
|
M << "FIGHT!"
|
|
|
|
/obj/machinery/conveyor/holodeck
|
|
|
|
/obj/machinery/conveyor/holodeck/attackby(obj/item/I, mob/user, params)
|
|
if(user.drop_item())
|
|
I.loc = src.loc
|
|
else
|
|
return ..()
|
|
|
|
/obj/item/weapon/paper/trek_diploma
|
|
name = "paper - Starfleet Academy Diploma"
|
|
info = {"<h2>Starfleet Academy</h2></br><p>Official Diploma</p></br>"}
|