Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Welcome, to Die
- --DEHUMANIZE AND FACE TO TABLE (Raw C0FEC0 pRNG table)
- COFE = {0x07,0xB6,0xF0,0x1F,0x55,0x5B,0x37,0xE3,0xAE,0x4F,0xB2,0x5E,0x99,0xF6,0x77,0xCB,0x60,0x8F,0x43,0x3E,0xA7,0x4C,0x2D,0x88,0xC7,0x68,0xD7,0xD1,0xC2,0xF2,0xC1,0xDD,0xAA,0x93,0x16,0xF7,0x26,0x04,0x36,0xA1,0x46,0x4E,0x56,0xBE,0x6C,0x6E,0x80,0xD5,0xB5,0x8E,0xA4,0x9E,0xE7,0xCA,0xCE,0x21,0xFF,0x0F,0xD4,0x8C,0xE6,0xD3,0x98,0x47,0xF4,0x0D,0x15,0xED,0xC4,0xE4,0x35,0x78,0xBA,0xDA,0x27,0x61,0xAB,0xB9,0xC3,0x7D,0x85,0xFC,0x95,0x6B,0x30,0xAD,0x86,0x00,0x8D,0xCD,0x7E,0x9F,0xE5,0xEF,0xDB,0x59,0xEB,0x05,0x14,0xC9,0x24,0x2C,0xA0,0x3C,0x44,0x69,0x40,0x71,0x64,0x3A,0x74,0x7C,0x84,0x13,0x94,0x9C,0x96,0xAC,0xB4,0xBC,0x03,0xDE,0x54,0xDC,0xC5,0xD8,0x0C,0xB7,0x25,0x0B,0x01,0x1C,0x23,0x2B,0x33,0x3B,0x97,0x1B,0x62,0x2F,0xB0,0xE0,0x73,0xCC,0x02,0x4A,0xFE,0x9B,0xA3,0x6D,0x19,0x38,0x75,0xBD,0x66,0x87,0x3F,0xAF,0xF3,0xFB,0x83,0x0A,0x12,0x1A,0x22,0x53,0x90,0xCF,0x7A,0x8B,0x52,0x5A,0x49,0x6A,0x72,0x28,0x58,0x8A,0xBF,0x0E,0x06,0xA2,0xFD,0xFA,0x41,0x65,0xD2,0x4D,0xE2,0x5C,0x1D,0x45,0x1E,0x09,0x11,0xB3,0x5F,0x29,0x79,0x39,0x2E,0x2A,0x51,0xD9,0x5D,0xA6,0xEA,0x31,0x81,0x89,0x10,0x67,0xF5,0xA9,0x42,0x82,0x70,0x9D,0x92,0x57,0xE1,0x3D,0xF1,0xF9,0xEE,0x08,0x91,0x18,0x20,0xB1,0xA5,0xBB,0xC6,0x48,0x50,0x9A,0xD6,0x7F,0x7B,0xE9,0x76,0xDF,0x32,0x6F,0x34,0xA8,0xD0,0xB8,0x63,0xC8,0xC0,0xEC,0x4B,0xE8,0x17,0xF8}
- THINK_STATE = 0
- TRUE_WHEEL = {}
- function MAKE_TRUE_WHEEL()
- --Builds the effective 512-unit wheel created by weaving A and B together
- WHEEL_A = memory.readbyte(0x3A)
- WHEEL_B = memory.readbyte(0x3B)
- console.writeline("WheeL SeeD: ".. WHEEL_A .."|" ..WHEEL_B)
- WHEEL_DIF = WHEEL_B - WHEEL_A
- if WHEEL_DIF < 0 then WHEEL_DIF = WHEEL_DIF + 256 end
- WHEEL_SELECT = memory.readbyte(0x7C55)
- for TRUE_WHEEL_INDEX = 0, 512 do
- --Toggle the selector
- if WHEEL_SELECT == 0 then WHEEL_SELECT = 1 else WHEEL_SELECT = 0 end
- --Read COFE from proper wheel
- if WHEEL_SELECT == 0 then
- local TEMP_A = (TRUE_WHEEL_INDEX - TRUE_WHEEL_INDEX%2) / 2
- TRUE_WHEEL[TRUE_WHEEL_INDEX+1] = COFE[TEMP_A+1]
- --WHEEL_A = WHEEL_A + 1
- --if WHEEL_A > 255 then WHEEL_A = 0 end
- else
- TRUE_WHEEL[TRUE_WHEEL_INDEX+1] = COFE[WHEEL_DIF+1]
- WHEEL_DIF = WHEEL_DIF + 1
- if WHEEL_DIF > 255 then WHEEL_DIF = 0 end
- end
- end
- end
- function MAKE_FAKE_WHEEL(A, B)
- --Builds the effective 512-unit wheel created by weaving A and B together
- WHEEL_A = A
- WHEEL_B = B
- --console.writeline("WheeL SeeD: ".. WHEEL_A .."|" ..WHEEL_B)
- WHEEL_DIF = WHEEL_B - WHEEL_A
- if WHEEL_DIF < 0 then WHEEL_DIF = WHEEL_DIF + 256 end
- local WHEEL_SELECT = memory.readbyte(0x7C55)
- for TRUE_WHEEL_INDEX = 0, 512 do
- --Toggle the selector
- if WHEEL_SELECT == 0 then WHEEL_SELECT = 1 else WHEEL_SELECT = 0 end
- --Read COFE from proper wheel
- if WHEEL_SELECT == 0 then
- local TEMP_A = (TRUE_WHEEL_INDEX - TRUE_WHEEL_INDEX%2) / 2
- TRUE_WHEEL[TRUE_WHEEL_INDEX+1] = COFE[TEMP_A+1]
- --WHEEL_A = WHEEL_A + 1
- --if WHEEL_A > 255 then WHEEL_A = 0 end
- else
- TRUE_WHEEL[TRUE_WHEEL_INDEX+1] = COFE[WHEEL_DIF+1]
- WHEEL_DIF = WHEEL_DIF + 1
- if WHEEL_DIF > 255 then WHEEL_DIF = 0 end
- end
- end
- end
- function GET_TRUE_INDEX()
- local WHEEL_A = memory.readbyte(0x3A)
- local WHEEL_B = memory.readbyte(0x3B)
- local WHEEL_SELECT = memory.readbyte(0x7C55)
- if WHEEL_SELECT == 1 then
- return WHEEL_A * 2
- else
- if (WHEEL_A * 2) - 1 >= 0 then
- return (WHEEL_A * 2) - 1
- else
- return ((WHEEL_A * 2) - 1) + 512
- end
- end
- end
- function GET_FAKE_INDEX(A, B)
- local FAKE_A = A
- local FAKE_B = B
- local FAKE_SELECT = 0
- if FAKE_SELECT == 1 then
- return FAKE_A * 2
- else
- if (FAKE_A * 2) - 1 >= 0 then
- return (FAKE_A * 2) - 1
- else
- return ((FAKE_A * 2) - 1) + 512
- end
- end
- end
- function THINCREMENT(A)
- local X = A+1
- if X > 511 then X = 0 end
- return X
- end
- function BAT_RNG_NEXT(R)
- SIM_INDEX = THINCREMENT(SIM_INDEX)
- return TRUE_WHEEL[SIM_INDEX+1] % R
- end
- function RAW_THINK()
- --Base Variables to read
- RNG_load_offset = memory.readbyte(0x94A)
- RNG_big_wheel_index = memory.readbyte(0x16A7)
- RNG_big_wheel_offset = memory.readbyte(0xAF9)
- RNG_BatWheel_A = memory.readbyte(0x3A)
- RNG_BatWheel_B = memory.readbyte(0x3B)
- RNG_BatWheel_Selector = memory.readbyte(0x7C55)
- RNG_last_used_range = memory.readbyte(0x7CB9)
- RNG_last_result = memory.readbyte(0x7CBD)
- ESCAPE_CHANCE = memory.readbyte(0x3EF0)
- DIRECT_TED_HP = memory.readbyte(0x2306) + (memory.readbyte(0x2307) *256)
- --Enemy Speeds. To find: 27, 35, 35, 55
- E_SPEED = {}
- E_SPEED[1] = memory.readbyte(0x2229)
- E_SPEED[2] = memory.readbyte(0x22A9)
- E_SPEED[3] = memory.readbyte(0x2329) -- 44 +/- 1
- E_SPEED[4] = memory.readbyte(0x23A9) -- 27
- E_SPEED[5] = memory.readbyte(0x2429) -- 35
- E_SPEED[6] = memory.readbyte(0x24A9) -- 55
- E_SPEED[7] = memory.readbyte(0x2529) -- 35
- E_SPEED[8] = memory.readbyte(0x25A9)
- --ATBs
- ATB = {}
- ATB[1] = memory.readbyte(0x3D7F)
- ATB[2] = memory.readbyte(0x3D8A)
- ATB[3] = memory.readbyte(0x3D95)
- ATB[4] = memory.readbyte(0x3DA0)
- ATB[5] = memory.readbyte(0x3DAB)
- ATB[6] = memory.readbyte(0x3DB6)
- ATB[7] = memory.readbyte(0x3DC1)
- ATB[8] = memory.readbyte(0x3DCC)
- ATB[9] = memory.readbyte(0x3DD7)
- ATB[10] = memory.readbyte(0x3DE2)
- ATB[11] = memory.readbyte(0x3DED)
- ATB[12] = memory.readbyte(0x3DF8)
- --Character Priority List
- PHANTOM_SHUFFLER = {}
- for PAHNTOM_INDEX = 0, 11 do
- PHANTOM_SHUFFLER[PAHNTOM_INDEX+1] = memory.readbyte(0x3E93+PAHNTOM_INDEX)
- end
- --[[
- RNG_BIG_NEXT = {}
- for BIG_INDEX = 0, 8 do
- TEMP_BIG_INDEX = RNG_big_wheel_index+BIG_INDEX
- if TEMP_BIG_INDEX > 255 then TEMP_BIG_INDEX = TEMP_BIG_INDEX - 256 end
- RNG_BIG_NEXT[BIG_INDEX+1] = COFE[TEMP_BIG_INDEX+1] - RNG_big_wheel_offset
- if RNG_BIG_NEXT[BIG_INDEX+1] < 0 then RNG_BIG_NEXT[BIG_INDEX+1] = RNG_BIG_NEXT[BIG_INDEX+1] + 256 end
- end
- --]]
- byte_sum_1 = 0
- byte_sum_2 = 0
- for byte_sum_index = 0, 1000 do
- byte_sum_1 = (byte_sum_1 + memory.readbyte(byte_sum_index)) % 256
- end
- byte_sum_1 = (byte_sum_1 + RNG_big_wheel_offset) % 256
- byte_sum_2 = byte_sum_1
- for byte_sum_index = 1000, 2000 do
- byte_sum_2 = (byte_sum_2 + memory.readbyte(byte_sum_index)) % 256
- end
- gui.text(0,0, "Loading Offset: " .. string.format(RNG_load_offset) )
- gui.text(0,16, "BigWheel Offset: " .. string.format(RNG_big_wheel_offset) )
- gui.text(0,32, "Bigwheel Index: " .. string.format(RNG_big_wheel_index) )
- --gui.text(0,48, "BigWheel Next: " )
- --for gui_index=0,8 do
- -- gui.text(16,64+(16*gui_index), string.format(RNG_BIG_NEXT[gui_index+1]))
- --end
- gui.text(380,0, "ByteSum A: " .. string.format(byte_sum_1) )
- gui.text(380,16, "ByteSum B: " .. string.format(byte_sum_2) )
- gui.text(380,32, "ESC%: ".. string.format(ESCAPE_CHANCE))
- gui.text(380,48, "=Battle RNG=")
- gui.text(380,64, "A:"..string.format(RNG_BatWheel_A))
- gui.text(380,80, "B:"..string.format(RNG_BatWheel_B))
- if(RNG_BatWheel_Selector == 1) then
- gui.text(364,64, ">")
- else
- gui.text(364,80, ">")
- end
- --
- gui.text(308, 96, "Last RNG: " .. string.format(RNG_last_result) .. " /" .. string.format(RNG_last_used_range))
- gui.text(460, 128, "Last ->")
- gui.text(460, 144, "Next ->")
- for gui_index=0,27 do
- --Starting 8 spaces back,
- POINTY = GET_TRUE_INDEX()+gui_index-8
- --Show true wheel around true index
- if POINTY > 511 then POINTY = POINTY - 512
- elseif POINTY < 0 then POINTY = POINTY+512
- end
- RANDO = TRUE_WHEEL[POINTY+1]
- --Color math
- if RANDO % 4 == 0 then
- rng_color = "magenta"
- elseif RANDO % 3 == 0 then
- rng_color = "white"
- else
- rng_color = "white"
- end
- gui.text(540,(16*gui_index), string.format(RANDO), rng_color)
- end
- THINK_INDEX = GET_TRUE_INDEX()
- gui.text(308,112,"ShinDex : ".. string.format(THINK_INDEX))
- --[[
- --Example zerk-think
- --Select target - Draw cards until valid target. [Just 2 for TED]
- while(TRUE_WHEEL[THINK_INDEX+1] % 8 ~= 2) do
- THINK_INDEX = THINCREMENT(THINK_INDEX)
- end
- --Store the targeting card result, then consume
- ZERK_THINK_1 = ("Target: ".. string.format(TRUE_WHEEL[THINK_INDEX+1] %8))
- THINK_INDEX = THINCREMENT(THINK_INDEX)
- --Is this quake?
- --THINK_INDEX = THINK_INDEX + 1
- if(TRUE_WHEEL[THINK_INDEX+1] %100 < 25) then
- THINK_INDEX = THINCREMENT(THINK_INDEX)
- --Do Quake
- ZERK_THINK_2 = "Quake"
- --Damage Roll
- MAGIC_ATT = (90 + (TRUE_WHEEL[THINK_INDEX+1] % 12)) * 1.5
- QUAKE_DMG = (MAGIC_ATT - 25) * 42
- ZERK_THINK_3 = "DMG: " .. QUAKE_DMG
- else
- --Or, do axe
- THINK_INDEX = THINCREMENT(THINK_INDEX)
- ZERK_THINK_2 = "Axe"
- --Hit Chance
- if (TRUE_WHEEL[THINK_INDEX+1] %100 < 80) then
- ZERK_THINK_3 = "[Hit]"
- THINK_INDEX =THINCREMENT(THINK_INDEX)
- --Evade Chance
- if (TRUE_WHEEL[THINK_INDEX+1] %100 >= 10) then
- THINK_INDEX = THINCREMENT(THINK_INDEX)
- --Damage Roll
- AXE_ATT = (29 + (TRUE_WHEEL[THINK_INDEX+1] %59))*1.5
- AXE_DMG = (AXE_ATT -8) * 39
- ZERK_THINK_3 = ZERK_THINK_3 .. "DMG: " .. AXE_DMG
- else
- --Evade
- ZERK_THINK_3 = ZERK_THINK_3 .. "[Evade]"
- end
- else
- ZERK_THINK_3 = "[Miss]"
- end
- end
- --]]
- --[[
- --Example TED-think
- THINK_INDEX = GET_TRUE_INDEX()
- --Select target - Draw cards until valid target. [Just 0 for Faris]
- THINK_INDEX = THINCREMENT(THINK_INDEX)
- TED_THINK_1 = TRUE_WHEEL[THINK_INDEX+1] % 3
- THINK_INDEX = THINCREMENT(THINK_INDEX) --Fake Target
- THINK_INDEX = THINCREMENT(THINK_INDEX) --SeB
- while(TRUE_WHEEL[THINK_INDEX+1] % 4 ~= 0) do
- THINK_INDEX = THINCREMENT(THINK_INDEX)
- end
- if TED_THINK_1 == 0 then
- TED_THINK_1 = "FIGHT"
- --Accuracy check, always passes
- THINK_INDEX = THINCREMENT(THINK_INDEX)
- --Evade Check vs 33% Aegis
- if(TRUE_WHEEL[THINK_INDEX] % 100 >= 33) then
- --Damage roll
- THINK_INDEX = THINCREMENT(THINK_INDEX)
- TED_ATTACK_THINK = ((111 + TRUE_WHEEL[THINK_INDEX+1] % 13) - 55)/2
- TED_THINK_2 = "Damage" .. (TED_ATTACK * 17)
- else
- TED_THINK_2 = "[BLOCKED]"
- end
- elseif TED_THINK_1 == 1 then
- TED_THINK_1 = "White Hole"
- --Aegis Block
- THINK_INDEX = THINCREMENT(THINK_INDEX)
- if (TRUE_WHEEL[THINK_INDEX] % 100 >= 33) then
- --WH Accuracy
- THINK_INDEX = THINCREMENT(THINK_INDEX)
- if (TRUE_WHEEL[THINK_INDEX+1] % 100 < 77) then
- TED_THINK_2 = "[VOID]"
- else
- TED_THINK_2 = "[MISS]"
- end
- else
- TED_THINK_2 = "[BLOCK]"
- end
- else
- TED_THINK_1 = "Fight or Nothing"
- --Accuracy check, always passes
- THINK_INDEX = THINCREMENT(THINK_INDEX)
- --Evade Check vs 33% Aegis
- if(TRUE_WHEEL[THINK_INDEX] % 100 >= 33) then
- --Damage roll
- THINK_INDEX = THINCREMENT(THINK_INDEX)
- TED_ATTACK_THINK = ((111 + TRUE_WHEEL[THINK_INDEX+1] % 13) - 55)/2
- TED_THINK_2 = "Damage: " .. (TED_ATTACK * 17)
- else
- TED_THINK_2 = "[BLOCKED]"
- end
- end
- --]]
- --gui.text(0, 184, "THINKING...")
- --gui.text(0, 200, ZERK_THINK_1)
- --gui.text(0, 216, ZERK_THINK_2)
- --gui.text(0, 232, ZERK_THINK_3)
- --gui.text(0,264,"TED Move: " .. TED_THINK_1)
- --gui.text(0,280, TED_THINK_2)
- gui.text(160, 328, string.format(DIRECT_TED_HP))
- for PHANTOM_GUI = 0, 11 do
- gui.text(0+(PHANTOM_GUI*24), 64, string.format(PHANTOM_SHUFFLER[PHANTOM_GUI+1]), "green")
- end
- gui.text(64,384, "Party ATB:","green")
- gui.text(224,384, "Enemy ATB & SPD:","green")
- for ATB_GUI = 0, 11 do
- gui.text(64 + (ATB_GUI *40), 400, string.format(ATB[ATB_GUI+1]),"cyan")
- end
- for SPEED_GUI = 0, 7 do
- gui.text(224 +(SPEED_GUI*40), 416, string.format(E_SPEED[SPEED_GUI+1]),"magenta")
- end
- end
- function ZERK_THINK()
- end
- function ZERK_AIM()
- --Zerk Think
- --Fake Target Select, seemingly unused RNG value
- --SIM_INDEX = THINCREMENT(SIM_INDEX)
- --Select target - Draw cards until valid target. [Just 2 for TED]
- SIM_INDEX = THINCREMENT(SIM_INDEX)
- while(TRUE_WHEEL[SIM_INDEX+1] % 8 ~= 2) do
- SIM_INDEX = THINCREMENT(SIM_INDEX)
- end
- return (TRUE_WHEEL[SIM_INDEX+1] % 8)
- end
- function ZERK_EARTH_AXE()
- --Is this quake?
- if(BAT_RNG_NEXT(100) < 25) then
- --Do Quake
- ZERK_MOVE = "QUAKE"
- --Damage Roll
- --console.writeline(TRUE_WHEEL[SIM_INDEX+1])
- MAGIC_ATT = (90 + BAT_RNG_NEXT(12))
- MAGIC_ATT = MAGIC_ATT + (MAGIC_ATT - MAGIC_ATT %2) /2 --Earth Boost
- QUAKE_DMG = (MAGIC_ATT - 25) * 42
- ZERK_DAMAGE = QUAKE_DMG
- else
- --Or, do axe
- ZERK_MOVE = "AXE"
- --Hit Chance
- if (BAT_RNG_NEXT(100) < 80) then
- ZERK_MOVE = ZERK_MOVE .. "[HIT]"
- --Evade Chance
- if (BAT_RNG_NEXT(100) >= 10) then
- --Damage Roll
- AXE_ATT = (29 + BAT_RNG_NEXT(59))
- AXE_ATT = AXE_ATT + ((AXE_ATT - AXE_ATT % 2) / 2) --Pre-round, Zerk up
- AXE_ATT = AXE_ATT - 8 --TED Def
- AXE_DMG = AXE_ATT * 39
- ZERK_DAMAGE = AXE_DMG
- else
- --Evade
- ZERK_MOVE = ZERK_MOVE .. "[EVADE]"
- ZERK_DAMAGE = 0
- end
- else
- ZERK_MOVE = "[MISS]"
- ZERK_DAMAGE = 0
- end
- end
- end
- function TED_AIM(OLD_TARGET)
- local TARGET = OLD_TARGET
- --Monster Select target - Draw cards until valid target. [0 for Faris]
- --SIM_INDEX = THINCREMENT(SIM_INDEX)
- --console.writeline(TRUE_WHEEL[SIM_INDEX+1])
- while(TARGET ~= 0) do
- TARGET = BAT_RNG_NEXT(4)
- --console.writeline("TED TRIES: "..TRUE_WHEEL[SIM_INDEX+1].."|"..TARGET)
- end
- return TARGET
- end
- function TED_AIM_REP()
- local M_TARGET = BAT_RNG_NEXT(4)
- while(M_TARGET ~= 0) do
- M_TARGET = BAT_RNG_NEXT(4)
- --console.writeline("TED TRIES: "..TRUE_WHEEL[SIM_INDEX+1].."|"..TARGET)
- end
- return M_TARGET
- end
- function TED_NOTHING()
- TED_MOVE = "NOTHING"
- TED_TARGET = TED_AIM(TED_TARGET)
- TED_DAMAGE = 0
- end
- function TED_FIGHT()
- TED_MOVE = "FIGHT"
- --Take Aim.
- TED_TARGET = TED_AIM(TED_TARGET)
- --Accuracy check, always passes
- SIM_INDEX = THINCREMENT(SIM_INDEX)
- --console.writeline(TRUE_WHEEL[SIM_INDEX+1])
- --Evade Check vs 33% Aegis
- SIM_INDEX = THINCREMENT(SIM_INDEX)
- --console.writeline(TRUE_WHEEL[SIM_INDEX+1])
- if(TRUE_WHEEL[SIM_INDEX+1] % 100 >= 33) then
- --Damage roll
- SIM_INDEX = THINCREMENT(SIM_INDEX)
- --console.writeline(TRUE_WHEEL[SIM_INDEX+1])
- TED_ATTACK = ((111 + TRUE_WHEEL[SIM_INDEX+1] % 14) - 55)
- TED_DAMAGE = TED_ATTACK * 8 --Halved for back row from 17 physM
- else
- TED_MOVE = TED_MOVE .. "[BLOCKED]"
- TED_DAMAGE = 0
- end
- end
- function TED_WHITE_HOLE()
- --Take Aim
- TED_TARGET = TED_AIM(TED_TARGET)
- TED_MOVE = "White Hole"
- --Aegis Block
- --console.writeline(TRUE_WHEEL[SIM_INDEX+1])
- if (BAT_RNG_NEXT(100) < 33) then
- --console.writeline("Aeg: " .. TRUE_WHEEL[SIM_INDEX+1])
- TED_MOVE = TED_MOVE .. "[BLOCK]"
- else
- --console.writeline("Aeg: " .. TRUE_WHEEL[SIM_INDEX+1])
- --WH Accuracy
- if (BAT_RNG_NEXT(100) < 77) then
- if (BAT_RNG_NEXT(100) < 20) then
- TED_MOVE = TED_MOVE .."[EVADE]"
- else
- TED_MOVE = TED_MOVE .. "[VOID]"
- end
- else
- TED_MOVE = TED_MOVE .. "[MISS]"
- end
- end
- TED_DAMAGE = 0
- end
- function TED_REFLECT_AIM()
- SIM_INDEX = THINCREMENT(SIM_INDEX)
- --console.writeline(TRUE_WHEEL[SIM_INDEX+1])
- while(TRUE_WHEEL[SIM_INDEX+1] % 8 ~= 2) do
- SIM_INDEX = THINCREMENT(SIM_INDEX)
- end
- return TRUE_WHEEL[SIM_INDEX+1] % 8
- end
- function TED_FLARE()
- TED_MOVE = "FLARE"
- --Take Aim
- TED_TARGET = TED_AIM(TED_TARGET)
- --Select reflected target - Draw cards until valid target. [Just 2 for Own damn face]
- TED_TARGET = TED_REFLECT_AIM()
- --Damage Roll v self
- FLARE_ATT = 254 + BAT_RNG_NEXT(8)
- TED_DAMAGE = FLARE_ATT * 11
- end
- function TED_HOLY()
- TED_MOVE = "HOLY"
- --Take Aim
- TED_TARGET = TED_AIM(TED_TARGET)
- --Select reflected target - Draw cards until valid target. [Just 2 for Own damn face]
- TED_TARGET = TED_REFLECT_AIM()
- --Damage roll v self
- HOLY_ATT = 241 + BAT_RNG_NEXT(31)
- TED_DAMAGE = (HOLY_ATT - 25) * 11
- end
- function TED_CONDEMN()
- TED_TARGET = TED_AIM(TED_TARGET)
- if(BAT_RNG_NEXT(100) >= 33) then
- TED_MOVE = "CONDEMN - THEND"
- NOT_CONDEMNED = false
- else
- TED_MOVE = "CONDEMN - [BLOCKED]"
- end
- end
- function TED_METEOR()
- TED_MOVE = "METEOR"
- TED_DAMAGE = 0
- --Pick four targets
- for METEOR_INDEX = 0, 3 do
- TED_TARGET = TED_AIM_REP()
- console.writeline("Target:" .. TED_TARGET .." R:" .. TRUE_WHEEL[SIM_INDEX+1])
- end
- --Roll Damage
- for METEOR_INDEX = 0, 3 do
- --if(BAT_RNG_NEXT(100) >= 33) then
- METEOR_ATT = (50+BAT_RNG_NEXT(151))-10
- METEOR_DMG = (METEOR_ATT * 14)
- TED_DAMAGE = TED_DAMAGE + METEOR_DMG
- console.writeline("Met:" .. METEOR_DMG .. " R:" .. TRUE_WHEEL[SIM_INDEX+1])
- --end
- end
- end
- function TED_WOUND(D, LOUD)
- TED_HP_BEFORE = TED_HP
- TED_HP = TED_HP - D
- if TED_HP_BEFORE >= 30000 then
- if TED_HP < 30000 then
- TED_STATE = 1
- TED_SCRIPT = 0
- if LOUD then console.writeline("==TED PHASE 2 BEGIN==") end
- end
- elseif TED_HP_BEFORE >= 10000 then
- if TED_HP < 10000 then
- TED_STATE = 2
- TED_SCRIPT = 0
- if LOUD then console.writeline("==TED PHASE 3 BEGIN==") end
- end
- end
- if LOUD then console.writeline("TED HP:" .. TED_HP) end
- end
- --Fight prediction routine
- function THUNDERING_PROGNOSTICATOR(LOUD_MODE, TRUE_MODE, A, B)
- --Init Stuff. Wheel setup, character data
- if(TRUE_MODE) then
- SIM_INDEX = GET_TRUE_INDEX()
- else
- SIM_INDEX = GET_FAKE_INDEX(A, B)
- end
- --ToDo: Dial these numbers
- TED_HP = 49001
- TED_STATE = 0 --Track phases of fight
- TED_SCRIPT = 0 --Offset value for script reading
- FARIS_HP = 9999
- FARIS_SPEED = 17
- ACTION_QUEUE = {}
- --Speed Array
- SIM_SPEEDS = {17,1,1,1,1,1,44,27,35,55,35,0}
- --Speed offsets
- for speed_index = 0, 7 do
- SIM_INDEX = THINCREMENT(SIM_INDEX)
- speed_roll = TRUE_WHEEL[SIM_INDEX+1] % 3
- --console.writeline(speed_index .. " Roll: ".. TRUE_WHEEL[SIM_INDEX+1] .. " > " .. speed_roll)
- if speed_roll == 2 then speed_roll = -1 end
- SIM_SPEEDS[speed_index+5] = SIM_SPEEDS[speed_index+5] + speed_roll
- end
- --console.writeline("Speeds: ")
- --console.writeline(SIM_SPEEDS)
- --Initiative shuffle
- SIM_INITIATIVES = {}
- while( table.getn(SIM_INITIATIVES) < 12) do
- --get a number
- SIM_INDEX = THINCREMENT(SIM_INDEX)
- local initiative_roll = TRUE_WHEEL[SIM_INDEX+1] % 12
- --Check for presence in init array
- not_got_this = true
- for check_this = 0, table.getn(SIM_INITIATIVES) do
- if SIM_INITIATIVES[check_this+1] == initiative_roll then not_got_this = false end
- end
- if not_got_this then table.insert(SIM_INITIATIVES, initiative_roll) end
- end
- --console.writeline("Init:")
- --console.writeline(SIM_INITIATIVES)
- --ATB setup & fight prep
- --ATB array of characters read in Initiative order
- --1-4 Players, 5 & 6 ???, 7 TED, 8-12 NED
- SIM_ATBS = {60,1,1,1,120 - SIM_SPEEDS[5],120 - SIM_SPEEDS[6],120 - SIM_SPEEDS[7],120 - SIM_SPEEDS[8],120 - SIM_SPEEDS[9],120 - SIM_SPEEDS[10],120 - SIM_SPEEDS[11],120 - SIM_SPEEDS[12] }
- SIM_READY_FLAGS = {0,0,0,0,0,0,0,0,0,0,0,0}
- FIGHT_CLOCK = 0
- --ATB Pre-igniter, progress to first act. No RNG Calls
- SIM_ATBS[7] = 2 --Still Bad idea, replace eventually
- --Killswitch for fight simulator
- NOT_CONDEMNED = true
- --Fight loop begins
- while (FARIS_HP > 0 and TED_HP > 0 and FIGHT_CLOCK <4096 and NOT_CONDEMNED) do
- --ATB resolved
- NONE_READY = true
- NONE_ACTED = true
- --In initiative order (Only 0 and 6 for now)
- for i = 0, 12 do
- --get next character index
- CHARACTER = SIM_INITIATIVES[i+1]
- --Filter for Faris or TED
- if CHARACTER == 0 or CHARACTER == 6 then
- --If Unready, Tick ATB and check for ready
- if SIM_READY_FLAGS[CHARACTER+1] == 0 then
- --Tick ATB
- SIM_ATBS[CHARACTER+1] = SIM_ATBS[CHARACTER+1] - 1
- --If now ready, set 'em up
- if SIM_ATBS[CHARACTER+1] <= 0 and NONE_READY and NONE_ACTED then
- NONE_READY = false
- table.insert(ACTION_QUEUE, CHARACTER)
- --Turn's up, do a think
- if CHARACTER == 0 then
- --Zerk has no ready action
- --Zerk knows.
- console.writeline(FIGHT_CLOCK .. " ZERK Knows." )
- end
- --TED Readies Action
- if CHARACTER == 6 then
- --Pick a move
- TED_MOVE_SELECT = BAT_RNG_NEXT(3)
- RAW_SELECT = TRUE_WHEEL[SIM_INDEX+1]
- --Parse move-Select via Script rules
- -- AI SCRIPT:
- -- State 2 Condition:HP < 10000{
- -- 0{Meteo,Fight,Nothing}
- -- State 1 Condition:HP < 30000{
- -- 0{Flare,Holy,Fight}
- -- 1{Fight,Fight,White Hole}
- -- 2{Fight,White Hole,Nothing}
- -- 3{Fight,Condemn,White Hole} }
- -- State 0 Base
- -- 0{Fight,White Hole,Nothing}
- -- 1{Fight,White Hole,Fight}
- if TED_MOVE_SELECT == 0 then
- if TED_STATE == 0 then
- TED_MOVE = "FIGHT"
- elseif TED_STATE == 1 then
- if TED_SCRIPT == 0 then
- TED_MOVE = "FLARE"
- else
- TED_MOVE = "FIGHT"
- end
- else -- TED_STATE 2
- TED_MOVE = "METEOR"
- end
- elseif TED_MOVE_SELECT == 1 then
- if TED_STATE == 0 then
- TED_MOVE = "WHITE HOLE"
- elseif TED_STATE == 1 then
- if TED_SCRIPT == 0 then
- TED_MOVE = "HOLY"
- elseif TED_SCRIPT == 1 then
- TED_MOVE = "FIGHT"
- elseif TED_SCRIPT == 2 then
- TED_MOVE = "WHITE HOLE"
- else
- TED_MOVE = "CONDEMN"
- end
- else -- TED_STATE 2
- TED_MOVE = "FIGHT"
- end
- else -- Move_select 2
- if TED_STATE == 0 then
- if TED_SCRIPT == 0 then
- TED_MOVE = "NOTHING"
- else
- TED_MOVE = "FIGHT"
- end
- elseif TED_STATE == 1 then
- if TED_SCRIPT == 0 then
- TED_MOVE = "FIGHT"
- elseif TED_SCRIPT == 2 then
- TED_MOVE = "NOTHING"
- else
- TED_MOVE = "WHITE HOLE"
- end
- else -- TED_STATE 2
- TED_MOVE = "NOTHING"
- end
- end
- --Non-meteor moves all guess a target
- if TED_MOVE ~= "METEOR" then
- TED_TARGET = BAT_RNG_NEXT(4)
- end
- if LOUD_MODE then
- console.writeline(FIGHT_CLOCK .. " TED READIES: " .. TED_SCRIPT .. ","..RAW_SELECT.."|".. TED_MOVE_SELECT .. " @ ".. TED_TARGET)
- end
- --Advance action sctipt accordingly
- if TED_STATE < 2 then
- TED_SCRIPT = TED_SCRIPT + 1
- if TED_STATE == 0 then
- if TED_SCRIPT > 1 then TED_SCRIPT = 0 end
- else
- if TED_SCRIPT > 3 then TED_SCRIPT = 0 end
- end
- end
- end -- End of TED Think
- --Set ready flag
- SIM_READY_FLAGS[CHARACTER+1] = 1
- end -- End of If ATB = 0
- --If Ready flag set, And:
- elseif NONE_READY then
- if table.getn(ACTION_QUEUE) > 0 then
- --Only resolve action for character at front of the queue
- if ACTION_QUEUE[1] == CHARACTER then
- NONE_ACTED = false
- table.remove(ACTION_QUEUE, 1)
- --Character's ready Do their moves
- if CHARACTER == 0 then
- --Zerk Act, which is a form of think
- --console.writeline(FIGHT_CLOCK .. " ZERK Acts ")
- ZERK_TARGET = ZERK_AIM()
- --console.writeline(TRUE_WHEEL[SIM_INDEX+1])
- ZERK_EARTH_AXE()
- if LOUD_MODE then
- console.writeline(FIGHT_CLOCK .. " ====== Zerk: ".. ZERK_TARGET .. " " .. ZERK_MOVE .. " " .. ZERK_DAMAGE)
- end
- TED_WOUND(ZERK_DAMAGE, LOUD_MODE)
- elseif CHARACTER == 6 then
- --TED Execute Action
- --console.writeline(FIGHT_CLOCK .. " TED ACTS")
- if TED_MOVE == "FIGHT" then
- TED_FIGHT()
- elseif TED_MOVE == "WHITE HOLE" then
- TED_WHITE_HOLE()
- elseif TED_MOVE == "NOTHING" then
- TED_NOTHING()
- elseif TED_MOVE == "FLARE" then
- TED_FLARE()
- elseif TED_MOVE == "HOLY" then
- TED_HOLY()
- elseif TED_MOVE == "CONDEMN" then
- TED_CONDEMN()
- elseif TED_MOVE == "METEOR" then
- TED_METEOR()
- else
- --True Nothing.
- end
- if LOUD_MODE then
- console.writeline(FIGHT_CLOCK .." ====== TED: ".. TED_MOVE .. " " .. TED_DAMAGE)
- end
- --If self-damage
- if TED_MOVE == "HOLY" or TED_MOVE == "FLARE" then
- TED_WOUND(TED_DAMAGE, LOUD_MODE)
- else --Else, Faris Damage
- FARIS_HP = FARIS_HP - TED_DAMAGE
- if LOUD_MODE then
- console.writeline("FARIS HP:" .. FARIS_HP)
- end
- end
- end -- End of Character-Specific Action Executions
- --Reset ATB and UnReady flag
- SIM_ATBS[CHARACTER+1] = 120 - SIM_SPEEDS[CHARACTER+1]
- SIM_READY_FLAGS[CHARACTER+1] = 0
- if LOUD_MODE then
- console.writeline(SIM_ATBS)
- end
- end -- If character at front of queue
- end -- If Action queue non-empty
- end --End of ATB/Ready block
- end --End of character filter
- end --End of initiative sweep
- --Entropy roll each fight loop
- SEB = BAT_RNG_NEXT(100)
- if(FIGHT_CLOCK > 1610 and FIGHT_CLOCK < 1860 and LOUD_MODE) then
- console.writeline("sEb:"..SEB .. " | " .. TRUE_WHEEL[SIM_INDEX+1] .. " Shin: " .. SIM_INDEX)
- end
- FIGHT_CLOCK = FIGHT_CLOCK + 1
- --HP Leak
- if FIGHT_CLOCK % 8 == 0 then FARIS_HP = FARIS_HP - 2 end
- end -- End while Fight
- if(NOT_CONDEMNED == false) then
- return "Beyond Dead"
- elseif (FARIS_HP <= 0) then
- return "Regular Dead"
- elseif (TED_HP <= 0) then
- return "Tree Dead"
- else
- return "????"
- end
- end
- while true do
- memory.usememorydomain("WRAM")
- --Using this to detect fight load for now
- ESCAPADE = memory.readbyte(0x3EF0)
- if ESCAPADE ~= 0 then
- if THINK_STATE == 0 then
- console.clear()
- --Checks for Exdeath fight
- Visibles = memory.readbyte(0x3EF2)
- TREE_ID = memory.readbyte(0x3EF5)
- if(Visibles == 32 and TREE_ID == 19) then
- MAKE_TRUE_WHEEL()
- THUNDERING_PROGNOSTICATOR(true, true,0,0)
- --[[
- FAKE_B = 0
- for FAKE_A = 0, 255 do
- MAKE_FAKE_WHEEL(FAKE_A,0)
- PREDICTION = THUNDERING_PROGNOSTICATOR(false, false,FAKE_A, FAKE_B)
- if(PREDICTION == "Tree Dead") then
- console.writeline(FAKE_A .. " " .. FAKE_B ..":" .. PREDICTION)
- end
- end
- --]]
- end
- THINK_STATE = 1
- end
- else
- THINK_STATE = 0
- end
- if THINK_STATE == 1 then
- --THINK HUD
- RAW_THINK()
- end
- gui.text(0,432, "THINK STATE:" .. string.format(THINK_STATE))
- emu.frameadvance()
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement