We have upgraded to the latest version of MediaWiki and now support TLS1.2 and transcoding!
Please contact us via Discord or Twitter if you experience any problems.

CrossCode

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

CrossCode

Developers: Radical Fish Games
Publishers: Deck13, WhisperGames (China), DANGEN Entertainment (Japan), Mayflower Entertainment (South Korea)
Platforms: Windows, Mac OS X, Linux
Released internationally: September 21, 2018


AnimationsIcon.png This game has unused animations.
CodeIcon.png This game has unused code.
GraphicsIcon.png This game has unused graphics.
MusicIcon.png This game has unused music.
TextIcon.png This game has unused text.
DebugIcon.png This game has debugging material.


NotesIcon.png This game has a notes page

This cactus is UNDER CONSTRUCTION
This article is a work in progress.
...Well, all the articles here are, in a way. But this one moreso, and the article may contain incomplete information and editor's notes.
<Sanky> 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!
Hmmm...
To do:
Break this up into sub-pages

CrossCode is a 16-bit style Sci-Fi ARPG, which is set in a fictional MMORPG. That's meta.

Interestingly, CrossCode is built on HTML5 using the impact.js game engine, originally being an experimental demo that was played through a web browser.

Concept Art

Hmmm...
To do:
There are a few more images stored in the pyxl format

There is quite a lot concept art and mockups within the game files, most of them in conveniently named directories.

Lea Sketch

CrossCode-LeaRunConcept.png

\assets\media\concept\title-bot-chan-dash.png

A rough sketch of Lea running, who was supposedly called "bot-chan" during early development judging by the file name. Quite fitting.

This sketch was used a base for demo's start screen background, which also remains in unused in the final version.

Equipment Screen

CrossCode-EquipmentItemsScreenMockup.png

\assets\media\concept\menu\equipment-sd.png

CrossCode-EquipmentScreenMockup.png

\assets\media\concept\menu\equipment-hd-items.png

Some equipment screen mockups. Notice the older icons and colors.

Game Areas

MS Solar

CrossCode-CargoShipMockup.png

\assets\media\concept\map\ship-recoloring\cargo-ship-original.png

A mockup of the MS Solar area

CrossCode-CargoShipMockupRecolor.png

\assets\media\concept\map\ship-recoloring\cargo-ship-recolor1.png

A recolor of the above.

The Bergen "Train"

CorssCode-TrainMockup.png

\assets\media\concept\map\bergen-village\train.png

A mockup of the "train" used to connect Bergen Village and Maroon Valley.

Unused Graphics

GUI

Main Menu

CrossCode-OldLogo.png

\assets\media\gui\title-logo.png

An old version of the game's logo.

CrossCode-OldTitleBG.png

\assets\media\gui\title-bg.png

An old version of the game's title screen background.

HUD

CrossCode-OldHud.png

\assets\media\gui\unused\status-gui.png

An old version of the game's HUD.

CrossCode-GuiPause.png

\assets\media\gui\pause_word.png

A pause header, being leftover from earlier versions of the game.

Settings

CrossCode-OldGamepadIcons.png

\assets\media\font\icons-gamepad-old.png

Old gamepad icons.

Placeholder Circuit Icons

CrossCode-PlaceholderCircutIcons.png

\assets\media\gui\circuit-icons.png

A bunch of placeholder circuit icons.

Old Buttons

CrossCode-OldButton1.png

\assets\game\page\img\button1.png

CrossCode-OldButton2.png

\assets\game\page\img\button2.png

Some old buttons leftover from the demo.

Fonts

CrossCode-UnusedFont1.png

\assets\media\font\_unused\04b03.font.png

CrossCode-UnusedFont2.png

\assets\media\font\_unused\nina-old.png

CrossCode-UnusedFont3.png

\assets\media\font\_unused\small-font.png

CrossCode-UnusedFont4.png

\assets\media\font\_unused\tahoma.png

