From 025c412f0ace2d4f6910766919cd9a590dd19fb9 Mon Sep 17 00:00:00 2001 From: StevenPhang22 Date: Mon, 28 Nov 2022 16:32:41 -0500 Subject: [PATCH 1/7] removed legacy comment --- src/lua-engine.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/lua-engine.cpp b/src/lua-engine.cpp index 61c21fce..f889d58a 100644 --- a/src/lua-engine.cpp +++ b/src/lua-engine.cpp @@ -5466,9 +5466,6 @@ static int emugator_yieldwithflag(lua_State* L) luaYieldFlag = true; return lua_yield(L, 0); - - - // It's actually rather disappointing... } From 143380bd4cf933c229d647351542800faef8e7b7 Mon Sep 17 00:00:00 2001 From: StevenPhang22 Date: Mon, 28 Nov 2022 19:45:52 -0500 Subject: [PATCH 2/7] added basic d&d functionality --- output/luaScripts/emugator/emugators_demo.lua | 41 ++++++++++++++++++ output/luaScripts/emugator/nesRomGeneric.png | Bin 0 -> 2055 bytes output/luaScripts/emugator/superMario.nes | Bin 0 -> 40976 bytes 3 files changed, 41 insertions(+) create mode 100644 output/luaScripts/emugator/emugators_demo.lua create mode 100644 output/luaScripts/emugator/nesRomGeneric.png create mode 100644 output/luaScripts/emugator/superMario.nes diff --git a/output/luaScripts/emugator/emugators_demo.lua b/output/luaScripts/emugator/emugators_demo.lua new file mode 100644 index 00000000..c7c994ab --- /dev/null +++ b/output/luaScripts/emugator/emugators_demo.lua @@ -0,0 +1,41 @@ + emu.print("Go Gators!") + local cart = {x1=50, y1=50, x2=100, y2=100} + local console = {x1=150, y1=50, x2=200, y2=100} + local isDrag = false + --local gd = require("gd") + +while(true) do + --need gd for this + --local gdstr = gd.createFromPng("C:\Users\Super\Emugators\fceux\output\luaScripts\emugator\nesRomGeneric.png"):gdStr() + --gui.gdoverlay(gdstr) + + if(emu.emulating() == false) then + local inpt = input.read() + + if (inpt.leftclick == nil) then + if ((inpt.xmouse > console.x1) and (inpt.xmouse < console.x2) and (inpt.ymouse > console.y1) and (inpt.ymouse < console.y2) and isDrag) then + emu.loadrom("superMario.nes") + end + isDrag = false + end + + if isDrag then + gui.rect(inpt.xmouse, inpt.ymouse, inpt.xmouse+50, inpt.ymouse+50, "red", "white") + gui.text(inpt.xmouse + 12, inpt.ymouse+12, "Super\nMario\nBros.") + elseif ((inpt.xmouse > cart.x1) and (inpt.xmouse < cart.x2) and (inpt.ymouse > cart.y1) and (inpt.ymouse < cart.y2) and inpt.leftclick) then + isDrag = true + else + gui.rect(cart.x1, cart.y1, cart.x2, cart.y2, "gray", "white") + gui.text(cart.x1 + 12, cart.y1 + 12, "Super\nMario\nBros.") + end + + gui.rect(console.x1, console.y1, console.x2, console.y2, "blue", "white") + gui.text(console.x1 + 9, console.y1 + 16, "Famicom\n/NES") + + emugator.yieldwithflag() -- call this if you want the script to run without emulation (game running) + else + emu.frameadvance() + end + + --emu.frameadvance() +end \ No newline at end of file diff --git a/output/luaScripts/emugator/nesRomGeneric.png b/output/luaScripts/emugator/nesRomGeneric.png new file mode 100644 index 0000000000000000000000000000000000000000..d31c400df6ff909f0e80f48fc13c307399251fb2 GIT binary patch literal 2055 zcmV+i2>ADjP)Mczdd&sGXLZSXEfr*V(o=h;9G?2c$_vK~#9!?VZhT+eQ?H2WSa; zE4~4ZATJOU@X`njX-lA(cDyZAWvhh>duhNJl{a|fm?7bd{hb*h!zu1QULcGKHq$sklqi}WXaI+>D6GOO? zvD^W!`nuT;x5|2PPddvcozKm>*k*T&E1H|!Vv6kpPH@-y>vTAub$0(6)1J3tC=bM- za3wc|6b^A$ZG2-F;r{WniNE)+;>bKkbg*TJ~wT**Wa#S9EI`Q@e$!XV9tSO=>l%{-fa)9(xAc>~>{gcgYakYe#00 z-55QCO?HVEGE-&P-v{ppmt?iedoFB}6RixQwHkDvu*mQPD{w~N($wVJC~b8=$Ha&vYc>EUuV5EVJ?>gR>4{v&Hj z2QBSp`HL~u6+JQJbE9@co@yg4J)S=q!yE2&2QmQeq`g{ET|;)y1+l$aSIbn1J-v&G zTMTG-{-mzMr*|>6J4;KuhU{ikPc>6^b@Qc~u%6?Q6V$HxBFyM%mt|(3p<)EJYmD`p zQPghu7Ke0Ya9elh&AzNBf@XK@PI#z2r?*$@MooLeThCyD%htvqxL4y;H|~TsKQ`G- z4A=W*!l}=|a&_z9_fU0lOy3D3Xz5*xi?du)^mmC?2GrdcJ%e`_$K?zpRTpO#&Bbv! z1DTiuncQ9tE{;ck7cP!p?ZUCMF%oM&j1%E z@H_)t9L(YnbaB>jaZq;?b#a{IhIVl*wHtaC=Vr8<5y2g8>Ctp?W@*jh6lu9QGtA;( z76&d)RDTyPP8@%iGU4kx- zuvyF}-(DDVnceI>uIupm>c*jP9l1DOaQ(SB#Bk5KIK*(zwdc`r z2~`GvE)F@|VHby7Wf*pGh-vqni<3}gc%-P^#3}<(T$a{lVw#IXt&p8@aYEsa{;}p^ z7bjYKKF!66gF3v~P4eeW8pJ9B@pwu9RsA6XKqP<#^-eg>yT#NUO#ntWwF3xLh zUl;uTj;dod*lWS-@2EOH+1^-e?OxEHzt(wN2l6r(CwHI)xHxce;Nrl=NgB7kT7Dga z+ka(MVp#Tv2N&nhWwXQnJ_h$^8~>e@{ybNwTi?BN7w7r@gvyB9M)A2itz@jK`tF^p z_PM+ex14>d;<-2zaF4PZ)Wvau8?Z855AI37+byHw-kYe#;sy;TxCRfWqKK=+VDNC3 z6vdF3cC)l_n|?RcERGA@fU`IbDnrOw92eRRIE&**yP=+By}`;5(8cjv87Q_mAzhpS z+>!lmP#4EVdmhlm!RCiHZkCuBhW>eaK7(QkSjZfR;aXgr6)Jb{ALRKyIjRe%k-|&7lIOzy&UFfeT#V0vEWzg#!s(-~t!8zy&UFfeTzX lkl0NC7r4L$E^yB-{|B05j-d`!;nn~E002ovPDHLkV1k9n{Cxlb literal 0 HcmV?d00001 diff --git a/output/luaScripts/emugator/superMario.nes b/output/luaScripts/emugator/superMario.nes new file mode 100644 index 0000000000000000000000000000000000000000..878ef21b5976a87c2fc19e780381816cbc769a65 GIT binary patch literal 40976 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 Date: Mon, 28 Nov 2022 19:58:41 -0500 Subject: [PATCH 3/7] added unload button --- output/luaScripts/emugator/emugators_demo.lua | 7 +++++++ src/lua-engine.cpp | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/output/luaScripts/emugator/emugators_demo.lua b/output/luaScripts/emugator/emugators_demo.lua index c7c994ab..d0c79e7e 100644 --- a/output/luaScripts/emugator/emugators_demo.lua +++ b/output/luaScripts/emugator/emugators_demo.lua @@ -1,6 +1,7 @@ emu.print("Go Gators!") local cart = {x1=50, y1=50, x2=100, y2=100} local console = {x1=150, y1=50, x2=200, y2=100} + local unloadButton = {x1 = 220, y1 = 220, x2 = 250, y2 = 230} local isDrag = false --local gd = require("gd") @@ -34,6 +35,12 @@ while(true) do emugator.yieldwithflag() -- call this if you want the script to run without emulation (game running) else + gui.rect(unloadButton.x1, unloadButton.y1, unloadButton.x2, unloadButton.y2, "blue", "white") + gui.text(unloadButton.x1+2, unloadButton.y1+2, "Unload") + + if ((inpt.xmouse > unloadButton.x1) and (inpt.xmouse < unloadButton.x2) and (inpt.ymouse > unloadButton.y1) and (inpt.ymouse < unloadButton.y2) and inpt.leftclick) then + --emu. + end emu.frameadvance() end diff --git a/src/lua-engine.cpp b/src/lua-engine.cpp index f889d58a..d0c7c567 100644 --- a/src/lua-engine.cpp +++ b/src/lua-engine.cpp @@ -644,7 +644,7 @@ static int emu_insertOrEjectDisk(lua_State* L) FCEUI_FDSInsert(); return 0; } - + // emu.loadrom(string filename) // From 988d45ea5dee4b5fc5a270be75cc1a169c9a62ad Mon Sep 17 00:00:00 2001 From: StevenPhang22 Date: Mon, 28 Nov 2022 16:32:41 -0500 Subject: [PATCH 4/7] removed legacy comment --- src/lua-engine.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/lua-engine.cpp b/src/lua-engine.cpp index 7308ac12..17415cb0 100644 --- a/src/lua-engine.cpp +++ b/src/lua-engine.cpp @@ -5473,9 +5473,6 @@ static int emugator_yieldwithflag(lua_State* L) luaYieldFlag = true; return lua_yield(L, 0); - - - // It's actually rather disappointing... } From 95bca61eaa5f64a7ad1941e204e7eee3bab11221 Mon Sep 17 00:00:00 2001 From: StevenPhang22 Date: Mon, 28 Nov 2022 19:45:52 -0500 Subject: [PATCH 5/7] added basic d&d functionality --- output/luaScripts/emugator/emugators_demo.lua | 41 ++++++++++++++++++ output/luaScripts/emugator/nesRomGeneric.png | Bin 0 -> 2055 bytes output/luaScripts/emugator/superMario.nes | Bin 0 -> 40976 bytes 3 files changed, 41 insertions(+) create mode 100644 output/luaScripts/emugator/emugators_demo.lua create mode 100644 output/luaScripts/emugator/nesRomGeneric.png create mode 100644 output/luaScripts/emugator/superMario.nes diff --git a/output/luaScripts/emugator/emugators_demo.lua b/output/luaScripts/emugator/emugators_demo.lua new file mode 100644 index 00000000..c7c994ab --- /dev/null +++ b/output/luaScripts/emugator/emugators_demo.lua @@ -0,0 +1,41 @@ + emu.print("Go Gators!") + local cart = {x1=50, y1=50, x2=100, y2=100} + local console = {x1=150, y1=50, x2=200, y2=100} + local isDrag = false + --local gd = require("gd") + +while(true) do + --need gd for this + --local gdstr = gd.createFromPng("C:\Users\Super\Emugators\fceux\output\luaScripts\emugator\nesRomGeneric.png"):gdStr() + --gui.gdoverlay(gdstr) + + if(emu.emulating() == false) then + local inpt = input.read() + + if (inpt.leftclick == nil) then + if ((inpt.xmouse > console.x1) and (inpt.xmouse < console.x2) and (inpt.ymouse > console.y1) and (inpt.ymouse < console.y2) and isDrag) then + emu.loadrom("superMario.nes") + end + isDrag = false + end + + if isDrag then + gui.rect(inpt.xmouse, inpt.ymouse, inpt.xmouse+50, inpt.ymouse+50, "red", "white") + gui.text(inpt.xmouse + 12, inpt.ymouse+12, "Super\nMario\nBros.") + elseif ((inpt.xmouse > cart.x1) and (inpt.xmouse < cart.x2) and (inpt.ymouse > cart.y1) and (inpt.ymouse < cart.y2) and inpt.leftclick) then + isDrag = true + else + gui.rect(cart.x1, cart.y1, cart.x2, cart.y2, "gray", "white") + gui.text(cart.x1 + 12, cart.y1 + 12, "Super\nMario\nBros.") + end + + gui.rect(console.x1, console.y1, console.x2, console.y2, "blue", "white") + gui.text(console.x1 + 9, console.y1 + 16, "Famicom\n/NES") + + emugator.yieldwithflag() -- call this if you want the script to run without emulation (game running) + else + emu.frameadvance() + end + + --emu.frameadvance() +end \ No newline at end of file diff --git a/output/luaScripts/emugator/nesRomGeneric.png b/output/luaScripts/emugator/nesRomGeneric.png new file mode 100644 index 0000000000000000000000000000000000000000..d31c400df6ff909f0e80f48fc13c307399251fb2 GIT binary patch literal 2055 zcmV+i2>ADjP)Mczdd&sGXLZSXEfr*V(o=h;9G?2c$_vK~#9!?VZhT+eQ?H2WSa; zE4~4ZATJOU@X`njX-lA(cDyZAWvhh>duhNJl{a|fm?7bd{hb*h!zu1QULcGKHq$sklqi}WXaI+>D6GOO? zvD^W!`nuT;x5|2PPddvcozKm>*k*T&E1H|!Vv6kpPH@-y>vTAub$0(6)1J3tC=bM- za3wc|6b^A$ZG2-F;r{WniNE)+;>bKkbg*TJ~wT**Wa#S9EI`Q@e$!XV9tSO=>l%{-fa)9(xAc>~>{gcgYakYe#00 z-55QCO?HVEGE-&P-v{ppmt?iedoFB}6RixQwHkDvu*mQPD{w~N($wVJC~b8=$Ha&vYc>EUuV5EVJ?>gR>4{v&Hj z2QBSp`HL~u6+JQJbE9@co@yg4J)S=q!yE2&2QmQeq`g{ET|;)y1+l$aSIbn1J-v&G zTMTG-{-mzMr*|>6J4;KuhU{ikPc>6^b@Qc~u%6?Q6V$HxBFyM%mt|(3p<)EJYmD`p zQPghu7Ke0Ya9elh&AzNBf@XK@PI#z2r?*$@MooLeThCyD%htvqxL4y;H|~TsKQ`G- z4A=W*!l}=|a&_z9_fU0lOy3D3Xz5*xi?du)^mmC?2GrdcJ%e`_$K?zpRTpO#&Bbv! z1DTiuncQ9tE{;ck7cP!p?ZUCMF%oM&j1%E z@H_)t9L(YnbaB>jaZq;?b#a{IhIVl*wHtaC=Vr8<5y2g8>Ctp?W@*jh6lu9QGtA;( z76&d)RDTyPP8@%iGU4kx- zuvyF}-(DDVnceI>uIupm>c*jP9l1DOaQ(SB#Bk5KIK*(zwdc`r z2~`GvE)F@|VHby7Wf*pGh-vqni<3}gc%-P^#3}<(T$a{lVw#IXt&p8@aYEsa{;}p^ z7bjYKKF!66gF3v~P4eeW8pJ9B@pwu9RsA6XKqP<#^-eg>yT#NUO#ntWwF3xLh zUl;uTj;dod*lWS-@2EOH+1^-e?OxEHzt(wN2l6r(CwHI)xHxce;Nrl=NgB7kT7Dga z+ka(MVp#Tv2N&nhWwXQnJ_h$^8~>e@{ybNwTi?BN7w7r@gvyB9M)A2itz@jK`tF^p z_PM+ex14>d;<-2zaF4PZ)Wvau8?Z855AI37+byHw-kYe#;sy;TxCRfWqKK=+VDNC3 z6vdF3cC)l_n|?RcERGA@fU`IbDnrOw92eRRIE&**yP=+By}`;5(8cjv87Q_mAzhpS z+>!lmP#4EVdmhlm!RCiHZkCuBhW>eaK7(QkSjZfR;aXgr6)Jb{ALRKyIjRe%k-|&7lIOzy&UFfeT#V0vEWzg#!s(-~t!8zy&UFfeTzX lkl0NC7r4L$E^yB-{|B05j-d`!;nn~E002ovPDHLkV1k9n{Cxlb literal 0 HcmV?d00001 diff --git a/output/luaScripts/emugator/superMario.nes b/output/luaScripts/emugator/superMario.nes new file mode 100644 index 0000000000000000000000000000000000000000..878ef21b5976a87c2fc19e780381816cbc769a65 GIT binary patch literal 40976 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 Date: Mon, 28 Nov 2022 19:58:41 -0500 Subject: [PATCH 6/7] added unload button --- output/luaScripts/emugator/emugators_demo.lua | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/output/luaScripts/emugator/emugators_demo.lua b/output/luaScripts/emugator/emugators_demo.lua index c7c994ab..d0c79e7e 100644 --- a/output/luaScripts/emugator/emugators_demo.lua +++ b/output/luaScripts/emugator/emugators_demo.lua @@ -1,6 +1,7 @@ emu.print("Go Gators!") local cart = {x1=50, y1=50, x2=100, y2=100} local console = {x1=150, y1=50, x2=200, y2=100} + local unloadButton = {x1 = 220, y1 = 220, x2 = 250, y2 = 230} local isDrag = false --local gd = require("gd") @@ -34,6 +35,12 @@ while(true) do emugator.yieldwithflag() -- call this if you want the script to run without emulation (game running) else + gui.rect(unloadButton.x1, unloadButton.y1, unloadButton.x2, unloadButton.y2, "blue", "white") + gui.text(unloadButton.x1+2, unloadButton.y1+2, "Unload") + + if ((inpt.xmouse > unloadButton.x1) and (inpt.xmouse < unloadButton.x2) and (inpt.ymouse > unloadButton.y1) and (inpt.ymouse < unloadButton.y2) and inpt.leftclick) then + --emu. + end emu.frameadvance() end From 6ee85026b1ef69fbdfed92ad9be344460dab6b71 Mon Sep 17 00:00:00 2001 From: StevenPhang22 Date: Mon, 28 Nov 2022 20:56:23 -0500 Subject: [PATCH 7/7] fixed issue with closeRom() being called during emulation --- output/luaScripts/closeRom.lua | 7 ++++++- output/luaScripts/emugator/emugators_demo.lua | 11 ++++++----- src/fceu.cpp | 3 +++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/output/luaScripts/closeRom.lua b/output/luaScripts/closeRom.lua index fb56beeb..dedfd713 100644 --- a/output/luaScripts/closeRom.lua +++ b/output/luaScripts/closeRom.lua @@ -1,2 +1,7 @@ +while true do +local inpt = input.read() +emu.frameadvance() emu.closeRom() -emu.print("ROM Unloaded") +emugator.yieldwithflag() +end + diff --git a/output/luaScripts/emugator/emugators_demo.lua b/output/luaScripts/emugator/emugators_demo.lua index d0c79e7e..d699e9c3 100644 --- a/output/luaScripts/emugator/emugators_demo.lua +++ b/output/luaScripts/emugator/emugators_demo.lua @@ -9,10 +9,9 @@ while(true) do --need gd for this --local gdstr = gd.createFromPng("C:\Users\Super\Emugators\fceux\output\luaScripts\emugator\nesRomGeneric.png"):gdStr() --gui.gdoverlay(gdstr) - - if(emu.emulating() == false) then - local inpt = input.read() + local inpt = input.read() + if(emu.emulating() == false) then if (inpt.leftclick == nil) then if ((inpt.xmouse > console.x1) and (inpt.xmouse < console.x2) and (inpt.ymouse > console.y1) and (inpt.ymouse < console.y2) and isDrag) then emu.loadrom("superMario.nes") @@ -39,9 +38,11 @@ while(true) do gui.text(unloadButton.x1+2, unloadButton.y1+2, "Unload") if ((inpt.xmouse > unloadButton.x1) and (inpt.xmouse < unloadButton.x2) and (inpt.ymouse > unloadButton.y1) and (inpt.ymouse < unloadButton.y2) and inpt.leftclick) then - --emu. + emu.closeRom() + emugator.yieldwithflag() + else + emu.frameadvance() end - emu.frameadvance() end --emu.frameadvance() diff --git a/src/fceu.cpp b/src/fceu.cpp index 1c201f76..f0d483ad 100644 --- a/src/fceu.cpp +++ b/src/fceu.cpp @@ -804,6 +804,9 @@ void FCEUI_Emulate(uint8 **pXBuf, int32 **SoundBuf, int32 *SoundBufSize, int ski FCEU_LuaFrameBoundary(); #endif + if (!GameInfo) + return; + FCEU_UpdateInput(); lagFlag = 1;