238 lines
7.4 KiB
Lua
238 lines
7.4 KiB
Lua
![]() |
--RBI Baseball script
|
||
|
--Written by adelikat
|
||
|
--Shows stats and information on screen and can even change a batter or pitcher's hand
|
||
|
|
||
|
local PitchingScreenAddr = 0x001A;
|
||
|
local PitchingScreen;
|
||
|
|
||
|
local p1PitchHealthAddr = 0x060D;
|
||
|
local p1PitchHealth;
|
||
|
|
||
|
local p2PitchHealthAddr = 0x061D;
|
||
|
local p2PitchHealth;
|
||
|
|
||
|
local p1OutsAddr = 0x0665;
|
||
|
local p1Outs;
|
||
|
|
||
|
local pitchtypeAddr = 0x0112;
|
||
|
local pitchtype;
|
||
|
|
||
|
local P1currHitterPowerAddr = 0x062B --2 byte
|
||
|
local P1currSpeedAddr = 0x062D
|
||
|
local P1currContactAddr = 0x062A
|
||
|
|
||
|
local P2currHitterPowerAddr = 0x063B --2 byte
|
||
|
local P2currSpeedAddr = 0x063D
|
||
|
local P2currContactAddr = 0x063A
|
||
|
|
||
|
local topinningAddr = 0x0115
|
||
|
|
||
|
--Extra Ram map notes
|
||
|
--0627 = P1 Batter Lefy or Righty (even or odd)
|
||
|
--0628 = P1 Bat average 150 + this address
|
||
|
--0629 = P1 # of Home Runs
|
||
|
--0638 = P2 Bat average 2 150 + this address
|
||
|
--0639 = P2 # of Home Runs
|
||
|
--0637 = P2 Batter Lefy or Righty (even or odd)
|
||
|
|
||
|
--060x = P1 pitcher, 061x = P2 pitcher
|
||
|
|
||
|
--0607 =
|
||
|
--Right digit = P1 Pitcher Lefty or Right (even or odd)
|
||
|
--Left digit = P1 Pitcher drop rating
|
||
|
|
||
|
--0609 = P1 Sinker ball speed
|
||
|
--060A = P1 Regular ball Speed
|
||
|
--060B = P1 Fastball Speed
|
||
|
--060C = P1 Pitcher Curve rating left digit is curve left, right is curve right
|
||
|
|
||
|
--0114 = Current Inning
|
||
|
--0115 = 10 if bottom of inning, 0 if on top, controls which player can control the batter
|
||
|
|
||
|
--0728 & 0279 - In charge of inning music
|
||
|
|
||
|
--TODO
|
||
|
--A hotkeys for boosting/lowering current pitcher (p1 or 2) health
|
||
|
--fix pitcher L/R switching to not kill the left digit (drop rating) in the process
|
||
|
--Do integer division on curve rating
|
||
|
--Outs display is wrong
|
||
|
--Music on/off toggle
|
||
|
|
||
|
console.writeline("RBI Baseball script");
|
||
|
console.writeline("Written by adelikat");
|
||
|
console.writeline("Description: Shows stats and information on screen and can even change a batter or pitcher's hand");
|
||
|
console.writeline("\nHotkeys: ");
|
||
|
console.writeline("Toggle Hand of player 2: \nH/J");
|
||
|
console.writeline("Toggle Hand of player 1: \nK/L");
|
||
|
|
||
|
function P1BoostHitter()
|
||
|
mainmemory.write_u16_le(0x062B, mainmemory.read_u16_le(0x062B) + 128);
|
||
|
end
|
||
|
|
||
|
function P1DropHitter()
|
||
|
mainmemory.write_u16_le(0x062B, mainmemory.read_u16_le(0x062B) - 128);
|
||
|
end
|
||
|
|
||
|
function P2BoostHitter()
|
||
|
mainmemory.write_u16_le(0x063B, mainmemory.read_u16_le(0x063B) + 128);
|
||
|
end
|
||
|
|
||
|
function P2DropHitter()
|
||
|
mainmemory.write_u16_le(0x063B, mainmemory.read_u16_le(0x063B) - 128);
|
||
|
end
|
||
|
|
||
|
function SwitchP1LHand()
|
||
|
if (inningtb == 0x10) then
|
||
|
mainmemory.write_u8(0x0607, 0)
|
||
|
end
|
||
|
if (inningtb == 0) then
|
||
|
mainmemory.write_u8(0x0627, 0)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function SwitchP1RHand()
|
||
|
if (inningtb == 0x10) then
|
||
|
mainmemory.write_u8(0x0607, 1)
|
||
|
end
|
||
|
if (inningtb == 0) then
|
||
|
mainmemory.write_u8(0x0627, 1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function SwitchP2LHand()
|
||
|
if (inningtb == 0x0) then
|
||
|
mainmemory.write_u8(0x0617, 0)
|
||
|
end
|
||
|
if (inningtb == 0x10) then
|
||
|
mainmemory.write_u8(0x0637, 0)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function SwitchP2RHand()
|
||
|
if (inningtb == 0x0) then
|
||
|
mainmemory.write_u8(0x0617, 1)
|
||
|
end
|
||
|
if (inningtb == 0x10) then
|
||
|
mainmemory.write_u8(0x0637, 1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
h_window = forms.newform(345, 205, "RBI Lua");
|
||
|
|
||
|
label_p1switch = forms.label(h_window, "Player 1", 10, 5);
|
||
|
|
||
|
label_p1switch = forms.label(h_window, "Switch Player Hand", 10, 35);
|
||
|
h_toggleP1L = forms.button(h_window, "Left", SwitchP1LHand, 10, 60, 50, 23);
|
||
|
h_toggleP1R = forms.button(h_window, "Right", SwitchP1RHand, 70, 60, 50, 23);
|
||
|
label_p1switch = forms.label(h_window, "Batter Power", 10, 100);
|
||
|
h_toggleP1R = forms.button(h_window, "More!", P1BoostHitter, 10, 125, 50, 23);
|
||
|
h_toggleP1R = forms.button(h_window, "Less", P1DropHitter, 70, 125, 50, 23);
|
||
|
|
||
|
label_p2switch = forms.label(h_window, "Player 2", 160, 5);
|
||
|
label_p2switch = forms.label(h_window, "Switch Player Hand", 160, 35);
|
||
|
h_toggleP2L = forms.button(h_window, "Left", SwitchP2LHand, 160, 60, 50, 23);
|
||
|
h_toggleP2R = forms.button(h_window, "Right", SwitchP2RHand, 160, 60, 50, 23);
|
||
|
label_p2switch = forms.label(h_window, "Batter Power", 160, 100);
|
||
|
h_toggleP2R = forms.button(h_window, "More!", P2BoostHitter, 160, 125, 50, 23);
|
||
|
h_toggleP2R = forms.button(h_window, "Less", P2DropHitter, 220, 125, 50, 23);
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
while true do
|
||
|
|
||
|
mainmemory.write_u8(0x0726, 0) --Turn of inning music
|
||
|
mainmemory.write_u8(0x0727, 0)
|
||
|
mainmemory.write_u8(0x0728, 0)
|
||
|
mainmemory.write_u8(0x0729, 0)
|
||
|
|
||
|
inningtb = mainmemory.read_u8(topinningAddr);
|
||
|
i = input.get();
|
||
|
|
||
|
--Switch P1 batter hands
|
||
|
if (i.K == true) then
|
||
|
SwitchP1LHand()
|
||
|
end
|
||
|
|
||
|
if (i.L == true) then
|
||
|
SwitchP1RHand();
|
||
|
end
|
||
|
|
||
|
--Switch P2 batter hands
|
||
|
if (i.H == true) then
|
||
|
SwitchP2LHand();
|
||
|
end
|
||
|
|
||
|
if (i.J == true) then
|
||
|
SwitchP2RHand();
|
||
|
end
|
||
|
|
||
|
PitchingScreen = mainmemory.read_u8(PitchingScreenAddr);
|
||
|
|
||
|
-------------------------------------------------------
|
||
|
if (PitchingScreen == 0x003E) then
|
||
|
|
||
|
|
||
|
pitchtype = mainmemory.read_u8(pitchtypeAddr);
|
||
|
|
||
|
--What the pitcher will pitch
|
||
|
if (pitchtype == 0) then
|
||
|
gui.text(0,0,"Sinker!!", nil, nil, "bottomright");
|
||
|
end
|
||
|
if (pitchtype == 2) then
|
||
|
gui.text(0,0, "Fast Ball", nil, nil, "bottomright")
|
||
|
end
|
||
|
if (pitchtype == 1) then
|
||
|
gui.text(0,0,"Regular Pitch", nil, nil, "bottomright")
|
||
|
end
|
||
|
|
||
|
--Top of Inning
|
||
|
if (inningtb == 0) then
|
||
|
gui.text(0,0, "Health " .. mainmemory.read_u8(0x061D), nil, nil, "topright")
|
||
|
gui.text(0,12,"Drop " .. mainmemory.read_u8(0x0617) % 16, nil, nil, "topright")
|
||
|
gui.text(0,24,"CurveL " .. mainmemory.read_u8(0x061C) / 16, nil, nil, "topright")
|
||
|
gui.text(0,36,"CurveR " .. mainmemory.read_u8(0x061C) % 16, nil, nil, "topright")
|
||
|
gui.text(0,48,"Fast SP " .. mainmemory.read_u8(0x061B), nil, nil, "topright")
|
||
|
gui.text(0,60,"Reg SP " .. mainmemory.read_u8(0x061A), nil, nil, "topright")
|
||
|
gui.text(0,72,"Sink SP " .. mainmemory.read_u8(0x0619), nil, nil, "topright")
|
||
|
|
||
|
P1currPower = mainmemory.read_u8(P1currHitterPowerAddr) + (mainmemory.read_u8(P1currHitterPowerAddr+1) * 256);
|
||
|
gui.text(0,108, "Power: " .. P1currPower, nil, nil, "topright");
|
||
|
P1currSpeed = mainmemory.read_u8(P1currSpeedAddr);
|
||
|
gui.text(0,120, "Speed: " .. P1currSpeed, nil, nil, "topright");
|
||
|
P1currCt = mainmemory.read_u8(P1currContactAddr);
|
||
|
gui.text(0,132, "Contact: " .. P1currCt, nil, nil, "topright");
|
||
|
end
|
||
|
|
||
|
--Bottom of Inning
|
||
|
if (inningtb == 0x10) then
|
||
|
gui.text(0,0,"Health " .. mainmemory.read_u8(0x060D), nil, nil, "topright")
|
||
|
gui.text(0,12,"Drop " .. mainmemory.read_u8(0x0607) % 16, nil, nil, "topright")
|
||
|
gui.text(0,24,"CurveL " .. mainmemory.read_u8(0x060C) / 16, nil, nil, "topright")
|
||
|
gui.text(0,36,"CurveR " .. mainmemory.read_u8(0x060C) % 16, nil, nil, "topright")
|
||
|
gui.text(0,48,"Fast SP " .. mainmemory.read_u8(0x060B), nil, nil, "topright")
|
||
|
gui.text(0,60,"Reg SP " .. mainmemory.read_u8(0x060A), nil, nil, "topright")
|
||
|
gui.text(0,72,"Sink SP " .. mainmemory.read_u8(0x0609), nil, nil, "topright")
|
||
|
|
||
|
P2currPower = mainmemory.read_u8(P2currHitterPowerAddr) + (mainmemory.read_u8(P2currHitterPowerAddr+1) * 256);
|
||
|
gui.text(0,108, "Power: " .. P2currPower, nil, nil, "topright");
|
||
|
P2currSpeed = mainmemory.read_u8(P2currSpeedAddr);
|
||
|
gui.text(0,120, "Speed: " .. P2currSpeed, nil, nil, "topright");
|
||
|
P2currCt = mainmemory.read_u8(P2currContactAddr);
|
||
|
gui.text(0,132, "Contact: " .. P2currCt, nil, nil, "topright");
|
||
|
end
|
||
|
|
||
|
end
|
||
|
-------------------------------------------------------
|
||
|
|
||
|
if (PitchingScreen == 0x0036) then
|
||
|
|
||
|
p1Outs = mainmemory.read_u8(p1OutsAddr);
|
||
|
gui.text(0,0, "Outs " .. p1Outs, nil, nil, "topright");
|
||
|
|
||
|
end
|
||
|
-------------------------------------------------------
|
||
|
|
||
|
emu.frameadvance()
|
||
|
|
||
|
end
|