/* $Id: z_collision_check.h,v 1.1.1.1 2003/03/10 22:42:53 tong Exp $ */
 
/* $Log: z_collision_check.h,v $
 * Revision 1.1.1.1  2003/03/10 22:42:53  tong
 * new OBJ tree for ocarina from Nintendo
 *
 * Revision 2.1  1998-10-22 20:45:49+09  zelda
 * ＲＯＭ出しバージョン(NTSC)
 *
 * Revision 1.50  1998/10/16 04:43:12  matutani
 * デバッグ─モードをrom_dにした。
 *
 * Revision 1.49  1998-10-15 23:38:51+09  matutani
 * *** empty log message ***
 *
 * Revision 1.48  1998-10-10 16:37:24+09  morita
 * GetSwordAP
 *
 * Revision 1.47  1998-10-08 20:23:07+09  matutani
 * *** empty log message ***
 *
 * Revision 1.46  1998-10-08 18:10:06+09  matutani
 * SEのカメラ位置対応
 *
 * Revision 1.45  1998-09-28 13:10:02+09  matutani
 * *** empty log message ***
 *
 * Revision 1.44  1998-09-25 16:18:53+09  matutani
 * COL_DEL_OLD追加
 *
 * Revision 1.43  1998-09-11 16:48:47+09  matutani
 * CollisionCheckSetSparkFlashBlue_NoSE()追加
 *
 * Revision 1.42  1998-09-05 23:00:32+09  matutani
 * *** empty log message ***
 *
 * Revision 1.41  1998-08-26 11:09:00+09  matutani
 * CollisionCheckSetSparkFlashBlue追加
 *
 * Revision 1.40  1998-08-21 10:46:37+09  matutani
 * ClObjSwrd_ACClear(),ClObjPipe_ACClear()をexternにしました。
 *
 * Revision 1.39  1998-08-20 23:18:00+09  matutani
 * *** empty log message ***
 *
 * Revision 1.38  1998-07-24 20:22:31+09  matutani
 * あおいち
 *
 * Revision 1.37  1998-07-06 20:58:03+09  matutani
 * 不要関数削除
 *
 * Revision 1.36  1998-06-17 16:46:25+09  matutani
 * デバッグ処理
 *
 * Revision 1.35  1998-06-11 16:18:54+09  matutani
 * zelda_malloc/freeしないバージョン
 *
 * Revision 1.34  1998-05-14 22:33:01+09  matutani
 * *** empty log message ***
 *
 * Revision 1.33  1998-05-07 16:00:09+09  matutani
 * 関数整理
 *
 * Revision 1.32  1998-04-30 19:31:01+09  matutani
 * extern void CollisionCheck_Status_set3_l()追加
 *
 * Revision 1.31  1998-04-24 15:01:42+09  matutani
 * CollisionCheck_lineOcCheck()：カメラ用？
 *
 * Revision 1.30  1998-04-15 15:19:53+09  matutani
 * *** empty log message ***
 *
 * Revision 1.29  1998-04-04 23:09:10+09  matutani
 * *** empty log message ***
 *
 * Revision 1.28  1998/04/02  13:48:59  matutani
 * extern int ClObjSwrd_ATClear()をexternにした。
 *
 * Revision 1.27  1998/03/18  02:59:44  ogawa
 * *** empty log message ***
 *
 * Revision 1.26  1998/03/09  13:38:40  matutani
 * ＯＣチェック変更
 *
 * Revision 1.25  1998/03/09  13:38:17  matutani
 * 警告削除
 *
 * Revision 1.24  1998/02/11  11:59:16  matutani
 **** empty log message ***
 *
 * Revision 1.23  1998/02/11  05:35:33  matutani
 * *** empty log message ***
 *
 * Revision 1.22  1997/11/19  04:25:55  matutani
 * ClObjSwrd_dt()追加
 *
 * Revision 1.21  1997/11/13  05:51:07  matutani
 * 追加／クリア停止処理
 *
 * Revision 1.20  1997/11/10  06:38:02  matutani
 * 盾処理（ビット／簡易距離計算）／バトルデータ処理
 *
 * Revision 1.19  1997/11/05  02:46:45  matutani
 * コリジョンデータ構造体修正
 *
 * Revision 1.18  1997/11/01  11:49:41  matutani
 * CollisionCheck_Uty_setTrisPos()頂点設定
 *
 * Revision 1.17  1997/10/31  04:10:16  matutani
 * パンチミス
 *
 * Revision 1.16  1997/10/31  04:08:58  matutani
 * ClObjPipe_setパイプミス
 *
 * Revision 1.15  1997/10/31  03:04:56  matutani
 * ステータス／デバッグ表示
 *
 * Revision 1.14  1997/10/30  07:59:03  matutani
 * CollisionCheck_Uty_convJntSphL2G()追加
 *
 * Revision 1.13  1997/10/29  14:02:15  matutani
 * 新版コリジョンチェックスタート
 *
 * Revision 1.12  1997/10/18  14:09:03  matutani
 * デバッグ開始
 *
 * Revision 1.11  1997/10/10  12:59:46  matutani
 * NewCollisionCheck 制作中
 *
 * Revision 1.10  1997/10/08  02:22:48  matutani
 * *** empty log message ***
 *
 * Revision 1.9  1997/10/08  02:11:57  matutani
 * *** empty log message ***
 *
 * Revision 1.8  1997/08/28  02:35:35  matutani
 * 攻撃タイプラベル追加
 *
 * Revision 1.7  1997/07/11  04:56:38  matutani
 * アクターｖｓアクターの接触時のspeedFを０にするのをやめた。
 *
 * Revision 1.6  1997/02/27  02:22:18  matutani
 * エフェクトのメモリ確保解放をgame mallocに変更
 *
 * Revision 1.5  1996/10/28  02:15:51  matutani
 * spark flash add
 *
 * Revision 1.4  1996/09/25  06:19:56  matutani
 * *** empty log message ***
 *
 * Revision 1.3  1996/09/25  01:42:14  matutani
 * 剣攻撃判定
 *
 * Revision 1.2  1996/09/24  12:12:56  matutani
 * 接触補正
 * */

