Skip to content

Commit

Permalink
some progress?
Browse files Browse the repository at this point in the history
  • Loading branch information
FireMario211 committed Mar 10, 2024
1 parent 884d384 commit 28405ec
Show file tree
Hide file tree
Showing 10 changed files with 205 additions and 18 deletions.
10 changes: 6 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@
A mod menu made in Geode for Geometry Dash

# TODOs (Based on whats next)
- Fix bug with uncomplete level where it causes buttons to stop working
- Fix "Uncomplete Level" not working in Gauntlets
- Add Noclip Accuracy Flash (flashes screen red when hitting)
- Add translations for "Uncomplete Level"
- Added Vietnamese Translations.
- Add a "First Start" menu when you install prism for the first time (Like, ask what language, theme, etc). Only do this when the user clicks on the prism button, and not show again after doing it unless they reset defaults.
- Fix bug with input button not working for button position on android (ok why cant i reproduce this now wth)
- Add instant respawn
- Add a "Font Downloader" for languages like Japanese, Chinese, Arabic, etc
- Added Japanese Translations. (bruh 1000 characters :()
- Added Japanese Translations. (bruh 1000 characters :( actually 280 chars)
- Add Arabic translations (this ones gonna be hard)
- Added accents to Vietnamese Translations.
- Add credits screen for cocos2d ui
- get fps bypass working on mac os
- Allow changing the prism button icon (different colors, up to the server icon style)
Expand All @@ -19,7 +22,6 @@ A mod menu made in Geode for Geometry Dash
- Add to Misc category everything related to changing "Stats", basically allows you to edit your stats like mana, diamonds, etc. NOT ADDING STARS, DEMONS, AND OTHER FOR REASONS.
- Add background-image for custom themes (note for me: look in https://discord.com/channels/@me/1156358012852776992/1172693426429505546)
- Allow for dragging the button
- Add "No Camera Movement" (basically removes all 2.2 camera stuff and only aims the camera at the player)
- Add menu scale for the cocos ui
- Add "Custom Object Bypass" (basically allows you to store more than 1000 objects in custom object)
- (Possibly?) Fix FPS Bypass, or add "Show FPS" for Android users. (The func exists, just not visible to the end user lol)
Expand Down
7 changes: 7 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
# v1.5.1
- Fixed bug with progress saving even in Test Mode.
- Fixed the ordering of the buttons for "Uncomplete Level".
- Updated Portuguese Translations.
- Updated Czech Translations.
- Fixed No Spikes.
- Fixed No Solids.
# v1.5.0
- Added Auto Safe Mode.
- Added No Shaders.
Expand Down
48 changes: 48 additions & 0 deletions resources/langs/czech.json
Original file line number Diff line number Diff line change
Expand Up @@ -451,5 +451,53 @@
"name": "Solidní Wave Trail",
"desc": "Odstraní míchání obou barev ikony na wave trailu."
}
},
{
"Extra Percent Digits": {
"name": "Více Číslic V Procentech",
"desc": "Kolik více desetinných číslic bude ukázáno s Přesnými Procenty."
}
},
{
"Uncomplete Level": {
"name": "Oddokončit Level",
"desc": "Resetuje normální a practice procenta a umožní ti snížit počet hvězd pokud si už level dokončil!"
}
},
{
"No Shaders": {
"name": "Žádné Shadery",
"desc": "Vypne všechny kamerové shader efekty."
}
},
{
"Disable Camera Effects": {
"name": "Vypnout Kamerové Efekty",
"desc": "Vypne všechny kamerové efekty a kamera bude pouze ukazovat na hráče. Může rozbít všechny gamemody kromě Cube a Robota."
}
},
{
"Show Hitboxes": {
"name": "Ukázat Hitboxy",
"desc": "Ukáže hitboxy hráče, překážek a solidních objektů."
}
},
{
"Show Hitboxes on Death": {
"name": "Ukázat Hitboxy Při Smrti",
"desc": "Ukáže hitboxy když zemřeš a schová je když se respawneš."
}
},
{
"Hitbox Stroke": {
"name": "Tloušťka Hitboxů",
"desc": "Změní tloušťku hitboxů."
}
},
{
"Suicide": {
"name": "Sebevražda",
"desc": "Opakovaně zabije hráče."
}
}
]
50 changes: 49 additions & 1 deletion resources/langs/japanese.json
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@
{
"Show Hidden Objects": {
"name": "隠された物体の表示",
"desc": "すべての隠された物体を表示します。\"隠す\"のオプションがオンになった物体には無効です。(レイアウトモードでは役に立ちます)
"desc": "すべての隠された物体を表示します。\"隠す\"のオプションがオンになった物体には無効です。(レイアウトモードでは役に立ちます)"
}
},
{
Expand Down Expand Up @@ -459,5 +459,53 @@
"name": "単色Waveトレイル",
"desc": "Waveのトレイルをプライマリーのアイコンの色だけに変えます。"
}
},
{
"Extra Percent Digits": {
"name": "正確なパーセンテージ数",
"desc": "「正確なパーセンテージ」での小数点以下の桁数のかず。"
}
},
{
"Uncomplete Level": {
"name": "レベル未完成",
"desc": "普通と練習の両方のパーセンテージを0にし、完成したのであれば星数を減らします。"
}
},
{
"No Shaders": {
"name": "シェーダーの無効",
"desc": "すべての画面シェーダーエフェクトを無効にします。"
}
},
{
"Disable Camera Effects": {
"name": "画面エフェクトの無効",
"desc": "すべての画面エフェクトを無効にし、画面がプレイヤーだけに集中します。キューブとロボット以外のゲームモードでは故障する可能性があります。"
}
},
{
"Show Hitboxes": {
"name": "当たり判定の表示",
"desc": "プレイヤー、障害物、と固体の当たり判定を表示します。"
}
},
{
"Show Hitboxes on Death": {
"name": "死亡時当たり判定の表示",
"desc": "死亡するときに当たり判定を表示し、回復するときにまた隠します。"
}
},
{
"Hitbox Stroke": {
"name": "当たり判定のふとさ",
"desc": "当たり判定を描くときの線の太さ。"
}
},
{
"Suicide": {
"name": "自滅",
"desc": "オフにされるまでは永久にプレイヤーを滅亡します。"
}
}
]
49 changes: 49 additions & 0 deletions resources/langs/portuguesebr.json
Original file line number Diff line number Diff line change
Expand Up @@ -447,5 +447,54 @@
"name": "Trilha da Wave Sólida",
"desc": "Remove o blending a trilha da wave."
}
},

