Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
Tags

Gizmo199

349
Posts
16
Topics
288
Followers
117
Following
A member registered Feb 17, 2017 · View creator page →

Creator of

Recent community posts

Thanks for playing! I mostly made this game for a 3 day game jam. haha. I probably won't expand it due to just not having any time these days. Thanks again! I am glad you enjoyed it! :)

hey! So the horrifi_fragment and horrifi_vertex are the code you would put into a new shader. Then you would just put the lib_horrifi code into a blank script and use the horrify_* functions. the unknown object should be the global.__horriFi variable. I would recommend dragging and dropping the .yymps file into your game and adding the lib_horrifi script and the shd_horrifi shader.

Very nice! I was actually toying with a wave function collapse algorithm for procgen in GM recently! This looks great! Good work!

(1 edit)

Yes! It has not been tested on every device, but it does work on other devices, and I would assume every device. Someone tested it on Xbox and it has been tested for mobile as well. 

So I never realized I don't have the alpha being transmitted to the shader. I think I am doing the alpha on creation only, but it needs to be done in the shader instead. So if you go into Scripts > lib_RenderPipelineScripts and go down to pipeline_render() and where it says m = RENDER_QUEUE[| i]; you can add this:

shader_set_uniform_f(shader_get_uniform(shader_current(), "alpha"), m.alpha);

And then I would change the shd_default fragment shader to this:

varying vec2 v_vTexcoord;
varying vec4 v_vColour;
varying vec3 v_vNormal;
varying vec3 v_vWorldPosition;
uniform vec3 ambient_color;
uniform vec3 sun_color;
uniform vec3 sun_pos;
uniform float sun_intensity;
uniform float lightTotal;
uniform vec3 lightPos[64];
uniform vec3 lightColor[64];
uniform float lightRange[64];
uniform float lightIsCone[64];
uniform vec3 lightDirection[64];
uniform float lightCutoffAngle[64];
uniform float alpha;
// Pointlights
float evaluate_point_light(vec3 world_position, vec3 world_normal, vec3 light_position, float light_radius)
{
    // Light position
    vec3 lightIncome = world_position - light_position;
    
    // Light magnitude
    float lightDist = length(lightIncome);
    
    // Send light back
    lightIncome = normalize(-lightIncome);
    float lDiff = max(dot(world_normal, lightIncome), 0.);
    
    // Attenuation
    float lightAtt = clamp( 1. - lightDist*lightDist/( light_radius*light_radius ), 0., 1. ); 
    lightAtt *= lightAtt;          // Return attenuation mulitplied by the light sent back     return lightAtt * lDiff; } // Spotlights float evaluate_cone_light(vec3 world_position, vec3 world_normal, vec3 light_direction, float cutoff, vec3 light_position, float light_radius) {     // Light position     vec3 lightIncome = world_position - light_position;          // Light magnitude     float lightDist = length(lightIncome);          // Send light back     lightIncome = normalize(-lightIncome);     float lDiff = max(dot(world_normal, lightIncome), 0.);          // Attenuation     float cAng = max(dot(lightIncome, -normalize(light_direction)), 0.);     float lightAtt = 0.;          // Cut off attenuation for spot lights     if ( cAng > cutoff )     {         lightAtt = max(( light_radius - lightDist ) / light_radius, 0.);     }          // Return attenuation by returning light     return lightAtt * lDiff; } void main() {     vec4 col = texture2D( gm_BaseTexture, v_vTexcoord ) * v_vColour;              // Alpha     if ( col.a < 0.05 ) { discard; }          // Diffuse and ambient     float nDot = max(dot(v_vNormal, normalize(sun_pos)), 0.);     col.rgb *= ( ambient_color ) + ( sun_color * sun_intensity ) * nDot;          // Spot & Point lights     if ( lightTotal > 0. ){         float eval = 0.;         for ( int i=0; i<64; i++ )         {             if ( float(i) > lightTotal ) { break; }                          if ( lightIsCone[i] == 1. ) {                 eval = evaluate_cone_light(v_vWorldPosition, v_vNormal, lightDirection[i], lightCutoffAngle[i], lightPos[i], lightRange[i]);             } else {                 eval = evaluate_point_light(v_vWorldPosition, v_vNormal, lightPos[i], lightRange[i]);             }             col += eval * vec4( min( lightColor[i], 1. ), 1. );         }     }     col.a = alpha;     // Final color     gl_FragColor = min( col, vec4(vec3(1), alpha) ); }

Hey! I actually have texcubes for this purpose (at least If I am understanding your question correctly. haha). Let me know if this helps! :)