A bunch of unused fonts.

CrossCode-OldHitNumbers.png

\assets\media\entity\map-gui\_unused\hit-numbers.png

Old hit numbers.

Portraits

CrossCode-OldAvatarPortraits.png

\assets\media\face\avatars.png

CrossCode-OldNpcPortraits.png

\assets\media\face\npcs.png

CorssCode-OldShadPortaits.png

\assets\media\face\shad.png

Some old npc portraits.

CrossCode-GeneralColor.png

\assets\media\face\general.png

A full color version of the general, which is never used since he is always seen as a hologram.

CrossCode-NpcPlaceholder.png

\assets\media\face\other.png

NPC placeholder portraits.

CrossCode-BunnyPortrait.png

\assets\media\face\bunny.png

Portraits for some bunny girl. Probably was leftover from the demo.

NPC Sprites

CrossCode-ColorGeneralOverworld.png

\assets\media\entity\npc\advisors.png

Full color overworld sprites of the general.

CrossCode-OverworldNpcPlaceholders.png

\assets\media\entity\npc\advisors.png

Overworld NPC placeholders.


CrossCode-BunnyOverworld.png

\assets\media\entity\npc\bunny.png

Overworld sprites for the bunny girl.

Enemies

CrossCode-JunglePlantOld.png

\assets\media\entity\enemy\jungle-plant-old.png

An old version of the Argeby enemy.


CrossCode-CargoCrabBossAlt.png

\assets\media\entity\enemy\boss\cargo-crab-special.png

An special version of the cargo crab boss fought in the beginning of the game. This used to accessible in the demo but was removed at some point.

Alternate Gold Chest

CrossCode-GreenTreasureLock.png

\assets\media\entity\objects\treasure.png

An alternate version of the gold chest lock.

Unused Animations

Attack Animations

CrossCode-LegendaryFrobbitAttackAnims.png

\assets\media\entity\enemy\frobbit-legend.png

CrossCode-GoatFather.png

\assets\media\entity\enemy\goat-father.png

There are many mini-boss enemies in the game which are variations of more common enemies. Some the enemies appear in-game but are never fought. However, the attack animations for thees enemies still exist within their sprite sheets.

Puella Docta Placeholder

CrossCode-PuellaDoctaPlaceholderSprite.png

\assets\media\entity\npc\guest\puella-docta.png

A placeholder sitting sprite for the guest character Puella Docta was left in the spritesheet for some reason.

Debug Stuff

Hmmm...
To do:
See if it is possible to enable the debug mode, if there is one. Also, there is a METRIC TON of debug strings in the game's code that I need to list.

Map Debug Tiles

CrossCode-CollisionTiles.png

\assets\media\map\collisiontiles-16x16.png

Tile collision indicators.

CrossCode-HeightmapTiles.png

\assets\media\map\heightmap-tiles.png

Tile height indicators.

CrossCode-Pathmap.png

\assets\media\map\pathmap-tiles.png

Pathfinding tiles.

CrossCode-Lightmap.png

\assets\media\map\lightmap-tiles.png

Tile lighting indicators.

Toggle Test Item

Hmmm...
To do:
Find more unused items

There is an item in the game's item database (\assets\data\item-database.json) called "Toggle Test" with a description that reads "This toggles something, what? I'm not sure, I guess a var.". It's unknown what variable this item would have toggled.

Early DON'T USE THIS

v1.0.0 v1.0.3
CrossCode-TestBoss.png CrossCode-TestBoss2.png

\assets\media\entity\enemy\boss\test.png

Textures for an earlier version of DON'T USE THIS existed in the game. The texture was updated to its final appearance in v1.0.3 followed by DON'T USE THIS and the quest it is encountered in being officially added in v1.1.0.

Unused Audio

\assets\media\sound\loltest.ogg

Some random 8-bit tune, used to test the game's sound code judging from the obvious file name.


\assets\media\bgm\short.ogg

An old variant of part of the CrossCentral theme.


\assets\media\bgm\puzzle-bgm.ogg

An old version of the Temple Mine theme.

Demo Leftovers

Favicon

CrossCode-Favicon.png

\favicon.png

In the Steam version, the game icon is stored in the game's executable, leaving this file unused.

Crowdfunding

CrossCode-Indiegogo1.png

\assets\game\page\img\indiegogo-logo.png

CrossCode-Indiegogo2.png

\assets\media\gui\indiegogo.png

Crowdfunding stuff.

Source Code

(function(){
    var INDIE_GOGO_URL = "https://www.indiegogo.com/projects/crosscode";


    window.SHOW_GAMECODE = function(){
        if(window.ig && window.ig.system){
            var dom = ig.dom.html('<div class="gameOverlayBox gamecodeMessage" ><h3>Enter Bonus Code</h3></div>');
            var form = ig.dom.html('<form><input type="text" name="gamecode" value="" /><input type="submit" name="send" value="Submit" /><form>');
            dom.append(form);
            form.submit(function(){
                try{
                    sc.submitGameCode(form[0].gamecode.value);
                    ig.system.regainFocus();
                }
                catch(e){

                }
                return false;
            });

            $(document.body).append(dom);
            window.setTimeout(function(){
                dom.addClass("shown");
            }, 20);
            ig.system.setFocusLost();

            var close = function(){
                dom.remove();
            }
            ig.system.addFocusListener(close);
            form.find("input[type=text]").focus();
        }
    };

    var twitterAccounts = [
        {twitter: "RadicalFishGame", what: "Official Account"},
        {twitter: "lachsen", what: "Creative Direction, Programming"},
        {twitter: "RadicalRegiden", what: "Level Design, Programming"},
        {twitter: "GFluegel", what: "Quest Design"},
        {twitter: "interovgm", what: "Music"},
        {twitter: "Teflonator", what: "Sound Design"},
        {twitter: "ThomasFroese", what: "Pixel Art (Effects & Animations)"},
        {twitter: "ma_jrv", what: "Pixel Art (Environment)"},
        {twitter: "VintalValentin", what: "Pixel Art (Environment)"},
        {twitter: "Indofrece", what: "Concept Art"}


    ]

    window.SHOW_TWITTER = function(){
        if(window.ig && window.ig.system){
            var dom = ig.dom.html('<div class="gameOverlayBox twitterMessage" ><h3>Follow us on Twitter!</h3></div>');
            var list = ig.dom.create('ul');
            for(var i = 0; i < twitterAccounts.length; ++i){
                var entry = twitterAccounts[i];
                list.append(ig.dom.html('<li><a href="https://www.twitter.com/' + entry.twitter + '" target="_blank">@'
                + entry.twitter + '</a> - ' + entry.what + '</li>'));
            }
            dom.append(list);

            var form = ig.dom.html('<form><input type="submit" name="send" value="Close" /><form>');
            dom.append(form);
            form.submit(function(){
                ig.system.regainFocus();
                return false;
            });


            $(document.body).append(dom);
            window.setTimeout(function(){
                dom.addClass("shown");
            }, 20);
            ig.system.setFocusLost();

            if(typeof process !== "undefined" && process.versions['node-webkit']){
                list.find('a[target=_blank]').on('click', function(){
                   require('nw.gui').Shell.openExternal( this.href );
                   return false;
                });
            }



            var close = function(){
                dom.remove();
            }
            ig.system.addFocusListener(close);
            form.find("input[type=submit]").focus();
        }
    };

    window.SHOW_SCREENSHOT = function(imageSrc){
        if(window.ig && window.ig.system){
            var dom = ig.dom.html('<div class="gameOverlayBox screenshotMessage" ><h3>Screenshot</h3></div>');
            var img = ig.dom.create('img');
            img.attr('src',imageSrc);
            dom.append(img);
            dom.append(ig.dom.html("<p>Right click to copy image.</p>"));

            $(document.body).append(dom);
            window.setTimeout(function(){
                dom.addClass("shown");
            }, 20);
            ig.system.setFocusLost();

            var close = function(){
                dom.remove();
            }
            ig.system.addFocusListener(close);
        }
    };


    window.SHOW_INDIEGOGO = function(){
        if(window.ig && window.ig.system){
            var dom = ig.dom.html('<div class="gameOverlayBox indiegogoMessage" ><h3>We need your support to release CrossCode!</h3></div>');
            dom.append(ig.dom.html('<a href="" class="indiegogo logo" ><span>Indiegogo Logo</span></a>'));
            dom.append(ig.dom.html("<p>We can only promise a <b>2016 release</b> if we <b>reach our funding goal.</b></p>"));
            dom.append(ig.dom.html('<div><a href="" class="bigButton indiegogo" >To Indiegogo</a><a href="" class="bigButton back" >Return to Game</a></div>'));

            dom.find(".back").click(function(){ig.system.regainFocus(); return false});

            var indiegogoLink = dom.find(".indiegogo");
            if(window.require){
                var gui = require('nw.gui');
                indiegogoLink.click(function(){
                    gui.Shell.openExternal(INDIE_GOGO_URL);
                    return false;
                });
            }
            else{
                indiegogoLink.attr('href', INDIE_GOGO_URL);
                indiegogoLink.attr('target',"_blank");
            }



            $(document.body).append(dom);
            window.setTimeout(function(){
                dom.addClass("shown");
            }, 20);
            ig.system.setFocusLost();

            var close = function(){
                dom.remove();
            }
            ig.system.addFocusListener(close);


        }


    }

    window.GAME_ERROR_CALLBACK = function(e, info, gameInfo){
        var infos = [];
        for(var name in info){
            infos.push(name + ": [" + info[name] + "]");
        }
        var infoText = infos.join(", ");


        var gameInfos = "\n\n--- GAME INFO ---\n\n";
        for(var name in gameInfo){
            gameInfos += "[" + name + "]\n" + gameInfo[name] + "\n\n";
        }

        var message = e.message;
        var stack = e.stack;
        var details = infoText + "\n\n" + stack + gameInfos;

        var dom = ig.dom.html('<div class="errorMessage" ><h3></h3><p class="top"></p><textarea readonly ></textarea><p class="bottom"></p></div>');
        dom.find("h3").text("CRITICAL BUG!");
        dom.find("p.top").html("Yepp, the game pretty much <b>crashed</b>. We're sorry!<br>" +
        '<b>Want to help</b>? Please write us a mail to <a href="mailto:feedback@radicalfishgames.com">feedback@radicalfishgames.com</a>, tell us where it happened and add the following details:');
        var textarea = dom.find("textarea");
        textarea.text(details);
        textarea.click(function() { $(this).select(); } );
        dom.find("p.bottom").html("Thanks! We'll do our best to fix those issues for future versions.");
        var button = ig.dom.html('<a href="javascript:window.location.reload()" class="bigButton" >Restart the Game</a>');
        dom.append(button);

        $(document.body).append(dom);
        window.setTimeout(function(){
            dom.addClass("shown");
        }, 20);
    }

    window.SHOW_SAVE_DIALOG = function(currentSaveData){
        if(window.ig && window.ig.system){
            var dom = ig.dom.html('<div class="gameOverlayBox saveMessage" ><h3>Save Import/Export</h3></div>');
            dom.append(ig.dom.html("<p>Current Save Slot Data</p>"));
            var textarea = ig.dom.html("<textarea readonly></textarea>");
            textarea.text(currentSaveData || "--- No Data Available ---");
            textarea.click(function() { $(this).select(); } );
            dom.append(textarea);
            dom.append(ig.dom.html("<p>Import Save Slot</p>"));
            var form = ig.dom.html('<form><textarea name="import" ></textarea><input type="submit" name="send" value="Submit" /><form>');
            var importText = form.find("textarea");
            dom.append(form);
            form.submit(function(){
                try{
                    sc.submitSaveImport(form[0].import.value);
                    alert("Import Successful!");
                }
                catch(e){
                    alert("Import failed: " + e.message);
                }
                ig.system.regainFocus();
                return false;
            });

            $(document.body).append(dom);
            window.setTimeout(function(){
                dom.addClass("shown");
            }, 20);
            ig.system.setFocusLost();

            var close = function(){
                dom.remove();
            }
            ig.system.addFocusListener(close);
            form.find("input[type=text]").focus();
        }
    };

}());

\assets\game\page\game-base.js


.errorMessage.shown{
    height: 400px;
    margin-top: -200px;
    transition: all 1s;
}

.errorMessage{
    position: absolute;
    height: 0;
    overflow: hidden;
    left: 0; right: 0;
    top: 50%;
    background: #050505;
    border-top: 3px solid red;
    border-bottom: 3px solid red;
    box-sizing: border-box;
    padding: 8px;
}
.errorMessage h3{
    text-align: center;
    padding: 8px 0;
}
.errorMessage p{
    font-size: 12pt;
    padding-bottom: 8px;
}
.errorMessage textarea{
    display: block;
    width: 100%;
    box-sizing: border-box;
    padding: 8px;
    height: 200px;
    background: black;
    color: white;
    border: 0;
    margin-bottom: 8px;
}
.errorMessage a{
    color: #0078a3;
}

.gameOverlayBox.shown{
    opacity: 1;
    height: 200px;
    margin-top: -100px;

}
.gameOverlayBox{
    transition: all 0.2s;
    position: absolute;
    height: 0;
    overflow: hidden;
    left: 0; right: 0;
    top: 50%;
    background: #050505;
    border-top: 1px solid white;
    border-bottom: 1px solid white;
    box-sizing: border-box;
    padding: 8px;
    text-align: center;
    opacity: 0;
}

.gameOverlayBox h3{
    text-align: center;
    padding: 8px 0;
    margin: 0 !important;
}
.gameOverlayBox p{
    font-size: 12pt;
    padding-bottom: 8px;
}
.gameOverlayBox textarea{
    display: block;
    width: 100%;
    box-sizing: border-box;
    padding: 8px;
    height: 200px;
    background: black;
    color: white;
    border: 0;
    margin-bottom: 8px;
}

.gameOverlayBox textarea[readonly]{
    color: #888;
}

.gameOverlayBox a{
    color: #0078a3;
}

.gameOverlayBox input{
    font-size: 12pt;
    padding: 8px;
}




.indiegogoMessage.shown{
    height: 400px;
    margin-top: -200px;
}

.saveMessage.shown{
    height: 400px;
    margin-top: -200px;
}

.gameOverlayBox.saveMessage textarea{
    height: 100px;
}


a.indiegogo.logo {
    display: inline-block;
    width: 442px;
    height: 244px;
    background: url(img/indiegogo-logo.png) no-repeat;
}
a.indiegogo.logo span{
    display: none;
}

.gamecodeMessage.shown{
    height: 100px;
    margin-top: -50px;
}

.twitterMessage.shown{
    height: 400px;
    margin-top: -200px;
}

.twitterMessage li{
    padding: 3px 0;
}

.twitterMessage ul{
    padding-bottom: 10px;
}

.twitterMessage a{
    text-decoration: none;
}


.screenshotMessage.shown{
    height: 400px;
    margin-top: -200px;
}
.screenshotMessage img{
    height: 320px;
}


