the cutting room mirror

Sunrise

please suggest an unused sprite with a clock or something

This game is still under active development.
Be aware that any unused content you find may become used or removed in the future. Please only add things to the article that are unlikely to ever be used, or went unused for some time. If they do get used, please remove them from the page and specify in the edit summary!

To do:
Alpha version 0.2 is out, replace all of the old pre-alpha content on this page with newly found unused content

Sunrise is an indie pixel game created by WushR00M Studios in GameMaker, following the story of Dash, who goes out to save the world after the sun is obliterated by their home city, Solaris', mayor.

Currently, the game is in its alpha stages.

Dot Dot Dot Secret#

At any point in the game, press the period button on your keyboard three times. The game will then cut to black and enter full-screen mode, regardless of your setting or any hotkeys you press, and will display ominous pixelated text in style similar to RPG dialog tickers. Glitched static audio will also play. After all text is displayed, the game will hang on the last screen, forcing a restart. The text on this screen reads as is:

TARGET NEUTRALIZED.
CONNECTION ESTABLISHED.

YOU MUST COMPLY WITH ALL THAT IS STATED HERE
OR DAMAGE TO DEVICE MAY OCCUR.

VERY WELL THEN
WHAT DO YOU KNOW ABOUT THIS GAME?

WHAT YOU KNOW ALREADY IS FALSE. COMPLETELY FALSE.

THINGS ARE NOT WHAT THEY SEEM AND YOU.
YOU ARE IN DANGER.

ARE YOU SURE YOU KNOW EVERYTHING?
BECAUSE, TRUST ME, YOU WILL KNOW EVERYTHING, SOON

YOSDGU    __HAV_E T_O HURR  Y,+ NO_-=W. BE{}FO{}@$$RE I%(#$)T'S %$TOO L  ATE&*

CONNECTION WITH HIGHER PRIORITY ESTABLISHED\nTERMINATE MISSION.

Unused Splash Screens#

There are multiple unused "splash screens" in the game's files:

Name

Artwork

Description

"bg_error_opengl"

An error message likely to appear at the start when WebGL was not detected present on your browser. Sunrise has been mentioned to never get and never will get an official browser version or demo even ever, so this goes unused

"bg_error_piracy"

An error message that would've appeared if Steam wasn't detected, which is odd considering the game is free, and isn't on Steam yet. Possibly paid versions coming soon?

"bg_splash_screen"

The unused splash screen in Alpha v0.2, left in the files as a remnant from v0.1, when the game would boot to this, before going to the title screen.

"bg_touch_here"

An unused splash screen with a prompt to tap anywhere to start playing

Unused Sprites#

Name

Artwork

Description

"fallbacktexture.png"

An unused "texture" used whenever the game is unable to find an asset needed, whenever the game can continue running. It is present in all GameMaker games and this never normally appears

"bg_menu_bg"

Leftover from Alpha v0.1, the menu background from that version left in the files. Alpha v0.2 uses a dark blue checkerboard background.

"spr_kickstarter_btn"

Unused button likely to contain a link to a possible future Kickstarter campaign?

"spr_maxwell"

An unused sprite containing "Maxwell", a famous internet cat meme, as a low-res PNG. Likely hidden as an Easter Egg to data-miners.

Music Notes

4 crudely drawn musical notes, to be used as "collectables" according to sprite names. Another oddity is the white background present in all 4 sprites.

"spr_top_bar"

Another leftover from v0.1, the unused top-bar with a not-so smooth purple gradient.

"spr_placeholder1" / "spr_placeholder3" & "spr_placeholder2"

Sunrise_Placeholder1.png Sunrise_Placeholder2.png

Two placeholder sprites, self-explanatory. There is also a third duplicate sprite of "spr_placeholder1" titled "spr_placeholder3".

"spr_wushroomstudios_logo"

A version of the WushR00M Studios logo not used in-game. The in-game one is very pixelated and contains no shading on the text, compared to the unused one, which is anti-aliased and has the black shading seen in promotional material.

Unused Debug Menu#

Hidden in the game, if you press ALT on the title screen, the game will cut to a debug menu. The debug menu is primitive, containing 5 main entries controlled by arrow-key input. Sunrise_DebugMenu.PNG

Go to Main Menu
Restart Game
Go to Menu
Factory Reset Data (impossible in browser)
Exit Game
Go to Level or World

Selecting "Go to Level or World" will bring up a dialog box that displays "not done yet" and an "OK" button, used as a placeholder until the Story Mode is added in. Selecting "Factory Reset Data (impossible in browser)" will bring up a question dialog box that displays "Very Dangerous!! Proceed?". Selecting "Yes" restarts the game and does nothing else, doesn't even wipe the "options.ini" file saved in your AppData folder.

The rest of the buttons are either self-explanatory or go to sub-menus which have self-explanatory and mixes of functional and non-functional options to choose from.

Unused Code#

"go_online()"#

An unused script to do exactly what it says: go online. Looking at the script, this was more than likely a tech demo, concept type of script, as no online interactions occur during this script. There is also a hardcoded filter to block usernames with "WushR00M" (the game's lead developer) in it:


function go_online()
{
    var acceptable = true;
    var uname = get_string_async("Enter a username for this account!", "Player1");
    
    if (global.onlineqm == true)
    {
        if (uname == "WushR00M")
        {
            acceptable = false;
            show_message_async("That username is taken. Please enter a new one!");
            go_online();
        }
        else
        {
            acceptable = true;
            
            for (var i = 1; i <= string_length(uname); i++)
            {
                if (string_pos(string_char_at(uname, i), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_") == 0)
                {
                    acceptable = false;
                    show_message_async("Your username is invalid. Please enter a new one!");
                    go_online();
                }
                else
                {
                    var pw = get_string_async("Enter in a secure password only you know and can remember!", "");
                    global.username = uname;
                    global.pw = pw;
                    global.userid = random_range(1, 1000000);
                    ini_open("user.ini");
                    ini_write_string("info", "uname", global.username);
                    ini_write_string("info", "uid", global.userid);
                    ini_write_string("info", "pw", base64_encode(pw));
                    ini_close();
                    show_message_async("Congratulations! Your account has been created and connected to Sunrise services. It may take a few moments for the account to show up.");
                    break;
                }
            }
        }
    }
    else
    {
        show_message_async("Congratulations on creating your own Sunrise local account to store your user data. You can always connect to the online services in the Account menu!");
    }
}

Unused Options Screen Code#

In the normal options screen, there are 3 types of input: toggles, sliders, and a button. There is a 4th unused drop-down type, and fully functional code for the drop-down type, however it doesn't seem to be used anywhere. Below are snippets compiled into one code block of the Options Screen's object's code showing the drop-down code in action:

Create Event

    else if (opt.type == "dropdown")
    {
        if (ini_key_exists("options", opt.id))
        {
            var val = ini_read_real("options", opt.id, opt.selected);
            val = clamp(val, 0, array_length(opt.choices) - 1);
            opt.selected = val;
            options[i] = opt;
        }
    }

function make_dropdown(arg0, arg1, arg2, arg3)
{
    return 
    {
        type: "dropdown",
        name: arg0,
        desc: arg1,
        choices: arg2,
        selected: arg3,
        open: false,
        id: string(arg0) + "_" + string(array_length(options))
    };
}

Step Event:

    else if (item.type == "dropdown")
    {
        for (var k = 0; k < array_length(options); k++)
        {
            if (options[k].type == "dropdown")
                options[k].open = (k == hovered_item) ? !options[k].open : false;
        }
    }

        if (item.type == "dropdown" && item.open)
        {
            var dd_x = padding_x + 200;
            var dd_y = item_rects[i].y + item_rects[i].h;
            var dd_w = 180;
            var dd_h = line_height;
            
            for (var c = 0; c < array_length(item.choices); c++)
            {
                var choice_y_start = dd_y + (dd_h * c);
                var choice_y_end = dd_y + (dd_h * (c + 1));
                
                if (mx > dd_x && mx < (dd_x + dd_w) && my > choice_y_start && my < choice_y_end)
                {
                    item.selected = c;
                    item.value = c;
                    item.open = false;
                    save_options();
                    break;
                }
            }
        }

        else if (opt.type == "dropdown")
            ini_write_real("options", opt.id, opt.selected);

Draw Event:

        else if (item.type == "dropdown")
        {
            var dd_x = var_x + 200;
            var dd_y = rect.y + (rect.h / 2);
            var selected_text = item.choices[item.selected];
            draw_set_color(c_white);
            draw_text(dd_x, dd_y, selected_text);
            var arrow_x = dd_x + 160;
            var arrow_y = dd_y;
            draw_triangle(arrow_x - 6, arrow_y - 4, arrow_x + 6, arrow_y - 4, arrow_x, arrow_y + 4, false);
            
            if (item.open)
            {
                var dd_w = 180;
                var dd_h = line_height;
                draw_set_color(c_black);
                draw_rectangle(dd_x, rect.y + rect.h, dd_x + dd_w, rect.y + rect.h + (dd_h * array_length(item.choices)), false);
                
                for (var k = 0; k < array_length(item.choices); k++)
                {
                    var choice_y = rect.y + rect.h + (dd_h * k) + (dd_h / 2);
                    
                    if (mx > dd_x && mx < (dd_x + dd_w) && my > (rect.y + rect.h + (dd_h * k)) && my < (rect.y + rect.h + (dd_h * (k + 1))))
                    {
                        draw_set_color(c_blue);
                        draw_rectangle(dd_x, rect.y + rect.h + (dd_h * k), dd_x + dd_w, rect.y + rect.h + (dd_h * (k + 1)), false);
                        draw_set_color(c_white);
                    }
                    else
                    {
                        draw_set_color(c_white);
                    }
                    
                    draw_text(dd_x + 8, choice_y, item.choices[k]);
                }
            }
        }