他人の空似

2010 年 9 月 26 日

妖精大戦争のスコアの内部表現について

Filed under: 未分類 — 中の人 @ 9:58 PM

enum STAGE {
	STG_INIT = 0,	//定義上だけ存在
	STG_A1_1,
	STG_A1_2,
	STG_A1_3,
	STG_A2_2,
	STG_A2_3,
	STG_B1_1,
	STG_B1_2,
	STG_B1_3,
	STG_B2_2,
	STG_B2_3,
	STG_C1_1,
	STG_C1_2,
	STG_C1_3,
	STG_C2_2,
	STG_C2_3,
	STG_EX,
	STG_A1_CLEAR,
	STG_A2_CLEAR,
	STG_B1_CLEAR,
	STG_B2_CLEAR,
	STG_C1_CLEAR,
	STG_C2_CLEAR,
	STG_EX_CLEAR,
};

struct result {
	int score;		// スコアを1/10したもの
	char stage_no;	// ステージID
	char score2;		// スコアの下一桁、なぜここにあるのかは不明
	char name[9];		// 最大8文字、\0終端
	char padding;		// 常に0、おそらくコンパイラにより付加された物
	time_t time;		// 32bit unixtime、ここが0だと時間/ステージ/処理落ち率が---になる
	char unknown[4];	// 常に0
	float slowdown;	// 処理落ち率、0.2はそのまま0.2%と表示される
	char unknown2[4];	// 常に0
};

struct spell_result {
	char name[128];	// 長さ0で????扱い
	int no_damage;	// 銀メダル
	int no_ice;		// 金メダル
	int unknown;		// 不明、到達回数?
	int challenge;	// 銅メダル
	int unknown2;		// 不明
	int unknown3;		// 不明
};

enumやら変数名は適当につけたけど、だいたいこんななはず。
メモリー上の配置は0x0443A5D8、確認してないけどイージーから順に10個ずつ並んでいるんじゃないかな。
スペルの方はルナティックのスコア少し下のほうにあった(正確なアドレスは忘れた)

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress