* Modification de l'apparence de l'UI des dialogues * Changement de l'ordre de déblocage des mutations * Ajout d'une confirmation pour l'abandon * Ajout de la scène de fin avec la base Boréa, en tant que fin de démo * Modification des icône de durée de vie, temps de pousse, et de mort * Ajout d'un icône au dessus du joueur quand il n'a plus d'énergie * Amélioration des dialogues du jeu * Changement du modèle du téléphone * Ajout de cellule d'énergie et de cellule de talion trouvable sur la carte * Il est à nouveau possible de se recharger après la fin d'une région * Buff des mutations ancien sociale et solide * Modification de la mutation fertile (ne donne de gain de graine qu'à la maturation) * Ajout d'une récupération automatique des graines * Ajout de deux cartons de tutoriel ainsi qu'une option pour les revoir dans l'aide de jeu * Amélioration générale du tutoriel * Ajout d'un écran titre digne de ce nom * Lors de l'arrivée à destination, ne téléporte plus le joueur sur une map vide, mais directement dans les lieux de cinématique * Ajout graphique de plus de pattern de mousse et de roche * Le talion apparait maintenant sur toute la carte * La roche peut désormais apparaitre sur la zone de départ * Ajout dud modificateur de région Canyon * Equilibrage général * Fix de bugs en tout genre
99 lines
2.8 KiB
Plaintext
99 lines
2.8 KiB
Plaintext
shader_type spatial;
|
|
render_mode ambient_light_disabled;
|
|
//render_mode world_vertex_coords;
|
|
uniform vec3 color:source_color;
|
|
uniform sampler2D shadow_mask2d:source_color,repeat_enable,filter_linear;
|
|
uniform sampler3D shadow_mask3d:source_color,repeat_enable,filter_linear;
|
|
uniform sampler2D color_gradient:source_color;
|
|
uniform vec3 offset;
|
|
uniform float scale=0.75;
|
|
|
|
varying vec3 world_pos;
|
|
varying vec3 local_pos;
|
|
varying vec3 local_normal;
|
|
varying vec3 cam_pos;
|
|
|
|
vec4 triplanar_texture(sampler2D p_sampler, vec3 p_weights, vec3 p_triplanar_pos) {
|
|
vec4 samp = vec4(0.0);
|
|
samp += texture(p_sampler, p_triplanar_pos.xy) * p_weights.z;
|
|
samp += texture(p_sampler, p_triplanar_pos.xz) * p_weights.y;
|
|
samp += texture(p_sampler, p_triplanar_pos.zy * vec2(-1.0, 1.0)) * p_weights.x;
|
|
return samp;
|
|
}
|
|
|
|
vec4 sample_text3d(sampler3D mask, vec3 pos){
|
|
return texture(mask, pos);
|
|
}
|
|
|
|
|
|
vec3 tile(vec3 p, float size) {
|
|
return mod(p, size) - size * 0.5;
|
|
}
|
|
|
|
vec4 volume_march(vec3 ro, vec3 rd, int steps, float stepd){
|
|
float sample_scale=scale;
|
|
ro+=rd*40.0;
|
|
vec4 value=vec4(0.0);
|
|
for (int i=0;i<steps;i++){
|
|
value+=sample_text3d(shadow_mask3d,ro*sample_scale)*stepd;
|
|
if (value.r>=0.9){
|
|
break;
|
|
}
|
|
ro+=rd*stepd;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
|
|
void vertex() {
|
|
local_pos=VERTEX;
|
|
world_pos = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
|
|
local_normal=NORMAL;
|
|
cam_pos=CAMERA_POSITION_WORLD;
|
|
}
|
|
|
|
void fragment() {
|
|
ALBEDO=color;
|
|
if (abs(ALBEDO.r)<=0.0001) ALBEDO.r=0.0001;
|
|
if (abs(ALBEDO.g)<=0.0001) ALBEDO.g=0.0001;
|
|
if (abs(ALBEDO.b)<=0.0001) ALBEDO.b=0.0001;
|
|
|
|
SPECULAR=0.0;
|
|
//AO=0.0;
|
|
//EMISSION=vec3(0.01);
|
|
//IRRADIANCE=vec4(0.0);
|
|
}
|
|
|
|
void light() {
|
|
float NdotL = max(dot(NORMAL, LIGHT), 0.0);
|
|
float lit_intensity=smoothstep(0.0,0.5,NdotL*ATTENUATION);
|
|
//toon light, relatively flat color, no smooth blur edge
|
|
vec3 light_col=lit_intensity * LIGHT_COLOR / PI;
|
|
|
|
vec3 shadow_col=vec3(0.0);
|
|
{///////////////////////YOUR COLOR LOGIC IN HERE//////////////////
|
|
//SOME EXAMPLES:
|
|
|
|
//ray march polka dots
|
|
//vec3 ro=cam_pos+vec3(0.0,TIME*0.0,0.0);
|
|
//vec3 rd=normalize(world_pos-cam_pos);
|
|
//float ray_march_val=volume_march(ro,rd,100,0.1).r;
|
|
//shadow_col=mix(vec3(0.03,0.0,0.02),vec3(0.25,0.01,0.01),ray_march_val);
|
|
|
|
//RED shadow
|
|
shadow_col=vec3(1.0,0.0,0.0);
|
|
|
|
//triplanar texture
|
|
//shadow_col=triplanar_texture(shadow_mask2d,abs(local_normal),local_pos).rgb*0.1;
|
|
}
|
|
//TODO: handle cases where albedo.rgb is0
|
|
//divide by albedo to cancel out all color. may be weird when albedo.rgb is 0
|
|
//due to division by 0. could try to avoid albedo becoming absolute 0 in fragment
|
|
vec3 _shadow_col=shadow_col/ALBEDO;
|
|
|
|
if (LIGHT_IS_DIRECTIONAL)
|
|
DIFFUSE_LIGHT+=mix(_shadow_col,light_col,smoothstep(0.01,1.0,lit_intensity));
|
|
else//non directional light can be a bit funky
|
|
DIFFUSE_LIGHT+=mix(_shadow_col,light_col,smoothstep(0.01,1.0,lit_intensity))*ATTENUATION;
|
|
}
|