import java.awt.image.*; import java.awt.*; //-------------------------------------------------- // キャラクラス //-------------------------------------------------- class Chara{ // 使用しているキャライメージ CharaImage img; // アクティブ(生存)フラグ boolean m_active; boolean IsActive(){return m_active;} void SetActive( boolean flag ){ this.m_active = flag; } // イベント開始方法 // 話す・調べる = 0, 主人公と接触 = 1, 自動的に処理を開始 = 2 int m_event_way; // 通行可能フラグ boolean m_can_move_flag; // でかキャラチップID int BigImageID; // イメージID int image_id; // 座標 int px, py; // 固定小数の座標 int px_one, py_one; // ダメージをくらったか 0=くらっていない 1=くらってダメージ処理 2=戻ってる処理 3=ふっとぶ int m_damage_flag; // 攻撃アクション 0=何もしない 1=前進 2=投げる 3=後退 int m_attack_action; // 一時記憶用 int m_temp_buffer; // 方向(0123:上右下左) int dir; // アニメパターン int anime; // アニメの方向 int anime_dir; // イベントスクリプトファイル String m_scr_file; // 汎用タイマー int WaitTimer; // HP int m_hp; // 加速度 Accel m_accel; // 歩行アニメ用タイマー int WalkAnimeTimer; // 移動中フラグ boolean WalkingFlag; // 移動した距離 int m_move_length; // 歩く速度 int m_move_speed; // 描画優先度(Y座標が同じ時)高いほうが後に描く byte priority; // コンストラクタ Chara(){ anime = 1; // 中央のもの anime_dir = 1; WalkAnimeTimer = 0; m_event_way = 0; image_id = 0; m_can_move_flag = false; WalkingFlag = false; m_move_speed = 4; m_move_length = 0; priority = 0; px = 0; py = 0; m_scr_file = new String("000"); m_accel = new Accel(); m_hp = 24; m_damage_flag = 0; m_attack_action = 0; this.m_active = false; } // イメージセット void SetImage( CharaImage img ){ // イメージへの参照 this.img = img; } // 座標セット void SetPoint( int x, int y ){ this.px = x; this.py = y; } // マップ上の座標セット void SetPointIndex( int x, int y ){ this.px = x << 4; this.py = y << 4; } // 方向セット void SetDir( int dir ){ this.dir = dir; } int GetDir(){ return this.dir; } int GetMoveSpeed(){ return m_move_speed; } // アニメパターン更新 void RenewAnime(){ WalkAnimeTimer++; // 8フレームに一回更新 // ただし移動中は2倍 if( ( WalkingFlag && ( WalkAnimeTimer > 4 ) ) || WalkAnimeTimer > 8 ){ WalkAnimeTimer = 0; anime += anime_dir; if( anime >= CharaManage.ANIME_NUM ){ anime_dir = -1; anime = 1; }else if( anime < 0 ){ anime_dir = 1; anime = 1; } } } // イメージIDセット void SetImageID( int id ){ this.image_id = id; } // でかイメージIDセット void SetBigImageID( int id ){ this.BigImageID = id; } // イメージ取得 Image GetImage(){ return img.GetImage( dir, anime ); } // イメージ取得 ChipImage GetChipImage(){ return img.GetChipImage( dir, anime ); } // αカラー取得 int GetAlphaColor(){ return img.AlphaColor; } // イベントスクリプト取得 String GetEvent(){ return this.m_scr_file; } void SetEvent( String str ){ this.m_scr_file = str; } // イベント開始方法 void SetEventWay( int way ){ this.m_event_way = way; } int GetEventWay(){ return this.m_event_way; } // 通行フラグ void SetMoveFlag( boolean flag ){ this.m_can_move_flag = flag; } boolean GetMoveFlag(){ return this.m_can_move_flag; } // 向いてる方向に歩く // 一定距離歩けばtrueを返す boolean WalkAction(){ if( dir == BasicManage.DIR_UP ){ py -= m_move_speed; } else if( dir == BasicManage.DIR_RIGHT ){ px += m_move_speed; } else if( dir == BasicManage.DIR_DOWN ){ py += m_move_speed; } else if( dir == BasicManage.DIR_LEFT ){ px -= m_move_speed; } // 一定の距離を歩けば停止 m_move_length += m_move_speed; if( m_move_length >= MapManage.CHIP_SIZE ){ WalkingFlag = false; m_move_length = 0; return true; } return false; } // 領域外対策 void AreaOutCheck( boolean loop_flag, int width, int height ){ // ループ if( loop_flag ){ if( px >= width ){ px = px - width; } if( py >= height ){ py = py - height; } if( px < 0 ){ px = px + width; } if( py < 0 ){ py = py + height; } } } }