カテゴリ 重要度 ステータス 解決状況 登録日時 最終更新
グラフィック解決済み修正済み2008-02-07 00:352008-02-15 02:40
 
テスターMr. Do担当者 ソースkonami/thunderx.cpp
バージョン0.79発生バージョン修正バージョン0.116u2
修正コミットプルリク
フラグ旧BugIDthunderx079u1gre
セット thunderx
セット詳細
thunderx - サンダークロス (set 1)
 
概 要P2側で1人プレーすると、得点がP1側に入る。
詳 細While playing a single player game with the 2-player ship (the red ship), your score is criss-crossed. Any ships you shoot down register under the score for 1P, while any bonus capsules you pick up register under 2P. Your entire score should register under 2P.

Follow-up by ShimaPong in 0.116u1: It will be run_collisions (K052591 collision emulation) routine bug.
See run_collisions in drivers/thunderx.c

// set flags
p0[0] = (p0[0] & 0x9f) | 0x10;
p1[0] = (p1[0] & 0x9b) | 0x10;

If collide with an object, set the flags.
p0[0] is for an enemy and p1[0] is player ship or player's bullet.

I have found that bit 2 (0x04) of the value stored into p1[0] is "Player" flag (OFF = 1P/ON = 2P).
And the program checks this bit in p0[0] (NOT p1[0] itself!) then sets score for each players.Therefore it needs to set in this routine.

// set flags
p0[0] = (p0[0] & 0x9f) | (p1[0] & 0x04) | 0x10;
p1[0] = (p1[0] & 0x9b) | 0x10;

It seems to work fine... but incomplete. When 2P has "penetrator" type weapon, like Flame, Tail Laser etc, a point is sometimes added to 1P. If 2P gets these weapons, 0xe5 is set. It's correct. But 0xe1 is stored newly at hit. It's the same flag as 1P.
The cause is the flag setting for p1[0]. 0x9b kills "Player" flag so that it should use 0x9f instead, I think.

// set flags
p0[0] = (p0[0] & 0x9f) | (p1[0] & 0x04) | 0x10;
p1[0] = (p1[0] & 0x9f) | 0x10;

OK, no problem.
再現手順 
追加情報 
 
添付ファイルpng filethunderx079u1gre.png (2008-02-15 02:40)