Thanks so much for playing!! I am glad you enjoyed it! :)

absolutely! It's just a shader so you can treat it as you would any other shader. My example just shows it used on the application surfaces since it was designed with 'post processing' in mind, but it can be used for anything you want! You just might need to go into the scripts and copy some things for use outside of the functions I have provided. :)

Cool! Thanks for playing! Yeah we are going to try and expand it for sure! :D

Always coming in clutch!!! You are the best! I hope it didn't run too slowly for you! Thank you so much for playing! Can't wait to give it a watch!

Thank you so much for your hard work! You are a godsend to many smaller developers, as it can be difficult to get someone to play your games and get the necessary feedback required to improve as a game dev!

All hail ZakariaGhorfati!!!!

Thanks! We hope you enjoy it! Let us know what you think!!! :D

(1 edit)

Raven Estate

(2 edits)

Hey friend! Always a pleasure! Got another banger for ya! hahaha. We made an intense bullet-hell / roguelike hybrid of sorts. I cannot thank you enough for all of the hard work you put in for the community! You are a king!!! 

Play it now!

"Become the bullet-hell as you play a crow on a mission to expel the monsters from his newly acquired estate in this high-octane shoot-em-up" 13 Unique weapons 6 different items 8 Unique enemies 1 Monstrous boss Unlimited madness

This game was made over a period of 2 weeks for the #NoticeMe game jam.

 

Nicolai - Website | Twitter 

  Jeremy Lowther - Website 

  Gizmo199 - Website Twitter

(2 edits)

Hey! We would love to watch someone play our bullet-hell Raven Estate!!

PLAY HERE


"Become the bullet-hell as you play a crow on a mission to expel the monsters from his newly acquired estate in this high-octane shoot-em-up" 13 Unique weapons 6 different items 8 Unique enemies 1 Monstrous boss Unlimited madness

This game was made over a period of 2 weeks for the #NoticeMe game jam.

 

Nicolai - Website | Twitter 

  Jeremy Lowther - Website 

  Gizmo199 - Website Twitter

(4 edits)

PLAY HERE


"Become the bullet-hell as you play a crow on a mission to expel the monsters from his newly acquired estate in this high-octane shoot-em-up" 13 Unique weapons 6 different items 8 Unique enemies 1 Monstrous boss Unlimited madness

This game was made over a period of 2 weeks for the #NoticeMe game jam.


Nicolai - Website | Twitter 

  Jeremy Lowther - Website 

  Gizmo199 - Website Twitter

Thanks! haha. That means so much! :D

Wow that looks great! I'm glad you got it all worked out! :P

Hey thanks! Interesting that it is applying the lighting at all! Overriding shouldn't apply the default shader and thus not apply lighting. What you can do is just call the function:

my_model = __FauxtonWriteSpriteStack(sprite_index, x, y, z, color, alpha, angle);
my_tex = sprite_get_texture(ico_texref, 0);

and then in the draw event call:

matrix_set(matrix_world, matrix_build(x, y, z, xrot, yrot, zrot, xscale, yscale, zscale));
vertex_submit(my_model, pr_trianglelist, my_tex);
matrix_reset();

and that will make it so that you only get the actual vertex buffer of a sprite stack instead of all of the extra stuff that Fauxton comes with. Then you might want to make your own shader if but it shouldn't be necessary. 

