FC2ブログ
2012/11/20

CMF2012/11/20


2012/11/20
CF.DATのIDシークを追加
_Eヘッダ出力時CFIDを出すように変更
TXTDBの改行コードをCRLFに変更
PSPE1000対策に起動ボタンをSELECT+DOWNに変更

なんかやたらかかったがいちおうDB最後のやつでもよめるようにんったのでうp。
いじっててくぢたkどこれだと64KB周辺ちょうどに_S_Gとかあるととばし発生するか。

//起動ボタン.conf.c
extern void conf_load()
{
//memset(&config, 0, sizeof(config));
config.skey = PSP_CTRL_SELECT || PSP_CTRL_DOWN;//PSP_CTRL_NOTE;
config.ssskey = PSP_CTRL_VOLDOWN + PSP_CTRL_SELECT;

//保存処理,mem.c
mips_memcpy(fn,ui_get_gamename(),10);
fn[10]=0;
sprintf(s,"_S %s\r\n",fn);
sceIoWrite(fd, s, strlen(s));
mips_memcpy(fn,fn+12,64);
fn[64]=0;
sprintf(s,"_G %s\r\n",fn);
sceIoWrite(fd, s, strlen(s));
if(enc){
sceid2cfid(fn,ui_get_gamename());
sprintf(s,"_E 0x%s 0x00000020\r\n",fn);
mips_memcpy(s+16,ui_get_gamename()+5,5);
sceIoWrite(fd, s, strlen(s));
}


//CFパーサーKAI,convet_cwc.c
void ascii2wide(char *codename,char *ascii){

int k=0,j=0;
for(k=0;k<26;k+=2,j++){
codename[k]=0;
codename[k+1]=ascii[j];
}
codename[26]=0;

return ;
}

//_E出力にいるので旧版
void sceid2cfid(char *codename,char *gameid){

char buf[1];
int k=0,j=0;
for(;k<8;k++){
if(k&1){
sprintf(buf,"%1X",gameid[j]&0xF);
j++;
}
else{
sprintf(buf,"%1X",gameid[j]>>4);
}
codename[k]=buf[0];
}
codename[8]=0;

return;
}

int read_sect_cf(int cur, PspFile *pf)
{
int readsize;
sceIoLseek32(pf->fd, cur, PSP_SEEK_SET);
readsize = sceIoRead(pf->fd, pf->buf, READDB_SECT);
//ファイル最終
if(readsize if(readsize>0){
//O埋め
*((u16 *)(&pf->buf[readsize]))=0;
}
return 0;
}

//バッファ半分から検索開始
int i=DB_SECT;
while(1){
//G0x20存在、リードサイズを超え/みつかったら終了
if(*((unsigned short*)(&pf->buf[i]))==0x0A0A){
if(*((unsigned short*)(&pf->buf[i+2]))==0x2047){
break;
}
}
else if(i>readsize){
return -1;
}

i+=2;
}

//最後を閉じる
*((u16 *)(&pf->buf[i+2]))=0;
return (cur+i+2);
}

int codefreak_utf16be_seek(char *p,char *cmp){
int i=0,game=0,temp=0;
while(i
temp=p+i;

//BIG_ENDIAN!!、なぜか0x0a0a判定を追加すると動かなくなる
switch(*((unsigned short*)(temp))){
case 0x2047://G+x20
game=temp;
break;
case 0x204D://M+0x20
temp+=2;
if(memcmp(temp,cmp,26)==0){
return game;
}
break;
}
i+=2;
}

return 0;

}

int read_cf(char *filename, char *gameid)
{
int pos=0;
char *p;
char cw_buf[100];
u32 address=0,val=0;
t_mem_table t;
PspFile pf;

if(openfile(filename, &pf)==0) return 1;

if(gameid!=NULL){
char codename[27];
int total = 0;
sceid2cfid(cw_buf,gameid);
mips_memcpy(cw_buf+8,gameid+5,5);
ascii2wide(codename,cw_buf);
///*
do{
total=pos;
pos=read_sect_cf(pos,&pf);
p=codefreak_utf16be_seek(pf.buf,codename);
if(p){break;}
}while(pos);
//*/

/*
int fd = sceIoOpen("ms0:/debug.txt", PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);
sceIoWrite(fd, codename,0x20);
sceIoWrite(fd, pf.buf,0x80);
if(p==0){
sceIoWrite(fd,"owata",4);
}
sceIoClose(fd);
*/
}
else{
if(read_sect_cf(pos,&pf)==-1){
closefile(&pf);
return 1;
}
p=pf.buf;
}

if(p==0) {
closefile(&pf);
return 1;
}


t_encodepack pack;
if(encode_init(&pack) == 0){
encode_utf16_conv(p, NULL,&pack,MAX_READ_BUFFER);
}
else{
encode_free(&pack);
closefile(&pf);
return 1;
}
encode_free(&pack);

//SJISに変換されているか
//int fd;
//fd = sceIoOpen("ms0:/db1.txt", PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);
//sceIoWrite(fd, p,READDB_SECT);
//sceIoClose(fd);
//fd = sceIoOpen("ms0:/db2.txt", PSP_O_WRONLY | PSP_O_CREAT | PSP_O_TRUNC, 0777);
//sprintf(cw_buf,"%s %X %X",codename,&p[0],&pf.buf[0]);
//sceIoWrite(fd, cw_buf,32);
//sceIoClose(fd);

p=read_line(p,cw_buf);
mips_memcpy(ui_get_gamename()+12,cw_buf+2,0x40);

char enc=0;
int repeat=0;
int lock =0;
char namebuf[31];
char cwc[9];
char *namep;
char nullcode=0;

while(1){
p=read_line(p,cw_buf);

if(cw_buf[0]=='_'){
if(cw_buf[1]=='E'){
mips_memcpy(cwc,cw_buf+10,8);
val=strtoul(cwc,NULL,16);
if((val & 0x800)==0){
enc=!enc;
}
}
else if(cw_buf[1]=='C'){
if(nullcode==1) {
t.addr=0x8800000;
t.value=0;
t.type=0;
t.lock=0;
if(mem_table_add(&t)<0) goto READOUT;
}
repeat=0;
namep = namebuf;
mips_memcpy(namebuf,cw_buf+2,30);
lock = 0;
namep = read_name(namep, t.name, 10);
mips_memcpy(t.name,namebuf,30);
t.name[30]=0;
t.name[31]=0;
nullcode=1;
}
else if(cw_buf[1]=='L'){
nullcode=0;
if(repeat<5){
if(repeat==0) {
}
else{
t.name[0] = '+';
namep = read_name(namep, t.name+1, 9);
}
repeat++;
}
else{
t.name[0]='+';
t.name[1]=0;
}
mips_memcpy(cwc,cw_buf+2,8);
address=strtoul(cwc,NULL,16);
if(enc){
address ^=0xd6f73bee;
}
address +=0x08800000;
mips_memcpy(cwc,cw_buf+10,8);
val=strtoul(cwc,NULL,16);
t.addr=address;
t.value=val;
t.type=0;
t.lock=lock;
if(mem_table_add(&t)<0) goto READOUT;
}
else if(cw_buf[1]=='G'){
break;
}
}
if(p==0) break;
if(p[0]=='_' && p[1]=='G') break;
}

READOUT:
closefile(&pf);
cfencription=enc;

return 0;
}

05:15 | CheatMasterCOMMENT(0)TRACKBACK(0)  TOP

2012/11/11

cmf2012/11/11



2012/11/11
CODEFREAKとりえあえずコード入力対応版を追加
十字キー←押しながら○/xでCF暗号入力
十字キー←押しながらSTARTでCF暗号新規入力
コード詳細画面でL+R+↑を押すとアドレス表示CF暗号モード/CWCモード切替
CF暗号モード時は暗号用新ヘッダが追加されCMF保存される
//TXT版の暗号モード
_S
_G
_E ←ゲーム内の全コード用暗号フラグ
_C0
_L 0x

とりあえず入力だけ対応してみた。全コードフラグじゃなくて、CWC生と暗号を併用したいなら,あたらしく_F 0xへっだとかをふやすひつようがあるけど。しかしひょうじまわりがややこしくなりそうだな、色わけしたり。
//暗号+CWCハイブリッドにしたい場合、したみたく新コード用ヘッダが必要
_C0
_F 0x
_C0
_L 0x

22:10 | CheatMasterCOMMENT(0)TRACKBACK(0)  TOP

2012/10/31

CMFSEVER DEAD??

CMFKORO
なんか公式サイト接続できなくなった、アイマスの修正はこりゃ望み薄いか。
あとFREECHEATも旧型だとAT3すれっどのとこでなんか死ぬんだよな。あと旧型PSPはUIのレイアウトを節約にすると、サーチとコードの保存はできるっぽい、ほかのメニューがしんでるけど。薄型だとちゃんと動くけど
//CMFUSION死机、IDOLMASTERSF MENUPOPUP→EXIT ADDRESS ERROR

//FREECHEAT死机(ONLY PSPFAT),IDOLMASTERSF USE SCEIODREAD FREEZE??

16:33 | CheatMasterCOMMENT(0)TRACKBACK(0)  TOP

2012/10/29

cmfCF化ねた


ねたで対応するとするといちばん楽なのがこっちか、同時に使用できないってコード実行間隔のやっぱちえんとかでうまくうごかなるからk。バイナリというかUTF16BEてきすとぱーさーはいるんだろうか。
CF暗号のみだけのやつうp

CF本家と同じCWC生と暗号同時使用不可ばーじょん
//convert_cwの241行
if(CFENC){//なんかのCF暗号フラグがあれば復元
address=(strtoul(cw_buf+2,&tempptr,16)^0xd6f73bee)}
addrees+=0x8800000;

//rayout.c あとは表示だけ暗号表示にする,コード自体中身はなまCWC
static void layout_table_printname(p_mem_table table, int idx)
{
.....
sprintf((char *)&g_text_array[idx][0], "%-10s 0x%08X 0x%08X %-4s%4s", sname, (table[idx].addr - 0x08800000)^0xD6F73BEE,
...

static void layout_table()
{
~~~~
sprintf((char *)&text_array[i][0], "%-11s0x%08X 0x%08X %-4s%4s", s, (table[i].addr - 0x08800000)^0xD6F73BEE,
...

00:48 | CheatMasterCOMMENT(0)TRACKBACK(0)  TOP

2012/10/28

CMFもd2012/10/28


2012/10/28
DBの_S区切りが余計に読まれることがあったので修正

ただのバグ修正。

20:23 | CheatMasterCOMMENT(0)TRACKBACK(0)  TOP