diff --git a/baystation12.dme b/baystation12.dme index 5ac21d3e793..3dc5ff529f6 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1353,6 +1353,7 @@ #include "code\WorkInProgress\autopsy.dm" #include "code\WorkInProgress\buildmode.dm" #include "code\WorkInProgress\explosion_particles.dm" +#include "code\WorkInProgress\fireworks.dm" #include "code\WorkInProgress\periodic_news.dm" #include "code\WorkInProgress\Apples\artifacts.dm" #include "code\WorkInProgress\Cael_Aislinn\Jungle\falsewall.dm" diff --git a/code/WorkInProgress/fireworks.dm b/code/WorkInProgress/fireworks.dm new file mode 100644 index 00000000000..6372145968e --- /dev/null +++ b/code/WorkInProgress/fireworks.dm @@ -0,0 +1,66 @@ +obj/item/weapon/firework + name = "fireworks" + icon = 'icons/obj/fireworks.dmi' + icon_state = "rocket_0" + var/litzor = 0 + var/datum/effects/system/sparkel_spread/S +obj/item/weapon/firework/attackby(obj/item/weapon/W,mob/user) + if(litzor) + return + if (istype(W, /obj/item/weapon/weldingtool) && W:welding || istype(W,/obj/item/weapon/lighter) && W:lit) + for(var/mob/M in viewers(user)) + M << "[user] lits \the [src]" + litzor = 1 + icon_state = "rocket_1" + S = new() + S.set_up(5,0,src.loc) + sleep(30) + if(ismob(src.loc) || isobj(src.loc)) + S.attach(src.loc) + S.start() + del(src) + +obj/item/weapon/sparkler + name = "sparkler" + icon = 'icons/obj/fireworks.dmi' + icon_state = "sparkler_0" + var/litzor = 0 + var/datum/effect/effect/system/spark_spread/S +obj/item/weapon/sparkler/attackby(obj/item/weapon/W,mob/user) + if(litzor) + return + if (istype(W, /obj/item/weapon/weldingtool) && W:welding || istype(W,/obj/item/weapon/lighter) && W:lit) + for(var/mob/M in viewers(user)) + M << "[user] lits \the [src]" + litzor = 1 + icon_state = "sparkler_1" + var/b = rand(5,9) + for(var/xy, xy<=b, xy++) + S = new() + S.set_up(1,0,src.loc) + if(ismob(src.loc) || isobj(src.loc)) + S.attach(src.loc) + S.start() + sleep(10) + del(src) +/obj/crate/fireworks + name = "Fireworks!" +/obj/crate/fireworks/New() + new /obj/item/weapon/sparkler(src) + new /obj/item/weapon/sparkler(src) + new /obj/item/weapon/sparkler(src) + new /obj/item/weapon/sparkler(src) + new /obj/item/weapon/sparkler(src) + new /obj/item/weapon/sparkler(src) + new /obj/item/weapon/sparkler(src) + new /obj/item/weapon/sparkler(src) + new /obj/item/weapon/firework(src) + new /obj/item/weapon/firework(src) + new /obj/item/weapon/firework(src) + new /obj/item/weapon/firework(src) + new /obj/item/weapon/firework(src) + new /obj/item/weapon/firework(src) + new /obj/item/weapon/firework(src) + new /obj/item/weapon/firework(src) + new /obj/item/weapon/firework(src) + new /obj/item/weapon/firework(src) \ No newline at end of file diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 54927dff791..73baf47e2a0 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -1114,3 +1114,88 @@ steam.start() -- spawns the effect dmglevel = 3 if(dmglevel<4) holder.ex_act(dmglevel) + + +////////////////////////////////// +//////SPARKELS FIREWORKS +///////////////////////////////// +//////////////////////////// +/obj/effects/sparkels + name = "sparkel" + icon = 'icons/obj/fireworks.dmi'//findback + icon_state = "sparkel" + var/amount = 6.0 + anchored = 1.0 + mouse_opacity = 0 +/obj/effects/sparkels/New() + ..() + var/icon/I = new(src.icon,src.icon_state) + var/r = rand(0,255) + var/g = rand(0,255) + var/b = rand(0,255) + world.log << "Colour , [r],[g],[b]" + I.Blend(rgb(r,g,b),ICON_MULTIPLY) + src.icon = I + playsound(src.loc, "sparks", 100, 1) + var/turf/T = src.loc + if (istype(T, /turf)) + T.hotspot_expose(3000,100) + spawn (100) + del(src) + return + +/obj/effects/sparkels/Del() + var/turf/T = src.loc + if (istype(T, /turf)) + T.hotspot_expose(3000,100) + ..() + return +/obj/effects/sparkels/Move() + ..() + var/turf/T = src.loc + if (istype(T, /turf)) + T.hotspot_expose(3000,100) + return + + +/datum/effects/system/sparkel_spread + var/number = 3 + var/cardinals = 0 + var/turf/location + var/atom/holder + var/total_sparks = 0 // To stop it being spammed and lagging! + +/datum/effects/system/sparkel_spread/proc/set_up(n = 3, c = 0, loca) + if(n > 10) + n = 10 + number = n + cardinals = c + if(istype(loca, /turf/)) + location = loca + else + location = get_turf(loca) + +/datum/effects/system/sparkel_spread/proc/attach(atom/atom) + holder = atom + +/datum/effects/system/sparkel_spread/proc/start() + var/i = 0 + for(i=0, i 20) + return + spawn(0) + if(holder) + src.location = get_turf(holder) + var/obj/effects/sparkels/sparks = new(src.location) + src.total_sparks++ + var/direction + if(src.cardinals) + direction = pick(cardinal) + else + direction = pick(alldirs) + for(i=0, i