/*-----------------------------------------------------------------------------
 *
 * z_collision_check.h
 * Program:Kenji Matsutani
 * 1996/09/12
 *
 *---------------------------------------------------------------------------*/

#ifndef INCLUDE_Z_COLLISION_CHECK_H
#define INCLUDE_Z_COLLISION_CHECK_H

#ifdef _LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif

#include"z_basic.h"
#include"z_actor.h"
#include"z_play.h"
#include<ultra64.h>
#include<u64types.h>
#include"z_collision_type.h"
#include"z_collision_param.h"
    
/*==========================================================================
 *
 * 新処理関数
 *
 *=========================================================================*/
/*--------------------------------------------------------------------------
 *
 * パイプ
 *
 *-------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------
 *
 * コンストラクト
 *
 *-------------------------------------------------------------------------*/
extern int ClObjPipe_ct(Game *pgame, ClObjPipe *pclobj_pipe);


/*---------------------------------------------------------------------------
 *
 * デストラクタ
 *
 *--------------------------------------------------------------------------*/
extern int ClObjPipe_dt(Game *pgame, ClObjPipe *pclobj_pipe);

#ifndef COL_DEL_OLD
/*---------------------------------------------------------------------------
 *
 * データセット
 *
 *--------------------------------------------------------------------------*/
extern int ClObjPipe_set(
    Game *pgame,
    ClObjPipe *pclobj_pipe,
    ClObjPipeData *pclobj_pipe_data);
#endif

#ifndef COL_DEL_OLD
/*---------------------------------------------------------------------------
 *
 * データセット
 * Version3
 *
 *--------------------------------------------------------------------------*/
extern int ClObjPipe_set3(
    Game *pgame,
    ClObjPipe *pclobj_pipe, Actor *self,
    ClObjPipeData3 *pclobj_pipe_data);
#endif
 
/*----------------------------------------------------------------------------
 *
 * データセット
 * Version5
 * ClObj_set4()にバージョンアップ
 *
 *---------------------------------------------------------------------------*/
extern int ClObjPipe_set5(
    Game *pgame,
    ClObjPipe *pclobj_pipe,
    Actor *self,
    ClObjPipeData5 *pclobj_pipe_data);

