aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStraDaMa <StraDaMa@users.noreply.github.com>2023-08-27 04:34:11 -0700
committerGitHub <noreply@github.com>2023-08-27 13:34:11 +0200
commitbc71618457a2759f0fa9eda4aaade9cb4a5e5695 (patch)
treea74e4133e6b3f8984e103876467af69f6245c3d2
parent2bd12669b25f2ce6d9dae4c0964f500572775b5d (diff)
remove AR code size limit (#1802)
Co-authored-by: Arisotura <thetotalworm@gmail.com>
-rw-r--r--src/ARCodeFile.cpp17
-rw-r--r--src/ARCodeFile.h5
-rw-r--r--src/AREngine.cpp2
-rw-r--r--src/frontend/qt_sdl/CheatsDialog.cpp22
4 files changed, 14 insertions, 32 deletions
diff --git a/src/ARCodeFile.cpp b/src/ARCodeFile.cpp
index 79c582d..d1f34fb 100644
--- a/src/ARCodeFile.cpp
+++ b/src/ARCodeFile.cpp
@@ -120,7 +120,7 @@ bool ARCodeFile::Load()
curcode.Name = codename;
curcode.Enabled = enable!=0;
- curcode.CodeLen = 0;
+ curcode.Code.clear();
}
else
{
@@ -141,17 +141,8 @@ bool ARCodeFile::Load()
return false;
}
- if (curcode.CodeLen >= 2*64)
- {
- Log(LogLevel::Error, "AR: code too long!\n");
- CloseFile(f);
- return false;
- }
-
- u32 idx = curcode.CodeLen;
- curcode.Code[idx+0] = c0;
- curcode.Code[idx+1] = c1;
- curcode.CodeLen += 2;
+ curcode.Code.push_back(c0);
+ curcode.Code.push_back(c1);
}
}
@@ -179,7 +170,7 @@ bool ARCodeFile::Save()
ARCode& code = *jt;
FileWriteFormatted(f, "CODE %d %s\r\n", code.Enabled, code.Name.c_str());
- for (u32 i = 0; i < code.CodeLen; i+=2)
+ for (size_t i = 0; i < code.Code.size(); i+=2)
{
FileWriteFormatted(f, "%08X %08X\r\n", code.Code[i], code.Code[i + 1]);
}
diff --git a/src/ARCodeFile.h b/src/ARCodeFile.h
index 9678926..d0e8255 100644
--- a/src/ARCodeFile.h
+++ b/src/ARCodeFile.h
@@ -21,15 +21,14 @@
#include <string>
#include <list>
-
+#include <vector>
#include "types.h"
struct ARCode
{
std::string Name;
bool Enabled;
- u32 CodeLen;
- u32 Code[2*64];
+ std::vector<u32> Code;
};
typedef std::list<ARCode> ARCodeList;
diff --git a/src/AREngine.cpp b/src/AREngine.cpp
index 06fbc6b..62600f9 100644
--- a/src/AREngine.cpp
+++ b/src/AREngine.cpp
@@ -110,7 +110,7 @@ void RunCheat(ARCode& arcode)
for (;;)
{
- if (code >= &arcode.Code[arcode.CodeLen])
+ if (code >= &arcode.Code[arcode.Code.size()])
break;
u32 a = *code++;
diff --git a/src/frontend/qt_sdl/CheatsDialog.cpp b/src/frontend/qt_sdl/CheatsDialog.cpp
index b15fab7..1da5c5e 100644
--- a/src/frontend/qt_sdl/CheatsDialog.cpp
+++ b/src/frontend/qt_sdl/CheatsDialog.cpp
@@ -162,8 +162,7 @@ void CheatsDialog::on_btnNewARCode_clicked()
ARCode code;
code.Name = "(new AR code)";
code.Enabled = true;
- code.CodeLen = 0;
- memset(code.Code, 0, sizeof(code.Code));
+ code.Code.clear();
cat.Codes.push_back(code);
ARCodeList::iterator id = cat.Codes.end(); id--;
@@ -251,7 +250,7 @@ void CheatsDialog::onCheatSelectionChanged(const QItemSelection& sel, const QIte
ui->txtCode->setPlaceholderText("(enter AR code here)");
QString codestr = "";
- for (u32 i = 0; i < code.CodeLen; i += 2)
+ for (size_t i = 0; i < code.Code.size(); i += 2)
{
u32 c0 = code.Code[i+0];
u32 c1 = code.Code[i+1];
@@ -312,8 +311,8 @@ void CheatsDialog::on_txtCode_textChanged()
return;
bool error = false;
- u32 codeout[2*64];
- u32 codelen = 0;
+ std::vector<u32> codeout;
+ codeout.reserve(64);
QString text = ui->txtCode->document()->toPlainText();
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
@@ -356,14 +355,8 @@ void CheatsDialog::on_txtCode_textChanged()
break;
}
- if (codelen >= 2*64)
- {
- error = true;
- break;
- }
-
- codeout[codelen++] = c0;
- codeout[codelen++] = c1;
+ codeout.push_back(c0);
+ codeout.push_back(c1);
}
ui->btnNewCat->setEnabled(!error);
@@ -375,8 +368,7 @@ void CheatsDialog::on_txtCode_textChanged()
if (error) return;
ARCode& code = *(data.value<ARCodeList::iterator>());
- memcpy(code.Code, codeout, codelen*sizeof(u32));
- code.CodeLen = codelen;
+ code.Code = codeout;
}
void ARCodeChecker::highlightBlock(const QString& text)