LegacyShell WikiLegacyShell Wiki
Back to LegacyShell
Home
Wiki
Plugins
Docs
Back to LegacyShell
Home
Wiki
Plugins
Docs
  • Plugins

    • Plugin Docs

      • Default

        • Crackshot
        • Auto Restart Notifications
        • Auto Shop Notifications
        • Burnt Block Sets
        • Christmas Event
        • DeadInternet
        • FancyGraphics
        • Health Pack Item
        • Item ToolTips
        • LegacyAdmin
        • LegacyAnalytics
        • LegacySettings
        • LegacyShellCore
        • LegacyThemes
        • LegacyWeather
        • Modern Map Blocks
        • Modern Shell Guns
        • Modern Shell Hats
        • Modern Shell Stamps
        • Minerva
        • ParkourMode
        • Player Count Notifications
        • TimeMachine
        • Vaporwave Map Blocks
        • WhatsAppTheme
        • Zaxonius Custom Guns
      • Examples

        • Modern Shell Maps
    • List of plugins

Canonical source: plugins_samples/modernshellmaps/README.md - edit that file, not this page (this page is built live from it, nothing here is a tracked copy).

Modern Shell Maps

Re-adds Shell Shockers' modern-era map pool (plus their Halloween/Christmas texture variants), which isn't part of LegacyShell's classic-era default map set.

Availability

Included by default in plugins_samples/ - drag it into plugins/ to activate it.

Updating the maps

Shell Shockers periodically adds new maps, so this plugin's map list can go stale. To refresh it:

  1. Go to Shell's source and find where it defines the maps. It looks like this:
,cx.movementAccuracyMod=.8;var hx=[{filename:"aqueduct",hash:"11dp765kifr",name:"Aqueduct",
  1. Find where the map definition ends. It looks like this:
,name:"Wreckage",modes:{FFA:!0,Teams:!0,Spatula:!0,King:!0},availability:"private",numPlayers:"18"}];function fx()
  1. Copy everything between those two points (inclusive) and assign it to a variable in the browser console:
var maps = [{filename:"aqueduct",hash:"11dp765kifr",name:"Aqueduct", ... (etc) ... ,name:"Wreckage",modes:{FFA:!0,Teams:!0,Spatula:!0,King:!0},availability:"private",numPlayers:"18"}];

Some maps aren't included in this list - for instance, easyparkour exists on Shell's servers but isn't listed in the game's own JS.

  1. Paste this function into the console:
async function downloadMaps(mapList) {
    Math.mod = function (n, m) {
        var remain = n % m;
        return 0 <= remain ? remain : remain + m
    };

    var maps = [];

    for (const map of mapList) {
        maps.push({
            ...map,
            suffix: " (Modern)",
        });

        maps.push({ //halloween variants
            filename: map.filename+"h",
            suffix: " (Modern, Halloween)",
        });

        maps.push({ //christmas variants
            filename: map.filename+"C",
            suffix: " (Modern, Christmas)",
        });
    };

    for (const map of maps) {
        const filename = `${map.filename}.json`;
        const url = `https://shellshock.io/maps/${filename}`;
        try {
            const response = await fetch(url);
            if (!response.ok) {
                console.error(`Failed to download ${filename}: ${response.statusText}`);
                continue;
            }
            const minMap2 = await response.json();

            minMap2.name += map.suffix;
            
            //convert versions if needed (v2 to v1)
            if (minMap2.fileVersion >= 2) {
                console.log("newer map", minMap2.name);
                for (const [key, value] of Object.entries(minMap2.data)) {
                    value.forEach((block)=>{
                    block.x = minMap2.extents.width - block.x - 1;
                    if (block.ry === 2) {
                        block.ry = 0;
                    } else {
                        block.ry = Math.mod(-(block.ry || 0) + 2, 4);
                    };
                    block.rx = Math.mod(-(block.rx || 0), 4);
                    });
                };
                if (minMap2?.fog?.density) minMap2.fog.density *= .5; //seems right
                minMap2.fileVersion = 1;
            };

            const modifiedBlob = new Blob([JSON.stringify(minMap2, null, 2)], { type: 'application/json' });
            const link = document.createElement('a');
            link.href = URL.createObjectURL(modifiedBlob);
            link.download = filename;
            link.click();
            URL.revokeObjectURL(link.href);
            console.log(`Downloaded: ${filename}`);
        } catch (error) {
            console.error(`Error downloading ${filename}:`, error);
        };
        await new Promise(resolve => setTimeout(resolve, 750));
    };
};
  1. Then run it:
downloadMaps(maps);

They should now all start downloading to your browser.

Note that this only handles maps already listed in the JS - if a map is hidden or removed from that list, this won't locate it.


This page was drafted with AI assistance and reviewed for accuracy. If something looks wrong, please open a PR or flag it.