/*--------------------------------------------------------------------------
 *
 * AC用のデータクリア処理
 *
 *------------------------------------------------------------------------*/
extern int ClObjPipe_ACClear(
    Game *pgame,
    ClObj *pcl_obj);

/*----------------------------------------------------------------------------
 *
 * 剣構造体
 *
 *--------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------
 *
 * コンストラクター
 *
 *-------------------------------------------------------------------------*/
extern int ClObjSwrd_ct(
    Game *pgame,
    ClObjSwrd *pclobj_swrd);

/*----------------------------------------------------------------------------
 *
 * デストラクター
 *
 *--------------------------------------------------------------------------*/
extern int ClObjSwrd_dt(
    Game *pgame,
    ClObjSwrd *pclobj_swrd);

#if 0
/*-------------------------------------------------------------------------
 *
 * データセット
 *
 *------------------------------------------------------------------------*/
extern int ClObjSwrd_set(
    Game *pgame,
    ClObjSwrd *pclobj_swrd,
    ClObjSwrdData *pclobj_swrd_data);
#endif

#ifndef COL_DEL_OLD
/*-------------------------------------------------------------------------
 *
 * データセット
 *
 *------------------------------------------------------------------------*/
extern int ClObjSwrd_set3(
    Game *pgame,
    ClObjSwrd *pclobj_swrd, Actor *self,
    ClObjSwrdData3 *pclobj_swrd_data);
#endif

/*----------------------------------------------------------------------------
 *
 * データセット
 * Version5
 * ClObj_set4にVersion up!!
 *
 *---------------------------------------------------------------------------*/
extern int ClObjSwrd_set5(
    Game *pgame,
    ClObjSwrd *pclobj_swrd, Actor *self,
    ClObjSwrdData5 *pclobj_swrd_data);

/*-----------------------------------------------------------------------------
 *
 * AT用のデータクリア処理
 *
 *---------------------------------------------------------------------------*/
extern int ClObjSwrd_ATClear(
    Game *pgame,
    ClObj *pcl_obj);

/*-----------------------------------------------------------------------------
 *
 * AC用のデータクリア処理
 *
 *---------------------------------------------------------------------------*/
extern int ClObjSwrd_ACClear(
    Game *pgame,
    ClObj *pcl_obj);

/*----------------------------------------------------------------------------
 *
 * 三角形数枚当りデータ
 *
 *-------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------
 *
 * コンストラクター
 *
 *--------------------------------------------------------------------------*/
extern int ClObjTris_ct(
    Game *pgame,
    ClObjTris *pclobj_tris);

#ifndef COL_DEL_OLD
/*----------------------------------------------------------------------------
 *
 * デストラクター
 *
 *---------------------------------------------------------------------------*/
extern int ClObjTris_dt(
    Game *pgame,
    ClObjTris *pclobj_tris);
#endif

/*----------------------------------------------------------------------------
 *
 * デストラクター
 * zelda_freeしません。
 * ClObjTris_set5_nzm()と対で使用してください。
 *
 *---------------------------------------------------------------------------*/
extern int ClObjTris_dt_nzf(
    Game *pgame,
    ClObjTris *pclobj_tris);

/*----------------------------------------------------------------------------
 *
 * デストラクター
 * zelda_freeしません。
 * ClObjTris_set5_nzm()と対で使用してください。
 *
 *---------------------------------------------------------------------------*/
extern int ClObjTris_dt_nzf(
    Game *pgame,
    ClObjTris *pclobj_tris);

#ifndef COL_DEL_OLD
/*----------------------------------------------------------------------------
 *
 * データセット
 * 返り値:TRUEの時成功
 * Version3
 *
 *---------------------------------------------------------------------------*/
extern int ClObjTris_set3(
    Game *pgame,
    ClObjTris *pclobj_tris, Actor *self,
    ClObjTrisData3 *pclobj_tris_data);
#endif

#ifndef COL_DEL_OLD
/*----------------------------------------------------------------------------
 *
 * データセット
 * 返り値:TRUEの時成功
 * Version5
 *
 *---------------------------------------------------------------------------*/
extern int ClObjTris_set5(
    Game *pgame,
    ClObjTris *pclobj_tris, Actor *self,
    ClObjTrisData5 *pclobj_tris_data);
#endif

/*---------------------------------------------------------------------------
 *
 * データセット
 * 返り値:TRUEの時成功
 * zelda_mallocしません
 * メモリー領域をポインターで取得します。
 * 外で確保解放を行うなり、アクターなら各キャラクターの構造体に領域を切って、
 * 使用してください。
 *
 *--------------------------------------------------------------------------*/
extern int ClObjTris_set5_nzm(
    Game *pgame,
    ClObjTris *pclobj_tris, Actor *self,
    ClObjTrisData5 *pclobj_tris_data,
    ClObjTrisElem *memory_area);

/*=========================================================================
 *
 * 関節球情報
 *
 *========================================================================*/
/*-------------------------------------------------------------------------
 *
 * コンストラクター
 *
 *-------------------------------------------------------------------------*/
extern int ClObjJntSph_ct(Game *pgame, ClObjJntSph *pclobj_jntsph);

#ifndef COL_DEL_OLD
/*-------------------------------------------------------------------------
 *
 * データセット
 * 返り値:TRUEセット成功
 *
 *-------------------------------------------------------------------------*/
extern int ClObjJntSph_set(
    Game *pgame,
    ClObjJntSph *pclobj_jntsph,
    ClObjJntSphData *pclobj_jntsph_data);
#endif

#ifndef COL_DEL_OLD
/*---------------------------------------------------------------------------
 *
 * データセット
 * Version3
 * 返り値:TRUEセット成功
 * メモ：self 自分のアクターポインター
 *
 *-------------------------------------------------------------------------*/
extern int ClObjJntSph_set3(
    Game *pgame,
    ClObjJntSph *pclobj_jntsph, Actor *self,
    ClObjJntSphData3 *pclobj_jntsph_data);
#endif

#ifndef COL_DEL_OLD
/*---------------------------------------------------------------------------
 *
 * データセット
 * Version5
 * 返り値:TRUEセット成功
 * メモ：self 自分のアクターポインター
 * ClObj_set4()にVersion up!!
 *
 *-------------------------------------------------------------------------*/
extern int ClObjJntSph_set5(
    Game *pgame,
    ClObjJntSph *pclobj_jntsph,
    Actor *self,
    ClObjJntSphData5 *pclobj_jntsph_data);
#endif

/*---------------------------------------------------------------------------
 *
 * データセット
 * Version5 No Zelda Malloc(メモリ確保無しバージョン)
 * 返り値:TRUEセット成功
 * メモ：self 自分のアクターポインター
 * ClObjJntSphElem *memory_area:球データ領域(各敵構造体領域内に確保して,
 * そこへのポインタをもらう）
 *
 *-------------------------------------------------------------------------*/
extern int ClObjJntSph_set5_nzm(
    Game *pgame,
    ClObjJntSph *pclobj_jntsph,
    Actor *self,
    ClObjJntSphData5 *pclobj_jntsph_data,
    ClObjJntSphElem *memory_area);

#ifndef COL_DEL_OLD
/*---------------------------------------------------------------------------
 *
 * デストラクター
 *
 *-------------------------------------------------------------------------*/
extern int ClObjJntSph_dt(Game *pgame, ClObjJntSph *pclobj_jntsph);
#endif

/*----------------------------------------------------------------------------
 *
 * デストラクター（メモリー解放していません)
 * ClObjJntSph_set5_nzm()と対で使用してください。
 *
 *--------------------------------------------------------------------------*/
extern int ClObjJntSph_dt_nzf(Game *pgame, ClObjJntSph *pclobj_jntsph);


/***************************************************************************
 *
 * OC ラインチェック用構造体
 *
 **************************************************************************/
/*--------------------------------------------------------------------------
 *
 * コンストラクター
 *
 *-------------------------------------------------------------------------*/
extern int ClOCLine_ct(
    Game *pgame,
    ClOCLine *pocline);

/*---------------------------------------------------------------------------
 *
 * デストラクター
 *
 *--------------------------------------------------------------------------*/
