WB版ツチニンの進化


■概要
ツチニン(290)からテッカニン(291)、ヌケニン(292)への
進化についてまとめておきます。
本ドキュメント中で、ツチニン、テッカニン、ヌケニンの書き間違えがないことは、念入りに確認してあります。


■場所
prog\src\demo\shinka_demo\shinka_demo.c


■説明
(1)
【ツチニン】
ツチニンが進化するときだけ
SHINKA_COND_SPECIAL_LEVELUP
になっている。


(2)
【テッカニン】
ツチニンをまずテッカニンに進化させる。
        PP_ChangeMonsNo( work->pp, param->after_mons_no );


(3)
【ヌケニン】
パーティに空きがある&&普通のモンスターボールを持っている
とき、ヌケニンが誕生する。
    if(    ( PokeParty_GetPokeCount(param->ppt) < PokeParty_GetPokeCountMax(param->ppt) )  // パーティに空きがある
        && ( MYITEM_CheckItem( myitem_ptr, ITEM_MONSUTAABOORU, 1, work->heap_id ) ) )      // 普通のモンスターボールを持っている


(4)
【ヌケニン】
先ほど進化して誕生したテッカニンのコピーを作成する。
      nukenin_pp = GFL_HEAP_AllocClearMemory( work->heap_id, POKETOOL_GetWorkSize() );
      POKETOOL_CopyPPtoPP( (POKEMON_PARAM*)(work->pp), nukenin_pp );


(5)
【ヌケニン】
コピーしたテッカニンをヌケニンに進化させる。
      PP_ChangeMonsNo( nukenin_pp, MONSNO_NUKENIN );  // 進化


(6)
【ヌケニン】
ヌケニンのパラメータを設定する

      //取得ボールをモンスターボールに
      PP_Put( nukenin_pp, ID_PARA_get_ball, ITEM_MONSUTAABOORU );
      
      //装備アイテムをなくす
      PP_Put( nukenin_pp, ID_PARA_item, 0 );
      
      //ポケモンにつけるマークを消す
      PP_Put( nukenin_pp, ID_PARA_mark, 0 );
      
      //リボン系をクリア
      {
        int i;
        for( i=ID_PARA_sinou_champ_ribbon; i<ID_PARA_sinou_amari_ribbon+1; i++ )
        {
          PP_Put( nukenin_pp, i, 0 );
        }
        for( i=ID_PARA_stylemedal_normal; i<ID_PARA_world_ribbon+1; i++ )
        {
          PP_Put( nukenin_pp, i, 0 );
        }
        for( i=ID_PARA_trial_stylemedal_normal; i<ID_PARA_amari_ribbon+1; i++ )
        {
          PP_Put( nukenin_pp, i, 0 );
        }
      }
      
      //ニックネームをデフォルト名に
      {
        u32 nukenin_monsno = PP_Get( nukenin_pp, ID_PARA_monsno, NULL );
        STRBUF* strbuf = GFL_MSG_CreateString( GlobalMsg_PokeName, nukenin_monsno );
        PP_Put( nukenin_pp, ID_PARA_nickname, (u32)strbuf );
        GFL_STR_DeleteBuffer( strbuf );
      }
      
      //状態異常を直す
      PP_Put( nukenin_pp, ID_PARA_condition, 0 );

      //メールデータ
      {
        MAIL_DATA* mail_data = MailData_CreateWork( work->heap_id );
        PP_Put( nukenin_pp, ID_PARA_mail_data, (u32)mail_data );
        GFL_HEAP_FreeMemory( mail_data );
      }

      //カスタムボールID
      PP_Put( nukenin_pp, ID_PARA_cb_id, 0 );


(7)
【ヌケニン】
ヌケニンをパーティに追加する
      PokeParty_Add( (POKEPARTY*)(param->ppt), nukenin_pp );  // constはずし

普通のモンスターボールを減らす
      ret = MYITEM_SubItem( myitem_ptr, ITEM_MONSUTAABOORU, 1, work->heap_id );


(8)
【ヌケニン】
ヌケニンの図鑑登録、レコード更新を行う

図鑑登録
        ZUKANSAVE_SetPokeSee( zukan_savedata, nukenin_pp );  // 見た  // 図鑑フラグをセットする
        ZUKANSAVE_SetPokeGet( zukan_savedata, nukenin_pp );  // 捕まえた  // 図鑑フラグをセットする

レコード
          RECORD_Inc(rec, RECID_POKE_EVOLUTION);    // 進化させたポケモンの数
          RECORD_Inc(rec, RECID_DAYCNT_EVOLUTION);  // 1日にポケモン進化させた回数


(9)
【テッカニン】
テッカニンが技を新たに覚える場合、技忘れ、技覚えを行う。


■注意点
タイトルによって処理が異なるので注意。


以上。
