Skewium: It'll fuck you up. (#23742)

* Skewium: It'll fuck you up.
Adds some matrix helpers for dealing with skews
Adds Skewium, it's like rotatium, but for skews instead of rotation, it's horrible

* switches back to boxstation from runtimestation
This commit is contained in:
Remie Richards
2017-02-07 16:36:07 -06:00
committed by KorPhaeron
parent 6537fe3f5d
commit 9dc819f151
3 changed files with 62 additions and 2 deletions
+19 -1
View File
@@ -61,7 +61,25 @@
/matrix/proc/get_y_shift()
. = f
// Color matrices:
/matrix/proc/get_x_skew()
. = b
/matrix/proc/get_y_skew()
. = d
//Skews a matrix in a particular direction
//Missing arguments are treated as no skew in that direction
//As Rotation is defined as a scale+skew, these procs will break any existing rotation
//Unless the result is multiplied against the current matrix
/matrix/proc/set_skew(x = 0, y = 0)
b = x
d = y
/////////////////////
// COLOUR MATRICES //
/////////////////////
/* Documenting a couple of potentially useful color matrices here to inspire ideas
// Greyscale - indentical to saturation @ 0
@@ -684,6 +684,41 @@
animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING)
..()
/datum/reagent/toxin/skewium
name = "Skewium"
id = "skewium"
description = "A strange, dull coloured liquid that appears to warp back and forth inside its container. Causes any consumer to experience a visual phenomena similar to said warping."
reagent_state = LIQUID
color = "#ADBDCD"
metabolization_rate = 0.8 * REAGENTS_METABOLISM
toxpwr = 0.25
/datum/reagent/toxin/skewium/on_mob_life(mob/living/M)
if(M.hud_used)
if(current_cycle >= 5 && current_cycle % 3 == 0)
var/list/screens = list(M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
var/matrix/skew = matrix()
var/intensity = 8
skew.set_skew(rand(-intensity,intensity), rand(-intensity,intensity))
var/matrix/newmatrix = skew
if(prob(33)) // 1/3rd of the time, let's make it stack with the previous matrix! Mwhahahaha!
var/obj/screen/plane_master/PM = M.hud_used.plane_masters["[GAME_PLANE]"]
newmatrix = skew * PM.transform
for(var/whole_screen in screens)
animate(whole_screen, transform = newmatrix, time = 5, easing = QUAD_EASING, loop = -1)
animate(transform = -newmatrix, time = 5, easing = QUAD_EASING)
return ..()
/datum/reagent/toxin/skewium/on_mob_delete(mob/living/M)
if(M && M.hud_used)
var/list/screens = list(M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
for(var/whole_screen in screens)
animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING)
..()
/datum/reagent/toxin/anacea
name = "Anacea"
id = "anacea"
@@ -94,7 +94,14 @@
results = list("rotatium" = 3)
required_reagents = list("mindbreaker" = 1, "teslium" = 1, "neurotoxin2" = 1)
mix_message = "<span class='danger'>After sparks, fire, and the smell of mindbreaker, the mix is constantly spinning with no stop in sight.</span>"
/datum/chemical_reaction/skewium
name = "Skewium"
id = "Skewium"
results = list("skewium" = 5)
required_reagents = list("rotatium" = 2, "plasma" = 2, "sacid" = 1)
mix_message = "<span class='danger'>Wow! it turns out if you mix rotatium with some plasma and sulphuric acid, it gets even worse!</span>"
/datum/chemical_reaction/anacea
name = "Anacea"
id = "anacea"