extern int ClOCLine_dt(
    Game *pgame,
    ClOCLine *pocline);


/*-------------------------------------------------------------------------
 *
 * ポジションセット
 *
 *-----------------------------------------------------------------------*/
extern int ClOCLine_positionSet(
    Game *pgame,
    ClOCLine *pocline,
    xyz_t *p1,
    xyz_t *p2);

/*----------------------------------------------------------------------------
 *
 * データセット関数
 *
 *--------------------------------------------------------------------------*/
extern int ClOCLine_set(
    Game *pgame,
    ClOCLine *pocline,
    ClOCLineData *pocline_data);

/*==========================================================================
 *
 * OC Line 当たり追加処理
 *
 *=========================================================================*/
extern int CollisionCheck_setOCLine(
    Game *pgame,
    CollisionCheck *pclch,
    ClOCLine *pclocline);

/*==========================================================================
 *
 * システムの処理
 *
 *========================================================================*/
/*--------------------------------------------------------------------------
 *
 * コンストラクター
 *
 *--------------------------------------------------------------------------*/
extern void CollisionCheck_ct(
    Game *game,
    CollisionCheck *clch);


/*-------------------------------------------------------------------------
 *
 * デストラクター
 *
 *-------------------------------------------------------------------------*/
extern void CollisionCheck_dt(
    Game *game,
    CollisionCheck *clch);

/*--------------------------------------------------------------------------
 *
 * クリア処理
 *
 *-------------------------------------------------------------------------*/
extern void CollisionCheck_clear(
    Game *pgame,
    CollisionCheck *pclch);

/*-------------------------------------------------------------------------
 *
 * コリジョンチェック
 * セット禁止/データクリア禁止ビットセット
 *
 *-------------------------------------------------------------------------*/
extern void CollisionCheck_setStatusStopAddClear(
    Game *game,
    CollisionCheck *pclch);

/*-------------------------------------------------------------------------
 *
 * コリジョンチェック
 * セット禁止/データクリア禁止ビットクリア
 *
 *-------------------------------------------------------------------------*/
extern void CollisionCheck_clearStatusStopAddClear(
    Game *game,
    CollisionCheck *pclch);

/*---------------------------------------------------------------------------
 *
 * ATデータ追加
 *
 *-------------------------------------------------------------------------*/
extern int CollisionCheck_setAT(
    Game *pgame,
    CollisionCheck *pclch,
    ClObj *pcl_obj);

/*---------------------------------------------------------------------------
 *
 * ATデータ追加:ALL_
 * 返り値:追加失敗の時は-1が返る。それ以外の時は登録先。
 * 追加とクリア禁止ビットが立っているときに,指定されたインデックスにポインター
 * をセットして、それ以外の場合はクリアが動作しているとして,処理する。
 *
 *-------------------------------------------------------------------------*/
extern int CollisionCheck_setAT_SAC(
    Game *pgame,
    CollisionCheck *pclch,
    ClObj *pcl_obj,
    int add_index);

/*--------------------------------------------------------------------------
 *
 * ACデータ追加
 *
 *------------------------------------------------------------------------*/
extern int CollisionCheck_setAC(
    Game *pgame,
    CollisionCheck *pclch,
    ClObj *pcl_obj);

/*--------------------------------------------------------------------------
 *
 * ACデータ追加
 * 返り値:追加失敗の時は-1が返る。それ以外の時は登録先。
 * 追加とクリア禁止ビットが立っているときに,指定されたインデックスにポインター
 * をセットして、それ以外の場合はクリアが動作しているとして,処理する。
 *------------------------------------------------------------------------*/
extern int CollisionCheck_setAC_SAC(
    Game *pgame,
    CollisionCheck *pclch,
    ClObj *pcl_obj,
    int add_index);


/*---------------------------------------------------------------------------
 *
 * OCデータ追加
 *
 *-------------------------------------------------------------------------*/
extern int CollisionCheck_setOC(
    Game *pgame,
    CollisionCheck *pclch,
    ClObj *pcl_obj);


