Jimmie1717 icon

lsnes: Toy Story (U)

Jimmie1717 | PRO | 02/04/18 10:56:12 PM UTC | 0 ⭐ | 1569 👁️ | Never ⏰ | []
Lua |

4.42 KB

|

None

|

0 👍

/

0 👎

-- Disney's Toy Story (Super NES)
-- by Jimmie1717
-- lsnes rr2-Beta23
-- This will only work with the NTSC-U version of the game.
 
print("Disney's Toy Story (Super Nintendo Entertainment System)\nby Jimmie1717");
 
-- Globals
readByte                        = memory.readbyte;
readSByte                       = memory.readsbyte;
readWord                        = memory.readword;
readSWord                       = memory.readsword;
readDWord                       = memory.readdword;
readSDWord                      = memory.readsdword;
writeByte                       = memory.writebyte;
writeWord                       = memory.writeword;
writeDWord                      = memory.writedword;
 
-- RAM Addresses
local addrs                     = {
    general                     = {
        level                   = 0x7E001A,
        bonus_stars             = {
            total               = 0x7E0010,
            level               = 0x7E000A
        }
    },
    woody                       = {
        position                = {
            x                   = 0x7E1730,
            y                   = 0x7E1734
        },
        velocity                = {
            x                   = 0x7E1780,
            y                   = 0x7E1784
        },
        state                   = 0x7E17B0,
        lives                   = 0x7E001E,
        health                  = 0x7E001C
    },
    screen                      = {
        position                = {
            x                   = 0x7E004A,
            y                   = 0x7E004C
        }
    },
    level_data                  = {
        [12]                    = {
            position            = {
                x               = 0x7E00BA,
                y               = 0x7E00BE
            },
            velocity            = 0x7E00C1
        }
    }
};
 
-- Use these to define the base location of where text should appear.
-- i.e. 0, 0 is the top left of the screen.
local x         = 3;
local y         = 0;
 
local inputs    = {"", "", "", "", "", "", "", "", "", "", "", ""};
local inputn    = {"B", "Y", "s", "S", "U", "D", "L", "R", "A", "X", "l", "r"};
 
function on_input()
    
    for i = 1, 12, 1 do
        if (input.get(0, (i - 1)) == 1) then
            inputs[i] = inputn[i];
        else
            inputs[i] = "";
        end
    end
    
end
 
-- Core function, this is where the magic happens.
function on_paint()
 
    -- Draw two sets of all the info
    -- One is black and offset by 1 pixel both horizontal and vertical.
    -- This makes it easier to read on any color background.
    -- Order matters here as they are drawn in the order you specify.
    drawInput(x + 1, y + 1, 0x00000000, 0xFF000000, inputs);
    drawInput(x, y, 0x00FFFFFF, 0xFF000000, inputs);
    
    drawText(x + 1, y + 1, 0x00000000, 0xFF000000);
    drawText(x, y, 0x00FFFFFF, 0xFF000000);
 
end
gui.repaint(); -- Update the GUI asap.
 
function drawText(x, y, foreColor, backColor)
    
    -- Text
    gui.text(x, y + 24, string.format("Level:"), foreColor, backColor);
    gui.text(x, y + 36, string.format("Stars (l):"), foreColor, backColor);
    gui.text(x, y + 48, string.format("Stars (t):"), foreColor, backColor);
    gui.text(x, y + 72, string.format("Screen X:"), foreColor, backColor);
    gui.text(x, y + 84, string.format("Screen Y:"), foreColor, backColor);
    gui.text(x, y + 108, string.format("Woody X:"), foreColor, backColor);
    gui.text(x, y + 120, string.format("Woody Y:"), foreColor, backColor);
    gui.text(x, y + 132, string.format("Velocity:"), foreColor, backColor);
    
    -- Values
    gui.text(x + 96, y + 24, string.format("%6d", (readWord(addrs.general.level) + 1)), foreColor, backColor);
    gui.text(x + 96, y + 36, string.format("%6d", readWord(addrs.general.bonus_stars.level)), foreColor, backColor);
    gui.text(x + 96, y + 48, string.format("%6d", readWord(addrs.general.bonus_stars.total)), foreColor, backColor);
    gui.text(x + 96, y + 72, string.format("%6d", readWord(addrs.screen.position.x)), foreColor, backColor);
    gui.text(x + 96, y + 84, string.format("%6d", readWord(addrs.screen.position.y)), foreColor, backColor);
    
    if (readWord(addrs.general.level) + 1 == 11) then
        gui.text(x + 96, y + 108, string.format("%6d", readWord(addrs.level_data[12].position.x)), foreColor, backColor);
        gui.text(x + 96, y + 120, string.format("%6d", readWord(addrs.level_data[12].position.y)), foreColor, backColor);
        gui.text(x + 96, y + 132, string.format("%6d", readSByte(addrs.level_data[12].velocity)), foreColor, backColor);
    else
        gui.text(x + 96, y + 108, string.format("%6d", readWord(addrs.woody.position.x)), foreColor, backColor);
        gui.text(x + 96, y + 120, string.format("%6d", readWord(addrs.woody.position.y)), foreColor, backColor);
        gui.text(x + 96, y + 132, string.format("%3d,%2d", readSWord(addrs.woody.velocity.x), (readSWord(addrs.woody.velocity.y) * -1)), foreColor, backColor);
    end
end
 
function drawInput(x, y, foreColor, backColor, i)
 
    -- input:   U   D   L   R   s   S   Y   B   X   A   l   r
    -- index:   5   6   7   8   3   4   2   1   10  9   11  12
    gui.text(x, y, string.format("%1s%1s%1s%1s%1s%1s%1s%1s%1s%1s%1s%1s", i[5], i[6], i[7], i[8], i[3], i[4], i[2], i[1], i[10], i[9], i[11], i[12]), foreColor, backColor);
 
end

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