Skip to content

Instantly share code, notes, and snippets.

@primaryobjects
Last active February 25, 2024 21:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save primaryobjects/66a5e7b967a4df786bf20def0c4e3d05 to your computer and use it in GitHub Desktop.
Save primaryobjects/66a5e7b967a4df786bf20def0c4e3d05 to your computer and use it in GitHub Desktop.
Automatic Level 16 Spells in Final Fantasy II using Emulator for PS1

Automatic Level 16 Spells in Final Fantasy II

Automatically level-up your Final Fantasy 2 spells!

ff7-trick

About

In Final Fantasy 2 II there is a trick where you can gain experience for spells by selecting to cast them in combat and then cancelling the action.

By repeating this process for all characters in a round, over and over again, you can gain experience points for the spell up to 100. This increases the spell level by 1 after combat. You can repeat this process by starting a new battle for each spell level until you max out at level 16.

Automating the trick

The script below automates the spell level-up trick when running Final Fantasy 2 in the emulator pSXfin. The script is created using AutoIt and allows for easily selecting the spell for each character.

Quick Start

  1. Download pSXfin as your emulator.
  2. Download Final Fantasy Origins. (this includes Final Fantasy II)
  3. Download AutoIt.
  4. Download the script ff2-utility.au3 in this gist.
  5. Create a new script for your desired spells. See shell-holy-shell.au3 as a template.
  6. Use the command SelectSpell(0, 3) to cast a spell for up to 3 players. The first argument is the spell column (0, 1). The second argument is the spell row. (the 4th player is needed to cancel the prior spells and repeat, otherwise a battle round will ensue and end the trick short)
  7. Run the game and enter into a battle.
  8. Run the script by dragging the file shell-holy-shell.au3 onto AutoIt3_x64.exe.
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$count = 125
$label = 0
$button = 0
Func _WriteErrorLog($ErrorMessage)
FileWriteLine(@ScriptDir & "\" & @ScriptName & ".log", @HOUR & ":" & @MIN & ":" & @SEC & ": " & $ErrorMessage)
EndFunc ;==>WriteErrorLog
Func CheckGUI()
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE Or $msg = $button
Exit
EndSelect
EndFunc
Func Setup($title)
; Create a GUI with various controls.
$gui = GUICreate($title, 300, 200)
$label = GUICtrlCreateLabel("Performing action 1/" & $count, 10, 10, 300)
; Create a button control.
$button = GUICtrlCreateButton("Cancel", 85, 85, 130, 30)
; Display the GUI.
GUISetState(@SW_SHOW, $gui)
; Register the CheckGUI function to be called every 100 milliseconds.
AdlibRegister("CheckGUI", 100)
Opt("SendKeyDownDelay", 20)
EndFunc
Func UpdateStatus($text)
GUICtrlSetData($label, $text)
EndFunc
Func SendKey($key, $presses = 1, $delay = 200)
For $i = 1 to $presses
Send($key)
Sleep($delay)
Next
EndFunc
Func SelectSpell($col, $row, $delay = 200)
; select magic
SendKey("{DOWN}", 1, $delay)
SendKey("z", 1, $delay)
; move to magic column
SendKey("{RIGHT}", $col, $delay)
; move to magic row
SendKey("{DOWN}", $row, $delay)
; select spell
SendKey("z", 2, $delay)
EndFunc
Func Clear($delay = 200)
; next player
SendKey("s", 4, $delay)
EndFunc
Func Close()
; Unregister the CheckGUI function before exiting.
AdlibUnRegister("CheckGUI")
EndFunc
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include "ff2-utility.au3"
Setup("Final Fantasy II - Level Up Trick")
If WinActivate("pSX v1.13") Then
For $i = 1 to $count
UpdateStatus("Performing action " & $i & "/" & $count)
SelectSpell(0, 7) # Cast Shell by Player 1
SelectSpell(1, 4) # Cast Holy by Player 2
SelectSpell(1, 3) # Cast Shell by Player 3
Clear()
Next
EndIf
Close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment