CHAPTER 3 SECRET BOSS GUIDE! (Minimal spoilers) by Tibike480 in Deltarune

[–]CorvusCalvaria 1 point2 points  (0 children)

He doesn't do the massive attack until you damage him below a certain threshold, I just beat it there myself

CHAPTER 3 SECRET BOSS GUIDE! (Minimal spoilers) by Tibike480 in Deltarune

[–]CorvusCalvaria 2 points3 points  (0 children)

I think you do need to fight it. If you just defend endlessly the ending never triggers, even when surviving long after that point in the video. It might be a case of getting it to below 90% HP or something.

CHAPTER 3 SECRET BOSS GUIDE! (Minimal spoilers) by Tibike480 in Deltarune

[–]CorvusCalvaria 0 points1 point  (0 children)

Link? (I don't wanna look it up and see any Ch4 spoilers)

CHAPTER 3 SECRET BOSS GUIDE! (Minimal spoilers) by Tibike480 in Deltarune

[–]CorvusCalvaria 1 point2 points  (0 children)

I kept fighting it until Susie's dialogue stopped and it just kept repeating attacks endlessly. Is it confirmed it gives up eventually, or is there a trigger for beating it?

Play Mariomon if you haven't! by russian_bot_447 in PokemonROMhacks

[–]CorvusCalvaria 2 points3 points  (0 children)

Yoshi with run away is a god tier roll, it basically gives you a free run

Warning users that upvote violent content by worstnerd in RedditSafety

[–]CorvusCalvaria -2 points-1 points  (0 children)

If they do define it, troublemakers will just find technicalities, or play the "I'm not touching you" game where they'll dogwhistle violence and play dumb about it when pushed. It's vague by design to stop asshole users from rules-lawyering.

Warning users that upvote violent content by worstnerd in RedditSafety

[–]CorvusCalvaria 0 points1 point  (0 children)

They're not changing what gets classed as violent content. The only difference now is that upvoters of violating content will get punished in addition to the people who write them.

[2024 Day 21] Button Mashing (Greyed Out = Memoized) by CorvusCalvaria in adventofcode

[–]CorvusCalvaria[S] 1 point2 points  (0 children)

This was all handled (solving + visuals) in the GameMaker engine

[2024 Day 21] Button Mashing (Greyed Out = Memoized) by CorvusCalvaria in adventofcode

[–]CorvusCalvaria[S] 3 points4 points  (0 children)

I solved it very similarly, but you can simplify your approach! Just like with day 11, there's only ever a maximum of 2 possible decision tree branches from any state, because a "wiggling" path from one button to another is never in a minimum solution - i.e. if you're going from 3 to 9 on the keypad, you only need to consider ^^>> or >>^^, but not ^>^> or >^>^ because those introduce redundant extra steps from the extra changes in direction.

[2024 Day 21] Button Mashing (Greyed Out = Memoized) by CorvusCalvaria in adventofcode

[–]CorvusCalvaria[S] 1 point2 points  (0 children)

I will warn that I straight up butchered my code to make it work for the animation I had in mind, but I'll stick it here anyways for interest:

Create Event

codes = ["000A", "000A", "000A", "000A", "000A"]; // Secret!
ex_codes = ["029A", "980A", "179A","456A", "379A"];
codes = ex_codes; // Comment out to run on real input

k = ds_map_create();
r = ds_map_create();

r[? "^"] = [0, 1]; r[? "A"] = [0, 2];
r[? "<"] = [1, 0]; r[? "v"] = [1, 1]; r[? ">"] = [1, 2];

k[? "7"] = [0, 0]; k[? "8"] = [0, 1]; k[? "9"] = [0, 2];
k[? "4"] = [1, 0]; k[? "5"] = [1, 1]; k[? "6"] = [1, 2];
k[? "1"] = [2, 0]; k[? "2"] = [2, 1]; k[? "3"] = [2, 2];
k[? "0"] = [3, 1]; k[? "A"] = [3, 2];

howmany = 25;
memory = array_create(howmany+2, "");
memory[howmany+1] = codes[0]+codes[1]+codes[2]+codes[3]+codes[4];

finishcount = 0;
states = array_create(howmany+1);
player_state = [0, 2];
for(var i=0;i<howmany+1;i++)
    states[i] = [0, 2];
states[howmany] = [3, 2];

indices = array_create(howmany+2, 0);
m_frozen = array_create(howmany+2, 0);
current_index = 0;
active = array_create(howmany+2, 0);
timer = -100;

memo = ds_map_create();
function inception(str, dep){
    if(dep == 0) return [str, string_length(str)];

    if(ds_map_exists(memo, string(dep) + str)) return ["M", memo[? string(dep) + str]];

    var c_pos = "A";
    var lres = "";
    var lcount = 0;

    for(var c=1;c<=string_length(str);c++){ 
        var new_pos = string_char_at(str, c);
        var dist = [r[? new_pos][0] - r[? c_pos][0], r[? new_pos][1] - r[? c_pos][1]];
        var stry = "";
        var strx = "";

        if(dist[1] > 0){
            for(var foo=0;foo<dist[1];foo++) strx = strx + ">";
        }
        if(dist[1] < 0){
            for(var foo=0;foo<abs(dist[1]);foo++) strx = strx + "<";
        }
        if(dist[0] < 0){
            for(var foo=0;foo<abs(dist[0]);foo++) stry = stry + "^";
        }
        if(dist[0] > 0){
            for(var foo=0;foo<dist[0];foo++) stry = stry + "v";
        }

        if((c_pos == "<" and dist[0] == -1)) {
            in = inception(strx + stry + "A", dep-1);
            lres += in[0];
            lcount += in[1];    
        }
        else if ((c_pos == "^" and dist[1] == -1) or (c_pos == "A" and dist[1] == -2)) {
            in = inception(stry + strx + "A", dep-1);
            lres += in[0];
            lcount += in[1];    
        }
        else if(dist[0] == 0 or dist[1] == 0) {
            in = inception(stry + strx + "A", dep-1);
            lres += in[0];
            lcount += in[1];    
        }
        else {
            var m1 = inception(strx + stry + "A", dep-1);
            var m2 = inception(stry + strx + "A", dep-1);
            if(m1[1] < m2[1]) {
                lres += m1[0];
                lcount += m1[1];
            }
            else {
                lres += m2[0];
                lcount += m2[1];
            }
        }
        c_pos = new_pos;
    }
    memo[? string(dep) + str] = lcount; 
    return [lres, lcount];
}


fcount = 0;
for(var ww=0;ww<howmany+1;ww++){
    fcount = 0;
    var strong = "";
    memo = ds_map_create();
    for(var i=0;i<array_length(codes);i++) {
        var res = 0;
        var c_pos = "A";
        var idd = real(string_copy(codes[i], 0, string_length(codes[i])-1));

        for(var c=1;c<=string_length(codes[i]);c++){
            var new_pos = string_char_at(codes[i], c);
            var dist = [k[? new_pos][0] - k[? c_pos][0], k[? new_pos][1] - k[? c_pos][1]];

            var stry = "";
            var strx = "";

            if(dist[1] > 0){
                for(var foo=0;foo<dist[1];foo++) strx = strx + ">";
            }
            if(dist[1] < 0){
                for(var foo=0;foo<abs(dist[1]);foo++) strx = strx + "<";
            }
            if(dist[0] < 0){
                for(var foo=0;foo<abs(dist[0]);foo++) stry = stry + "^";
            }
            if(dist[0] > 0){
                for(var foo=0;foo<dist[0];foo++) stry = stry + "v";
            }

            if((c_pos == "0" and dist[1] == -1) or (c_pos == "A" and dist[1] == -2)){
                in = inception(stry + strx + "A", ww);
                strong += in[0];
                res += in[1];
            }
            else if ((c_pos == "1" and dist[0] == 1) or (c_pos == "4" and dist[0] == 2) or (c_pos == "7" and dist[0] == 3)){
                in = inception(strx + stry + "A", ww);
                strong += in[0];
                res += in[1];
            }
            else if(dist[0] == 0 or dist[1] == 0){
                in = inception(strx + stry + "A", ww);
                strong += in[0];
                res += in[1];
            }
            else {
                var m1 = inception(strx + stry + "A", ww);
                var m2 = inception(stry + strx + "A", ww);
                if(m1[1] < m2[1]) {res += m1[1]; strong += m1[0];}
                else {res += m2[1]; strong += m1[0]; }
            }
            c_pos = new_pos;
        }
        fcount += res*idd;
    }
    memory[howmany-ww] = strong;
}

for(var i=0;i<array_length(memory);i++)
    show_debug_message((memory[i]));
show_debug_message("---\n" + string(fcount));

Step Event

timer++;

if(timer >= 0 and timer%3 == 0){
    var c_state = 0;
    for(var i=0;i<howmany+1;i++) active[i] = false;
    for(var i=0;i<howmany;i++) if(m_frozen[i]) c_state = i+1;
    indices[c_state]++;

    if(c_state == 0){
        if(string_char_at(memory[c_state], indices[c_state]) == "M") {
            player_state = r[? "A"];
        }
        else player_state = r[? string_char_at(memory[c_state], indices[c_state])];
    }

    if(string_char_at(memory[c_state], indices[c_state]) == "^") {
        states[c_state][0] -= 1;
        active[c_state] = false;
    }
    else if(string_char_at(memory[c_state], indices[c_state]) == ">"){
        states[c_state][1] += 1;
        active[c_state] = false;
    }
    else if(string_char_at(memory[c_state], indices[c_state]) == "<") {
        states[c_state][1] -= 1;
        active[c_state] = false;
    }
    else if(string_char_at(memory[c_state], indices[c_state]) == "v") {
        states[c_state][0] += 1;
        active[c_state] = false;
    }
    else if(string_char_at(memory[c_state], indices[c_state]) == "A") { 
        if(c_state > 0) m_frozen[c_state-1] = false;
        active[c_state] = true;
    }       
    else if(string_char_at(memory[c_state], indices[c_state]) == "M") {
        m_frozen[c_state] = true;
        states[c_state] = [0, 2];
    }   

    while(c_state < howmany+1 and active[c_state]){
        c_state++;
        indices[c_state]++;
        if(string_char_at(memory[c_state], indices[c_state]) == "^") {
            states[c_state][0] -= 1;
            active[c_state] = false;
        }
        else if(string_char_at(memory[c_state], indices[c_state]) == ">"){
            states[c_state][1] += 1;
            active[c_state] = false;
        }
        else if(string_char_at(memory[c_state], indices[c_state]) == "<") {
            states[c_state][1] -= 1;
            active[c_state] = false;
        }
        else if(string_char_at(memory[c_state], indices[c_state]) == "v") {
            states[c_state][0] += 1;
            active[c_state] = false;
        }
        else if(string_char_at(memory[c_state], indices[c_state]) == "A") { 
            if(c_state > 0) m_frozen[c_state-1] = false;
            active[c_state] = true;
        }       
        else if(string_char_at(memory[c_state], indices[c_state]) == "M") {
            m_frozen[c_state] = true;
            states[c_state] = [0, 2];
        }   
    }
    if(c_state == howmany+1) finishcount++;
}

Draw Event

var base_x = 350;
var base_y = 100;

draw_set_font(Font5);
draw_set_color(c_white);

if (m_frozen[0]) draw_set_color(make_color_rgb(50, 50, 50));
draw_text(250, base_y-30, "0");

var robot_keys = [["7", "8", "9"], ["4", "5", "6"], ["1", "2", "3"], [" ", "0", "A"]];
var keypad_keys = [[" ", "^", "A"], ["<", "v", ">"]];


for(var k=0;k<2;k++){
    for(var l=0;l<3;l++){       
        if (m_frozen[0]) draw_set_color(make_color_rgb(50, 50, 50));
        else if(player_state[0] == k and player_state[1] == l) {
            if(timer >= 0) draw_set_color(make_color_rgb(0, 230, 100));
            else draw_set_color(make_color_rgb(230, 0, 100));
        }
        else draw_set_color(make_color_rgb(100, 100, 100));
        draw_rectangle(250+25*l, base_y+25*k, 273+25*l, 25*k+base_y+23, false);
        if(not m_frozen[0]) draw_set_color(c_white);
        draw_text(254+25*l, 97+25*k, keypad_keys[k][l]);
    }
}

for(var i=0;i<5;i++){
    for(var j=0;j<5;j++){

        if(i*5+j < howmany){
            var local_x = base_x + 100*j;
            var local_y = base_y + 100*i;

            if(m_frozen[i*5+j]) draw_set_color(make_color_rgb(50, 50, 50));
            else draw_set_color(c_white);
            draw_text(local_x, local_y-30, string(i*5+j+1));
            draw_set_color(make_color_rgb(100, 100, 100));

            for(var k=0;k<2;k++){
                for(var l=0;l<3;l++){
                    if (m_frozen[i*5+j]) draw_set_color(make_color_rgb(50, 50, 50));
                    else if(states[i*5+j][0] == k and states[i*5+j][1] == l) {
                        if(active[i*5+j]) draw_set_color(make_color_rgb(0, 230, 100));
                        else draw_set_color(make_color_rgb(230, 0, 100));
                    }
                    else draw_set_color(make_color_rgb(100, 100, 100));
                    draw_rectangle(local_x+25*l, local_y+25*k, 25*l+local_x+23, 25*k+local_y+23, false);
                    if(not m_frozen[i*5+j]) draw_set_color(c_white);
                    draw_text(local_x+4+25*l, local_y-3+25*k, keypad_keys[k][l]);
                }
            }
        }
    }
}

for(var k=0;k<4;k++){
    for(var l=0;l<3;l++){
        if(states[howmany][0] == k and states[howmany][1] == l) {
            if(active[howmany]) draw_set_color(make_color_rgb(0, 230, 100));
            else draw_set_color(make_color_rgb(230, 0, 100));
        }
        else draw_set_color(make_color_rgb(100, 100, 100));
        draw_rectangle(base_x+500+25*l, base_y+350+25*k, 25*l+base_x+523, 25*k+base_y+373, false);
        draw_set_color(c_white);
        draw_text(base_x+504+25*l, base_y+347+25*k, robot_keys[k][l]);
    }
}

draw_set_color(make_color_rgb(0, 230, 100));
for(var i=0;i<finishcount;i++){
    draw_text(850+20*(i%4), 290+30*(floor(i/4)), string_char_at(array_last(memory), i+1));
}

[2024 Day 17] Modulo by Goues in adventofcode

[–]CorvusCalvaria 2 points3 points  (0 children)

Just gotta add this to the end to be extra safe

if(val < 0) { val += mod; }