/*---------------------------------------------------------------------------
 *
 * OCデータ追加
 * 返り値:追加失敗の時は-1が返る。それ以外の時は登録先。
 * 追加とクリア禁止ビットが立っているときに,指定されたインデックスにポインター
 * をセットして、それ以外の場合はクリアが動作しているとして,処理する。
 *
 *-------------------------------------------------------------------------*/
extern int CollisionCheck_setOC_SAC(
    Game *pgame,
    CollisionCheck *pclch,
    ClObj *pcl_obj,
    int add_index);

/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 *
 * チェックメイン部分
 *
 *::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
extern void CollisionCheck_ATAC(
    Game *pgame,
    CollisionCheck *pclch);

/*=========================================================================
 *
 * チェックメイン処理
 *
 *========================================================================*/
extern void CollisionCheck_OC(
    Game *pgame,
    CollisionCheck *pclch);


/*--------------------------------------------------------------------------
 *
 * ダメージ計算処理
 *
 *------------------------------------------------------------------------*/
extern void CollisionCheck_Damage_Calc(
    Game *pgame,
    CollisionCheck *pclch);



/*--------------------------------------------------------------------------
 *
 * クリア処理
 *
 *-------------------------------------------------------------------------*/
extern void CollisionCheck_clear(
    Game *pgame,
    CollisionCheck *pclch);

/*============================================================================
 *
 * ステータス情報
 *
 *==========================================================================*/
/*---------------------------------------------------------------------------
 *
 * コンストラクト
 *
 *--------------------------------------------------------------------------*/
extern void CollisionCheck_Status_ct(
    Status *pstatus);


/*---------------------------------------------------------------------------
 *
 * ステータスダメージ情報クリア
 *
 *--------------------------------------------------------------------------*/
extern void CollisionCheck_Status_Clear(
    Status *pstatus);


/*---------------------------------------------------------------------------
 *
 * ステータス情報セット
 *
 *--------------------------------------------------------------------------*/
extern void CollisionCheck_Status_set(
    Status *pstatus,
    Status_Data *pstatus_data);

/*---------------------------------------------------------------------------
 *
 * ステータス情報セット
 * Version2
 * 変更点：hit_mark_typeを消した
 * 引数
 * BtlData *pbtl_data :バトルデータへのポインター もし、いらん場合はNULL
 *
 *--------------------------------------------------------------------------*/
extern void CollisionCheck_Status_set2(
    Status *pstatus,
    BtlData *pbtl_data,
    Status_Data2 *pstatus_data);

/*---------------------------------------------------------------------------
 *
 * スーテタス情報セット
 * Version3
 * 変更点:offset追加バージョン
 * 
 *--------------------------------------------------------------------------*/
extern void CollisionCheck_Status_set3(
    Status *pstatus,
    BtlData *pbtl_data,
    Status_Data3 *pstatus_data);

/* ラベル版 */
extern void CollisionCheck_Status_set3_l(
    Status *pstatus,
    CL_EN_LBL_TYPE en_label_index,
    Status_Data3 *pstatus_data);

/*===========================================================================
 *
 * エフェクト(血)
 *
 *=========================================================================*/

/*--------------------------------------------------------------------------
 *
 * 青い血
 * ClObj *ac_pclobj == NULL でもOK！！
 *
 *-------------------------------------------------------------------------*/
extern void CollisionCheck_setBlueBlood(
    Game *game, ClObj *ac_pclobj, xyz_t *pos);

/*===========================================================================
 *
 * コリジョンラインチェック
 *
 *==========================================================================*/

/*===========================================================================
 *
 * コリジョンチェック用ラインチェック
 * OC用ラインチェック(アクター関係の当りの登録が終わってから処理をしないと
 * 当りません）
 * CollisionCheck_generalLineOcCheck()を呼び出しています。
 *
 * 返り値:int 当ったかどうか？(TRUE/FALSE)
 *
 * 引数:xyz_t *start: スタート地点（現在優先無し,一応ということで）
 *      xyz_t *end:エンド地点(現在優先無し,これも一応）
 *
 *
 *===========================================================================*/
extern int CollisionCheck_lineOcCheck(
    Game *game, CollisionCheck *pclch, xyz_t *start, xyz_t *end);

