Files
Bubberstation/code/modules/hallucination/bubblegum_attack.dm
LemonInTheDark e766444468 Changes our map_format to SIDE_MAP (#70162)
## About The Pull Request

This does nothing currently, but will allow me to test for layering
issues on LIVE, rather then in just wallening.
Oh also I'm packaging in a fix to one of my macros that I wrote wrong,
as a joke

[removes SEE_BLACKNESS usage, because we actually cannot use it
effectively](c9a19dd7cc)

[c9a19dd](c9a19dd7cc)

Sidemap removes the ability to control it on a plane, so it basically
just means there's an uncontrollable black slate even if you have other
toggles set.

This just like, removes that, since it's silly

[fixes weird layering on solars and ai portraits. Pixel y was casuing
things to render below who
shouldn't](3885b9d9ed)

[3885b9d](3885b9d9ed)

[Fixes flicker
issues](2defc0ad20)

[2defc0a](2defc0ad20)

Offsetting the vis_contents'd objects down physically, and then up
visually resolves the confliciting that was going on between the text
and its display.

This resolves the existing reported flickering issues

[fixes plated food not appearing in
world](28a34c64f8)

[28a34c6](28a34c64f8)

pixel_y'd vis_contents strikes again. It's a tad hacky but we'll just
use pixel_z for this

[Adds wall and upper wall plane
masters](89fe2b4eb4)

[89fe2b4](89fe2b4eb4)

We use these + the floor and space planes to build a mask of all the
visible turfs.
Then we take that, stick it in a plane master, and mask the emissive
plane with it.

This solves the lighting fulldark screen object getting cut by emissives
Shifts some planes around to match this new layering. Also ensures we
only shift fullscreen objects if they don't object to it.

[compresses plane master
controllers](bd64cc196a)

[bd64cc1](bd64cc196a)

we don't use them for much rn, but we might in future so I'm keeping it
as a convienince thing

🆑
refactor: The logic of how we well, render things has changed. Make an
issue report if anything looks funky, particularly layers. PLEASE USE
YOUR EYES
/🆑

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2022-12-10 17:30:54 -08:00

102 lines
3.7 KiB
Plaintext

/// Sends a fake bubblegum charging through a nearby wall to our target.
/datum/hallucination/oh_yeah
random_hallucination_weight = 1
/// An image overlayed to the wall bubblegum comes out of, to look destroyed.
var/image/fake_broken_wall
/// An image put where bubblegum is expected to land, to mimic his charge "rune" icon.
var/image/fake_rune
/// if TRUE, we will also send one of the hallucination lines when we start.
var/haunt_them = FALSE
/// if haunt_them is TRUE, they will also be shown one of these lines when the hallucination occurs
var/static/list/hallucination_lines = BUBBLEGUM_HALLUCINATION_LINES
/datum/hallucination/oh_yeah/New(mob/living/hallucinator, source = "an external source", haunt_them = FALSE)
src.haunt_them = haunt_them
return ..()
/datum/hallucination/oh_yeah/Destroy()
if(fake_broken_wall)
hallucinator.client?.images -= fake_broken_wall
fake_broken_wall = null
if(fake_rune)
hallucinator.client?.images -= fake_rune
fake_rune = null
return ..()
/datum/hallucination/oh_yeah/start()
var/turf/closed/wall/wall_source = locate() in range(7, hallucinator)
if(!wall_source)
return FALSE
feedback_details += "Source: ([wall_source.x], [wall_source.y], [wall_source.z])"
var/turf/target_landing_turf = get_turf(hallucinator)
var/turf/target_landing_image_turf = get_step(target_landing_turf, SOUTHWEST) // The icon is 3x3, so we shift down+left
if(hallucinator.client)
fake_broken_wall = image('icons/turf/floors.dmi', wall_source, "plating", layer = TURF_LAYER)
SET_PLANE_EXPLICIT(fake_broken_wall, FLOOR_PLANE, wall_source)
fake_broken_wall.override = TRUE
fake_rune = image('icons/effects/96x96.dmi', target_landing_image_turf, "landing", layer = ABOVE_OPEN_TURF_LAYER)
SET_PLANE_EXPLICIT(fake_rune, FLOOR_PLANE, wall_source)
hallucinator.client?.images |= fake_broken_wall
hallucinator.client?.images |= fake_rune
hallucinator.playsound_local(wall_source, 'sound/effects/meteorimpact.ogg', 150, TRUE)
if(haunt_them)
to_chat(hallucinator, pick(hallucination_lines))
var/obj/effect/client_image_holder/hallucination/bubblegum/fake_bubbles = new(wall_source, hallucinator, src)
addtimer(CALLBACK(src, PROC_REF(charge_loop), fake_bubbles, target_landing_turf), 1 SECONDS)
return TRUE
/**
* Recursive function that operates as a "fake charge" of our effect towards the target turf.
*/
/datum/hallucination/oh_yeah/proc/charge_loop(obj/effect/client_image_holder/hallucination/bubblegum/fake_bubbles, turf/landing_turf)
if(QDELETED(src))
return
if(QDELETED(hallucinator) \
|| QDELETED(fake_bubbles) \
|| !landing_turf \
|| fake_bubbles.z != hallucinator.z \
|| fake_bubbles.z != landing_turf.z \
)
qdel(src)
return
if(get_turf(fake_bubbles) == landing_turf || hallucinator.stat == DEAD)
QDEL_IN(src, 3 SECONDS)
return
fake_bubbles.forceMove(get_step_towards(fake_bubbles, landing_turf))
fake_bubbles.setDir(get_dir(fake_bubbles, landing_turf))
hallucinator.playsound_local(get_turf(fake_bubbles), 'sound/effects/meteorimpact.ogg', 150, TRUE)
shake_camera(hallucinator, 2, 1)
if(fake_bubbles.Adjacent(hallucinator))
hallucinator.Paralyze(8 SECONDS)
hallucinator.adjustStaminaLoss(40)
step_away(hallucinator, fake_bubbles)
shake_camera(hallucinator, 4, 3)
hallucinator.visible_message(
span_warning("[hallucinator] jumps backwards, falling on the ground!"),
span_userdanger("[fake_bubbles] slams into you!"),
)
QDEL_IN(src, 3 SECONDS)
else
addtimer(CALLBACK(src, PROC_REF(charge_loop), fake_bubbles, landing_turf), 0.2 SECONDS)
/// Fake bubblegum hallucination effect for the oh yeah hallucination
/obj/effect/client_image_holder/hallucination/bubblegum
name = "Bubblegum"
image_icon = 'icons/mob/simple/lavaland/96x96megafauna.dmi'
image_state = "bubblegum"
image_pixel_x = -32