rtoss - Rev 280

Subversion Repositories:
Rev:
// PokemonMemHack.cpp : ¶¨ÒåÓ¦ÓóÌÐòµÄÀàÐÐΪ¡£
//

#include "stdafx.h"
#include "PokemonMemHack.h"
#include "PokemonMemHackDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// ΨһµÄÒ»¸ö CPokemonMemHackApp ¶ÔÏó

CPokemonMemHackApp      theApp;
ConfigStruct            cfg;
CPokemonMemHackCore     g_MemHack;
CPokemonRom                     g_MemRom;

COLORREF        g_rgBackClrTable[] =
{
        RGB(168,168,120),       // 00¡¢¤Õ¤Ä¤¦
        RGB(192,48,40),         // 01¡¢¤«¤¯¤È¤¦
        RGB(168,144,240),       // 02¡¢¤Ò¤³¤¦
        RGB(160,64,160),        // 03¡¢¤É¤¯
        RGB(224,192,104),       // 04¡¢¤¸¤á¤ó
        RGB(184,160,56),        // 05¡¢¤¤¤ï
        RGB(168,184,32),        // 06¡¢¤à¤·
        RGB(112,88,152),        // 07¡¢¥´©`¥¹¥È
        RGB(184,184,208),       // 08¡¢¤Ï¤¬¤Í
        RGB(104,160,144),       // 09¡¢£¿£¿£¿
        RGB(240,128,48),        // 0A¡¢¤Û¤Î¤ª
        RGB(104,144,240),       // 0B¡¢¤ß¤º
        RGB(120,200,80),        // 0C¡¢¤¯¤µ
        RGB(248,208,48),        // 0D¡¢¤Ç¤ó¤­
        RGB(248,88,136),        // 0E¡¢¥¨¥¹¥Ñ©`
        RGB(152,216,216),       // 0F¡¢¤³¤ª¤ê
        RGB(112,56,248),        // 10¡¢¥É¥é¥´¥ó
        RGB(112,88,112),        // 11¡¢¤¢¤¯
};

COLORREF        g_rgForeClrTable[] =
{
        RGB(0,0,0),                     // 00¡¢¤Õ¤Ä¤¦
        RGB(255,255,255),       // 01¡¢¤«¤¯¤È¤¦
        RGB(0,0,0),                     // 02¡¢¤Ò¤³¤¦
        RGB(255,255,255),       // 03¡¢¤É¤¯
        RGB(0,0,0),                     // 04¡¢¤¸¤á¤ó
        RGB(0,0,0),                     // 05¡¢¤¤¤ï
        RGB(0,0,0),                     // 06¡¢¤à¤·
        RGB(255,255,255),       // 07¡¢¥´©`¥¹¥È
        RGB(0,0,0),                     // 08¡¢¤Ï¤¬¤Í
        RGB(0,0,0),                     // 09¡¢£¿£¿£¿
        RGB(255,255,255),       // 0A¡¢¤Û¤Î¤ª
        RGB(0,0,0),                     // 0B¡¢¤ß¤º
        RGB(0,0,0),                     // 0C¡¢¤¯¤µ
        RGB(0,0,0),                     // 0D¡¢¤Ç¤ó¤­
        RGB(255,255,255),       // 0E¡¢¥¨¥¹¥Ñ©`
        RGB(0,0,0),                     // 0F¡¢¤³¤ª¤ê
        RGB(255,255,255),       // 10¡¢¥É¥é¥´¥ó
        RGB(255,255,255),       // 11¡¢¤¢¤¯
};

// CPokemonMemHackApp

BEGIN_MESSAGE_MAP(CPokemonMemHackApp, CWinApp)
        ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()


// CPokemonMemHackApp ¹¹Ôì

CPokemonMemHackApp::CPokemonMemHackApp()
{
        // ½«ËùÓÐÖØÒªµÄ³õʼ»¯·ÅÖÃÔÚ InitInstance ÖÐ
#ifdef _DEBUG
        cfg.dwLang = ui_lang_jp;
#else
        cfg.dwLang = ui_lang_jp;
#endif
        cfg.dwCount = ui_count_none;
        cfg.pBreedNameList = NULL;
        cfg.pSkillNameList = NULL;
        cfg.pSkillDescList = NULL;
        cfg.pItemNameList = NULL;
        cfg.pItemDescList = NULL;
        cfg.pAreaNameList = NULL;
        cfg.pPsNameList = NULL;
        cfg.pSpecNameList = NULL;
        cfg.pSpecDescList = NULL;
}

CPokemonMemHackApp::~CPokemonMemHackApp()
{
        DestroyStringLists();
}

// CPokemonMemHackApp ³õʼ»¯

BOOL CPokemonMemHackApp::InitInstance()
{
        // Èç¹ûÒ»¸öÔËÐÐÔÚ Windows XP ÉϵÄÓ¦ÓóÌÐòÇåµ¥Ö¸¶¨Òª
        // ʹÓà ComCtl32.dll °æ±¾ 6 »ò¸ü¸ß°æ±¾À´ÆôÓÿÉÊÓ»¯·½Ê½£¬
        //ÔòÐèÒª InitCommonControls()¡£·ñÔò£¬½«ÎÞ·¨´´½¨´°¿Ú¡£
        InitCommonControls();

        CWinApp::InitInstance();

        AfxEnableControlContainer();

        if(!ReadStringLists())
        {
                AfxMessageBox(IDS_ERR_STRING_READ, MB_OK | MB_ICONERROR);
        }
        else if(!g_MemHack.Initialize())
        {
                AfxMessageBox(IDS_ERR_INIT, MB_OK | MB_ICONERROR);
        }
        else
        {
                CPokemonMemHackDlg dlg;
                m_pMainWnd = &dlg;
                INT_PTR nResponse = dlg.DoModal();
                if (nResponse == IDOK)
                {
                        //¶Ô»°¿òµÄ´úÂë
                }
                else if (nResponse == IDCANCEL)
                {
                        //¶Ô»°¿òµÄ´úÂë
                }
        }

        // ÓÉÓÚ¶Ô»°¿òÒѹرգ¬ËùÒÔ½«·µ»Ø FALSE ÒÔ±ãÍ˳öÓ¦ÓóÌÐò£¬
        // ¶ø²»ÊÇÆô¶¯Ó¦ÓóÌÐòµÄÏûÏ¢±Ã¡£
        return FALSE;
}