/*============================================================================
 *
 * 新バージョン
 *
 *===========================================================================*/
extern int CollisionCheck_lineOcCheck2(
    Game *game, CollisionCheck *pclch, xyz_t *start, xyz_t *end,
    Actor **non_table, int non_table_size);

/*****************************************************************************
 *
 * ダメージ計算処理
 *
 ****************************************************************************/
/*---------------------------------------------------------------------------
 *
 * ダメージ構造体コンストラクト
 *
 *--------------------------------------------------------------------------*/
extern void CollisionCheck_Damage_ct(
    DAMAGE_S *pdamage);

/*----------------------------------------------------------------------------
 *
 * ダメージ構造体
 * クリア
 *
 *--------------------------------------------------------------------------*/
extern void CollisionCheck_Damage_Clear(
    DAMAGE_S *pdamage);

/*----------------------------------------------------------------------------
 *
 * AcotrのWorldポジションのみをPipeのcにセットする。
 *
 *--------------------------------------------------------------------------*/
extern void CollisionCheck_Uty_ActorWorldPosSetPipeC(
    Actor *pactor,
    ClObjPipe *pcl_pipe);

/*--------------------------------------------------------------------------
 *
 * Pipeのセンター位置をセットする(s_xyz版）
 *
 *-------------------------------------------------------------------------*/
extern void CollisionCheck_Uty_SetPipeC_s(
    ClObjPipe *pcl_pipe,
    s_xyz *pos);

/*---------------------------------------------------------------------------
 *
 * Swordの４点をセット
 *
 *-------------------------------------------------------------------------*/
extern void CollisionCheck_Uty_setSword4Pos(
    ClObjSwrd *pclobj_swrd,
    xyz_t *pnew_root,
    xyz_t *pnew_top,
    xyz_t *pprev_root,
    xyz_t *pprev_top);

/*--------------------------------------------------------------------------
 *
 * Triangle のあるインデックスの三角形の三点を設定。
 *
 *--------------------------------------------------------------------------*/
extern void CollisionCheck_Uty_setTrisPos(
    ClObjTris *pclobj_tris,
    int tri_index,
    xyz_t *ppos0,
    xyz_t *ppos1,
    xyz_t *ppos2);

/*---------------------------------------------------------------------------
 *
 * JntSph用
 * Si2_draw用
 *
 * JntSphのローカルデータからグローバルデータを設定
 * sph_indexは計算処理で使われている関節のインデックスで、確か、+1
 * 毎回検索するので処理注意。
 *
 *---------------------------------------------------------------------------*/
extern void CollisionCheck_Uty_convJntSphL2G(
    int jyoint_no,
    ClObjJntSph *pclobj_jntsph);

/*==========================================================================
 *
 * 旧処理関数
 *
 *=========================================================================*/
#if 0
/*--------------------------------------------------------------------------
 *
 * COLLISION_TRIANGLE_Sコンストラクト
 *
 *-------------------------------------------------------------------------*/
extern void COLLISION_TRIANGLE_S_ct(
    COLLISION_TRIANGLE_S *tri,
    xyz_t *pos1, xyz_t *pos2, xyz_t *pos3);
#endif
#if 0
/*-----------------------------------------------------------------------
 *
 * 接触補正
 * ダミー
 *
 *-----------------------------------------------------------------------*/
extern void Actor_CollisionCheck(
    Actor *this,
    Game *game);
#endif
/* 削除 */
#define Actor_CollisionCheck(x, y) 

#if 0
/*----------------------------------------------------------------------------
 *
 * 剣による攻撃処理
 * ４点でできる領域で判定
 *
 *---------------------------------------------------------------------------*/
extern ATTACK_RESULT_E Actor_sword_attack_proc(
    Actor *this, /* 攻撃するアクター */
    Game *game, 
    xyz_t *pold_top, xyz_t *pold_root, /* 判定する剣の古いほうの位置 */
    xyz_t *pnew_top, xyz_t *pnew_root); /* 判定する剣の新しい位置 */
#endif
/*--------------------------------------------------------------------------
 *
 * 暫定処理:ダメージタイプセット
 * 剣による攻撃処理
 * ４点でできる領域で判定
 *
 *---------------------------------------------------------------------------*/