as for 'joining' models together, the system isn't built for that currently, but I have made it work with 'nine slices' before using texcubes. You would essentially draw each frame of the fence to surfaces, apply the surfaces to the texcube, and then stretch the texcube / surfaces. This way GM will automatically use its 'nineslice' feature and there you go! You have multiple 'fences' within 1 vertex model (so that lighting will work as a whole instead of in pieces). 

Hope this helps! :)

I just re-read your question and if you mean storing individual sprites in an array and passing the array into the model loading functions then no. The fauxton system is designed to use GM specific images texture pages pointers via sprite indices. However, you could easily change this by going into the 'internal functions' and changing the create sprite stacking function to check for arrays. I am not at my computer currently but if you use the global search function in gm and look for something like "__internal" it should point you in the right direction. If not let me know and I can try to get back to you when I am back at my comp

(1 edit)

absolutely! I am assuming you mean using the likes of the 'sprite add' functions? So long as you have a pointer to the file loaded (eg the index returned from the function sprite_add) it should run through the regular steps of generating the vertex buffers. Just make sure sprites are loaded in before trying to make them a model. I haven't actually tested that so let me know how it goes! Haha. And thanks for the patience. It is long overdue for some quality of life improvements including adding in my .obj loading / batching library. Hopefully someday soon!

(3 edits)

Oh interesting! Not sure about the surface? IDK why it would cut a circle out. You can try turning off/on the 'texture auto-crop' feature in Tools > Texture Groups > Automatically crop. I've noticed that you sometimes have to have that option either on or off. This is because fauxton automatically finds UV coordinates for sprites so when you have too large of an image / surface GM will shuffle the texture pages around. Turning that feature on/off should (hopefully) fix the issue.

as for the alpha setting thanks for pointing this out! It used to work, but I forgot to set things correctly once I added in lighting. You should be able to go in to " shd_default " and at the last line where it says this:

gl_FragColor = min( col, vec4(1.) );

put this instead:

gl_FragColor = min( col, vec4(1., 1., 1., col.a) );

I believe this should work, but let me know. :)
sorry, its been a while since I have updated fauxton. I have been pretty busy with other project and its mostly a 'jumping off' point. Hopefully I will have some time in the future to update it.

no problem! Glad it's working. :)

(2 edits)

Hey! So you will need to manually draw the models every frame. This is because when you create a model using fauxton_model_create it creates the model for the renderer, so when you update the model it only updates the position of the model within the renderer. This is done for optimization reasons, but instead, you can manually draw models by first setting the models automatic drawing off, and then using the draw_override function like so:

Create event:

index = 0;
anim_frame[0] = fauxton_model_create( spr_anim_0, 0, 0, 0, 0, 0, 0 1, 1, 1);
anim_frame[1] = fauxton_model_create( spr_anim_1, 0, 0, 0, 0, 0, 0 1, 1, 1);
etc...
fauxton_model_draw_enable(anim_frame[0], false);
fauxton_model_draw_enable(anim_frame[1], false);
etc...

Draw event:

index++;
fauxton_model_set(anim_frame[index], x, y, z, xrot, yrot, image_angle, 1, 1, 1);
fauxton_model_draw_override(anim_frame[index]);

Hopefully, this helps! :) It is recommended to not use this though, but instead use something like SMF for 3D animations as sprite-stack animations tend to get very inefficient very quickly.

*Note let me know if this doesn't work and I will have to get back to you when I am at my computer. :P

Thanks so much! Very interesting about the Phoenix boss, I'm not sure why that one in particular would be lagging. I will look into it! 

Amazing! Thank you so much again! This helps us a ton! :D

haha. No worries! Yeah, its just a standard shader protocol. So you can even use Horrifi on individual sprites if you wanted! The GUI just makes it so that you an apply it to the entirety of the application surface. You could also set it as a 'layer script begin/end' for the layer you have all of your instances being drawn if you want as well. Totally up to you! :D I am glad you figured it out! :)

Thanks so much! Its always a blast to see you play games! I can't wait to watch!!! :D

hey! That would come more to either applying the application surface to a separate surface and then using 'draw_surface_part' or just applying horrifi to the specific thing you want to use it on. Horrifi can even be applied to sprites! Just use 

