mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			299 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			299 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
// Originally from /spelunky/Scripts/Level Generation/scrInitLevel.gml in the Spelunky Community Update Project
 | 
						|
 | 
						|
//
 | 
						|
// scrInitLevel()
 | 
						|
//
 | 
						|
// Calls scrLevelGen(), scrRoomGen*(), and scrEntityGen() to build level.
 | 
						|
//
 | 
						|
 | 
						|
/**********************************************************************************
 | 
						|
    Copyright (c) 2008, 2009 Derek Yu and Mossmouth, LLC
 | 
						|
    
 | 
						|
    This file is part of Spelunky.
 | 
						|
 | 
						|
    You can redistribute and/or modify Spelunky, including its source code, under
 | 
						|
    the terms of the Spelunky User License.
 | 
						|
 | 
						|
    Spelunky is distributed in the hope that it will be entertaining and useful,
 | 
						|
    but WITHOUT WARRANTY.  Please see the Spelunky User License for more details.
 | 
						|
 | 
						|
    The Spelunky User License should be available in "Game Information", which
 | 
						|
    can be found in the Resource Explorer, or as an external file called COPYING.
 | 
						|
    If not, please obtain a new copy of Spelunky from <http://spelunkyworld.com/>
 | 
						|
    
 | 
						|
***********************************************************************************/
 | 
						|
 | 
						|
global.levelType = 0;
 | 
						|
//global.currLevel = 16;
 | 
						|
if (global.currLevel > 4 and global.currLevel < 9) global.levelType = 1;
 | 
						|
if (global.currLevel > 8 and global.currLevel < 13) global.levelType = 2;
 | 
						|
if (global.currLevel > 12 and global.currLevel < 16) global.levelType = 3;
 | 
						|
if (global.currLevel == 16) global.levelType = 4;
 | 
						|
 | 
						|
if (global.currLevel <= 1 or
 | 
						|
    global.currLevel == 5 or
 | 
						|
    global.currLevel == 9 or
 | 
						|
    global.currLevel == 13)
 | 
						|
{
 | 
						|
    global.hadDarkLevel = false;
 | 
						|
}
 | 
						|
 | 
						|
// global.levelType = 3; // debug
 | 
						|
 | 
						|
// DEBUG MODE //
 | 
						|
/*
 | 
						|
if (global.currLevel == 2) global.levelType = 4;
 | 
						|
if (global.currLevel == 3) global.levelType = 2;
 | 
						|
if (global.currLevel == 4) global.levelType = 3;
 | 
						|
if (global.currLevel == 5) global.levelType = 4;
 | 
						|
*/
 | 
						|
 | 
						|
// global.levelType = 0;
 | 
						|
 | 
						|
global.startRoomX = 0;
 | 
						|
global.startRoomY = 0;
 | 
						|
global.endRoomX = 0;
 | 
						|
global.endRoomY = 0;
 | 
						|
oGame.levelGen = false;
 | 
						|
 | 
						|
// this is used to determine the path to the exit (generally no bombs required)
 | 
						|
for (i = 0; i < 4; i += 1)
 | 
						|
{
 | 
						|
    for (j = 0; j < 4; j += 1)
 | 
						|
    {
 | 
						|
        global.roomPath[i,j] = 0;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
// side walls
 | 
						|
if (global.levelType == 4)
 | 
						|
    k = 54;
 | 
						|
else if (global.levelType == 2)
 | 
						|
    k = 38;
 | 
						|
else if (global.lake)
 | 
						|
    k = 41;
 | 
						|
else
 | 
						|
    k = 33;
 | 
						|
for (i = 0; i <= 42; i += 1)
 | 
						|
{
 | 
						|
    for (j = 0; j <= k; j += 1)
 | 
						|
    {
 | 
						|
        if (not isLevel())
 | 
						|
        {
 | 
						|
            i = 999;
 | 
						|
            j = 999;
 | 
						|
        }
 | 
						|
        else if (global.levelType == 2)
 | 
						|
        {
 | 
						|
            if (i*16 == 0 or
 | 
						|
                i*16 == 656 or
 | 
						|
                j*16 == 0)
 | 
						|
            {
 | 
						|
                obj = instance_create(i*16, j*16, oDark);
 | 
						|
                obj.invincible = true;
 | 
						|
                obj.sprite_index = sDark;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else if (global.levelType == 4)
 | 
						|
        {
 | 
						|
            if (i*16 == 0 or
 | 
						|
                i*16 == 656 or
 | 
						|
                j*16 == 0)
 | 
						|
            {
 | 
						|
                obj = instance_create(i*16, j*16, oTemple);
 | 
						|
                obj.invincible = true;
 | 
						|
                if (not global.cityOfGold) obj.sprite_index = sTemple;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else if (global.lake)
 | 
						|
        {
 | 
						|
            if (i*16 == 0 or
 | 
						|
                i*16 == 656 or
 | 
						|
                j*16 == 0 or
 | 
						|
                j*16 >= 656)
 | 
						|
            {
 | 
						|
                obj = instance_create(i*16, j*16, oLush); obj.sprite_index = sLush;
 | 
						|
                obj.invincible = true;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else if (i*16 == 0 or
 | 
						|
            i*16 == 656 or
 | 
						|
            j*16 == 0 or
 | 
						|
            j*16 >= 528)
 | 
						|
        {
 | 
						|
            if (global.levelType == 0) { obj = instance_create(i*16, j*16, oBrick); obj.sprite_index = sBrick; }
 | 
						|
            else if (global.levelType == 1) { obj = instance_create(i*16, j*16, oLush); obj.sprite_index = sLush; }
 | 
						|
            else { obj = instance_create(i*16, j*16, oTemple); if (not global.cityOfGold) obj.sprite_index = sTemple; }
 | 
						|
            obj.invincible = true;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
if (global.levelType == 2)
 | 
						|
{
 | 
						|
    for (i = 0; i <= 42; i += 1)
 | 
						|
    {
 | 
						|
        instance_create(i*16, 40*16, oDark);
 | 
						|
        //instance_create(i*16, 35*16, oSpikes);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
if (global.levelType == 3)
 | 
						|
{
 | 
						|
    background_index = bgTemple;
 | 
						|
}
 | 
						|
 | 
						|
global.temp1 = global.gameStart;
 | 
						|
scrLevelGen();
 | 
						|
 | 
						|
global.cemetary = false;
 | 
						|
if (global.levelType == 1 and rand(1,global.probCemetary) == 1) global.cemetary = true;
 | 
						|
 | 
						|
with oRoom
 | 
						|
{
 | 
						|
    if (global.levelType == 0) scrRoomGen();
 | 
						|
    else if (global.levelType == 1)
 | 
						|
    {
 | 
						|
        if (global.blackMarket) scrRoomGenMarket();
 | 
						|
        else scrRoomGen2();
 | 
						|
    }
 | 
						|
    else if (global.levelType == 2)
 | 
						|
    {
 | 
						|
        if (global.yetiLair) scrRoomGenYeti();
 | 
						|
        else scrRoomGen3();
 | 
						|
    }
 | 
						|
    else if (global.levelType == 3) scrRoomGen4();
 | 
						|
    else scrRoomGen5();
 | 
						|
}
 | 
						|
 | 
						|
global.darkLevel = false;
 | 
						|
//if (not global.hadDarkLevel and global.currLevel != 0 and global.levelType != 2 and global.currLevel != 16 and rand(1,1) == 1)
 | 
						|
if (not global.hadDarkLevel and not global.noDarkLevel and global.currLevel != 0 and global.currLevel != 1 and global.levelType != 2 and global.currLevel != 16 and rand(1,global.probDarkLevel) == 1)
 | 
						|
{
 | 
						|
    global.darkLevel = true;
 | 
						|
    global.hadDarkLevel = true;
 | 
						|
    //instance_create(oPlayer1.x, oPlayer1.y, oFlare);
 | 
						|
}
 | 
						|
 | 
						|
if (global.blackMarket) global.darkLevel = false;
 | 
						|
 | 
						|
global.genUdjatEye = false;
 | 
						|
if (not global.madeUdjatEye)
 | 
						|
{
 | 
						|
    if (global.currLevel == 2 and rand(1,3) == 1) global.genUdjatEye = true;
 | 
						|
    else if (global.currLevel == 3 and rand(1,2) == 1) global.genUdjatEye = true;
 | 
						|
    else if (global.currLevel == 4) global.genUdjatEye = true;
 | 
						|
}
 | 
						|
 | 
						|
global.genMarketEntrance = false;
 | 
						|
if (not global.madeMarketEntrance)
 | 
						|
{
 | 
						|
    if (global.currLevel == 5 and rand(1,3) == 1) global.genMarketEntrance = true;
 | 
						|
    else if (global.currLevel == 6 and rand(1,2) == 1) global.genMarketEntrance = true;
 | 
						|
    else if (global.currLevel == 7) global.genMarketEntrance = true;
 | 
						|
}
 | 
						|
 | 
						|
////////////////////////////
 | 
						|
// ENTITY / TREASURES
 | 
						|
////////////////////////////
 | 
						|
global.temp2 = global.gameStart;
 | 
						|
if (not isRoom("rTutorial") and not isRoom("rLoadLevel")) scrEntityGen();
 | 
						|
 | 
						|
if (instance_exists(oEntrance) and not global.customLevel)
 | 
						|
{
 | 
						|
    oPlayer1.x = oEntrance.x+8;
 | 
						|
    oPlayer1.y = oEntrance.y+8;
 | 
						|
}
 | 
						|
 | 
						|
if (global.darkLevel or
 | 
						|
    global.blackMarket or
 | 
						|
    global.snakePit or
 | 
						|
    global.cemetary or
 | 
						|
    global.lake or
 | 
						|
    global.yetiLair or
 | 
						|
    global.alienCraft or
 | 
						|
    global.sacrificePit or
 | 
						|
    global.cityOfGold)
 | 
						|
{
 | 
						|
    if (not isRoom("rLoadLevel"))
 | 
						|
    {
 | 
						|
        with oPlayer1 { alarm[0] = 10; }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
if (global.levelType == 4) scrSetupWalls(864);
 | 
						|
else if (global.lake) scrSetupWalls(656);
 | 
						|
else scrSetupWalls(528);
 | 
						|
 | 
						|
// add background details
 | 
						|
if (global.graphicsHigh)
 | 
						|
{
 | 
						|
    repeat(20)
 | 
						|
    {
 | 
						|
        // bg = instance_create(16*rand(1,42), 16*rand(1,33), oCaveBG);
 | 
						|
        if (global.levelType == 1 and rand(1,3) < 3)
 | 
						|
            tile_add(bgExtrasLush, 32*rand(0,1), 0, 32, 32, 16*rand(1,42), 16*rand(1,33), 10002);
 | 
						|
        else if (global.levelType == 2 and rand(1,3) < 3)
 | 
						|
            tile_add(bgExtrasIce, 32*rand(0,1), 0, 32, 32, 16*rand(1,42), 16*rand(1,33), 10002);
 | 
						|
        else if (global.levelType == 3 and rand(1,3) < 3)
 | 
						|
            tile_add(bgExtrasTemple, 32*rand(0,1), 0, 32, 32, 16*rand(1,42), 16*rand(1,33), 10002);
 | 
						|
        else
 | 
						|
            tile_add(bgExtras, 32*rand(0,1), 0, 32, 32, 16*rand(1,42), 16*rand(1,33), 10002);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
oGame.levelGen = true;
 | 
						|
 | 
						|
// generate angry shopkeeper at exit if murderer or thief
 | 
						|
if ((global.murderer or global.thiefLevel > 0) and isRealLevel())
 | 
						|
{
 | 
						|
    with oExit
 | 
						|
    {
 | 
						|
        if (type == "Exit")
 | 
						|
        {
 | 
						|
            obj = instance_create(x, y, oShopkeeper);
 | 
						|
            obj.status = 4;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    // global.thiefLevel -= 1;
 | 
						|
}
 | 
						|
 | 
						|
with oTreasure
 | 
						|
{
 | 
						|
    if (collision_point(x, y, oSolid, 0, 0))
 | 
						|
    {
 | 
						|
        obj = instance_place(x, y, oSolid);
 | 
						|
        if (obj.invincible) instance_destroy();
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
with oWater
 | 
						|
{
 | 
						|
    if (sprite_index == sWaterTop or sprite_index == sLavaTop)
 | 
						|
    {
 | 
						|
        scrCheckWaterTop();
 | 
						|
    }
 | 
						|
    /*
 | 
						|
        obj = instance_place(x-16, y, oWater);
 | 
						|
        if (instance_exists(obj))
 | 
						|
        {
 | 
						|
            if (obj.sprite_index == sWaterTop or obj.sprite_index == sLavaTop)
 | 
						|
            {
 | 
						|
                if (type == "Lava") sprite_index = sLavaTop;
 | 
						|
                else sprite_index = sWaterTop;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        obj = instance_place(x+16, y, oWater);
 | 
						|
        if (instance_exists(obj))
 | 
						|
        {
 | 
						|
            if (obj.sprite_index == sWaterTop or obj.sprite_index == sLavaTop)
 | 
						|
            {
 | 
						|
                if (type == "Lava") sprite_index = sLavaTop;
 | 
						|
                else sprite_index = sWaterTop;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    */
 | 
						|
}
 | 
						|
 | 
						|
global.temp3 = global.gameStart;
 |