Initial commit
This commit is contained in:
commit
9f4b2542cf
369
Effects/transitions.fx
Executable file
369
Effects/transitions.fx
Executable file
|
|
@ -0,0 +1,369 @@
|
||||||
|
#ifdef GL_ES
|
||||||
|
precision mediump float;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
sampler uImage0 : register(s0);
|
||||||
|
uniform float2 uResolution;
|
||||||
|
uniform float uTime;
|
||||||
|
float uProgress;
|
||||||
|
|
||||||
|
#define PI 3.14159
|
||||||
|
|
||||||
|
// Note: to whomever reads this trying to work out shaders, do NOT bundle them in one file like I have here. This is just an experiment.
|
||||||
|
|
||||||
|
float mod(float x, float y){
|
||||||
|
float z = x;
|
||||||
|
return z%y;
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 lines(float2 st : TEXCOORD0) : COLOR0 {
|
||||||
|
float time=uProgress*.06 + .5*PI;
|
||||||
|
float2 ce = float2(.5,.5);
|
||||||
|
|
||||||
|
float2 ef = st;
|
||||||
|
ef.x=ef.x-0.3*mod(ef.y,0.2) + 0.2*ceil(5.*ef.y);
|
||||||
|
|
||||||
|
float4 tex=tex2D(uImage0, st);
|
||||||
|
float4 gl_FragColor=float4(0,0,0,0);
|
||||||
|
float3 color = float3(0,0,0);
|
||||||
|
//float3 notcolor = float3(0,1,0);
|
||||||
|
float3 notcolor = tex.xyz;
|
||||||
|
|
||||||
|
if(sin(time*1.+1.5*PI)>0.){
|
||||||
|
if(ef.x-1.<sin(time)){
|
||||||
|
gl_FragColor=float4(notcolor,0.);
|
||||||
|
}else{
|
||||||
|
gl_FragColor=float4(color,1.);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(ef.x-1.<sin(time+PI)){
|
||||||
|
gl_FragColor=float4(color,1.);
|
||||||
|
}else{
|
||||||
|
gl_FragColor=float4(notcolor,0.);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//if(uProgress/100>st.x){gl_FragColor.r=1.;}
|
||||||
|
return gl_FragColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
float clam(float x, float minimum, float maximum){
|
||||||
|
if(x>maximum){return maximum;}
|
||||||
|
if(x<minimum){return minimum;}
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
float smooth(float edge0, float edge1, float x){
|
||||||
|
float t = clam((x - edge0) / (edge1 - edge0), 0.0, 1.0);
|
||||||
|
return t * t * (3.0 - 2.0 * t);
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 prideful(float2 st : TEXCOORD0) : COLOR0 {
|
||||||
|
float time=uProgress*.01*2.4;
|
||||||
|
|
||||||
|
float4 none=tex2D(uImage0, st);
|
||||||
|
float4 color=none;
|
||||||
|
float4 pink=float4(1.,.5,.5,1.);
|
||||||
|
float4 blue=float4(.5,.7,1.,1.);
|
||||||
|
|
||||||
|
for(float i=.0;i<.5;i+=.1){
|
||||||
|
float4 use=float4(1,1,1,1);
|
||||||
|
if(i==0. || i==.4){use=blue;}
|
||||||
|
if(i==.1 || (i>.29 && i<.31)){use=pink;}
|
||||||
|
float step1=smooth(0.,1.,time-i);
|
||||||
|
//float step1=time-i;
|
||||||
|
//float step2=time-i-1.;
|
||||||
|
float step2=smooth(0.,1.,time-1.-i);
|
||||||
|
if(abs(st.y-.1-2.*i)<.1 && st.x<step1){color=use;}
|
||||||
|
if(abs(st.y-.1-2.*i)<.1 && st.x<step2){color=none;}
|
||||||
|
}
|
||||||
|
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Work on this one more later.
|
||||||
|
float4 heart(float2 ef : TEXCOORD0) : COLOR0 {
|
||||||
|
//float time = uTime*2.;
|
||||||
|
float time=uProgress;
|
||||||
|
|
||||||
|
float2 ce = float2(.5,.5);
|
||||||
|
//float2 st = gl_FragCoord.xy/u_resolution.xy;
|
||||||
|
|
||||||
|
float2 st = ef; //* uResolution.x/uResolution.y;
|
||||||
|
st.y+=.15;
|
||||||
|
|
||||||
|
//st=(st-ce)/(6.0-clam(7.*sin(0.01*uProgress*PI), 0., 5.5))+ce;
|
||||||
|
|
||||||
|
if(time>50)st.y+=2.;
|
||||||
|
st.y-=1.-1.0*cos(0.01*uProgress*PI);
|
||||||
|
|
||||||
|
st=(st-ce)/(6.0-clam(7.*sin(0.01*uProgress*PI+0.3), 0., 5.5))+ce;
|
||||||
|
|
||||||
|
//st = (st-ce)*(1.0/(time*0.1)) + ce;
|
||||||
|
//st.y+=sin(time/30.)*0.15;
|
||||||
|
|
||||||
|
float3 color = float3(0,0,0);
|
||||||
|
|
||||||
|
if (
|
||||||
|
st.y>ce.y
|
||||||
|
&& abs(st.x-ce.x) < clam(.4*cos((ce.y-st.y)*PI), 0.0, 1.0)
|
||||||
|
&& st.y>0. && st.y<1.
|
||||||
|
|| st.y<ce.y
|
||||||
|
&& abs(st.x-ce.x)<.4
|
||||||
|
&& (
|
||||||
|
length(st-ce+float2(.19,0.))<.21
|
||||||
|
|| length(st-ce+float2(-.19,0.))<.21
|
||||||
|
)
|
||||||
|
){
|
||||||
|
return tex2D(uImage0, ef);
|
||||||
|
}
|
||||||
|
|
||||||
|
return float4(color,1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 uparrow(float2 st : TEXCOORD0) : COLOR0 {
|
||||||
|
float time=3.0*uProgress/100.;
|
||||||
|
float2 ef = st;
|
||||||
|
float2 ce = float2(.5,.5);
|
||||||
|
|
||||||
|
float3 colour = tex2D(uImage0, ef).rgb;
|
||||||
|
|
||||||
|
st.y-=abs(st.x-ce.x)+0.5 + 1.5;
|
||||||
|
st.y+=time;
|
||||||
|
if(st.y<ce.x)
|
||||||
|
colour = float3(0,0,0);
|
||||||
|
|
||||||
|
if(st.y+1.5<ce.x)
|
||||||
|
colour=tex2D(uImage0, ef).rgb;
|
||||||
|
|
||||||
|
return float4(colour, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 downarrow(float2 st : TEXCOORD0) : COLOR0 {
|
||||||
|
float time=3.0*uProgress/100.;
|
||||||
|
float2 ef = st;
|
||||||
|
float2 ce = float2(.5,.5);
|
||||||
|
|
||||||
|
float3 colour = tex2D(uImage0, ef).rgb;
|
||||||
|
|
||||||
|
st.y+=abs(st.x-ce.x)+0.5;
|
||||||
|
st.y-=time;
|
||||||
|
if(st.y<ce.x)
|
||||||
|
colour = float3(0,0,0);
|
||||||
|
|
||||||
|
if(st.y+1.5<ce.x)
|
||||||
|
colour=tex2D(uImage0, ef).rgb;
|
||||||
|
|
||||||
|
return float4(colour, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
float2 rotate(float2 st,float angle){
|
||||||
|
float2 ce = float2(.5,.5);
|
||||||
|
|
||||||
|
st-=ce;
|
||||||
|
return float2(
|
||||||
|
st.x*cos(angle)-st.y*sin(angle),
|
||||||
|
st.x*sin(angle)+st.y*cos(angle)
|
||||||
|
)+ce;
|
||||||
|
}
|
||||||
|
|
||||||
|
float3 star(float2 st, float3 colorOld, float3 colorNew){
|
||||||
|
int PT = 5;
|
||||||
|
float2 ce = float2(.5,.5);
|
||||||
|
|
||||||
|
float angle = 2.*PI/float(PT);
|
||||||
|
st=rotate(st,-.5*PI);
|
||||||
|
float3 newt = colorOld;
|
||||||
|
for(int i=0;i<PT;++i){
|
||||||
|
st = rotate(st,angle);
|
||||||
|
float te=st.x-ce.x; // Somehow putting this here makes this function 2 arithmetic operations per loop more efficient - just enough to actually compile with 5 points.
|
||||||
|
if(
|
||||||
|
te>0
|
||||||
|
&& abs(st.y-ce.y)+.5*te<.2
|
||||||
|
){newt=colorNew;}
|
||||||
|
|
||||||
|
}
|
||||||
|
return newt;
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 starry(float2 st : TEXCOORD0) : COLOR0 {
|
||||||
|
// int BURST = 1; // Remind me to figure out how to compile things ps_3_0 PROPERLY (without modder's toolkit) so I can increase this a bunch.
|
||||||
|
float2 ce = float2(.5,.5);
|
||||||
|
float fP = uProgress;
|
||||||
|
//float time = abs(sin(uProgress*0.5/PI));
|
||||||
|
//float2 st = gl_FragCoord.xy/u_resolution.xy;
|
||||||
|
|
||||||
|
float3 color2=float3(0,0,0);
|
||||||
|
float3 color =tex2D(uImage0, st).rgb;
|
||||||
|
|
||||||
|
if(fP>50){
|
||||||
|
fP-=50;
|
||||||
|
color2=color;
|
||||||
|
color=float3(0,0,0);
|
||||||
|
}
|
||||||
|
float time = fP*0.07;
|
||||||
|
|
||||||
|
float2 ef = st;
|
||||||
|
ef=(ef-ce)/time + ce;
|
||||||
|
ef = rotate(ef,PI);
|
||||||
|
color=star(ef,color,color2);
|
||||||
|
|
||||||
|
/*float separation = 1./(float(BURST)+1.);
|
||||||
|
for(int i=0;i<BURST;++i){
|
||||||
|
float2 ef = st;
|
||||||
|
float3 offset = float3(
|
||||||
|
separation*float(i) - (float(BURST)*separation - .5),
|
||||||
|
0.4*sin(float(i*40)),
|
||||||
|
separation*float(i)
|
||||||
|
);
|
||||||
|
ef+=offset.xy;
|
||||||
|
float ntime = time - offset.z;
|
||||||
|
if(ntime<0.)ntime=0.01;
|
||||||
|
ef=(ef-ce)/(ntime) + ce;
|
||||||
|
ef=rotate(ef,10.*offset.y+PI);
|
||||||
|
color=star(ef,color,color2);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
return float4(color,1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 columns_ordered(float2 st : TEXCOORD0) : COLOR0 {
|
||||||
|
float BURST = 16.;
|
||||||
|
float time=uProgress/15. + .5*PI;
|
||||||
|
float2 ce = float2(.5,.5);
|
||||||
|
|
||||||
|
float3 color=tex2D(uImage0, st).rgb;
|
||||||
|
|
||||||
|
float ttime = ceil(time/(PI*2.))*PI*2.-PI;
|
||||||
|
float segment=ceil(BURST*(st.x+ttime))/BURST;
|
||||||
|
st.y-=.3*sin(4.3*segment);
|
||||||
|
|
||||||
|
if(
|
||||||
|
abs(st.y-ce.y)<sin(time+segment)
|
||||||
|
){
|
||||||
|
color=float3(0,0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return float4(color,1.);
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 columns_sudden(float2 st : TEXCOORD0) : COLOR0 {
|
||||||
|
float BURST=16.;
|
||||||
|
float time=uProgress/(10.*PI);
|
||||||
|
float2 ce = float2(.5,.5);
|
||||||
|
|
||||||
|
float3 color=tex2D(uImage0, st).rgb;
|
||||||
|
|
||||||
|
float ttime = ceil(time/(PI*2.) - .2)*PI*2.;
|
||||||
|
|
||||||
|
float segment=ceil(BURST*(st.x+ttime))/BURST;
|
||||||
|
st.y-=.3*sin(4.3*segment);
|
||||||
|
|
||||||
|
float pause = abs(st.y-ce.y)+.3;
|
||||||
|
|
||||||
|
if(
|
||||||
|
.8*pause<abs(sin(time+.2*sin(segment*14.)))
|
||||||
|
){
|
||||||
|
color=float3(0,0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return float4(color,1.);
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 water(float2 st : TEXCOORD0) : COLOR0 {
|
||||||
|
float time=uProgress/4.+1.5*PI;
|
||||||
|
float2 ce = float2(.5,.5);
|
||||||
|
|
||||||
|
float3 color=tex2D(uImage0, st).rgb;
|
||||||
|
st.y = 1.-st.y;
|
||||||
|
|
||||||
|
st+=.2*sin(time+st.x+.25*PI);
|
||||||
|
st+=sin(.25*time);
|
||||||
|
|
||||||
|
if(st.y<ce.y) color=float3(0,0,0);
|
||||||
|
|
||||||
|
return float4(color,1.);
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 wonder(float2 st : TEXCOORD0) : COLOR0 {
|
||||||
|
float time=uProgress*0.02*PI-.5*PI;
|
||||||
|
float2 ce = float2(.5,.5);
|
||||||
|
float2 ef = st;
|
||||||
|
|
||||||
|
float3 color=float3(0,0,0);
|
||||||
|
|
||||||
|
st=rotate(st,5.*length(st-ce));
|
||||||
|
st=rotate(st,3.*sin(time));
|
||||||
|
st.x-=sin(time);
|
||||||
|
|
||||||
|
if(st.x-ce.x>abs(.2*sin(st.y*PI+.5*PI)))color=tex2D(uImage0, ef).rgb;
|
||||||
|
|
||||||
|
return float4(color,1.);
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 columns_sudden_angled(float2 st : TEXCOORD0) : COLOR0 {
|
||||||
|
float BURST=9.;
|
||||||
|
float time=(uProgress+50.)/(10.*PI);
|
||||||
|
float2 ce = float2(.5,.5);
|
||||||
|
|
||||||
|
float3 color2=tex2D(uImage0, st).rgb;
|
||||||
|
float3 color=float3(0,0,0);
|
||||||
|
st = rotate(st, 0.25*PI);
|
||||||
|
|
||||||
|
float ttime = ceil(time/(PI*2.) - .2)*PI*2.;
|
||||||
|
|
||||||
|
float segment=ceil(BURST*(st.x+ttime))/BURST;
|
||||||
|
st.y-=.4*sin(4.3*segment);
|
||||||
|
|
||||||
|
float pause = abs(st.y-ce.y)+.3;
|
||||||
|
|
||||||
|
if(
|
||||||
|
.8*pause<abs(1.2*sin(time+.2*sin(segment*14.)))
|
||||||
|
){
|
||||||
|
color=color2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return float4(color,1.);
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 circle(float2 st : TEXCOORD0) : COLOR0 {
|
||||||
|
//float time=uProgress;
|
||||||
|
float2 ce = float2(.5,.5);
|
||||||
|
|
||||||
|
float4 color=tex2D(uImage0, st);
|
||||||
|
float4 color2=float4(0,0,0,0);
|
||||||
|
float time = 60.-1.2*uProgress;
|
||||||
|
if(time<0.)time=uProgress*1.2-60.; // For some reason just using abs() here causes it not to compile.
|
||||||
|
|
||||||
|
//st.x = st.x*(uResolution.y/uResolution.x);
|
||||||
|
if(length(st-ce)>time*0.02)return color2;
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 doors(float2 st : TEXCOORD0) : COLOR0 {
|
||||||
|
float time=uProgress*0.01*PI;
|
||||||
|
float2 ce = float2(.5,.5);
|
||||||
|
|
||||||
|
float4 color2=tex2D(uImage0, st);
|
||||||
|
float4 color=float4(0,0,0,0);
|
||||||
|
|
||||||
|
if(.5-abs(st.x-ce.x)>0.5*sin(time))return color2;
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
technique Technique1
|
||||||
|
{
|
||||||
|
pass Lines {PixelShader = compile ps_2_0 lines();}
|
||||||
|
pass Prideful {PixelShader = compile ps_2_0 prideful();}
|
||||||
|
pass Loving {PixelShader = compile ps_2_0 heart();}
|
||||||
|
pass Rising {PixelShader = compile ps_2_0 uparrow();}
|
||||||
|
pass Falling {PixelShader = compile ps_2_0 downarrow();}
|
||||||
|
pass Starry {PixelShader = compile ps_2_0 starry();}
|
||||||
|
pass Winding {PixelShader = compile ps_2_0 columns_ordered();}
|
||||||
|
pass Jaws {PixelShader = compile ps_2_0 columns_sudden();}
|
||||||
|
pass Flooding {PixelShader = compile ps_2_0 water();}
|
||||||
|
pass Wonder {PixelShader = compile ps_2_0 wonder();}
|
||||||
|
pass Collapse {PixelShader = compile ps_2_0 columns_sudden_angled();}
|
||||||
|
pass Circle {PixelShader = compile ps_2_0 circle();}
|
||||||
|
pass Doors {PixelShader = compile ps_2_0 doors();}
|
||||||
|
}
|
||||||
BIN
Effects/transitions.xnb
Normal file
BIN
Effects/transitions.xnb
Normal file
Binary file not shown.
6
Localization/en-US.hjson
Normal file
6
Localization/en-US.hjson
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
PridefulHallowTooltip: Made it for a friend a while ago; might as well include it here as well!
|
||||||
|
DefaultTransitionTooltip:
|
||||||
|
'''
|
||||||
|
Determines which shader plays when none are available for your current location,
|
||||||
|
or anywhere when the Use Biome Specific Transitions config is disabled.
|
||||||
|
'''
|
||||||
16
Properties/launchSettings.json
Normal file
16
Properties/launchSettings.json
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"profiles": {
|
||||||
|
"Terraria": {
|
||||||
|
"commandName": "Executable",
|
||||||
|
"executablePath": "$(DotNetName)",
|
||||||
|
"commandLineArgs": "$(tMLPath)",
|
||||||
|
"workingDirectory": "$(tMLSteamPath)"
|
||||||
|
},
|
||||||
|
"TerrariaServer": {
|
||||||
|
"commandName": "Executable",
|
||||||
|
"executablePath": "$(DotNetName)",
|
||||||
|
"commandLineArgs": "$(tMLServerPath)",
|
||||||
|
"workingDirectory": "$(tMLSteamPath)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
79
TransitionPlayer.cs
Normal file
79
TransitionPlayer.cs
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
using Terraria;
|
||||||
|
using Terraria.DataStructures;
|
||||||
|
using Terraria.Graphics.Effects;
|
||||||
|
using Terraria.ID;
|
||||||
|
using Terraria.ModLoader;
|
||||||
|
|
||||||
|
namespace smoothDeathTransitions {
|
||||||
|
public class TransitionPlayer : ModPlayer {
|
||||||
|
|
||||||
|
/*public override void Kill(double damage, int hitDirection, bool pvp, PlayerDeathReason damageSource)
|
||||||
|
{
|
||||||
|
Player.respawnTimer=150; // For testing
|
||||||
|
}*/
|
||||||
|
|
||||||
|
public string GetBiomeSpecificTransitions(){
|
||||||
|
// This code is going to suck.
|
||||||
|
if (ModLoader.TryGetMod("CalamityMod", out Mod CalamityMod)){
|
||||||
|
if((bool)CalamityMod.Call("GetInZone", Player, "SunkenSea")
|
||||||
|
|| (bool)CalamityMod.Call("GetInZone", Player, "Abyss")
|
||||||
|
|| (bool)CalamityMod.Call("GetInZone", Player, "SulphurousSea")) return "Flooding";
|
||||||
|
if((bool)CalamityMod.Call("GetInZone", Player, "AstralInfection"))return "Winding";
|
||||||
|
}
|
||||||
|
if(ModLoader.TryGetMod("TheConfectionRebirth", out Mod ConfectionMod) && ConfectionMod.TryFind("ConfectionBiome",out ModBiome ConfectionBiome)){
|
||||||
|
if(Player.InModBiome(ConfectionBiome)){
|
||||||
|
if(ModContent.GetInstance<TransitionsConfig>().PridefulHallow)return "Prideful";
|
||||||
|
return "Wonder";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Player.ZoneShimmer)return "Starry";
|
||||||
|
if(Player.ZoneDungeon || Player.ZoneLihzhardTemple)return "Doors";
|
||||||
|
if(Player.ZoneJungle)return "Collapse";
|
||||||
|
if(Player.ZoneCorrupt)return "Winding";
|
||||||
|
if(Player.ZoneCrimson)return "Jaws";
|
||||||
|
if(Player.ZoneHallow){
|
||||||
|
if(ModContent.GetInstance<TransitionsConfig>().PridefulHallow)return "Prideful";
|
||||||
|
return "Loving";
|
||||||
|
}
|
||||||
|
if(Player.ZoneSnow)return "Wonder";
|
||||||
|
if(Player.ZoneBeach)return "Flooding";
|
||||||
|
if(Player.ZoneSkyHeight)return "Rising";
|
||||||
|
if(Player.ZoneNormalUnderground || Player.ZoneNormalCaverns)return "Circle";
|
||||||
|
if(Player.ZoneUnderworldHeight)return "Falling";
|
||||||
|
return ModContent.GetInstance<TransitionsConfig>().DefaultTransition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int transitionTicker = 0;
|
||||||
|
public int transitionTime = 200;
|
||||||
|
public string transitionChosen;
|
||||||
|
|
||||||
|
public override void PreUpdate()
|
||||||
|
{
|
||||||
|
// Check if appropriate conditions
|
||||||
|
if(Main.netMode != NetmodeID.Server){
|
||||||
|
// Check if the time is nigh
|
||||||
|
if(transitionTicker==0 && Player.dead && Player.respawnTimer<transitionTime/2){
|
||||||
|
transitionTicker=transitionTime;
|
||||||
|
if(ModContent.GetInstance<TransitionsConfig>().UseBiomeSpecificTransitions){transitionChosen=GetBiomeSpecificTransitions();}
|
||||||
|
else{transitionChosen=ModContent.GetInstance<TransitionsConfig>().DefaultTransition;}
|
||||||
|
if(!Filters.Scene[transitionChosen].IsActive()){
|
||||||
|
Filters.Scene.Activate(transitionChosen, Player.Center).GetShader();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(transitionTicker>0){
|
||||||
|
--transitionTicker;
|
||||||
|
float progress = ((float)(transitionTime-transitionTicker)/(float)transitionTime)*100f; // 0-100%
|
||||||
|
Filters.Scene[transitionChosen].GetShader().UseProgress(progress);
|
||||||
|
if(transitionTicker==0){
|
||||||
|
Filters.Scene[transitionChosen].Deactivate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
23
TransitionsConfig.cs
Normal file
23
TransitionsConfig.cs
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
using System.ComponentModel;
|
||||||
|
using Terraria.ModLoader.Config;
|
||||||
|
|
||||||
|
namespace smoothDeathTransitions
|
||||||
|
{
|
||||||
|
public class TransitionsConfig : ModConfig
|
||||||
|
{
|
||||||
|
public override ConfigScope Mode => ConfigScope.ClientSide;
|
||||||
|
|
||||||
|
[DefaultValue(true)]
|
||||||
|
public bool UseBiomeSpecificTransitions;
|
||||||
|
|
||||||
|
[DefaultValue(false)]
|
||||||
|
[TooltipKey("$PridefulHallowTooltip")]
|
||||||
|
public bool PridefulHallow;
|
||||||
|
|
||||||
|
[DefaultValue("Lines")]
|
||||||
|
[TooltipKey("$DefaultTransitionTooltip")]
|
||||||
|
[DrawTicks]
|
||||||
|
[OptionStrings(["Lines", "Loving", "Rising", "Falling", "Starry", "Winding", "Jaws", "Flooding", "Wonder", "Collapse", "Circle", "Doors", "Prideful"])]
|
||||||
|
public string DefaultTransition;
|
||||||
|
}
|
||||||
|
}
|
||||||
4
build.txt
Normal file
4
build.txt
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
displayName = Smooth Death Transitions
|
||||||
|
author = Emerald Quartz
|
||||||
|
side = Client
|
||||||
|
version = 2.0.0
|
||||||
19
description.txt
Normal file
19
description.txt
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
Updates the traditional death screen with smooth transition shaders when you respawn. Fully client-side, does not alter gameplay. Open-source, if you'd like a shader-specific example mod.
|
||||||
|
|
||||||
|
Currently available transitions:
|
||||||
|
- Lines - staggered vertical sweep. Default if biome-specific transitions are disabled.
|
||||||
|
- Loving - heart boxes in the screen and exits down. Edits pending.
|
||||||
|
- Rising and Falling - twin upwards and downwards sweeps inspired by their equivalents in Celeste.
|
||||||
|
- Starry - expanding 5-pointed star.
|
||||||
|
- Winding - a sort of unzipping-like thing.
|
||||||
|
- Jaws - series of erratic vertical bars.
|
||||||
|
- Flooding - waves envelop the screen briefly.
|
||||||
|
- Wonder - a swirly shading inspired by Rayman Legends.
|
||||||
|
- Collapse - jagged diagonal letterboxing.
|
||||||
|
- Circle - simple closing-in circle.
|
||||||
|
- Doors - two-sided shut and open.
|
||||||
|
- Prideful - trans flag sweep that optionally replaces the Hallow's ordinary transition.
|
||||||
|
|
||||||
|
Explicitly supports Calamity and Confection Rebaked, but all content mods should be fine; it'll just use the default transition.
|
||||||
|
|
||||||
|
Successor of the Celeste Death Transition mod, which was a two-hour project I made after getting bored one evening. This one has marginally more thought put into it.
|
||||||
23
description_workshop.txt
Normal file
23
description_workshop.txt
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
[h1]Smooth Death Transitions[/h1]
|
||||||
|
|
||||||
|
Updates the traditional death screen with smooth transition shaders when you respawn. Fully client-side, does not alter gameplay. Open-source, if you'd like a shader-specific example mod.
|
||||||
|
|
||||||
|
Currently available transitions:
|
||||||
|
[list]
|
||||||
|
[*][b]Lines[/b] - staggered vertical sweep. Default if biome-specific transitions are disabled.
|
||||||
|
[*][b]Loving[/b] - heart boxes in the screen and exits down. Edits pending.
|
||||||
|
[*][b]Rising[/b] and [b]Falling[/b] - twin upwards and downwards sweeps inspired by their equivalents in Celeste.
|
||||||
|
[*][b]Starry[/b] - expanding 5-pointed star.
|
||||||
|
[*][b]Winding[/b] - a sort of unzipping-like thing.
|
||||||
|
[*][b]Jaws[/b] - series of erratic vertical bars.
|
||||||
|
[*][b]Flooding[/b] - waves envelop the screen briefly.
|
||||||
|
[*][b]Wonder[/b] - a swirly shading inspired by Rayman Legends.
|
||||||
|
[*][b]Collapse[/b] - jagged diagonal letterboxing.
|
||||||
|
[*][b]Circle[/b] - simple closing-in circle.
|
||||||
|
[*][b]Doors[/b] - two-sided shut and open.
|
||||||
|
[*][b]Prideful[/b] - trans flag sweep that optionally replaces the Hallow's ordinary transition.
|
||||||
|
[/list]
|
||||||
|
|
||||||
|
Explicitly supports Calamity and Confection Rebaked, but all content mods should be fine; it'll just use the default transition.
|
||||||
|
|
||||||
|
Successor of the [url=https://steamcommunity.com/sharedfiles/filedetails/?id=3443385596]Celeste Death Transition[/url] mod, which was a short project I made after getting bored one evening. This one has marginally more thought put into it.
|
||||||
20
en-US.hjson
Normal file
20
en-US.hjson
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
Mods: {
|
||||||
|
smoothDeathTransitions: {
|
||||||
|
Configs: {
|
||||||
|
TransitionsConfig: {
|
||||||
|
PridefulHallow: {
|
||||||
|
Tooltip: ""
|
||||||
|
Label: Prideful Hallow
|
||||||
|
}
|
||||||
|
|
||||||
|
UseBiomeSpecificTransitions: {
|
||||||
|
Tooltip: ""
|
||||||
|
Label: Use Biome Specific Transitions
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayName: Transitions Config
|
||||||
|
DefaultTransition.Label: Default Transition
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
icon21.png
Normal file
BIN
icon21.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 781 B |
BIN
icon_small.png
Normal file
BIN
icon_small.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 261 B |
BIN
icon_small.png~
Normal file
BIN
icon_small.png~
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 259 B |
23
smoothDeathTransitions.cs
Normal file
23
smoothDeathTransitions.cs
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
|
using ReLogic.Content;
|
||||||
|
using Terraria;
|
||||||
|
using Terraria.Graphics.Effects;
|
||||||
|
using Terraria.Graphics.Shaders;
|
||||||
|
using Terraria.ID;
|
||||||
|
using Terraria.ModLoader;
|
||||||
|
|
||||||
|
namespace smoothDeathTransitions
|
||||||
|
{
|
||||||
|
public class SmoothDeathTransitions : Mod
|
||||||
|
{
|
||||||
|
public string[] transitionsAvailable = ["Lines", "Loving", "Rising", "Falling", "Starry", "Winding", "Jaws", "Flooding", "Wonder", "Prideful", "Collapse", "Circle", "Doors"];
|
||||||
|
public override void Load(){
|
||||||
|
if(Main.netMode != NetmodeID.Server){
|
||||||
|
Asset<Effect> screenRef = Assets.Request<Effect>("Effects/transitions");
|
||||||
|
for(int i=0;i<transitionsAvailable.Length;i++){
|
||||||
|
Filters.Scene[transitionsAvailable[i]] = new Filter(new ScreenShaderData(screenRef, transitionsAvailable[i]), EffectPriority.Medium);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
16
smoothDeathTransitions.csproj
Normal file
16
smoothDeathTransitions.csproj
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<!-- Import tModLoader mod properties -->
|
||||||
|
<Import Project="..\tModLoader.targets" />
|
||||||
|
|
||||||
|
<!-- General -->
|
||||||
|
<PropertyGroup>
|
||||||
|
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<!-- References -->
|
||||||
|
<ItemGroup>
|
||||||
|
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
Loading…
Reference in a new issue