BOOL CPokemonMemHackApp::ReadStringLists()
{
        BOOL                    bResult;
        CStringReader   sr;

        try
        {
                /////////////////////////////////////////
                cfg.pBreedNameList = new StringEntry[BREED_COUNT];
                if(!cfg.pBreedNameList)
                        throw 0;

                bResult = sr.BatchReadString(_T("BreedNameList.txt"), cfg.pBreedNameList, BREED_COUNT);
                if(!bResult)
                        throw 0;

                /////////////////////////////////////////
                cfg.pSkillNameList = new StringEntry[SKILL_COUNT];
                if(!cfg.pSkillNameList)
                        throw 0;

                bResult = sr.BatchReadString(_T("SkillNameList.txt"), cfg.pSkillNameList, SKILL_COUNT);
                if(!bResult)
                        throw 0;

                /////////////////////////////////////////
                cfg.pSkillDescList = new StringEntry[SKILL_COUNT];
                if(!cfg.pSkillDescList)
                        throw 0;

                bResult = sr.BatchReadString(_T("SkillDescList.txt"), cfg.pSkillDescList, SKILL_COUNT);
                if(!bResult)
                        throw 0;

                /////////////////////////////////////////
                cfg.pItemNameList = new StringEntry[ITEM_COUNT];
                if(!cfg.pItemNameList)
                        throw 0;

                bResult = sr.BatchReadString(_T("ItemNameList.txt"), cfg.pItemNameList, ITEM_COUNT);
                if(!bResult)
                        throw 0;

                /////////////////////////////////////////
                cfg.pItemDescList = new StringEntry[ITEM_COUNT];
                if(!cfg.pItemDescList)
                        throw 0;

                bResult = sr.BatchReadString(_T("ItemDescList.txt"), cfg.pItemDescList, ITEM_COUNT);
                if(!bResult)
                        throw 0;

                /////////////////////////////////////////
                cfg.pAreaNameList = new StringEntry[AREA_COUNT];
                if(!cfg.pAreaNameList)
                        throw 0;

                bResult = sr.BatchReadString(_T("AreaNameList.txt"), cfg.pAreaNameList, AREA_COUNT);
                if(!bResult)
                        throw 0;

                /////////////////////////////////////////
                cfg.pPsNameList = new StringEntry[PS_COUNT];
                if(!cfg.pPsNameList)
                        throw 0;

                bResult = sr.BatchReadString(_T("PersonalityList.txt"), cfg.pPsNameList, PS_COUNT);
                if(!bResult)
                        throw 0;

                /////////////////////////////////////////
                cfg.pSpecNameList = new StringEntry[SPEC_COUNT];
                if(!cfg.pSpecNameList)
                        throw 0;

                bResult = sr.BatchReadString(_T("SpecNameList.txt"), cfg.pSpecNameList, SPEC_COUNT);
                if(!bResult)
                        throw 0;

                /////////////////////////////////////////
                cfg.pSpecDescList = new StringEntry[SPEC_COUNT];
                if(!cfg.pSpecDescList)
                        throw 0;

                bResult = sr.BatchReadString(_T("SpecDescList.txt"), cfg.pSpecDescList, SPEC_COUNT);
                if(!bResult)
                        throw 0;
        }
        catch(int)
        {
                bResult = FALSE;
        }

        if(!bResult)
                DestroyStringLists();

        return bResult;
}

VOID CPokemonMemHackApp::DestroyStringLists()
{
        if(cfg.pBreedNameList)
        {
                delete [](cfg.pBreedNameList);
                cfg.pBreedNameList = NULL;
        }
        if(cfg.pSkillNameList)
        {
                delete [](cfg.pSkillNameList);
                cfg.pSkillNameList = NULL;
        }
        if(cfg.pSkillDescList)
        {
                delete [](cfg.pSkillDescList);
                cfg.pSkillDescList = NULL;
        }
        if(cfg.pItemNameList)
        {
                delete [](cfg.pItemNameList);
                cfg.pItemNameList = NULL;
        }
        if(cfg.pItemDescList)
        {
                delete [](cfg.pItemDescList);
                cfg.pItemDescList = NULL;
        }
        if(cfg.pAreaNameList)
        {
                delete [](cfg.pAreaNameList);
                cfg.pAreaNameList = NULL;
        }
        if(cfg.pPsNameList)
        {
                delete [](cfg.pPsNameList);
                cfg.pPsNameList = NULL;
        }
        if(cfg.pSpecNameList)
        {
                delete [](cfg.pSpecNameList);
                cfg.pSpecNameList = NULL;
        }
        if(cfg.pSpecDescList)
        {
                delete [](cfg.pSpecDescList);
                cfg.pSpecDescList = NULL;
        }
}