-- name: Cheats -- description: The Official Cheats have been Recreated into a Single Mod, Due to the Removal of Cheats as a Settings Option \n\nMod By JairoThePlumber, Coolio and Blocky \n\nSyncing fixed by Blocky and Coolio\n\nBLJ Anywhere and Rapid Fire made by Sunk\n\nAlways Triple Jump made by Bread\n\nMenu made also by Blocky -- incompatible: cheats --localise function for performance local approach_s32, collision_find_surface_on_ray, disable_time_stop_including_mario, enable_time_stop_including_mario, djui_hud_get_screen_width, djui_hud_measure_text, djui_hud_set_color, djui_hud_set_font, djui_hud_print_text, djui_hud_render_rect, djui_hud_get_mouse_x, djui_hud_get_mouse_y, djui_hud_render_texture, play_sound, djui_hud_set_resolution, hook_chat_command, hook_event = approach_s32, collision_find_surface_on_ray, disable_time_stop_including_mario, enable_time_stop_including_mario, djui_hud_get_screen_width, djui_hud_measure_text, djui_hud_set_color, djui_hud_set_font, djui_hud_print_text, djui_hud_render_rect, djui_hud_get_mouse_x, djui_hud_get_mouse_y, djui_hud_render_texture, play_sound, djui_hud_set_resolution, hook_chat_command, hook_event -- Cheats in Order -- for i = 0, MAX_PLAYERS - 1 do gPlayerSyncTable[i].Moon_Jump = false gPlayerSyncTable[i].God_Mode = false gPlayerSyncTable[i].Infinite_lives = false gPlayerSyncTable[i].Super_Speed = false gPlayerSyncTable[i].Responsive_Controls = false gPlayerSyncTable[i].Rapid_Fire = false gPlayerSyncTable[i].BLJ_Anywhere = false gPlayerSyncTable[i].Always_Triple_Jump = false end local function lang() local l = gLang[smlua_text_utils_get_language()] return l == nil and gLang["English"] or l end -- Text For Languages -- gLang = { ["English"] = { MJ = "Moon Jump", GM = "God Mode", IL = "Infinite Lives", SS = "Super Speed", RC = "Responsive Controls", RF = "Rapid Fire", BLJA = "BLJ Anywhere", ATJ = "Always Triple Jump", CHEATS = 'cheats', EXIT = 'Exit', DESC = '- Opens the Cheats menu.', EXIT_DESC = "Exit the cheat menu.", MJ_DESC = "Allows Mario to jump very high.", GM_DESC = "Makes Mario invincible.", IL_DESC = "Gives Mario infinite lives.", SS_DESC = "Increases Mario's movement speed.", RC_DESC = "Improves control responsiveness.", RF_DESC = "Enables rapid fire for Mario's A button.", BLJA_DESC = "Allows Backwards Long Jumps anywhere.", ATJ_DESC = "Allows Mario to always perform a triple jump.", }, ["Spanish"] = { MJ = "Salto Lunar", GM = "Modo Dios", IL = "Vidas Infinitas", SS = "Super Velocidad", RC = "Controles Responsivos", RF = "Pulsación Rápida", BLJA = "BLJ Donde Sea", ATJ = "Siempre Hacer Salto Triple", CHEATS = 'trucos', EXIT = 'Dejar', DESC = '- Abre el menú Trucos.', EXIT_DESC = "Sal del menú de trucos.", MJ_DESC = "Permite a Mario saltar muy alto.", GM_DESC = "Hace que Mario sea invencible.", IL_DESC = "Le da a Mario vidas infinitas.", SS_DESC = "Aumenta la velocidad de movimiento de Mario.", RC_DESC = "Mejora la capacidad de respuesta del control.", RF_DESC = "Permite disparar rápidamente el botón A de Mario.", BLJA_DESC = "Permite saltos largos hacia atrás en cualquier lugar.", ATJ_DESC = "Permite a Mario realizar siempre un Salto Triple.", }, ["French"] = { MJ = "Saut Antigravité", GM = "Mode Invincible", IL = "Vies Infinies", SS = "Super Vitesse", RC = "Contrôles Réactifs", RF = "Tir Rapide", BLJA = "BLJ N'importe Où", ATJ = "Triple Sauts Infinis", CHEATS = 'triche', EXIT = 'Partir', DESC = '- Ouvrez le menu Astuces.', EXIT_DESC = "Quittez le menu de triche.", MJ_DESC = "Permet à Mario de sauter très haut.", GM_DESC = "Rend Mario invincible.", IL_DESC = "Donne à Mario des vies infinies.", SS_DESC = "Augmente la vitesse de déplacement de Mario.", RC_DESC = "Améliore la réactivité du contrôle.", RF_DESC = "Permet un tir rapide pour le bouton A de Mario.", BLJA_DESC = "PPermet des sauts longs en arrière n'importe où.", ATJ_DESC = "Permet à Mario de toujours effectuer un triple saut.", }, ["Portuguese"] = { MJ = "Pulo da Lua", GM = "Modo Deus", IL = "Vidas Infinitas", SS = "Super Velocidade", RC = "Controle Responsivos", RF = "Fogo Rápido", BLJA = "BLJ Em Qualquer Lugar", ATJ = "Sempre Fazer Triple Jump", CHEATS = 'trapaças', EXIT = 'Deixar', DESC = '- Abra o menu Truques.', EXIT_DESC = "Saia do menu de truques.", MJ_DESC = "Permite que Mario salte muito alto.", GM_DESC = "Makes Mario invincible.", IL_DESC = "Torna Mario invencível.", SS_DESC = "Aumenta a velocidade de movimento de Mario.", RC_DESC = "Melhora a capacidade de resposta do controle.", RF_DESC = "Ativa o disparo rápido para o botão A de Mario.", BLJA_DESC = "Permite saltos longos para trás em qualquer lugar.", ATJ_DESC = "Permite que Mario sempre execute um salto triplo.", }, ["German"] = { MJ = "Mond-Sprung", GM = "Gott Modus", IL = "Unbegrenzte Leben", SS = "Supergeschwindigkeit", RC = "Reaktionsschnelle Steuerung", RF = "Schnellfeuer", BLJA = "Überall Rückwertsweitspringen", ATJ = "Immer Dreisprung", CHEATS = 'betrugt', EXIT = 'Verlassen', DESC = '- Öffnet das Cheats-Menü.', EXIT_DESC = "Verlassen Sie das Cheat-Menü.", MJ_DESC = "Ermöglicht Mario, sehr hoch zu springen.", GM_DESC = "Macht Mario unbesiegbar.", IL_DESC = "Gibt Mario unendlich viele Leben.", SS_DESC = "Erhöht Marios Bewegungsgeschwindigkeit.", RC_DESC = "Verbessert die Reaktionsfähigkeit der Steuerung.", RF_DESC = "Enables rapid fire for Mario's A button.", BLJA_DESC = "Ermöglicht Schnellfeuer für Marios A-Taste.", ATJ_DESC = "Ermöglicht Mario, immer einen Dreisprung auszuführen.", }, ["Russian"] = { MJ = "Супер прыжок", GM = "Режим бога", IL = "Бесконечные жизни", SS = "Супер cкорость", RC = "Отзывчивое управление", RF = "Быстрый огонь", BLJA = "BLJ в любом месте", ATJ = "Всегда тройной прыжок", CHEATS = 'cheats', EXIT = 'Покинуть', DESC = '- Открывает меню читов.', EXIT_DESC = "Выйдите из чит-меню.", MJ_DESC = "Позволяет Марио прыгать очень высоко.", GM_DESC = "Делает Марио непобедимым.", IL_DESC = "Дает Марио бесконечное количество жизней.", SS_DESC = "Увеличивает скорость передвижения Марио.", RC_DESC = "Улучшает оперативность управления.", RF_DESC = "Включает быстрый огонь для кнопки A Марио.", BLJA_DESC = "Позволяет совершать прыжки назад в длину в любом месте.", ATJ_DESC = "Позволяет Марио всегда выполнять тройной прыжок.", }, ["Italian"] = { MJ = "Salto della Luna", GM = "Modalità Dio", IL = "Vite Infinite", SS = "Super Velocità", RC = "Controlli Reattivi", RF = "Fuoco Rapido", BLJA = "BLJ Ovunque", ATJ = "Sempre Salto Triplo", CHEATS = 'trucchi', EXIT = 'lasciare', DESC = '- Apre il menu Trucchi.', EXIT_DESC = "Esci dal menu dei trucchi.", MJ_DESC = "Permette a Mario di saltare molto in alto.", GM_DESC = "Rende Mario invincibile.", IL_DESC = "Dà a Mario vite infinite.", SS_DESC = "Aumenta la velocità di movimento di Mario.", RC_DESC = "Migliora la reattività del controllo.", RF_DESC = "Abilita il fuoco rapido per il pulsante A di Mario.", BLJA_DESC = "Permette salti in lungo all'indietro ovunque.", ATJ_DESC = "Permette a Mario di eseguire sempre un triplo salto.", }, ["Czech"] = { MJ = "Nekonečný Skok", GM = "Nenech Se Zranit", IL = "Nekonečné Životy", SS = "Super Rychlost", RC = "Citlivé Ovládání", RF = "Rychle Mačkat Tlačítko", BLJA = "BLJ Všude", ATJ = "Vždy Trojitý Skok", CHEATS = 'cheaty', EXIT = 'opustit', DESC = '- Otevře nabídku Cheatů.', EXIT_DESC = "Opusťte cheat menu.", MJ_DESC = "Umožňuje Mariovi skákat velmi vysoko.", GM_DESC = "Učiní Maria neporazitelným.", IL_DESC = "Dává Mariovi nekonečné životy.", SS_DESC = "Zvyšuje Mariovu rychlost pohybu.", RC_DESC = "Zlepšuje odezvu ovládání.", RF_DESC = "Umožňuje rychlou střelbu pro Mariovo tlačítko A.", BLJA_DESC = "Umožňuje dlouhé skoky vzad kdekoli.", ATJ_DESC = "Umožňuje Mariovi vždy provést trojitý skok.", }, ["Dutch"] = { MJ = "Maan Sprong", GM = "God Modus", IL = "Oneindige Levens", SS = "Super Snelheid", RC = "Snel Reagerende Controles", RF = "Snel Vuur", BLJA = "BLJ Overal", ATJ = "Altijd Drievoudige Sprong", CHEATS = 'cheats', EXIT = 'Verlaten', DESC = '- Opent het Cheats-menu.', EXIT_DESC = "Verlaat het cheatmenu.", MJ_DESC = "Hiermee kan Mario heel hoog springen.", GM_DESC = "Maakt Mario onoverwinnelijk.", IL_DESC = "Geeft Mario oneindige levens.", SS_DESC = "Verhoogt de bewegingssnelheid van Mario.", RC_DESC = "Verbetert het reactievermogen van de besturing.", RF_DESC = "Maakt snel vuren voor Mario's A-knop mogelijk.", BLJA_DESC = "Maakt achteruit lange sprongen overal mogelijk.", ATJ_DESC = "Hiermee kan Mario altijd een hinkstapsprong uitvoeren." }, ["Polish"] = { MJ = "Skok Ksiezycowy", GM = "Tryb Boga", IL = "Nieskonczone Zycia", SS = "Super Szybkosc", RC = "Responsywne Sterowanie", RF = "Szybkostrzelnosc", BLJA = "BLJ Gdziekolwiek", ATJ = "Potrojny Skok Zawsze", CHEATS = 'oszustwa', EXIT = 'Wyjście', DESC = '- Otwiera menu Kody.', EXIT_DESC = "Wyjdź z menu cheatów.", MJ_DESC = "Pozwala Mario skakać bardzo wysoko.", GM_DESC = "Uczyń Mario niepokonanym.", IL_DESC = "Daje Mario nieskończone życie.", SS_DESC = "Zwiększa prędkość ruchu Mario.", RC_DESC = "Poprawia responsywność sterowania.", RF_DESC = "Umożliwia szybkie strzelanie przyciskiem A Mario.", BLJA_DESC = "Umożliwia dalekie skoki do tyłu w dowolnym miejscu.", ATJ_DESC = "Pozwala Mario zawsze wykonać potrójny skok.", } } local menu = false -- Moon Jump -- local function limit_angle(a) return (a + 0x8000) % 0x10000 - 0x8000 end local function moon_jump_update(m) if gPlayerSyncTable[m.playerIndex].Moon_Jump then if (m.controller.buttonDown & L_TRIG) ~= 0 then m.faceAngle.y = m.intendedYaw - approach_s32(limit_angle(m.intendedYaw - m.faceAngle.y), 0, 0x800, 0x800) m.vel.y = 40 if (m.action == ACT_FORWARD_GROUND_KB or m.action == ACT_BACKWARD_GROUND_KB or m.action == ACT_SOFT_FORWARD_GROUND_KB or m.action == ACT_HARD_BACKWARD_GROUND_KB or m.action == ACT_FORWARD_AIR_KB or m.action == ACT_BACKWARD_AIR_KB or m.action == ACT_HARD_FORWARD_AIR_KB or m.action == ACT_HARD_BACKWARD_AIR_KB or m.action == ACT_AIR_HIT_WALL) then set_mario_action(m, ACT_FREEFALL, 0) end end end end local function moon_jump_command() gPlayerSyncTable[0].Moon_Jump = not gPlayerSyncTable[0].Moon_Jump --djui_popup_create("Moon Jump is now " .. (gPlayerSyncTable[0].Moon_Jump and "Enabled" or "Disabled"), 1) return true end -- God Mode -- local function god_mode_update(m) if gPlayerSyncTable[m.playerIndex].God_Mode then m.health = 0x880 m.healCounter = 0 m.hurtCounter = 0 end end local function god_mode_fall_update(m, type) if gPlayerSyncTable[m.playerIndex].God_Mode then if type == STEP_TYPE_AIR and m.vel.y < 0 then ray = collision_find_surface_on_ray(m.pos.x, m.pos.y, m.pos.z, m.vel.x, m.vel.y, m.vel.z) if ray.surface ~= nil then if ray.surface.normal.y ~= 0 then m.peakHeight = m.pos.y end end end end end local function god_mode_command() gPlayerSyncTable[0].God_Mode = not gPlayerSyncTable[0].God_Mode --djui_popup_create("God Mode is now " .. (gPlayerSyncTable[0].God_Mode and "Enabled" or "Disabled"), 1) return true end -- Infinite Lives -- local function infinite_lives_update(m) if gPlayerSyncTable[0].Infinite_lives then m.numLives = 100 end end local function infinite_lives_command() gPlayerSyncTable[0].Infinite_lives = not gPlayerSyncTable[0].Infinite_lives --djui_popup_create("Infinite Lives is now " .. (Infinite_lives and "Enabled" or "Disabled"), 1) return true end -- Super Speed -- local SUPER_SPEED_MULTIPLIER = 4 local function super_speed_update(m) if gPlayerSyncTable[m.playerIndex].Super_Speed and m.action ~= ACT_BUBBLED then m.vel.x = m.vel.x * SUPER_SPEED_MULTIPLIER m.vel.z = m.vel.z * SUPER_SPEED_MULTIPLIER end end local function super_speed_command() gPlayerSyncTable[0].Super_Speed = not gPlayerSyncTable[0].Super_Speed --djui_popup_create("Super Speed is now " .. (gPlayerSyncTable[0].Super_Speed and "Enabled" or "Disabled"), 1) return true end -- Responsive Controls -- local function responsive_controls_update(m) if gPlayerSyncTable[m.playerIndex].Responsive_Controls then if m.action == ACT_WALKING or m.action == ACT_HOLD_WALKING or m.action == ACT_HOLD_HEAVY_WALKING or m.action == ACT_FINISH_TURNING_AROUND or m.action == ACT_CRAWLING then m.faceAngle.y = m.intendedYaw end end end local function responsive_controls_command() gPlayerSyncTable[0].Responsive_Controls = not gPlayerSyncTable[0].Responsive_Controls --djui_popup_create("Responsive Controls is now " .. (gPlayerSyncTable[0].Responsive_Controls and "Enabled" or "Disabled"), 1) return true end -- Rapid Fire -- local function rapid_fire_update(m) if gPlayerSyncTable[m.playerIndex].Rapid_Fire then if (m.controller.buttonDown & A_BUTTON) ~= 0 then m.controller.buttonPressed = m.controller.buttonPressed | A_BUTTON end end end local function rapid_fire_command() gPlayerSyncTable[0].Rapid_Fire = not gPlayerSyncTable[0].Rapid_Fire --djui_popup_create("Rapid Fire is now " .. (gPlayerSyncTable[0].Rapid_Fire and "Enabled" or "Disabled"), 1) return true end -- BLJ Anywhere -- local function blj_anywhere_update(m) if gPlayerSyncTable[m.playerIndex].BLJ_Anywhere then if (m.action == ACT_LONG_JUMP) and (m.controller.buttonDown & Z_TRIG) ~= 0 and m.forwardVel < -15 then m.vel.y = -30 end end end local function blj_anywhere_command() gPlayerSyncTable[0].BLJ_Anywhere = not gPlayerSyncTable[0].BLJ_Anywhere --djui_popup_create("BLJ Anywhere is now " .. (gPlayerSyncTable[0].BLJ_Anywhere and "Enabled" or "Disabled"), 1) return true end -- Always Triple Jump -- ---@param m MarioState local function always_triple_jump_update(m, action) if gPlayerSyncTable[m.playerIndex].Always_Triple_Jump then if m.forwardVel < 20 and m.action == ACT_DOUBLE_JUMP_LAND and action == ACT_JUMP then return ACT_TRIPLE_JUMP end end end local function always_triple_jump_command() gPlayerSyncTable[0].Always_Triple_Jump = not gPlayerSyncTable[0].Always_Triple_Jump --djui_popup_create("Always Triple Jump is now " .. (gPlayerSyncTable[0].Always_Triple_Jump and "Enabled" or "Disabled"), 1) return true end local function mario_update(m) if m.playerIndex ~= 0 then return end moon_jump_update(m) god_mode_update(m) infinite_lives_update(m) responsive_controls_update(m) end local function before_phys_step(m, type) god_mode_fall_update(m, type) super_speed_update(m) end local function before_mario_update(m) if m.playerIndex ~= 0 then return end blj_anywhere_update(m) rapid_fire_update(m) end local function close_menu() menu = false selectedOption = 1 disable_time_stop_including_mario() end -- Define menu options local menuOptions = { { label = lang().MJ, action = moon_jump_command, status = gPlayerSyncTable[0].Moon_Jump, description = lang().MJ_DESC }, { label = lang().GM, action = god_mode_command, status = gPlayerSyncTable[0].God_Mode, description = lang().GM_DESC }, { label = lang().IL, action = infinite_lives_command, status = gPlayerSyncTable[0].Infinite_lives, description = lang().IL_DESC }, { label = lang().SS, action = super_speed_command, status = gPlayerSyncTable[0].Super_Speed, description = lang().SS_DESC }, { label = lang().RC, action = responsive_controls_command, status = gPlayerSyncTable[0].Responsive_Controls, description = lang().RC_DESC }, { label = lang().RF, action = rapid_fire_command, status = gPlayerSyncTable[0].Rapid_Fire, description = lang().RF_DESC }, { label = lang().BLJA, action = blj_anywhere_command, status = gPlayerSyncTable[0].BLJ_Anywhere, description = lang().BLJA_DESC }, { label = lang().ATJ, action = always_triple_jump_command, status = gPlayerSyncTable[0].Always_Triple_Jump, description = lang().ATJ_DESC }, { label = lang().EXIT, action = function() close_menu() end, description = lang().EXIT_DESC }, } -- Initialize the selected option local selectedOption = 1 -- Set the scale factor for the menu local menuScale = 2.0 -- Adjust this value as needed -- Add a title for the menu local menuTitle = lang().CHEATS local titleY = 150 local function drawMenu() if not menu then return end enable_time_stop_including_mario() djui_hud_set_color(0, 0, 0, 200) djui_hud_render_rect(0, 0, 10000, 10000) -- Set text color and position for the title local titleX = ((djui_hud_get_screen_width() - djui_hud_measure_text(menuTitle) * menuScale * 2.5) / 2.1) -- Draw the title djui_hud_set_color(255, 255, 255, 255) djui_hud_set_font(FONT_HUD) djui_hud_print_text(menuTitle, titleX, titleY, menuScale * 2.5) djui_hud_set_font(FONT_NORMAL) -- Set text color and position for the menu options local textY = titleY + 100 local textSpacing = 30 * menuScale local rectPadding = 5 for i, option in ipairs(menuOptions) do local textWidth = djui_hud_measure_text(option.label) local textX = (djui_hud_get_screen_width() - textWidth * menuScale) / 2 if i == selectedOption then -- Draw black rectangle behind the selected option -- Draw the description with a smaller scale local descX = (djui_hud_get_screen_width() - djui_hud_measure_text(option.description) * (menuScale - 0.5)) / 2 local descY = 850 djui_hud_set_color(255, 255, 255, 255) djui_hud_set_font(FONT_NORMAL) djui_hud_print_text(option.description, descX, descY, menuScale - 0.5) local optionWidth = textWidth * menuScale + rectPadding * 2 local optionHeight = 16 * menuScale + rectPadding * 2 djui_hud_set_color(0, 255, 255, 150) djui_hud_render_rect(textX - rectPadding, (textY + (i - 1) * textSpacing - rectPadding) + 15, optionWidth, optionHeight + 5) end -- Set text color based on the status if option.status == nil then djui_hud_set_color(255, 255, 255, 255) -- Green for "On" elseif option.status then djui_hud_set_color(0, 255, 0, 255) -- Green for "On" else djui_hud_set_color(255, 0, 0, 255) -- Red for "Off" end -- Draw the menu option with scale djui_hud_print_text(option.label, textX, textY + (i - 1) * textSpacing, menuScale) end end ---comment -----@param m MarioState -- Add a cooldown for menu navigation local cooldown = 5 local cooldownCounter = 0 local function updateMenu() if not menu then return end local m = gMarioStates[0] if m.playerIndex ~= 0 then return end local stickY = m.controller.stickY local mouseX = djui_hud_get_mouse_x() local mouseY = djui_hud_get_mouse_y() djui_hud_render_texture(gTextures.star, mouseX - 8, mouseY - 8, 2, 2) if selectedOption < 1 then selectedOption = #menuOptions elseif selectedOption > #menuOptions then selectedOption = 1 end if cooldownCounter > 0 then cooldownCounter = cooldownCounter - 1 else for i, option in ipairs(menuOptions) do local textWidth = djui_hud_measure_text(option.label) local textX = (djui_hud_get_screen_width() - textWidth * menuScale) / 2 local textY = titleY + 100 + (i - 1) * (30 * menuScale) local optionWidth = textWidth * menuScale local optionHeight = 16 * menuScale -- Check if the mouse is within the bounds of the option if mouseX >= textX and mouseX <= textX + optionWidth and mouseY >= textY and mouseY <= textY + optionHeight then selectedOption = i end end if stickY > 0.5 then -- Move selection down selectedOption = selectedOption - 1 play_sound(SOUND_MENU_CHANGE_SELECT, gMarioStates[0].pos) cooldownCounter = cooldown elseif stickY < -0.5 then -- Move selection up selectedOption = selectedOption + 1 play_sound(SOUND_MENU_CHANGE_SELECT, gMarioStates[0].pos) cooldownCounter = cooldown elseif m.controller.buttonPressed & A_BUTTON ~= 0 or m.controller.buttonPressed & B_BUTTON ~= 0 then play_sound(SOUND_MENU_CLICK_FILE_SELECT, gMarioStates[0].pos) -- Execute the selected menu option menuOptions[selectedOption].action() if menuOptions[selectedOption].status ~= nil then menuOptions[selectedOption].status = not menuOptions[selectedOption].status end elseif m.controller.buttonPressed & START_BUTTON ~= 0 then close_menu() end end end -- Main loop local function hud_render() djui_hud_set_resolution(RESOLUTION_DJUI) drawMenu() updateMenu() end local function menu_command() menu = true return true end hook_chat_command(lang().CHEATS, lang().DESC, menu_command) hook_event(HOOK_ON_HUD_RENDER, hud_render) hook_event(HOOK_MARIO_UPDATE, mario_update) hook_event(HOOK_ALLOW_HAZARD_SURFACE, function (m) return not gPlayerSyncTable[m.playerIndex].God_Mode end) hook_event(HOOK_BEFORE_PHYS_STEP, before_phys_step) hook_event(HOOK_BEFORE_MARIO_UPDATE, before_mario_update) hook_event(HOOK_BEFORE_SET_MARIO_ACTION,always_triple_jump_update)