Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Disney's Toy Story (Sega Genesis)
- -- by Jimmie1717
- -- BizHawk 1.11.1
- -- This will only work with the NTSC-U version of the game.
- -- ** This probably works with the PAL version too.
- console.clear(); -- Clear the console of previous errors/data.
- console.writeline("Disney's Toy Story (Sega Genesis)");
- console.writeline("By Jimmie1717");
- -- Globals
- readByte = mainmemory.read_u8;
- readSByte = mainmemory.read_s8;
- readWord = mainmemory.read_u16_be;
- readSWord = mainmemory.read_s16_be;
- readDWord = mainmemory.read_u32_be;
- readSDWord = mainmemory.read_s32_be;
- readFloat = mainmemory.readfloat;
- writeByte = mainmemory.write_u8;
- writeSByte = mainmemory.write_s8;
- writeWord = mainmemory.write_u16_be;
- writeSWord = mainmemory.write_s16_be;
- writeDWord = mainmemory.write_u32_be;
- writeSDWord = mainmemory.write_s32_be;
- writeFloat = mainmemory.writefloat;
- formNew = forms.newform;
- formLabel = forms.label;
- formSetText = forms.settext;
- formGetText = forms.gettext;
- formSetProperty = forms.setproperty;
- formGetProperty = forms.getproperty;
- formButton = forms.button;
- formDroplist = forms.dropdown;
- formTextbox = forms.textbox;
- formCheckbox = forms.checkbox;
- formCheckboxChecked = forms.ischecked;
- formDestroy = forms.destroy;
- formDestroyAll = forms.destroyall;
- -- RAM Addresses
- local addrs = {
- general = {
- level = 0x049A,
- bonus_stars = {
- total = 0x049C,
- level = 0x049E
- }
- },
- woody = {
- position = {
- x = 0x0686,
- y = 0x068A
- },
- velocity = {
- x = 0x069A,
- y = 0x069E
- },
- ground = 0x06A2,
- state = 0x06F6,
- lives = 0x04A0,
- health = 0x04A2
- },
- screen = {
- position = {
- x = 0x05B4,
- y = 0x05B6
- },
- velocity = {
- x = 0x05CA,
- y = 0x05CC
- }
- },
- level_data = {
- [5] = {
- battery = 0x0C05
- },
- [8] = {
- buzz = {
- position = {
- x = 0x0AEE,
- y = 0x0AE2
- }
- },
- tire = {
- position = {
- x = 0x0B08,
- y = nil
- }
- }
- },
- [12] = {
- buzz = {
- position = {
- x = 0x2522,
- y = 0x2524
- }
- },
- claw = {
- mode = 0x0ADE,
- health = 0x0B00
- },
- aliens = {
- [0] = {
- position = {
- x = 0x0B08,
- y = 0x0B0C
- },
- velocity = {
- x = 0x0B10,
- y = 0x0B14
- },
- active = 0x0B1A
- },
- [1] = {
- position = {
- x = 0x0B1C,
- y = 0x0B20
- },
- velocity = {
- x = 0x0B24,
- y = 0x0B28
- },
- active = 0x0B2E
- },
- [2] = {
- position = {
- x = 0x0B30,
- y = 0x0B34
- },
- velocity = {
- x = 0x0B38,
- y = 0x0B3C
- },
- active = 0x0B42
- }
- }
- }
- }
- };
- local values = {
- woody_state = {
- [0x00] = "Stationary",
- [0x01] = "Moving",
- [0x02] = "Riding Rex",
- [0x03] = "Crouching",
- [0x04] = "Uncrouching",
- [0x05] = "Hanging or Riding RC",
- [0x06] = "Climbing",
- [0x07] = "Swinging",
- [0x08] = "Jumping",
- [0x09] = "Jumping (from Moving)",
- [0x0A] = "Falling",
- [0x0B] = "Falling (from Moving)",
- [0x0C] = "Falling (extended)",
- [0x0D] = "Landing",
- [0x0E] = "Landing (from Moving)",
- [0x0F] = "Landing (from Falling)",
- [0x10] = "Whipping",
- [0x11] = "Crouch Whipping",
- [0x12] = "Upward Whipping",
- [0x13] = "Moving Mega Gulp",
- [0x14] = "Stationary Mega Gulp",
- [0x15] = "Riding Rollerbob",
- [0x16] = "Air Whipping",
- [0x17] = "Release Swinging",
- [0x18] = "Tiptoe at Edge",
- [0x19] = "Jumping (from Hanging)",
- [0x1A] = "Playing Dead",
- [0x1B] = "Burned",
- [0x1C] = "Cooling Off",
- [0x1D] = "Pushing Buzz",
- [0x1E] = "Attacking with Buzz",
- [0x1F] = "Pushing Buzz (Stationary)",
- [0x20] = "Jumping (Riding Rex)",
- [0x21] = "Falling (Riding Rex)",
- [0x22] = "Looking over Shoulder",
- [0xFFFF] = ""
- },
- claw = {
- [0xFFFF] = "Scanning",
- [0x0000] = "Target Found",
- [0x0001] = "Target Aquired",
- }
- };
- local starsCurrent = 0;
- local pokeFormState = true;
- local pokeList = {
- "Bonus Stars - Level",
- "Bonus Stars - Total",
- "Woody - X Position",
- "Woody - Y Position",
- "Woody - X Velocity",
- "Woody - Y Velocity"
- };
- -- Use these to define the base location of where text should appear in the form.
- -- i.e. 0, 0 is the top left.
- local x = 2;
- local y = 3;
- -- 1286, 3193, 5017, 1824
- -- 21439 24632 26456
- function mainForm()
- MAINFORM = formNew(228, 315, "TS");
- -- General
- level_value = formLabel(MAINFORM, "", x + 27, y + 15, 40, 13, false);
- stars_l_value = formLabel(MAINFORM, "", x + 87, y + 15, 40, 13, false);
- stars_t_value = formLabel(MAINFORM, "", x + 87, y + 30, 40, 13, false);
- stars_c_value = formLabel(MAINFORM, "", x + 147, y + 15, 40, 13, false);
- general = formLabel(MAINFORM, "General:", x, y, 200, 13, false);
- level = formLabel(MAINFORM, "#:", x + 5, y + 15, 17, 13, false);
- stars_l = formLabel(MAINFORM, "L*:", x + 65, y + 15, 25, 13, false);
- stars_t = formLabel(MAINFORM, "T*:", x + 65, y + 30, 25, 13, false);
- stars_c = formLabel(MAINFORM, "C*:", x + 125, y + 15, 25, 13, false);
- -- Woody
- woody_x_value = formLabel(MAINFORM, "", x + 27, y + 65, 40, 13, false);
- woody_y_value = formLabel(MAINFORM, "", x + 27, y + 80, 40, 13, false);
- woody_vx_value = formLabel(MAINFORM, "", x + 87, y + 65, 40, 13, false);
- woody_vy_value = formLabel(MAINFORM, "", x + 87, y + 80, 40, 13, false);
- woody_hp_value = formLabel(MAINFORM, "", x + 147, y + 65, 40, 13, false);
- woody_lives_value = formLabel(MAINFORM, "", x + 147, y + 80, 40, 13, false);
- woody_state_value = formLabel(MAINFORM, "", x + 41, y + 50, 200, 13, false);
- woody = formLabel(MAINFORM, "Woody:", x, y + 50, 200, 13, false);
- woody_x = formLabel(MAINFORM, "X:", x + 5, y + 65, 17, 13, false);
- woody_y = formLabel(MAINFORM, "Y:", x + 5, y + 80, 17, 13, false);
- woody_vx = formLabel(MAINFORM, "VX:", x + 65, y + 65, 25, 13, false);
- woody_vy = formLabel(MAINFORM, "VY:", x + 65, y + 80, 25, 13, false);
- woody_hp = formLabel(MAINFORM, "HP:", x + 125, y + 65, 25, 13, false);
- woody_lives = formLabel(MAINFORM, "L:", x + 125, y + 80, 25, 13, false);
- -- Screen
- screen_x_value = formLabel(MAINFORM, "", x + 27, y + 115, 40, 13, false);
- screen_y_value = formLabel(MAINFORM, "", x + 27, y + 130, 40, 13, false);
- screen_vx_value = formLabel(MAINFORM, "", x + 87, y + 115, 40, 13, false);
- screen_vy_value = formLabel(MAINFORM, "", x + 87, y + 130, 40, 13, false);
- screen = formLabel(MAINFORM, "Screen:", x, y + 100, 200, 13, false);
- screen_x = formLabel(MAINFORM, "X:", x + 5, y + 115, 17, 13, false);
- screen_y = formLabel(MAINFORM, "Y:", x + 5, y + 130, 17, 13, false);
- screen_vx = formLabel(MAINFORM, "VX:", x + 65, y +115, 25, 13, false);
- screen_vy = formLabel(MAINFORM, "VY:", x + 65, y + 130, 25, 13, false);
- -- Level Data 1
- level1_1_value = formLabel(MAINFORM, "", x + 27, y + 165, 40, 13, false);
- level1_2_value = formLabel(MAINFORM, "", x + 27, y + 180, 40, 13, false);
- level1_3_value = formLabel(MAINFORM, "", x + 87, y + 165, 40, 13, false);
- level1_4_value = formLabel(MAINFORM, "", x + 87, y + 180, 40, 13, false);
- level1_5_value = formLabel(MAINFORM, "", x + 147, y + 165, 40, 13, false);
- level1_6_value = formLabel(MAINFORM, "", x + 147, y + 180, 40, 13, false);
- level1 = formLabel(MAINFORM, "", x, y + 150, 200, 13, false);
- level1_1 = formLabel(MAINFORM, "", x + 5, y + 165, 17, 13, false);
- level1_2 = formLabel(MAINFORM, "", x + 5, y + 180, 17, 13, false);
- level1_3 = formLabel(MAINFORM, "", x + 65, y + 165, 25, 13, false);
- level1_4 = formLabel(MAINFORM, "", x + 65, y + 180, 25, 13, false);
- level1_5 = formLabel(MAINFORM, "", x + 125, y + 165, 25, 13, false);
- level1_6 = formLabel(MAINFORM, "", x + 125, y + 180, 25, 13, false);
- -- Level Data 2
- level2_1_value = formLabel(MAINFORM, "", x + 27, y + 215, 40, 13, false);
- level2_2_value = formLabel(MAINFORM, "", x + 27, y + 230, 40, 13, false);
- level2_3_value = formLabel(MAINFORM, "", x + 87, y + 215, 40, 13, false);
- level2_4_value = formLabel(MAINFORM, "", x + 87, y + 230, 40, 13, false);
- level2_5_value = formLabel(MAINFORM, "", x + 147, y + 215, 40, 13, false);
- level2_6_value = formLabel(MAINFORM, "", x + 147, y + 230, 40, 13, false);
- level2 = formLabel(MAINFORM, "", x, y + 200, 200, 13, false);
- level2_1 = formLabel(MAINFORM, "", x + 5, y + 215, 17, 13, false);
- level2_2 = formLabel(MAINFORM, "", x + 5, y + 230, 17, 13, false);
- level2_3 = formLabel(MAINFORM, "", x + 65, y + 215, 25, 13, false);
- level2_4 = formLabel(MAINFORM, "", x + 65, y + 230, 25, 13, false);
- level2_5 = formLabel(MAINFORM, "", x + 125, y + 215, 25, 13, false);
- level2_6 = formLabel(MAINFORM, "", x + 125, y + 230, 25, 13, false);
- poke_button = formButton(MAINFORM, "Poke", pokeForm, x + 2, y + 247, 204, 22);
- end
- function pokeForm()
- if (pokeFormState == true) then
- pokeFormState = false;
- POKEFORM = formNew(228, 318, "Poke");
- -- Enter Address
- e_value_hex = formTextbox(POKEFORM, "0", 86, 20, "HEX", 61, 48, false, false);
- e_value_l = formLabel(POKEFORM, "Value: 0x", 13, 51, 62, 13, false);
- e_address_size = formDroplist(POKEFORM, {"1 Byte", "2 Byte", "4 Byte"}, 152, 22, 55, 0);
- e_address_hex = formTextbox(POKEFORM, "0", 86, 20, "HEX", 61, 23, false, false);
- e_address_l = formLabel(POKEFORM, "Address: 0x", 2, 26, 62, 13, false);
- e_address_cb_l = formLabel(POKEFORM, "Enter an Address to Poke:", 18, 6, 140, 13, false);
- e_address_cb = formCheckbox(POKEFORM, "", 5, 1);
- -- Select Address
- s_value_hex = formTextbox(POKEFORM, "0", 86, 20, "HEX", 61, 128, false, false);
- s_value_l = formLabel(POKEFORM, "Value: 0x", 13, 131, 62, 13, false);
- s_address_list = formDroplist(POKEFORM, pokeList, 61, 102, 146, 20);
- s_address_l = formLabel(POKEFORM, "Address: 0x", 2, 106, 62, 13, false);
- s_address_cb_l = formLabel(POKEFORM, "Select an Address to Poke:", 18, 86, 140, 13, false);
- s_address_cb = formCheckbox(POKEFORM, "", 5, 81);
- forms.addclick(e_address_cb, function() pokeOption("e"); end);
- forms.addclick(s_address_cb, function() pokeOption("s"); end);
- --list = formDroplist(POKEFORM, pokeList, 5, 5, 142, 10);
- --value_size = formDroplist(POKEFORM, {"1 Byte", "2 Byte", "4 Byte"}, 152, 5, 55, 0);
- --value_address = formTextbox(POKEFORM, "0", 142, 20, "HEX", 5, 5, false, false);
- --value_dec = formTextbox(POKEFORM, "0", 99, 20, "UNSIGNED", 5, 31, false, false);
- --value_hex = formTextbox(POKEFORM, "0", 99, 20, "HEX", 108, 31, false, false);
- --button = formButton(POKEFORM, "Update", pokeValue, 4, 55, 204, 22);
- --checkbox = forms.checkbox(POKEFORM, "", 5, 82);
- -- Default Size to 2 byte.
- formSetProperty(e_address_size, "SelectedIndex", 1);
- formSetProperty(e_address_cb, "Checked", true);
- end
- end
- -- Format Textbox Values
- function pokeFormat()
- formSetText(value_hex, string.format("%08s", formGetText(value_hex)));
- end
- function pokeValue()
- -- Logic to read POKEFORM values and apply them.
- --print(formGetProperty(list, "SelectedItem"));
- --print(formGetText(list));
- local address = tonumber(formGetText(value_address), 16);
- local value = tonumber(formGetText(value_dec));
- local size = formGetText(value_size);
- if (size == "1 Byte") then
- writeByte(address, value);
- elseif (size == "2 Byte") then
- writeWord(address, value);
- elseif (size == "4 Byte") then
- writeDWord(address, value);
- end
- -- Destroy the Form
- formDestroy(POKEFORM);
- pokeFormState = true;
- gui.addmessage("Poked: 0x0000 to be 0x00");
- end
- -- Only allow one option to be selected.
- function pokeOption(source)
- if (source == "e" and formCheckboxChecked(e_address_cb)) then
- formSetProperty(s_address_cb, "Checked", true);
- elseif (source == "e" and formCheckboxChecked(e_address_cb) == false) then
- formSetProperty(s_address_cb, "Checked", false);
- elseif (source == "s" and formCheckboxChecked(s_address_cb)) then
- formSetProperty(e_address_cb, "Checked", true);
- elseif (source == "s" and formCheckboxChecked(s_address_cb) == false) then
- formSetProperty(e_address_cb, "Checked", false);
- end
- end
- function updateData()
- formSetText(level_value, string.format("%d", readWord(addrs.general.level)));
- formSetText(stars_l_value, string.format("%d", readWord(addrs.general.bonus_stars.level)));
- formSetText(stars_t_value, string.format("%d", readSWord(addrs.general.bonus_stars.total)));
- formSetText(stars_c_value, string.format("%d", currentStars()));
- formSetText(woody_x_value, string.format("%d", readWord(addrs.woody.position.x)));
- formSetText(woody_y_value, string.format("%d", readWord(addrs.woody.position.y)));
- formSetText(woody_vx_value, string.format("%d", readSWord(addrs.woody.velocity.x)));
- formSetText(woody_vy_value, string.format("%d", (readSWord(addrs.woody.velocity.y) * -1)));
- formSetText(woody_hp_value, string.format("%d", readSWord(addrs.woody.health) + 1));
- formSetText(woody_lives_value, string.format("%d", readSWord(addrs.woody.lives)));
- formSetText(woody_state_value, string.format("%s", values.woody_state[readWord(addrs.woody.state)]));
- formSetText(screen_x_value, string.format("%d", readWord(addrs.screen.position.x)));
- formSetText(screen_y_value, string.format("%d", readWord(addrs.screen.position.y)));
- formSetText(screen_vx_value, string.format("%d", readSWord(addrs.screen.velocity.x)));
- formSetText(screen_vy_value, string.format("%d", (readSWord(addrs.screen.velocity.y) * -1)));
- if (readWord(addrs.general.level) == 0x0008) then
- -- get tire data
- -- get buzz data
- elseif (readWord(addrs.general.level) == 0x000C) then
- formSetText(level1, "Buzz:");
- formSetText(level1_1, "X:");
- formSetText(level1_2, "Y:");
- formSetText(level1_1_value, string.format("%d", readWord(addrs.level_data[12].buzz.position.x)));
- formSetText(level1_2_value, string.format("%d", readWord(addrs.level_data[12].buzz.position.y)));
- else
- formSetText(level1, "");
- formSetText(level1_1, "");
- formSetText(level1_2, "");
- formSetText(level1_1_value, "");
- formSetText(level1_2_value, "");
- end
- end
- function currentStars()
- local starsLevel = readWord(addrs.general.bonus_stars.level);
- local starsTotal = readWord(addrs.general.bonus_stars.total);
- if (starsLevel < 50) then
- starsCurrent = starsLevel + starsTotal;
- elseif (starsLevel == 50) then
- if (readWord(addrs.general.level) == 16) then
- return starsCurrent + 2;
- else
- return starsCurrent + 1;
- end
- end
- return starsCurrent;
- end
- -- Initiate the Main Form Window.
- mainForm();
- while true do
- updateData();
- if (pokeFormState == false) then
- -- pokeFormat();
- end
- emu.frameadvance();
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement