2012-12-19 09:30:18 +00:00
|
|
|
/****************************************************************************
|
|
|
|
* *
|
|
|
|
* Project 64 - A Nintendo 64 emulator. *
|
|
|
|
* http://www.pj64-emu.com/ *
|
|
|
|
* Copyright (C) 2012 Project64. All rights reserved. *
|
|
|
|
* *
|
|
|
|
* License: *
|
|
|
|
* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html *
|
|
|
|
* *
|
|
|
|
****************************************************************************/
|
|
|
|
#pragma once
|
|
|
|
|
2008-09-18 03:15:49 +00:00
|
|
|
class CCheats {
|
|
|
|
typedef struct {
|
|
|
|
DWORD Command;
|
|
|
|
WORD Value;
|
|
|
|
} GAMESHARK_CODE;
|
|
|
|
|
|
|
|
typedef std::vector<GAMESHARK_CODE> CODES;
|
|
|
|
typedef std::vector<CODES> CODES_ARRAY;
|
|
|
|
|
2008-11-14 20:51:06 +00:00
|
|
|
enum { MaxCheats = 50000 };
|
2008-09-18 03:15:49 +00:00
|
|
|
|
|
|
|
CN64Rom * const _Rom;
|
|
|
|
|
2015-01-27 05:07:44 +00:00
|
|
|
static int CALLBACK CheatAddProc ( HWND hDlg,DWORD uMsg,DWORD wParam, DWORD lParam );
|
|
|
|
static int CALLBACK CheatListProc ( HWND hDlg,DWORD uMsg,DWORD wParam, DWORD lParam );
|
|
|
|
static int CALLBACK ManageCheatsProc ( HWND hDlg,DWORD uMsg,DWORD wParam, DWORD lParam );
|
|
|
|
static int CALLBACK CheatsCodeExProc ( HWND hDlg, DWORD uMsg, DWORD wParam, DWORD lParam);
|
|
|
|
static int CALLBACK CheatsCodeQuantProc ( HWND hDlg, DWORD uMsg, DWORD wParam, DWORD lParam);
|
2008-09-18 03:15:49 +00:00
|
|
|
|
|
|
|
//information about the gui for selecting cheats
|
2015-01-27 05:07:44 +00:00
|
|
|
HWND m_Window, m_hSelectCheat, m_AddCheat, m_hCheatTree, m_hSelectedItem;
|
2008-09-18 03:15:49 +00:00
|
|
|
void * const m_rcList, * const m_rcAdd;
|
|
|
|
int m_MinSizeDlg, m_MaxSizeDlg;
|
|
|
|
int m_EditCheat;
|
|
|
|
bool m_DeleteingEntries;
|
|
|
|
CODES_ARRAY m_Codes;
|
|
|
|
bool m_CheatSelectionChanged;
|
|
|
|
|
|
|
|
//Information about the current cheat we are editing
|
|
|
|
stdstr m_EditName;
|
|
|
|
stdstr m_EditCode;
|
|
|
|
stdstr m_EditOptions;
|
|
|
|
stdstr m_EditNotes;
|
|
|
|
|
|
|
|
enum Dialog_State { CONTRACTED, EXPANDED } m_DialogState;
|
|
|
|
enum TV_CHECK_STATE { TV_STATE_UNKNOWN, TV_STATE_CLEAR, TV_STATE_CHECKED, TV_STATE_INDETERMINATE };
|
|
|
|
enum { MaxGSEntries = 100, IDC_MYTREE = 0x500 };
|
|
|
|
|
|
|
|
void LoadPermCheats (void);
|
|
|
|
bool LoadCode ( int CheatNo, LPCSTR CheatString );
|
2015-01-27 05:07:44 +00:00
|
|
|
void AddCodeLayers ( int CheatNumber, const stdstr &CheatName, HWND hParent, bool CheatActive );
|
2008-09-18 03:15:49 +00:00
|
|
|
//Reload the cheats from the ini file to the select gui
|
|
|
|
void RefreshCheatManager ( void );
|
2015-01-27 05:07:44 +00:00
|
|
|
void ChangeChildrenStatus ( HWND hParent, bool Checked );
|
|
|
|
void CheckParentStatus ( HWND hParent );
|
|
|
|
static stdstr ReadCodeString ( HWND hDlg, bool &validcodes, bool &validoption, bool &nooptions, int &codeformat );
|
|
|
|
static stdstr ReadOptionsString( HWND hDlg, bool &validcodes, bool &validoptions, bool &nooptions, int &codeformat );
|
2012-11-17 01:26:00 +00:00
|
|
|
int ApplyCheatEntry (CMipsMemory * MMU,const CODES & CodeEntry, int CurrentEntry, BOOL Execute );
|
2015-01-27 05:07:44 +00:00
|
|
|
void RecordCheatValues ( HWND hDlg );
|
|
|
|
bool CheatChanged ( HWND hDlg );
|
2008-09-18 03:15:49 +00:00
|
|
|
bool IsValid16BitCode ( LPCSTR CheatString ) const;
|
2010-05-14 23:28:15 +00:00
|
|
|
void DeleteCheat(int Index);
|
2008-09-18 03:15:49 +00:00
|
|
|
|
|
|
|
//Get Information about the Cheat
|
|
|
|
stdstr GetCheatName ( int CheatNo, bool AddExtension ) const;
|
|
|
|
static bool CheatUsesCodeExtensions ( const stdstr &LineEntry );
|
|
|
|
|
|
|
|
//Working with treeview
|
2015-01-27 05:07:44 +00:00
|
|
|
static bool TV_SetCheckState(HWND hwndTreeView, HWND hItem, TV_CHECK_STATE state);
|
|
|
|
static int TV_GetCheckState(HWND hwndTreeView, HWND hItem);
|
2008-09-18 03:15:49 +00:00
|
|
|
static DWORD AsciiToHex ( const char * HexValue );
|
2015-01-27 05:07:44 +00:00
|
|
|
static void MenuSetText ( HMENU hMenu, int MenuPos, const char * Title, char * ShotCut );
|
2008-09-18 03:15:49 +00:00
|
|
|
|
|
|
|
|
|
|
|
//UI Functions
|
2015-01-27 05:07:44 +00:00
|
|
|
static stdstr GetDlgItemStr (HWND hDlg, int nIDDlgItem);
|
2008-09-18 03:15:49 +00:00
|
|
|
|
|
|
|
public:
|
2010-05-22 04:47:15 +00:00
|
|
|
CCheats (CN64Rom * const Rom = NULL);
|
2008-09-18 03:15:49 +00:00
|
|
|
~CCheats ( void );
|
|
|
|
|
|
|
|
bool IsCheatMessage ( MSG * msg );
|
2012-11-17 01:26:00 +00:00
|
|
|
void ApplyCheats ( CMipsMemory * MMU );
|
|
|
|
void ApplyGSButton ( CMipsMemory * MMU );
|
2008-09-18 03:15:49 +00:00
|
|
|
void LoadCheats ( bool DisableSelected );
|
2015-01-27 05:07:44 +00:00
|
|
|
void SelectCheats ( HWND hParent, bool BlockExecution );
|
2008-09-18 03:15:49 +00:00
|
|
|
inline bool CheatsSlectionChanged ( void ) const { return m_CheatSelectionChanged; }
|
|
|
|
};
|