- Joined
- May 5, 2019
more time for people to see that he's live and are reminded to unfollowEven doing a 24 hour stream, he still made a net loss in follower count. How sad
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
more time for people to see that he's live and are reminded to unfollowEven doing a 24 hour stream, he still made a net loss in follower count. How sad
I thought I told you to stop shitting up the thread with ChatGPT slop.In the case of Heartbound, he uses a global data structure to track all player decisions and dialogue states (it's not like an mutable dynamic list, but more an immutable dictionary matrix... you can probably see the problems for development now). This makes the narrative flexible and persistent but also introduces performance overhead, especially when that data is accessed frequently during gameplay, dialogue rendering, and persisting across scenes. Because that global system is inherently inefficient, Jason is forced to aggressively “optimise” everything else just to keep performance acceptable. This includes micromanaging instance creation (there are many), obsessing over draw call reductions, and pre-parsing data. Not because these are elegant solutions, but because they’re necessary compensations for the weight of an overburdened global state machine. The "20% performance gain" isn’t a sign of thoughtful engineering: it’s a patchwork fix to a self-imposed problem.
Gamemaker games have very little protection and are easy to decompile.
Looks like Shieldman beat me to it a while ago, but I wanted to look at this 1337 ray tracing code so I took a stab at it. LetThemSneed mentioned a decompiler and I found the UndertaleModTool which was incredibly simple to use, Undertale fans might be insane but they do good work, I know very little about coding and even I could figure it out.What's extra retarded about all this is that he's making his game in Game Maker, which has decompile tools out there. Some one with know how can just decompile his game.
function scr_draw_light()
{
if (light_activate == 1)
{
light_activate = 0;
gpu_set_blendmode_ext(9, bm_one);
switch (light_direction)
{
case 0:
var lighted_x = floor(x - sprite_get_xoffset(sprite_index));
var lighted_y = floor(y - sprite_get_yoffset(sprite_index));
if (last_image != image_index || last_sprite != sprite_index)
{
last_image = image_index;
last_sprite = sprite_index;
var light_distance = floor(x - light_caster.x);
if (light_distance < 1)
light_distance = 1;
if (last_blend != light_caster.image_blend)
{
light_hue = color_get_hue(light_caster.image_blend);
light_saturation = color_get_saturation(light_caster.image_blend);
last_blend = light_caster.image_blend;
}
var light_value = light_luminosity * ((light_caster.sprite_width - light_distance) / light_caster.sprite_width);
light_value = clamp(light_value, 0, 255);
for (yy = 0; yy <= (sprite_height - 1); yy++)
{
for (xx = 0; xx <= (sprite_width - 1); xx++)
{
if (position_meeting(lighted_x + xx, lighted_y + yy, object_index))
{
pixels_found = 1;
repeat (light_diffuse)
{
if (position_meeting(lighted_x + xx, lighted_y + yy, object_index))
{
var draw_x = floor(lighted_x + xx);
var draw_y = floor(lighted_y + yy);
var new_value = light_value - (pixels_found * light_falloff);
if (new_value < 0)
new_value = 0;
var draw_color = make_color_hsv(light_hue, light_saturation, new_value);
draw_sprite_ext(spr_pixel, 0, draw_x, draw_y, image_xscale, image_yscale, image_angle, draw_color, image_alpha);
pixels_found++;
xx++;
}
}
break;
}
}
}
}
break;
case 2:
var lighted_x = floor(x - sprite_get_xoffset(sprite_index));
var lighted_y = floor(y - sprite_get_yoffset(sprite_index));
if (last_image != image_index || last_sprite != sprite_index)
{
last_image = image_index;
last_sprite = sprite_index;
var light_distance = floor(light_caster.x - x);
if (light_distance < 1)
light_distance = 1;
if (last_blend != light_caster.image_blend)
{
light_hue = color_get_hue(light_caster.image_blend);
light_saturation = color_get_saturation(light_caster.image_blend);
last_blend = light_caster.image_blend;
}
var light_value = light_luminosity * ((light_caster.sprite_width - light_distance) / light_caster.sprite_width);
light_value = clamp(light_value, 0, 255);
for (yy = 0; yy <= (sprite_height - 1); yy++)
{
xx = sprite_width - 1;
while (xx >= 0)
{
if (position_meeting(lighted_x + xx, lighted_y + yy, object_index))
{
pixels_found = 1;
repeat (light_diffuse)
{
if (position_meeting(lighted_x + xx, lighted_y + yy, object_index))
{
var draw_x = floor(lighted_x + xx);
var draw_y = floor(lighted_y + yy);
var new_value = light_value - (pixels_found * light_falloff);
if (new_value < 0)
new_value = 0;
var draw_color = make_color_hsv(light_hue, light_saturation, new_value);
draw_sprite_ext(spr_pixel, 0, draw_x, draw_y, image_xscale, image_yscale, image_angle, draw_color, image_alpha);
pixels_found++;
xx--;
}
}
break;
}
xx--;
}
}
}
break;
case 3:
var draw_hue = color_get_hue(light_caster.image_blend);
var draw_saturation = color_get_saturation(light_caster.image_blend);
var light_distance = floor(light_caster.y - y - (sprite_height * 0.5));
if (light_distance < 1)
light_distance = 1;
var new_value = light_luminosity * ((light_caster.sprite_height - light_distance) / light_caster.sprite_height);
if (new_value > 255)
new_value = 255;
if (new_value < 0)
new_value = 0;
var draw_color = make_color_hsv(light_hue, light_saturation, new_value);
var light_side = sign(light_caster.x - x);
switch (light_side)
{
case -1:
var light_x_offset = (light_caster.x + (light_caster.sprite_width * 0.5)) - (x - (sprite_width * 0.5));
draw_sprite_part_ext(sprite_index, image_index, 0, 0, light_x_offset, sprite_height, ceil(x - (sprite_width * 0.5)), ceil(y - (sprite_height * 0.5)), image_xscale, image_yscale, draw_color, image_alpha);
break;
case 1:
var light_x_offset = (x + (sprite_width * 0.5)) - (light_caster.x - (light_caster.sprite_width * 0.5));
draw_sprite_part_ext(sprite_index, image_index, sprite_width - light_x_offset, 0, sprite_width * 2, sprite_height, ceil((x - (sprite_width * 0.5) - light_x_offset) + sprite_width), ceil(y - (sprite_height * 0.5)), image_xscale, image_yscale, draw_color, image_alpha);
break;
}
break;
}
gpu_set_blendmode(bm_normal);
}
}
Cause he put it on steam and made it his whole brand thats hes a pro game dev if he gets his game to abandonware status no one gonna take him serious as a leet gamer coder so hes just doing minor things to look busy he should join the army if hes that great at looking busy while doing nothingWhy does Mald even pretend to care about his game at this point? He clearly doesn't want to bother with it. Is it because he knows people will shit on him if he finally abandons it?
That one does make sense though. The whole dog is standing where the light hits. Imagine a top down view. If you took a step forward in front of the window, your whole body would be lit, not just your legs.when the bottom of the dogs sprite enters the window area, the whole dog is lit up with the light
The audience he has doesn't care though. They wouldn't abandon him they don't care about heart bound beyond the fact that it annoys Jason.Why does Mald even pretend to care about his game at this point? He clearly doesn't want to bother with it. Is it because he knows people will shit on him if he finally abandons it?
I know it was meant as a joke option, but did anyone else actually pick Cold Fusion on the poll because they think it's the most likely option?
i put down the heat death of the universe because of the funny but if i were to recast my vote seriously it'd be chris roberts finishing scam citizen firstI know it was meant as a joke option, but did anyone else actually pick Cold Fusion on the poll because they think it's the most likely option?
"Just make your game bro" is crazy phrasing from our dear friend... does he even hear himself? How is he this retarded, that words spew out his mouth and not at any point make him think "shit wait i need to make my game"
I thought I told you to stop shitting up the thread with ChatGPT slop.
Fuck you, I had already wasted time typing out half a reply before I realized.
His shitty huge ass array does NOT cause performance issues. It also does NOT help with a "flexible and persistent narrative" in any way whatsoever, whatever the fuck that is supposed to mean.
Glance at Mald's youtube
See this
View attachment 7471073
Knew it was farmable content
Was not disappointed
The way he talks down on actual game devs like fox and cawthorn is funny if it weren't so sad lol
It doesn't matter what you are making, it just matters that you finish the things you are making [...]
It is said that the emptiest void in the universe is the Boötes Void, but his self-awareness is even emptier.Just make your game
I feel like he'll make infinitely more money by never finishing and promising more and more than by finishing.i put down the heat death of the universe because of the funny but if i were to recast my vote seriously it'd be chris roberts finishing scam citizen first
Fuck, I was so annoyed at Fagtree I didn't stop to think, you're right it does make sense. Though I still think it is more likely to be incidental due to the way he implemented the light rather than a purposeful accurate representation given the rest of his code.That one does make sense though. The whole dog is standing where the light hits. Imagine a top down view. If you took a step forward in front of the window, your whole body would be lit, not just your legs.
What makes you think he is actually optimizing anything? It's an Undertale clone made in GameMaker, compared to one of the more intensive GM games to come out, Nuclear Throne which has multiple AI moving around varied environments, tons of particle effects and projectiles and is still able to run on any phone, I think the game even ran on the PSVita. Mald's game is basically a visual novel, there's no self-imposed problem with performance, it's all just buzzwords to him so that he sounds smart.Jason is forced to aggressively “optimise” everything else just to keep performance acceptable. This includes micromanaging instance creation (there are many), obsessing over draw call reductions, and pre-parsing data. Not because these are elegant solutions, but because they’re necessary compensations for the weight of an overburdened global state machine. The "20% performance gain" isn’t a sign of thoughtful engineering: it’s a patchwork fix to a self-imposed problem.
It literally doesn't matter. Overhead compared to what? We're talking a few measly kb of text here. Now both of us have put more thoughts into the code of Heartbound than Jason has!The "flexible persistent" shit was steel-manning his excuse, and yes, the design of his array does cause overhead because it's in-process (from what I've seen). It's held it memory. It's immutable and big.
Yeah honestly it's not obvious lmao, I probably would've coded it your way instead and only noticed far later.Fuck, I was so annoyed at Fagtree I didn't stop to think, you're right it does make sense. Though I still think it is more likely to be incidental due to the way he implemented the light rather than a purposeful accurate representation given the rest of his code.
Overhead compared to what? We're talking a few measly kb of text here. Now both of us have put more thoughts into the code of Heartbound than Jason has!
What makes you think he is actually optimizing anything?
Unpaid QA/code review, since we're not contributing any code to the product, we're merely critiquing it.unpaid devs
Glance at Mald's youtube
See this
View attachment 7471073
Knew it was farmable content
Was not disappointed
The way he talks down on actual game devs like fox and cawthorn is funny if it weren't so sad lol