{
"Extra Percent Digits": {
"name": "Mais dígitos de porcentagem",
"desc": "Não presciso explicar"
}
},
{
"Uncomplete Level": {
"name": "Descompletar nível",
"desc": "Reseta o progresso do nível (normal, prática, recompensa, etc) use se vc hackeou o nível ou se é um bug e vc n zerou"
}
},
{
"No Shaders": {
"name": "Sem shader",
"desc": "remove os shaders, tipo, os efeitos do nivel"
}
},
{
"Disable Camera Effects": {
"name": "sem efeito de câmera",
"desc": "tira os efeito de câmera tipo estático e zoom"
}
},
{
"Show Hitboxes": {
"name": "hitboxes",
"desc": "¿tienes mod? ativa hitboxes (:<"
}
},
{
"Show Hitboxes on Death": {
"name": "hitboxes na morte",
"desc": "mostra as hitbox quando vc morre"
}
},
{
"Hitbox Stroke": {
"name": "Hitbox Stroke",
"desc": "não entedi oq isso faz ;-;"
}
},
{
"Suicide": {
"name": "Suicídio",
"desc": "emo"
}
}
]
11 changes: 11 additions & 0 deletions server/characterfix.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const japaneseText = JSON.stringify(require('../resources/langs/japanese.json')).replaceAll("\n","") + "日本語"

const letters = japaneseText.split("").map((a) => {
if (a.codePointAt(0) < 0x3000 || a.codePointAt(0) > 0x9faf) return 0x0
return a.codePointAt(0)
}).filter(x => x != 0).sort((a, b) => a - b)

console.log([...new Set(letters)])