extern ATTACK_RESULT_E Actor_sword_attack_proc_type(
    Actor *this, /* 攻撃するアクター */
    Game *game, 
    xyz_t *pold_top, xyz_t *pold_root, /* 判定する剣の古いほうの位置 */
    xyz_t *pnew_top, xyz_t *pnew_root, /* 判定する剣の新しい位置 */
    CL_AT_LBL type); /* 攻撃タイプラベル */
#if 0
/*------------------------------------------------------------------------
 *
 * SwordとShieldの当たり処理
 *
 *-----------------------------------------------------------------------*/
extern int CollisionCheckSwordVsShieldCrossCheck(
    Game *game,
    COLLISION_TRIANGLE_S *sw_tri1, /* 剣の四角形領域 */
    COLLISION_TRIANGLE_S *sw_tri2,
    COLLISION_TRIANGLE_S *sh_tri_tbl, int sh_tri_num); /* 三角形個数 */
#endif
/*---------------------------------------------------------------------------
 *
 * 火花セット
 *
 *-------------------------------------------------------------------------*/
extern void CollisionCheckSetSpark(Game *game, xyz_t *pset_pos);

/*---------------------------------------------------------------------------
 *
 * 閃光セット
 *
 *-------------------------------------------------------------------------*/
extern void CollisionCheckSetSparkFlash(Game *game,xyz_t *pset_pos);

/*--------------------------------------------------------------------------
 *
 * 閃光セット(音無）
 *
 *------------------------------------------------------------------------*/
extern void CollisionCheckSetSparkFlashBlue_NoSE(Game *game, xyz_t *pet_pos);

/*---------------------------------------------------------------------------
 *
 * 閃光セット
 *
 *-------------------------------------------------------------------------*/
extern void CollisionCheckSetSparkFlashBlue(Game *game, xyz_t *pset_pos);

/*---------------------------------------------------------------------------
 *
 * 木用 金属パーティクル＆ぼこっ！
 *
 *-------------------------------------------------------------------------*/
extern void CollisionCheckSetWoodParticle(
    Game *game, xyz_t *pset_pos, xyz_t *camera_pos);

/*---------------------------------------------------------------------------
 *
 * 閃光セット(SEカメラ位置参照版)
 *
 *-------------------------------------------------------------------------*/
extern void CollisionCheckSetSparkFlashBlue_SeCamPos(
    Game *game,
    xyz_t *pset_pos,
    xyz_t *cam_pos);

/*--------------------------------------------------------------------------
 *
 * デバッグモード
 * コリジョンデータを表示する
 * AREG(15)がゼロ以外の時のみ動作
 *
 *------------------------------------------------------------------------*/
extern void CollisionCheck_DebugDispATACOC(
    Game *game,
    CollisionCheck *pclch);

/*--------------------------------------------------------------------------
 *
 * 円筒vs線分(Version2.0) collision を使っていたところをstatusに変更
 * まじめにチェック
 * 返り値:交点個数─＞３:ラインを含む
 *
 *-------------------------------------------------------------------------*/
extern int CollisionCheckPipeVsLine2( 
    float r, float h, float offset, xyz_t *ppos, /* 円筒情報 */
    xyz_t *plpos1, xyz_t *plpos2, /* ライン情報 */
    xyz_t *pcross1, xyz_t *pcross2); /* 交点（pcross1優先) */

#ifdef ROM_D
/*---------------------------------------------------------------------------
 *
 * コリジョンデバッグ関数
 * 三角形表示
 *
 *--------------------------------------------------------------------------*/
extern void CollisionCheckUtyDispTriangleCol(
    Graph *graph,
    xyz_t *pp0, xyz_t *pp1, xyz_t *pp2,
    unsigned char r, unsigned char g,  unsigned char b);
#endif

/*===========================================================================
 *
 *  プレイヤー剣攻撃 -> AP 変換
 *
 *=========================================================================*/
extern unsigned char GetSwordAP(unsigned long at_type);


#ifdef _LANGUAGE_C_PLUS_PLUS
} /* extern "C" */
#endif

#endif

/*** z_collision_check.h end ***/

