Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Initialise Variables/Addresses
- --Massive thanks to Jesuszilla for the tips/rewrite
- local int textx = 2
- local int textx2 = 290
- local int textx3 = 130
- local int texty = 10
- --Memory Macros
- rb = memory.readbyte
- rw = memory.readword
- rd = memory.readdword
- wb = memory.writebyte
- ww = memory.writeword
- wd = memory.writedword
- --SIGNED VALUES
- rbs = memory.readbytesigned
- rws = memory.readwordsigned
- rds = memory.readdwordsigned
- wbs = memory.writebytesigned
- wws = memory.writewordsigned
- wds = memory.writedwordsigned
- local int text = {
- x = 2,
- x2 = 40,
- x3 = 290,
- y = 10,
- }
- local View_Mode = {
- CPS3,
- Mugen,
- }
- local Current_Mode = 2 --Default, 1= CPS3, 2 = Mugen
- --ADDRESSES
- local Player_UID = {
- P1 = 0x02068C6C,
- P2 = 0x02069104,
- } --0x498
- local Space = Player_UID.P2 - Player_UID.P1
- local Current_Player = 0 --0 = P1, 1= P2
- local UID_Data = {
- visible = 0x01,
- player_ctrl = 0x02,
- facing = 0x03,
- Hitpause = 0x45,
- pos_X = 0x64,
- pos_X_subpixel = 0x66,
- pos_Y = 0x68,
- pos_Y_subpixel = 0x6A,
- vel_X = 0x7C,
- vel_X_Subvel = 0x7E,
- vel_Y = 0x80,
- subvel_Y = 130,
- accel_Y = 136,
- Anim_Pointer = 0x200,
- Animelem_Frametime = 517,
- Internal_Spriteno = 538,
- char_id = 0x3C1,
- Sprite_Header = 604,
- Box_Base = 648, --TEST!!!!
- Pointer_List_1 = {
- Offset = 428,
- No_of_Pointers = 10
- },
- Pointer_List_2 = {
- Offset = 476,
- No_of_Pointers = 5
- },
- Pointer1 = 504, -- DWORD
- Pointer_List_3 = {
- Offset = 668,
- No_of_Pointers = 4
- },
- Pointer_List_4 = {
- Offset = 692,
- No_of_Pointers = 6
- },
- Pointer_List_5 = {
- Offset = 720,
- No_of_Pointers = 3
- },
- Pointer2 = 1004 -- DWORD
- }
- local timer_address = 0x2011377
- local charselect_timer_address = 0x20154FB
- local infinite_time = 1
- local pressing_C = 0 -- Infinite time button
- local pressing_V = 0 -- Mode Toggle
- local pressing_P = 0 -- Toggle Players
- local Display = {
- P1 = {},
- P2 = {}
- }
- local PlayerZ = {}
- -- Used in conversion function
- local Division_Type = {
- B = 256.0, --BYTE
- b = 256.0, --BYTE
- W = 65536, --WORD
- w = 65536, --WORD
- D = 4294967296.0, --DWORD
- d = 4294967296.0, --DWORD
- }
- --Useful Maths functions for converting floating points
- function Subpixel_Floatconvert(c,x)
- local Output
- if x == 0 then
- return 0--x = x
- else
- -- local absx = x-- math.abs(x)
- -- local z = math.sign(x)
- -- if x < c /2 then
- Output = math.abs(x)/ c
- -- absx = absx / c
- -- else
- -- Output = math.abs(x - c) / c
- -- end
- return Output + .0--absx + .0
- end
- end
- --Weirdly it's documented as an inherent function but it isn't. FBNeo is weird i guess
- function math.sign(x)
- if x<0 then
- return -1
- elseif x>0 then
- return 1
- else
- return 0
- end
- end
- --X = Velocity, Y = Subpixel to be converted to Floating Point
- --Z = Container for current velocity direction
- function OutputFloat(x,y,axis)
- -- if x == 0 and y == 0 then
- -- return 0
- -- else
- --Multiply Floating Point by Velocity value
- -- Output = x
- -- z = math.sign(x)
- -- y = math.abs(y) + .0
- -- y = y * x
- -- Output = x + y--(y * z)
- if axis == 1 then --If X Axis
- return x + y -- (math.abs(x) + y) * math.sign(x)
- else --If Y Axis
- return (math.abs(x) + y) * math.sign(x)
- end
- -- return Output
- -- end
- end
- local data_params = 15
- while true do
- gui.clearuncommitted()
- local keys = input.get()
- for i = 0,1,1 do
- if Current_Mode == 1 then
- PlayerZ[i] = {
- Current_X_Vel = rw(Player_UID.P1 + (Space * i) + UID_Data.vel_X),
- Current_X_Vel_Subvel = rw(Player_UID.P1 + (Space * i) + UID_Data.vel_X_Subvel),
- Current_Y_Vel = rw(Player_UID.P1 + (Space * i) + UID_Data.vel_Y),
- Current_Y_SubVel = rw(Player_UID.P1 + (Space * i) + UID_Data.subvel_Y) ,
- Current_Y_Accel = rd(Player_UID.P1 + (Space * i) + UID_Data.accel_Y),
- Current_X_Pos = rw(Player_UID.P1 + (Space * i) + UID_Data.pos_X),
- Current_pos_X_subpixel = rw(Player_UID.P1 + (Space * i) + UID_Data.pos_X_subpixel),
- Current_Y_Pos = rw(Player_UID.P1 + (Space * i) + UID_Data.pos_Y),
- Current_pos_Y_subpixel = rw(Player_UID.P1 + (Space * i) + UID_Data.pos_Y_subpixel),
- Current_Anim_Ptr = rd(Player_UID.P1 + (Space * i) + UID_Data.Anim_Pointer),
- -- Current_Animelem_Ptr = rd(Player_UID.P1 + (Space * i) + UID_Data.Animelem_Pointer),
- Current_Sprite_Header_Ptr = rd(Player_UID.P1 + (Space * i) + UID_Data.Sprite_Header),
- Current_Internal_Spriteno = rw(Player_UID.P1 + (Space * i) + UID_Data.Internal_Spriteno),
- Current_Hitpause = rb(Player_UID.P1 + (Space * i) + UID_Data.Hitpause),
- }
- --POINTER LIST 1
- for b = 0,UID_Data.Pointer_List_1.No_of_Pointers-1,1 do
- Pointer_List_1CHECK = {}
- Pointer_List_1CHECK[b+1] = rd(Player_UID.P1 + (Space * i) + UID_Data.Pointer_List_1.Offset+ (4*b))
- gui.text(textx3,texty*(b+1)+40, string.format("List 1-%d = 0x%x", b, Pointer_List_1CHECK[b+1]))
- end
- --POINTER LIST 2
- for b = 0,UID_Data.Pointer_List_2.No_of_Pointers-1,1 do
- Pointer_List_2CHECK = {}
- Pointer_List_2CHECK[b+1] = rd(Player_UID.P1 + (Space * i) + UID_Data.Pointer_List_2.Offset+ (4*b))
- gui.text(textx3,texty*(b+1)+140, string.format("List 2-%d = 0x%x", b, Pointer_List_2CHECK[b+1]))
- end
- --POINTER LIST 3
- for b = 0,UID_Data.Pointer_List_3.No_of_Pointers-1,1 do
- Pointer_List_3CHECK = {}
- Pointer_List_3CHECK[b+1] = rd(Player_UID.P1 + (Space * i) + UID_Data.Pointer_List_3.Offset+ (4*b))
- gui.text(textx3+88,texty*(b+1)+40, string.format("List 3-%d = 0x%x", b, Pointer_List_3CHECK[b+1]))
- end
- --POINTER LIST 4
- for b = 0,UID_Data.Pointer_List_4.No_of_Pointers-1,1 do
- Pointer_List_4CHECK = {}
- Pointer_List_4CHECK[b+1] = rd(Player_UID.P1 + (Space * i) + UID_Data.Pointer_List_4.Offset+ (4*b))
- gui.text(textx3+88,texty*(b+1)+80, string.format("List 4-%d = 0x%x", b, Pointer_List_4CHECK[b+1]))
- end
- --POINTER LIST 5
- for b = 0,UID_Data.Pointer_List_5.No_of_Pointers-1,1 do
- Pointer_List_5CHECK = {}
- Pointer_List_5CHECK[b+1] = rd(Player_UID.P1 + (Space * i) + UID_Data.Pointer_List_5.Offset+ (4*b))
- gui.text(textx3+88,texty*(b+1)+140, string.format("List 5-%d = 0x%x", b, Pointer_List_5CHECK[b+1]))
- end
- -- POS X
- gui.text(text.x,text.y, "Pos X =")
- gui.text(text.x2,text.y, string.format("0x%x", PlayerZ[Current_Player].Current_X_Pos))
- -- VEL X
- gui.text(text.x2+30,text.y, "Vel X =")
- gui.text(text.x2+65,text.y, string.format("0x%x", PlayerZ[Current_Player].Current_X_Vel))
- -- POS Y
- gui.text(text.x,text.y*2,"Pos Y =")
- gui.text(text.x2,text.y*2, string.format("0x%x", PlayerZ[Current_Player].Current_Y_Pos))
- -- VEL Y
- gui.text(text.x2+30,text.y*2,"Vel Y =")
- gui.text(text.x2+65,text.y*2, string.format("0x%x", PlayerZ[Current_Player].Current_Y_Vel))
- -- SUBVEL Y
- gui.text(text.x2+93,text.y*2,"Subvel Y =")
- gui.text(text.x2+137,text.y*2, string.format("0x%x", PlayerZ[Current_Player].Current_Y_SubVel))
- -- ACCEL Y
- gui.text(text.x2+158,text.y*2,"Accel Y =")
- gui.text(text.x2+197,text.y*2, string.format("0x%x", PlayerZ[Current_Player].Current_Y_Accel))
- -- ANIM POINTER
- gui.text(text.x,text.y*3, "Anim Ptr =")
- gui.text(text.x2+10,text.y*3, string.format("0x%x", PlayerZ[Current_Player].Current_Anim_Ptr))
- -- SPRITE HEADER POINTER
- gui.text(text.x,text.y*4, "Sprite Header Ptr =")
- gui.text(text.x2+40,text.y*4, string.format("0x%x", PlayerZ[Current_Player].Current_Sprite_Header_Ptr))
- -- INTERNAL SPRITENO
- gui.text(text.x2+79,text.y*4, "Internal Spriteno =")
- gui.text(text.x2+160,text.y*4, string.format("0x%x", PlayerZ[Current_Player].Current_Internal_Spriteno))
- -- HITPAUSE
- gui.text(text.x,text.y*5, string.format("Hitpause = 0x%x", PlayerZ[Current_Player].Current_Hitpause))
- else
- --DISPLAY MUGEN DAYA
- PlayerZ[i] = {
- Current_X_Vel = rws(Player_UID.P1 + (Space * i) + UID_Data.vel_X),
- Current_X_Vel_Subvel = rw(Player_UID.P1 + (Space * i) + UID_Data.vel_X_Subvel),
- Current_Y_Vel = rws(Player_UID.P1 + (Space * i) + UID_Data.vel_Y),
- Current_Y_SubVel = rw(Player_UID.P1 + (Space * i) + UID_Data.subvel_Y) ,
- Current_Y_Accel = rds(Player_UID.P1 + (Space * i) + UID_Data.accel_Y),
- Current_X_Pos = rw(Player_UID.P1 + (Space * i) + UID_Data.pos_X),
- Current_pos_X_subpixel = rw(Player_UID.P1 + (Space * i) + UID_Data.pos_X_subpixel),
- Current_Y_Pos = rw(Player_UID.P1 + (Space * i) + UID_Data.pos_Y),
- Current_pos_Y_subpixel = rw(Player_UID.P1 + (Space * i) + UID_Data.pos_Y_subpixel),
- Current_Anim_Ptr = rd(Player_UID.P1 + (Space * i) + UID_Data.Anim_Pointer),
- -- Current_Animelem_Ptr = rd(Player_UID.P1 + (Space * i) + UID_Data.Animelem_Pointer),
- Current_Sprite_Header_Ptr = rd(Player_UID.P1 + (Space * i) + UID_Data.Sprite_Header),
- Current_Internal_Spriteno = rw(Player_UID.P1 + (Space * i) + UID_Data.Internal_Spriteno),
- Current_Hitpause = rbs(Player_UID.P1 + (Space * i) + UID_Data.Hitpause),
- }
- PlayerZ[i].Current_pos_X_subpixel = Subpixel_Floatconvert(Division_Type.W,PlayerZ[i].Current_pos_X_subpixel)
- PlayerZ[i].Current_X_Vel_Subvel = Subpixel_Floatconvert(Division_Type.W,PlayerZ[i].Current_X_Vel_Subvel)
- PlayerZ[i].Current_pos_Y_subpixel = Subpixel_Floatconvert(Division_Type.W,PlayerZ[i].Current_pos_Y_subpixel)
- PlayerZ[i].Current_Y_SubVel = Subpixel_Floatconvert(Division_Type.W,PlayerZ[i].Current_Y_SubVel)
- PlayerZ[i].Current_Y_Accel = Subpixel_Floatconvert(Division_Type.W,PlayerZ[i].Current_Y_Accel)
- -- POS X
- -- gui.text(text.x,text.y, "Pos X =")
- -- gui.text(text.x2,text.y, string.format("%d", PlayerZ[Current_Player].Current_X_Pos))
- gui.text(text.x,text.y, string.format("Pos X = %f", OutputFloat(PlayerZ[Current_Player].Current_X_Pos,PlayerZ[Current_Player].Current_pos_X_subpixel,1)))
- -- VEL X
- -- gui.text(text.x2+30,text.y, "Vel X =")
- -- gui.text(text.x2+52,text.y, string.format("Vel X = %f", PlayerZ[Current_Player].Current_X_Vel))
- gui.text(text.x2+52,text.y, string.format("Vel X = %f", OutputFloat(PlayerZ[Current_Player].Current_X_Vel,PlayerZ[Current_Player].Current_X_Vel_Subvel,1)))
- -- POS Y
- -- gui.text(text.x,text.y*2,"Pos Y =")
- -- gui.text(text.x2,text.y*2, string.format("%d", PlayerZ[Current_Player].Current_Y_Pos))
- gui.text(text.x,text.y*2, string.format("Pos Y = %f", OutputFloat(PlayerZ[Current_Player].Current_Y_Pos,PlayerZ[Current_Player].Current_pos_Y_subpixel,2)))
- -- VEL Y
- -- gui.text(text.x2+60,text.y*2,"Vel Y =")
- gui.text(text.x2+52,text.y*2, string.format("Vel Y = %f", OutputFloat(PlayerZ[Current_Player].Current_Y_Vel,PlayerZ[Current_Player].Current_Y_SubVel,2)))
- -- ACCEL Y
- -- gui.text(text.x2+168,text.y*2,"Accel Y =")
- gui.text(text.x2+142,text.y*2, string.format("Accel Y = %f", PlayerZ[Current_Player].Current_Y_Accel))
- -- ANIM POINTER
- gui.text(text.x,text.y*3, "Anim Ptr =")
- gui.text(text.x2+10,text.y*3, string.format("0x%x", PlayerZ[Current_Player].Current_Anim_Ptr))
- -- SPRITE HEADER POINTER
- gui.text(text.x,text.y*4, "Sprite Header Ptr =")
- gui.text(text.x2+40,text.y*4, string.format("0x%x", PlayerZ[Current_Player].Current_Sprite_Header_Ptr))
- -- INTERNAL SPRITENO
- gui.text(text.x2+79,text.y*4, "Internal Spriteno =")
- gui.text(text.x2+160,text.y*4, string.format("0x%x", PlayerZ[Current_Player].Current_Internal_Spriteno))
- -- HITPAUSE
- gui.text(text.x,text.y*5, string.format("Hitpause = %d", PlayerZ[Current_Player].Current_Hitpause))
- end
- --Freeze timer.cancel()
- if infinite_time == 1 then
- ww(timer_address, rw(timer_address)+1)
- wb(charselect_timer_address, 0x99)
- else
- ww(timer_address,0)
- wb(charselect_timer_address, 0)
- -- memory.writedword(P1_Characterselect_cursor_adr,0X0000170E)
- end
- --Infinite Time Toggle
- if keys.C and pressing_C == 0 then
- if infinite_time == 1 then
- infinite_time = 0
- pressing_C = 1
- else
- infinite_time = 1
- pressing_C = 1
- end
- end
- if pressing_C == 1 and not keys.C then
- pressing_C = 0
- end
- --` TOGGLE MODE
- if Current_Mode == 1 then
- gui.text(text.x+240,text.y*20, "V - Data Mode - CPS3")
- else
- gui.text(text.x+240,text.y*20, "V - Data Mode - MUGEN")
- end
- --` INFINITE TIME
- gui.text(text.x+140,text.y*20, "C - Infinite Time = ".. infinite_time)
- --` TOGGLE PLAYER
- gui.text(text.x+140,text.y*21, "P - Toggle Current Player")
- --` Current Player
- gui.text(0,0, "Player ".. Current_Player+1)
- --Toggle Data view
- if pressing_V == 0 and keys.V then
- if Current_Mode == 1 then
- Current_Mode = 2
- pressing_V = 1
- else
- Current_Mode = 1
- pressing_V = 1
- end
- end
- if pressing_V == 1 and not keys.V then
- pressing_V = 0
- end
- --Toggle Data view
- if pressing_P == 0 and keys.P then
- if Current_Player == 0 then
- Current_Player = 1
- pressing_P = 1
- else
- Current_Player = 0
- pressing_P = 1
- end
- end
- if pressing_P == 1 and not keys.P then
- pressing_P = 0
- end
- end
- emu.frameadvance()
- end
Add Comment
Please, Sign In to add comment