音乐类的游戏第一次分析,随便找了个看看,这类游戏最关键的地方就是对于按键的判断。
具体可分为:miss , great , good , cool , perfect
找到这个判断的函数直接可以修改命中的结果
老规矩,给出函数原型,这里不提供函数地址
Type
FCheckHit = procedure (idx:Integer;P:Cardinal;def1:Single;def2:Cardinal);stdcall;
idx为判断的结果,def1的值是按键的时间与音乐时间轴的命中时间的差,最后就是进入这个函数进行分数的处理
根据调试结果可以确定:
perfect = 0
miss有2种,无按键未命中 = 5 ,错过命中时间 = 6
这样就显而易见,把Miss改成Perfect只要HOOK了改idx即可,下面就给出处理的例程
Function CheckMode(idx:Integer):Bool;Stdcall;
begin
case GetMode() of
0:begin//豆豆模式 *
Result:=idx <> 5;
end;
1:Result:=True; //炫舞模式 *
2:Result:=True; //欢乐斗模式 *
3:Result:=True; //练习模式 *
4:Result:=True; //传统模式 *
5:Result:=True; //太鼓模式 *
6:Result:=True; //动感模式 ???
7:Result:=True; //节奏模式 *
8:Result:=True; //舞会模式 *
9:Result:=True; //约会模式 *
else
Result:=False; //未知模式
end;
end;
Procedure MyCheckHit(idx:Integer;P:Cardinal;def1:Single;def2:Cardinal);Stdcall;
begin
if CheckMode(idx) then //这里要确定模式
pOldCheckHit(0,P,Def1,Def2)
else
pOldCheckHit(idx,P,Def1,Def2);
end;
以上豆豆模式的Miss=5时候不能直接改,以及动感模式需要另外的处理,大家自己去研究吧