.bigButton, .biggerButton{
    background: url(img/button1.png);
    padding: 10px 16px;
    color: white;
    text-decoration: none;
    text-align: center;
    font-weight: bold;
    font-size: 16pt;
    display: inline-block;
    margin: 0 8px 8px 8px;
    width: 232px;
    height: 45px;
    box-sizing: border-box;
}
.bigButton:hover, .biggerButton:hover{
    background-position: 0 -64px;
    text-decoration: none;
    color: white;
}
.bigButton:active, .biggerButton:active, .bigButton:visited, .biggerButton:visited{
    color: white;
}

.biggerButton{
    background: url(img/button2.png);
    width: 300px;
}

@media (max-width: 639px) {
    .biggerButton{
        width: 250px;
        background-size: 250px auto;
        height: 40px;
        font-size: 12pt;
    }
    .biggerButton:hover{
        background-position: 0 -53px;
    }
}




#game.none {
    cursor: none;
}

#game.cursorSize1.pointer{
    cursor: url(img/cursor-1.png) 0 0, auto;
}
#game.cursorSize2.pointer {
    cursor: url(img/cursor-2.png) 0 0, auto;
}
#game.cursorSize3.pointer {
    cursor: url(img/cursor-3.png) 0 0, auto;
}
#game.cursorSize4.pointer {
    cursor: url(img/cursor-4.png) 0 0, auto;
}
#game.cursorSize5.pointer {
    cursor: url(img/cursor-5.png) 0 0, auto;
}
#game.cursorSize6.pointer {
    cursor: url(img/cursor-6.png) 0 0, auto;
}
#game.cursorSize7.pointer {
    cursor: url(img/cursor-7.png) 0 0, auto;
}
#game.cursorSize8.pointer {
    cursor: url(img/cursor-8.png) 0 0, auto;
}




#game.cursorSize1.throw {
    cursor: url(img/cursor-throw-1.png) 8 8, auto;
}
#game.cursorSize2.throw {
    cursor: url(img/cursor-throw-2.png) 16 16, auto;
}
#game.cursorSize3.throw {
    cursor: url(img/cursor-throw-3.png) 24 24, auto;
}
#game.cursorSize4.throw {
    cursor: url(img/cursor-throw-4.png) 32 32, auto;
}
#game.cursorSize5.throw {
    cursor: url(img/cursor-throw-5.png) 40 40, auto;
}
#game.cursorSize6.throw {
    cursor: url(img/cursor-throw-6.png) 48 48, auto;
}
#game.cursorSize7.throw {
    cursor: url(img/cursor-throw-7.png) 56 56, auto;
}
#game.cursorSize8.throw {
    cursor: url(img/cursor-throw-8.png) 64 64, auto;
}


#game.cursorSize1.melee {
    cursor: url(img/cursor-melee-1.png) 8 8, auto;
}
#game.cursorSize2.melee {
    cursor: url(img/cursor-melee-2.png) 16 16, auto;
}
#game.cursorSize3.melee {
    cursor: url(img/cursor-melee-3.png) 24 24, auto;
}
#game.cursorSize4.melee {
    cursor: url(img/cursor-melee-4.png) 32 32, auto;
}
#game.cursorSize5.melee {
    cursor: url(img/cursor-melee-5.png) 40 40, auto;
}
#game.cursorSize6.melee {
    cursor: url(img/cursor-melee-6.png) 48 48, auto;
}
#game.cursorSize7.melee {
    cursor: url(img/cursor-melee-7.png) 56 56, auto;
}
#game.cursorSize8.melee {
    cursor: url(img/cursor-melee-8.png) 64 64, auto;
}

\assets\game\page\game-base.css

Some source code for demo's main menu.

Steam Greenlight

CrossCode-Greenlight1.png

\assets\media\entity\enemy\boss\greenlight.png

CrossCode-Greenlight2.png

\assets\media\entity\enemy\boss\greenlight-s.png

Steam Greenlight stuff. Oddly, these files are stored in boss textures folder.