require('fs').writeFileSync("./kata.txt", JSON.stringify([...new Set(letters)]), 'utf8');

1 change: 1 addition & 0 deletions server/kata.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[12289,12290,12293,12300,12301,12354,12356,12358,12360,12362,12363,12364,12365,12367,12369,12371,12372,12373,12374,12375,12376,12377,12378,12379,12381,12383,12384,12385,12387,12388,12390,12391,12392,12393,12394,12395,12398,12399,12400,12405,12409,12411,12414,12415,12417,12418,12420,12424,12425,12426,12427,12428,12429,12431,12434,12435,12449,12450,12451,12452,12454,12455,12456,12457,12458,12459,12460,12461,12463,12464,12465,12466,12467,12470,12471,12472,12473,12474,12475,12479,12480,12481,12483,12484,12486,12487,12488,12489,12490,12491,12494,12495,12496,12497,12500,12501,12502,12503,12505,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12521,12522,12523,12524,12525,12527,12531,12539,12540,19968,19978,19979,19981,20001,20013,20037,20102,20107,20129,20154,20182,20197,20301,20307,20316,20351,20415,20491,20516,20803,20837,20840,20844,20877,20998,20999,21028,21029,21033,21046,21066,21069,21147,21177,21205,21270,21332,21336,21453,21487,21491,21512,22238,22258,22266,22580,22793,22806,22810,22823,22826,22909,23383,23433,23436,23450,23453,23475,23567,23627,24038,24230,24235,24335,24341,24375,24403,24418,24441,24460,24489,24517,24615,24656,24847,25104,25147,25171,25246,25407,25551,25563,25925,25968,25973,25991,26041,26082,26085,26126,26143,26178,26222,26354,26367,26377,26399,26410,26412,26689,27005,27490,27491,27497,27515,27573,27704,27880,28187,28288,28357,28857,28858,28961,29289,29305,29575,29992,30011,30171,30340,30636,30701,30906,31034,31186,31354,31435,31561,31684,32218,32232,32244,32302,32622,32722,32763,32884,33021,33258,33324,33394,33853,34892,34920,35201,35211,35222,35302,35328,35373,35379,35430,35486,35488,36092,36215,36578,36600,36802,36879,36884,36890,36895,36899,36914,36984,37096,37325,37329,38263,38281,38283,38291,38306,38450,38480,38500,38555,38556,38560,38598,38754,38899]
1 change: 1 addition & 0 deletions src/PrismUI.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,5 @@ class PrismUI : public FLAlertLayer {
void updateLabel();
static matjson::Object GetTheme();
static PrismUI* create();
static void fixVSync();
};
20 changes: 10 additions & 10 deletions src/hacks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,9 @@ void proceedWithReset(LevelInfoLayer* levelInfoLayer, GJGameLevel* level, bool r
geode::createQuickPopup(
"Final Warning",
fmt::format("Are you absolutely sure you want to <cr>reset stats</c> for <cy>{}</c>?\nYou <cr>cannot undo this</c> after it's done!\n\nPlease note that <cy>Uncomplete Level</c> is considered <cr>unstable</c>, meaning it may or may not work, or break something. Make sure to <cy>save backup</c> or save your local files before doing this. (you can blame the people who rushed me to work on this)", level->m_levelName),
"Cancel", "I am sure.",
"I am sure.", "Cancel",
[level, levelInfoLayer, resetStars, resetCoins](auto, bool btn2) {
if (btn2) {
if (!btn2) {
auto GLM = GameLevelManager::sharedState();
auto GSM = GameStatsManager::sharedState();
/*CCArray* levelids = GSM->m_completedLevels->allKeys();
Expand Down Expand Up @@ -141,7 +141,7 @@ void proceedWithReset(LevelInfoLayer* levelInfoLayer, GJGameLevel* level, bool r
levelInfoLayer->onBack(nullptr);
FLAlertLayer::create("Uncompleted Level", fmt::format("The level <cy>{}</c> ({}) has been reset!\nYou will need to download it again in order to play it.", level->m_levelName, level->m_levelID.value()), "OK")->show();
}
}
}, true, true
);

}
Expand All @@ -165,20 +165,20 @@ void Hacks::resetLevel(LevelInfoLayer* levelInfoLayer, GJGameLevel* level) {
geode::createQuickPopup(
"Warning",
"You have not <cy>completed the level</c>.\nAre you sure you want to <cr>reset the stats</c>?",
"No", "Yes",
"Yes", "No",
[level, levelInfoLayer](auto, bool btn2) {
if (btn2) { // yes
if (!btn2) { // yes
proceedWithReset(levelInfoLayer, level, false, false);
}
}
}, true, true
);
} else {
geode::createQuickPopup(
"Confirm",
fmt::format("Are you sure you want to <cr>reset the stats</c> for <cy>{}</c>?\nThis will clear <cg>normal percentages</c>, <cy>attempts</c>, <cy>jumps</c>, etc...", level->m_levelName),
"No", "Yes",
"Yes", "No",
[level, levelInfoLayer](auto, bool btn2) {
if (btn2) { // yes
if (!btn2) { // yes
if (level->m_stars > 0) { // assume rated
geode::createQuickPopup(
"Confirm",
Expand All @@ -190,12 +190,12 @@ void Hacks::resetLevel(LevelInfoLayer* levelInfoLayer, GJGameLevel* level) {
} else {
proceedWithReset(levelInfoLayer, level, false, false);
}
});
}, true, true);
} else {
proceedWithReset(levelInfoLayer, level, false, false);
}
}
}
}, true, true
);
}
#endif
Expand Down
26 changes: 23 additions & 3 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ class $modify(PlayLayer) {
CCLabelBMFont* attemptLabel;

bool isCheating = false;
bool hasEnabledSafe = false;

// Anticheat Bypass
bool initedDeath = false;
Expand All @@ -179,8 +180,19 @@ class $modify(PlayLayer) {
void destroyPlayer(PlayerObject *p0, GameObject *p1) {
//bool m_isTestMode = *reinterpret_cast<bool*>(reinterpret_cast<uintptr_t>(this) + 0x413);
if (Hacks::isHackEnabled("Enable Patching")) return PlayLayer::destroyPlayer(p0, p1);
bool noclipDisabled = !Hacks::isHackEnabled("No Solids") && !Hacks::isHackEnabled("Noclip");
if ((noclipDisabled && !Hacks::isHackEnabled("No Spikes"))) return PlayLayer::destroyPlayer(p0, p1);
bool noclipDisabled = !Hacks::isHackEnabled("No Solids") && !Hacks::isHackEnabled("No Spikes") && !Hacks::isHackEnabled("Noclip");
if (noclipDisabled) return PlayLayer::destroyPlayer(p0, p1);
if (
!Hacks::isHackEnabled("Noclip") &&
Hacks::isHackEnabled("No Solids") &&
p1 != nullptr &&
p1->m_objectType != GameObjectType::CollisionObject
) return PlayLayer::destroyPlayer(p0, p1);
if (
!Hacks::isHackEnabled("Noclip") &&
Hacks::isHackEnabled("No Spikes") &&
(p1 == nullptr || p1->m_objectType == GameObjectType::CollisionObject)
) return PlayLayer::destroyPlayer(p0, p1);

if (Hacks::isHackEnabled("Anticheat Bypass")) {
if (!m_fields->initedDeath) {
Expand Down Expand Up @@ -321,9 +333,17 @@ class $modify(PlayLayer) {
}
#ifndef GEODE_IS_MACOS
if (Hacks::isHackEnabled("Safe Mode") || Hacks::isAutoSafeModeActive()) {
if (!hasEnabledSafe) {
m_fields->previousTestMode = m_isTestMode;
}
m_isTestMode = true;
m_fields->hasEnabledSafe = true;
} else {
m_isTestMode = m_fields->previousTestMode;
if (hasEnabledSafe) {
m_isTestMode = m_fields->previousTestMode;
} else {
m_fields->previousTestMode = m_isTestMode;
}
}
#endif
// whats the difference between m_fields and not using? i have no idea!
Expand Down

0 comments on commit 28405ec

Please sign in to comment.