FC2ブログ
--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--:-- | スポンサー広告  TOP

2013/02/04

cDe2013/02/04

2013/02/04-1
連番コメントのコードが出てなかったので修正
一番最後のコードがタイトル1+7個の場合うまく変換できてなかったので修正
PAPARX01フラグの読込に仮対応

いちおう読込もねたで追加、CDEでつくったフラグだとどっかで取りこぼしが発生するのかCDE読込パーサーで最後のフラグがうまく反映できないことがあるkど。
ARMAX2で保存した奴はちゃんとよめるっぽい。

追記;連続コメントのとこがすっぽり抜けてたのが原因だた、これで入出力対応かね。
##PAPARX01フラグまとめ
・TOOLBATTERY版とARMAX2版は1BYTEダミーの違いがあり互換性がない(CDE,読込TOOL→保存ARMAX2にするしかない、そのままTOOLのDB MAX2にこぴってもフラグなしになる)
・ARMAXゲームがソートされるが、フラグはソートされないのでソートをブロックフラグがずれる
・隠しファイル/コードON OFF/フォルダ開閉 1コードブロック内の数コード数8BITごとにくぎられる

//処理が抜けてた、これは未変換CWC対策みたく0xCF000~のダミーはいらないのでださないようにしといた
_C0 ARCOMMENT
_M 0xCF000000 0x000000002
_C0 COMMENT2nd
_C0 COMMENT3rd


//ARBIN保存修正
If arcmt > 0 Then
arcmt -= 1

z = 0
k = l >> 2
If n.Nodes.Count <> cend Then
nextcode = BitConverter.GetBytes(k)
Array.ConstrainedCopy(nextcode, 0, bs, i + 3, 1)
End If
i += l


↓DB_LOAD ARBIN修正くそーす↓

Dim fsize As Long = file.Length
Dim size As Integer = BitConverter.ToInt32(bs, 16)
Dim paplen2 As Integer = BitConverter.ToInt32(bs, 24)
Dim z As UInteger = 0
Dim PAPARX_OK As Boolean = False
Dim arflagct As Integer = 0
Dim arbitshifter As Integer = 0
Dim psparx As Integer = 0
Dim paplen As Integer = 0
Dim arblockct As Integer = 0

counts(0) = datellen \ 32

If MERGE.ARMAX2.Checked Then
arbitshifter = 1
End If

If MERGE.PAPARX01TEST.Checked = True AndAlso size + (paplen2 >> 1) * 3 + 44 = fsize Then

psparx = size + 28
paplen = BitConverter.ToInt32(bs, psparx + 12)

psparx += 16
z = datel_hash(bs, psparx, paplen)
psparx += paplen
z = z + datel_hash(bs, psparx, paplen)
psparx += paplen
z = z + datel_hash(bs, psparx, paplen)
z = CUInt(z And &HFFFFFFFF)
Dim paparxs As String = z.ToString("X8")

If z = BitConverter.ToUInt32(bs, 20) AndAlso paplen * 2 = BitConverter.ToUInt32(bs, 24) Then
PAPARX_OK = True
psparx -= paplen

ElseIf paplen * 2 <> BitConverter.ToUInt32(bs, 24) Then
MessageBox.Show("PAPARX各ブロックの長さがヘッダ情報と一致しません,0x" & paplen.ToString("X"), "長さ不一致")
Else
MessageBox.Show(paparxs & ",ヘッダのPAPARXHASH(0x14)と実際のDATEL計算式PAPARX3ブロックハッシュ合計値が一致しません.PAPARX各ブロックの長さ=0x" & paplen.ToString("X"), "ハッシュ不一致")
End If
End If

Try

While i < datellen
blocklen = (CInt(bs(i)) + (CInt(bs(i + 1)) << 8)) << 2
If blocklen = 0 Then
blocklen = datellen - i
End If
While k < blocklen
If parsemode = False Then

If arbitshifter <> 0 Then
arflagct += 1
End If
arbitshifter = 1

Array.ConstrainedCopy(bs, i + 7, id, 0, 10)
str = Encoding.GetEncoding(932).GetString(id)
str = str.PadRight(10, " "c)
gnode = New TreeNode(str)
With gnode
.Name = Nothing
.Tag = str
.ImageIndex = 1
End With
m.codetree.Nodes(0).Nodes.Add(gnode)
k = CInt(bs(i + 4)) - 18
Array.Resize(gname, k)
Array.ConstrainedCopy(bs, i + 18, gname, 0, k)
str = Encoding.GetEncoding(932).GetString(gname)
str = str.Replace(vbNullChar, "")
gnode.Text = str
gnode.Name = str
k = CInt(bs(i + 4))
arblockct = CInt(bs(i + 5)) + CInt(bs(i + 6)) << 8
If arblockct = 0 Then
Exit While
End If
parsemode = True


ElseIf parsemode = True Then
codeline = CInt(bs(i + k))
l = CInt(bs(i + k + 1)) - 1
Array.Resize(cname, l)
Array.ConstrainedCopy(bs, i + k + 4, cname, 0, l)
str = Encoding.GetEncoding(932).GetString(cname)
cnode = New TreeNode(str.Trim)
cnode.Name = str.Trim
cnode.ImageIndex = 2
gnode.Nodes.Add(cnode)
sb.Clear()
If PAPARX_OK = True Then

If (bs(psparx + arflagct) And (1 << arbitshifter)) = 0 Then
sb.Append("3")
Else
sb.Append("2")
End If
arbitshifter += 1
If arbitshifter = 8 Then
arflagct += 1
arbitshifter = 0
End If

Else
sb.Append("2")
End If
sb.Append(vbCrLf)
l = CInt(bs(i + k + 2)) << 2
While codeline > 0
Array.ConstrainedCopy(bs, i + k + l, code, 0, 4)
str = Convert.ToString(BitConverter.ToInt32(code, 0), 16)
str = str.ToUpper.PadLeft(8, "0"c)
sb.Append("0x")
sb.Append(str)
sb.Append(" 0x")
Array.ConstrainedCopy(bs, i + k + l + 4, code, 0, 4)
str = Convert.ToString(BitConverter.ToInt32(code, 0), 16)
str = str.ToUpper.PadLeft(8, "0"c)
sb.Append(str)
sb.Append(vbCrLf)
l += 8
codeline -= 1
End While
cnode.Tag = sb.ToString
nextcode = CInt(bs(i + k + 3)) << 2
k += nextcode
counts(1) += 1
If nextcode = 0 Then
Exit While
End If
End If
End While
i += blocklen
k = 0
parsemode = False

If counts(1) = counts(0) Then

' Update the progressbar every 20 repetitions otherwise the program
' will slow to a crawl from the constant re-draw of the progress bar
percent = (i * 100) / datellen
m.progbar.Value = Convert.ToInt32(percent)
m.progbar.PerformStep()
Application.DoEvents()
counts(1) = 0
End If

End While

Catch ex As Exception

MessageBox.Show(ex.Message)

End Try

スポンサーサイト

01:27 | CDECOMMENT(0)TRACKBACK(0)  TOP

コメント

コメントの投稿



秘密にする

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。