/*
 * $Id: m_rcp.h,v 1.1 2003/06/06 00:15:12 tong Exp $
 *
 */


#ifndef INCLUDE_M_RCP_H
#define INCLUDE_M_RCP_H

#ifdef _LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif
#if 0
}
#endif

#include "graph.h"		/* GRAPH */
#include "m_play_h.h"		/* GAME_PLAY */
#include "m_types.h"


/*
 *
 *	RCPSetMode_DisplayListに渡すデータインデックス
 *
 */
enum {
    mRCP_POLYGON_LIGHT_FOG_e,
    mRCP_TEXTURE_Z_A_PRIM_EDGE_e,
    mRCP_TEXTURE_Z_LIGHT_FOG_PRIM_e,
    mRCP_TEXTURE_Z_LIGHT_PRIM_e,
    mRCP_RECT_MOJI_e,
    mRCP_FILLRECTANGLE_e,
    mRCP_SOFTSPRITE_PRIM_e,
    mRCP_FILLRECTANGLE_PRIM_e,
    mRCP_SOFTSPRITE_PRIM_XLU_e,
    mRCP_SHADOW_e,
    mRCP_FRIEND_e,
    mRCP_FRIEND_SM_e,
    mRCP_BILLBOARD_PAL_e,
    mRCP_BILLBOARD_PAL_XLU_e,
    mRCP_BILLBOARD_SHADOW_e,
    mRCP_RCP_MODE_SUM
};

/*
 *
 * 拡張フォグ設定
 * 0 <= near <= 998:通常フォグ
 * near==999:もっとも遠いフォグを設定
 * near>1000:フォグなしと同じ効果を得られる
 * near < 0 :常にフォグカラーで表示される(特定の色で染めることができる)
 *
 * gfx_set_fog_nosync 同期命令無し
 */
extern Gfx *
gfx_set_fog_nosync(
    Gfx *gp, 
    unint r, 
    unint g, 
    unint b, 
    unint a, 
    int n, 
    int f
);

/*======================================================================*
 *						
 *	汎用
 *						
 *======================================================================*/
extern Gfx *gfx_rcp_mode_set(Gfx *next_disp, int type);
extern Gfx *rcp_mode_set(Gfx *next_disp, int type);

/*======================================================================*
 *						
 *	フィルレクタングルプリムカラー（ポインタ指定可）		
 *						
 *======================================================================*/
extern Gfx *fill_rectangle_prim_free(Gfx *next_disp); /* もうすぐ消す */

/*======================================================================*
 *									*
 *	フィルレクタングルプリムカラー					*
 *									*
 *======================================================================*/
extern void fill_rectangle_prim(GRAPH *graph);

/*======================================================================*
 *									*
 *	プリミティブ ライト テクスチャ Ｚ				*
 *									*
 *======================================================================*/
extern void texture_z_light_prim(GRAPH *graph);

/*======================================================================*
 *									
 *	プリミティブ ライト テクスチャ Ｚ
 *
 * NEXT_POLYGON_XLU_DISP版 (by Matsutani)
 *									
 *======================================================================*/
extern void texture_z_light_prim_xlu_disp(GRAPH *graph);

/*======================================================================*
 *									*
 *	プリミティブ ライト テクスチャ Ｚ	フォグ			*
 *									*
 *======================================================================*/
extern void _texture_z_light_fog_prim(GRAPH *graph);


/*======================================================================*
 *									*
 *	プリミティブ ライト テクスチャ Ｚ	フォグ（アルファ用）	*
 *									*
 *======================================================================*/
extern void _texture_z_light_fog_prim_xlu(GRAPH *graph);
extern void _texture_z_light_fog_prim_light(GRAPH *graph);

/*======================================================================*
 *									*
 *	プリミティブ ライト テクスチャ Ｚ	フォグ（影用）		*
 *									*
 *======================================================================*/
extern void _texture_z_light_fog_prim_shadow(GRAPH *graph);

/*======================================================================*
 *									*
 *	プリミティブ ライト テクスチャ Ｚ	フォグ（影用）		*
 *									*
 *======================================================================*/
extern void _texture_z_light_fog_prim_shadow2(GRAPH *graph);

/*======================================================================*
 *									*
 *	ＮＰＣ								*
 *									*
 *======================================================================*/
extern void _texture_z_light_fog_prim_npc(GRAPH *graph);

/*======================================================================*
 *									*
 *	ビルボード(森限定パレット専用)					*
 *									*
 *======================================================================*/
extern Gfx *texture_z_light_fog_prim_bb_pal_opa(Gfx *gfx_p);
extern Gfx *texture_z_light_fog_prim_bb_pal_xlu(Gfx *gfx_p);
extern Gfx *texture_z_fog_lod_alpha_shadow(Gfx *gfx_p); /*LOD変化影*/

/*======================================================================*
 *									*
 *	デカルテクスチャ						*
 *									*
 *======================================================================*/
extern void texture_decal(GRAPH *graph);
extern void _texture_decal_shadow(
    GRAPH    *graph
);

/*======================================================================*
 *									*
 *	フィルレクタングル						*
 *									*
 *======================================================================*/
extern void fill_rectangle(GRAPH *graph);

/*======================================================================*
 *									*
 *	テキスト文字                                                    *
 *									*
 *======================================================================*/
extern Gfx *gfx_rect_moji(Gfx *gp);
extern void rect_moji(GRAPH *graph);

/*======================================================================*
 *									*
 *	ライト ポリゴン Ｚ プリミティブ					*
 *									*
 *======================================================================*/
extern void polygon_z_light_prim(GRAPH *graph);

/*======================================================================*
 *									*
 *	ソフトスプライト（プリミティブカラーセット）			*
 *									*
 *======================================================================*/
extern void softsprite_prim(GRAPH *graph);

/*
 * ソフトスプライト新規格
 */
extern Gfx *gfx_softsprite_prim_xlu(Gfx *gp);   /* 半透明プリムカラー */

/*======================================================================*
 *									*
 *	テクスチャ Ｚ CLD_SRF/NEXT_POLY_XLU_DISPを使用			*
 *									*
 *======================================================================*/
extern void texture_z_cld_poly_xlu(GRAPH *graph);

/*======================================================================*
 *									*
 *	テクスチャ Ｚ CLD_SRF/NEXT_POLY_XLU_DISPを使用			*
 * ディザなくしバージョン                                               *
 *									*
 *======================================================================*/
extern void texture_z_cld_poly_xlu_nd(GRAPH *graph);

/*======================================================================*
 *									*
 *	テクスチャスクロール			 			*
 *									*
 *======================================================================*/

/*
 * アニメモデル作成関数
 * テクスチャスクロールの設定
 */
extern Gfx *gfx_tex_scroll2(
    Gfx		**gpp,
    int	tex_x_pos,
    int tex_y_pos,
    int tex_x_size,
    int tex_y_size
);

extern Gfx *
gfx_two_tex_scroll(
    Gfx		**gpp, 
    int tex1_tileno, 
    int	tex1_x_pos, 
    int	tex1_y_pos, 
    int	tex1_x_size, 
    int	tex1_y_size, 
    int tex2_tileno, 
    int	tex2_x_pos, 
    int	tex2_y_pos, 
    int	tex2_x_size, 
    int	tex2_y_size
);

/*
 * アニメモデル作成関数
 * テクスチャスクロールの設定
 */
extern Gfx *gfx_tex_scroll(
    Gfx		**gpp,
    int	tex_x_pos,
    int tex_y_pos
);

/*
 * アニメモデル作成関数
 * テクスチャスクロールの設定
 */
extern Gfx *tex_scroll(
    GRAPH *graph,
    int tex_x_pos,
    int tex_y_pos
);

/*
 * アニメモデル作成関数
 * テクスチャスクロールの設定
 */
extern Gfx *tex_scroll2(
    GRAPH *graph,
    int tex_x_pos,
    int tex_y_pos,
    int tex_x_size,
    int tex_y_size
);

/*
 * アニメモデル作成関数
 * ２枚テクスチャスクロールの設定
 */
extern Gfx *two_tex_scroll(
    GRAPH	*graph,
    int tex1_tileno,
    int tex1_x_pos,
    int tex1_y_pos,
    int tex1_x_size,
    int tex1_y_size,
    int tex2_tileno,
    int tex2_x_pos,
    int tex2_y_pos,
    int tex2_x_size,
    int tex2_y_size
);

/*-----------------------------------------------------------------------
 *
 *	ディスプレイリスト初期設定
 *
 *----------------------------------------------------------------------*/
extern void DisplayList_initialize(
    GRAPH	*this,
    unchar	r,
    unchar	g,
    unchar	b,
    GAME_PLAY	*game_play
);

extern Gfx RSP_RDP_clear_data[];

/*
 * 単純フェードアウト
 */
extern void fade_rgba8888_draw(Gfx **gpp, u32 rgba8888);
extern void fade_color_draw(Gfx **gpp, u32 red, u32 green, u32 blue, u32 alpha);
extern void fade_black_draw(Gfx **gpp, u32 alpha);

extern Gfx *
gfx_gDPFillRectangle1(Gfx *gp, u32 xl, u32 yl, u32 xh, u32 yh);
extern void
gpp_gDPFillRectangle1(Gfx **gpp, u32 xl, u32 yl, u32 xh, u32 yh);
extern Gfx *
gfx_gDPFillRectangleF(Gfx *gp, u32 xl, u32 yl, u32 xh, u32 yh);
extern void
gpp_gDPFillRectangleF(Gfx **gpp, u32 xl, u32 yl, u32 xh, u32 yh);
extern Gfx *
gfx_gSPTextureRectangle1(Gfx *gp, u32 xl, u32 yl, u32 xh, u32 yh, s32 tile, s32 s, s32 t, s32 dsdx, s32 dtdy);
extern Gfx *
gfx_gSPTextureRectangleC(Gfx *gp, u32 xl, u32 yl, u32 xh, u32 yh, s32 tile, s32 s, s32 t);
extern Gfx *
gfx_gSPScisTextureRectangle1(Gfx *gp, s32 xl, s32 yl, s32 xh, s32 yh, s32 tile, s32 s, s32 t, s32 dsdx, s32 dtdy);
extern Gfx *
gfx_gSPScisTextureRectangleC(Gfx *gp, s32 xl, s32 yl, s32 xh, s32 yh, s32 tile, s32 s, s32 t);

#if 0
{
#endif
#ifdef _LANGUAGE_C_PLUS_PLUS
} /* extern "C" */
#endif

#endif

/*** m_rcp.h end ***/