horrifi_set()
draw_sprte(sprite, index, x, y);
horrifi_reset();

Thank you! I'm so happy you are enjoying it! :)

(2 edits)

Portfolio | Email

I am not available for rev-share commissions, or anything related to NFT / Crypto-currency development

About

I am a Game Maker developer with nearly 16 years of experience in game production, design, and development.
I am highly motivated, organized, and proficient in many aspects of game design, programming, and graphical engineering.
I have shipped a number of titles and worked with teams to develop games from start to finish.


My talents include, but are not limited to

Other skills include

  • Data management
  • Save/Load systems
  • Collision & Physics
  • Inventory management
  • Dialogue systems
  • Buffer batching, storage, and import/export
  • RPG's
  • Platformers
  • Shoot-em-ups
  • Rogue-likes
  • Puzzles

If you are interested in my services, please contact me via email

Thank you, and have a wonderful day!

wow thanks so much for the feedback!! Yeah we absolutely have some tweaking to do with the difficulty! This was great! We really appreciate it and will work on dampening enemies for sure!!! :)

Here is a game we just released for the 2022 Global game jam! We would love some feedback on how we can improve / expand the game! It was made over the course of 2 weeks! I hope you enjoy it!! :D

RYD or DIE

  

"RYD or DIE" is a rogue-like action dungeon crawler with a fun Job System. Each job has 2 abilities that enhance 2 of the player's stats. Level up the player by defeating enemies and have your stats grow based on your job choice. Leveling up jobs not only increases how much they enhance your abilities but will eventually lead to mastery. Mastering a job permanently increases your stat growth for every level AND unlocks even more JOBS. Fight through increasingly stronger enemies in 3 different biomes. Experience all 16 jobs, from Thief to Janitor, in RYD OR DIE. The game includes:

  • 16 unlockable classes
  • 32 unique abilities (2 per class)
  • 3 unique procedurally generated job-sites
  • 25 Unique enemies
  • 25 Unique artifacts to collect
  • 7 stats
  • endless fun!

Hey friend! I hope you have been well! Loving the videos you have been posting! Glad you have been keeping up the great work! I got a new one for you if your up for it! :P Its a 2D rogue-like action RPG we just released for the 2022 global game jam! We are looking for feedback and people to play and check it out! 

RYD or DIE

  

"RYD or DIE" is a rogue-like action dungeon crawler with a fun Job System. Each job has 2 abilities that enhance 2 of the player's stats. Level up the player by defeating enemies and have your stats grow based on your job choice. Leveling up jobs not only increases how much they enhance your abilities but will eventually lead to mastery. Mastering a job permanently increases your stat growth for every level AND unlocks even more JOBS. Fight through increasingly stronger enemies in 3 different biomes. Experience all 16 jobs, from Thief to Janitor, in RYD OR DIE. The game includes:

  • 16 unlockable classes
  • 32 unique abilities (2 per class)
  • 3 unique procedurally generated job-sites
  • 25 Unique enemies
  • 25 Unique artifacts to collect
  • 7 stats
  • endless fun!

As always, keep up the great work!! :D

We would LOVE for you to give us some feed back on our recently released 2D Rogue-like Action RPG!!

RYD or DIE

  

"RYD or DIE" is a rogue-like action dungeon crawler with a fun Job System. Each job has 2 abilities that enhance 2 of the player's stats. Level up the player by defeating enemies and have your stats grow based on your job choice. Leveling up jobs not only increases how much they enhance your abilities but will eventually lead to mastery. Mastering a job permanently increases your stat growth for every level AND unlocks even more JOBS. Fight through increasingly stronger enemies in 3 different biomes. Experience all 16 jobs, from Thief to Janitor, in RYD OR DIE. The game includes:

  • 16 unlockable classes
  • 32 unique abilities (2 per class)
  • 3 unique procedurally generated job-sites
  • 25 Unique enemies
  • 25 Unique artifacts to collect
  • 7 stats
  • endless fun!

This game was made in 2 Weeks for Global Game Jam 2022!