some city text and exports
This commit is contained in:
BIN
UnRLE/0160_/0160_08_0_8_U
Normal file
BIN
UnRLE/0160_/0160_08_0_8_U
Normal file
Binary file not shown.
@@ -364,11 +364,11 @@
|
||||
[22]
|
||||
[col=yellow]Студент[col=white]
|
||||
Бууу![pause][8] Что за чудеса творятся?!
|
||||
Я видел бабулю, которая бегает 100км\ч.
|
||||
Но это ещё не всё![EOw][col=yellow]Студент[col=white]
|
||||
Я слышал, что где-то есть, который умеет
|
||||
бегать 200км\ч! Мне явно стоит больше
|
||||
тренироваться~ [pause][15]Бууу![EOD]
|
||||
Я видел бабулю, которая бегает на скорости
|
||||
100км\ч. Но это ещё не всё![EOw][col=yellow]Студент[col=white]
|
||||
Я слышал, что где-то есть дед, который умеет
|
||||
бегать со скоростью 200км\ч!
|
||||
Мне явно стоит больше тренироваться~ [pause][15]Бууу![EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]College Student[white]
|
||||
\\ Hooya!05120800 So you've finally exposed
|
||||
|
||||
@@ -54,9 +54,9 @@
|
||||
\\ 061102110311
|
||||
[2]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
По телевизору только и говорят об этом Джокере.
|
||||
По телевизору только и говорят о Джокере.
|
||||
Даже выступление моей любимой группы "Музы"
|
||||
прервали гадалкой.[EOw][col=yellow]Молодая девушка[col=white]
|
||||
прервали выступлением гадалки.[EOw][col=yellow]Молодая девушка[col=white]
|
||||
Убийства - это, конечно, плохо, но настоящее
|
||||
преступление - превращать телевидение вот в
|
||||
это. Надеюсь, скоро всё наладится.[EOD]
|
||||
@@ -71,11 +71,12 @@
|
||||
\\ 061102110311
|
||||
[3]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
講宙会が流行ってるみたいなんだけどお、
|
||||
ちょっと行く気がしないのよねー
|
||||
私、人に説教されるのって好きじゃないし。[EOw][col=yellow]Молодая девушка[col=white]
|
||||
やっぱ生き方にポリシー持ってるっていうの?
|
||||
私って、人とは違うんだよね。[EOD]
|
||||
Кажется, эти семинары сейчас очень популярны,
|
||||
но~ Почему-то я не хочу идти на них.
|
||||
Не люблю, когда мне читают нотации.[EOw][col=yellow]Молодая девушка[col=white]
|
||||
Стоит ли мне вообще ходить на них?
|
||||
Я прекрасно знаю, чего хочу от жизни.
|
||||
И этим отличаюсь от всех вокруг~[EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ I've been having strange dreams. What I'm
|
||||
@@ -87,12 +88,12 @@
|
||||
\\ 061102110311
|
||||
[4]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
なんか最近、変な夢ばっかみんのよね。
|
||||
やってることはあんま変わんないんだけど、
|
||||
夢の中で私のイメージが違うのよ。[EOw][col=yellow]Молодая девушка[col=white]
|
||||
ありがちな女で無垚任な事ばっかり
|
||||
言ってるんだけど、なんかやな感じよねー
|
||||
夢とはいえ自分なんだし·[EOD]
|
||||
Почему-то в последнее время вижу только
|
||||
странные сны. Хоть я и делаю там то же, что и
|
||||
раньше, но изменилось моё восприятие себя.[EOw][col=yellow]Молодая девушка[col=white]
|
||||
Несу там какую-то обычную женскую чушь~
|
||||
Такое неприятное чувство~
|
||||
Хоть это и сон, но ведь это всё-таки я~[EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ NWO or WNO or whatever they are, what the
|
||||
@@ -104,12 +105,12 @@
|
||||
\\ 061102110311
|
||||
[5]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
しんせいじゅく、だか、じんせいらく、
|
||||
だか知んないけど、いったい何考えてる訳?
|
||||
穢れだとか、再生だとか言っちゃってさ。[EOw][col=yellow]Молодая девушка[col=white]
|
||||
価值観なんて人それぞれなんだし、
|
||||
世の中、今のままでじゅーぶんイケてるじゃん。
|
||||
あとは黒気さえ良くなればいいと思うな。[EOD]
|
||||
О чём эти из МироНовопорядка или
|
||||
НовоМиропорядка вообще говорят?
|
||||
Какие-то Кегарэ, воскрешения и прочая чушь.[EOw][col=yellow]Молодая девушка[col=white]
|
||||
У всех свои ценности и мир прекрасен там,
|
||||
какой он есть. Убрать бы из него всего эти
|
||||
непонятные штуки~[EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ Big earthquake, huh?
|
||||
@@ -120,11 +121,11 @@
|
||||
\\ 061102110311
|
||||
[6]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
さっきの地震、マジ、デカかったよね·
|
||||
やっぱヤバイのかな? どう思う?[EOw][col=yellow]Молодая девушка[col=white]
|
||||
念のため貯金おろしといたけどー·
|
||||
街がぶっ飛んだらお金、意味ないよねー
|
||||
誰か何とかしてくんないかなぁ。[EOD]
|
||||
Землетрясение?
|
||||
Думаете это плохо?[EOw][col=yellow]Молодая девушка[col=white]
|
||||
Я сняла все свои сбережения~ Хотя, если с
|
||||
городом что-то случится, то они будут не особо
|
||||
нужны. Надеюсь, кто-нибудь нам поможет.[EOD][EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ Ruins were found in a subway construction
|
||||
@@ -135,12 +136,11 @@
|
||||
\\ They just do whatever they want.061102110311
|
||||
[7]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
鳴海区の地下鉄工事現場で、
|
||||
例の遺跡、見つかったって。
|
||||
ほら、テレビでやってたやつ。[EOw][col=yellow]Молодая девушка[col=white]
|
||||
え? 見てない?
|
||||
新世墊が掘ってたらしいよ。
|
||||
もうやりたい放題だよね。[EOD]
|
||||
По ТВ сказали, что на месте постройки метро в
|
||||
метро в Наруми раскопали какие-то руины.[EOw][col=yellow]Молодая девушка[col=white]
|
||||
Что? Вы не видели? Сейчас их раскапывает
|
||||
Новый Миропорядок.
|
||||
Пусть делают, что хотят.[EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ The city is flying in the sky and it feels
|
||||
@@ -151,12 +151,11 @@
|
||||
\\ 061102110311
|
||||
[8]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
街が空飛んでるのに、当たり前な気がする。
|
||||
頭の中にさ、なんかイメージがあるのよ。
|
||||
これ、デジャ・ヴュっていうやつ?[EOw][col=yellow]Молодая девушка[col=white]
|
||||
今にもっと悪い事が起こるよ。
|
||||
きっと、テレビでやってたやつも全部、
|
||||
本当になっちゃうよ。[EOD]
|
||||
Знаете, почему-то летающий в воздухе город не
|
||||
кажется чем-то~ необычным.
|
||||
Такое ощущение, что я уже такое переживала.[EOw][col=yellow]Молодая девушка[col=white]
|
||||
И я чувствую, что скоро сбудутся те ужасные
|
||||
вещи, о которых говорят на ТВ.[EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ It's all over anyway, right?
|
||||
@@ -165,9 +164,9 @@
|
||||
\\ 061102110311
|
||||
[9]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
どうせもうだめなんでしょ?
|
||||
だったら一気に楽にしてよって感じ。
|
||||
私、もう疲れちゃった。[EOD]
|
||||
Что-либо делать уже бесполезно, да?
|
||||
Пусть это всё закончится~
|
||||
Я так устала~[EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ I heard the inside of Club Zodiac is a big
|
||||
@@ -175,9 +174,9 @@
|
||||
\\ 061102110311
|
||||
[10]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
クラブ・ゾディアックの中が迷路だって
|
||||
聞いたンだけどー
|
||||
私、步き回るのって婔なのよねー[EOD]
|
||||
Я слышала, что в клубе Зодиак есть какой-то
|
||||
лабиринт.
|
||||
Если честно, я ненавижу блуждать без цели.[EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ Sumaru Castle has reappeared.
|
||||
@@ -189,11 +188,11 @@
|
||||
\\ 061102110311
|
||||
[11]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
珠間瑠城が復活したじゃん。
|
||||
あの城ってかなりオカルト入ってるらしいよ。
|
||||
いろいろ聞いたもん。[EOw][col=yellow]Молодая девушка[col=white]
|
||||
澄丸 清忠とか天野 舞姫とか。
|
||||
あんまり近づかないほうがいいよね。[EOD]
|
||||
Снова появился Замок Сумару.
|
||||
Я слышала, что там появляются всякие
|
||||
древние оккультные штуки~[EOw][col=yellow]Молодая девушка[col=white]
|
||||
~Типа Киётады Сумару и Майхиме Амано.
|
||||
Лучше держаться от него подальше.[EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ That haunted... I mean Sumaru Castle,
|
||||
@@ -206,12 +205,14 @@
|
||||
\\ 061102110311
|
||||
[12]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
例のオカルト城·じゃなくて珠間瑠城、
|
||||
実はラブ口マンスの舞台だったんだね。[EOw][col=yellow]Молодая девушка[col=white]
|
||||
澄丸 清忠とかっていう城主をやっつけたのは、
|
||||
辰之進と天野 舞姫って
|
||||
カップルなんだって。[EOw][col=yellow]Молодая девушка[col=white]
|
||||
ハッピーエンドだったらもっとよかったのにね。[EOD]
|
||||
Опять он~ Я про Замок Сумару.
|
||||
Слышала, что однажды там даже была любовная
|
||||
история.[EOw][col=yellow]Молодая девушка[col=white]
|
||||
Говорят, что те, кто победил владельца этого
|
||||
замка, Киётаду Сумару, были счастливая пара
|
||||
Тацуносин [surname] и Майхиме Амано.[EOw][col=yellow]Молодая девушка[col=white]
|
||||
Было бы здорово, если и сейчас был бы такой же
|
||||
хэппи-энд~[EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ Sumaru Castle has reappeared.
|
||||
@@ -223,11 +224,11 @@
|
||||
\\ 061102110311
|
||||
[13]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
珠間瑠城が復活したじゃん。
|
||||
あの城ってかなりオカルト入ってるらしいよ。
|
||||
いろいろ聞いたもん。[EOw][col=yellow]Молодая девушка[col=white]
|
||||
澄丸 清忠とか 辰之進とか。
|
||||
あんまり近づかないほうがいいよね。[EOD]
|
||||
Снова появился Замок Сумару.
|
||||
Я слышала, что там появляются всякие
|
||||
древние оккультные штуки~[EOw][col=yellow]Молодая девушка[col=white]
|
||||
~Типа Киётады Сумару и Тацуносина [surname].
|
||||
Лучше держаться от него подальше.[EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ That haunted... I mean Sumaru Castle,
|
||||
@@ -240,12 +241,14 @@
|
||||
\\ 061102110311
|
||||
[14]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
例のオカルト城·じゃなくて珠間瑠城、
|
||||
実はラブ口マンスの舞台だったんだね。[EOw][col=yellow]Молодая девушка[col=white]
|
||||
澄丸 清忠とかっていう城主をやっつけたのは、
|
||||
天野 舞姫と 辰之進って
|
||||
カップルなんだって。[EOw][col=yellow]Молодая девушка[col=white]
|
||||
ハッピーエンドだったらもっとよかったのにね。[EOD]
|
||||
Опять он~ Я про Замок Сумару.
|
||||
Слышала, что однажды там даже была любовная
|
||||
история.[EOw][col=yellow]Молодая девушка[col=white]
|
||||
Говорят, что те, кто победил владельца этого
|
||||
замка, Киётаду Сумару, были счастливая пара
|
||||
Тацуносин [surname] и Майхиме Амано.[EOw][col=yellow]Молодая девушка[col=white]
|
||||
Было бы здорово, если и сейчас был бы такой же
|
||||
хэппи-энд~[EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ They say the flowers in Aoba Park talk.
|
||||
@@ -254,9 +257,9 @@
|
||||
\\ 061102110311
|
||||
[15]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
書葉公園の花って、話すんだって。
|
||||
オウムみたいでいいよねー
|
||||
今度、取って帚ろうかな。[EOD]
|
||||
Говорят, что цветы в парке Аоба умеют говорить.
|
||||
Прямо как попугаи.
|
||||
Пожалуй, схожу туда за цветочками.[EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ I've heard that an experienced blacksmith
|
||||
@@ -268,11 +271,11 @@
|
||||
\\ 061102110311
|
||||
[16]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
アサノタクミって武器職人が
|
||||
いるらしいんだけどさぁ、なんか凄腕らしいよ。[EOw][col=yellow]Молодая девушка[col=white]
|
||||
伝説の武器職人なんていわれてるみたいだもん。
|
||||
日本刀とかつくるんでしょ?
|
||||
あれって髙いんだよねー[EOD]
|
||||
Я слышала, что у кузнеца Такуми Асано золотые
|
||||
руки.[EOw][col=yellow]Молодая девушка[col=white]
|
||||
Его называют Легендарным Кузнецом.
|
||||
А он может сделать катану?
|
||||
Должно быть, у него очень высокие цены~[EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ Ku, Kudan is that...
|
||||
@@ -280,8 +283,8 @@
|
||||
\\ 061102110311
|
||||
[17]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
く、くだんってさ、アレよね·
|
||||
ダメ! [pause][15]これ以上はとても言えないわ。[EOD]
|
||||
Э~ Это был Кудан~
|
||||
Нет! [pause][15]Я не смогу больше ничего говорить.[EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ Hey, hey, 05120F00is it true that the Haunted
|
||||
@@ -291,11 +294,10 @@
|
||||
\\ 061102110311
|
||||
[18]
|
||||
[col=yellow]Молодая девушка[col=white]
|
||||
ね、ね、[pause][15]ムー大陸に呪いのタクシーが
|
||||
現れたって木ントなのかな?[EOw][col=yellow]Молодая девушка[col=white]
|
||||
あたしさー、ちょっと前にあの辺りでタクシー
|
||||
乗ってたんだよ。
|
||||
危機一髪じゃん。[EOD]
|
||||
Эй, эй, это правда, что перед Континентом Му
|
||||
видели Проклятое Такси?[EOw][col=yellow]Молодая девушка[col=white]
|
||||
Я как раз недавно поймала там машину.
|
||||
Ох, похоже, что чуть не попалась на него~[EOD]
|
||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||
\\ [yellow]Young girl[white]
|
||||
\\ You remember the 100km/h Hag, right?
|
||||
|
||||
BIN
UnRLE/0741_DungPack1/0741_01_0_1_U
Normal file
BIN
UnRLE/0741_DungPack1/0741_01_0_1_U
Normal file
Binary file not shown.
BIN
UnRLE/0741_DungPack1/0741_02_0_3586_U.png
Normal file
BIN
UnRLE/0741_DungPack1/0741_02_0_3586_U.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 139 KiB |
BIN
UnRLE/0749_/0749_00_0_0_U
Normal file
BIN
UnRLE/0749_/0749_00_0_0_U
Normal file
Binary file not shown.
BIN
UnRLE/0749_/0749_01_0_1_U
Normal file
BIN
UnRLE/0749_/0749_01_0_1_U
Normal file
Binary file not shown.
BIN
UnRLE/0749_/0749_02_0_3842_U
Normal file
BIN
UnRLE/0749_/0749_02_0_3842_U
Normal file
Binary file not shown.
BIN
UnRLE/0749_/0749_02_0_3842_U.png
Normal file
BIN
UnRLE/0749_/0749_02_0_3842_U.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 143 KiB |
BIN
UnRLE/0750_/0750_02_0_4354_U
Normal file
BIN
UnRLE/0750_/0750_02_0_4354_U
Normal file
Binary file not shown.
BIN
UnRLE/0750_/0750_02_0_4354_U.png
Normal file
BIN
UnRLE/0750_/0750_02_0_4354_U.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 143 KiB |
BIN
UnRLE/0751_/0751_00_0_0_U
Normal file
BIN
UnRLE/0751_/0751_00_0_0_U
Normal file
Binary file not shown.
BIN
UnRLE/1118_/1118_00_0_0_clut0_U.png
Normal file
BIN
UnRLE/1118_/1118_00_0_0_clut0_U.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 52 KiB |
BIN
UnRLE/1118_/1118_00_0_0_clut0_U2222.png
Normal file
BIN
UnRLE/1118_/1118_00_0_0_clut0_U2222.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 178 KiB |
BIN
UnRLE/151.bin
Normal file
BIN
UnRLE/151.bin
Normal file
Binary file not shown.
157
UnRLE/d_texture.py
Normal file
157
UnRLE/d_texture.py
Normal file
@@ -0,0 +1,157 @@
|
||||
import struct
|
||||
import sys
|
||||
import os
|
||||
from PIL import Image
|
||||
|
||||
def read_u32(f):
|
||||
data = f.read(4)
|
||||
if len(data) < 4:
|
||||
return None
|
||||
return struct.unpack('<I', data)[0]
|
||||
|
||||
def read_u16(f):
|
||||
data = f.read(2)
|
||||
if len(data) < 2:
|
||||
return None
|
||||
return struct.unpack('<H', data)[0]
|
||||
|
||||
def rgb1555_to_rgb(color):
|
||||
a = (color >> 15) & 0x1
|
||||
r = ((color >> 10) & 0x1F) << 3
|
||||
g = ((color >> 5) & 0x1F) << 3
|
||||
b = (color & 0x1F) << 3
|
||||
return (r, g, b, 255 if a else 0) if a else (r, g, b)
|
||||
|
||||
def process_texture_file(input_file):
|
||||
with open(input_file, 'rb') as f:
|
||||
# Читаем адреса текстурных блоков
|
||||
texture_addresses = []
|
||||
first_address = read_u32(f)
|
||||
if first_address is None:
|
||||
print("Error: Invalid file format (cannot read first address)")
|
||||
return
|
||||
|
||||
texture_addresses.append(first_address)
|
||||
print(f"First texture block at: 0x{first_address:08X}")
|
||||
|
||||
# Читаем адреса до достижения позиции first_address
|
||||
while f.tell() < first_address:
|
||||
addr = read_u32(f)
|
||||
if addr is None:
|
||||
break
|
||||
texture_addresses.append(addr)
|
||||
|
||||
print(f"Found {len(texture_addresses)} texture blocks")
|
||||
|
||||
# Создаем изображение 2048x512
|
||||
img = Image.new('RGBA', (2048, 512))
|
||||
pixels = img.load()
|
||||
|
||||
for addr in texture_addresses:
|
||||
if addr >= os.path.getsize(input_file):
|
||||
print(f"Warning: Invalid texture address 0x{addr:08X}, skipping")
|
||||
continue
|
||||
|
||||
f.seek(addr)
|
||||
|
||||
# Читаем параметры текстуры
|
||||
clut_mode = read_u32(f)
|
||||
image_mode = read_u32(f)
|
||||
|
||||
if clut_mode is None or image_mode is None:
|
||||
print(f"Warning: Invalid texture header at 0x{addr:08X}, skipping")
|
||||
continue
|
||||
|
||||
print(f"Processing texture at 0x{addr:08X}, clut_mode={clut_mode}, image_mode={image_mode}")
|
||||
|
||||
# Обрабатываем CLUT чанк
|
||||
clut_size = read_u32(f)
|
||||
if clut_size is None:
|
||||
print(f"Warning: Invalid CLUT size at 0x{addr:08X}, skipping")
|
||||
continue
|
||||
|
||||
clut_x = read_u16(f) * 2 # Умножаем только позицию на 2
|
||||
clut_y = read_u16(f)
|
||||
clut_w = read_u16(f)
|
||||
clut_h = read_u16(f)
|
||||
|
||||
if None in (clut_x, clut_y, clut_w, clut_h):
|
||||
print(f"Warning: Invalid CLUT header at 0x{addr:08X}, skipping")
|
||||
continue
|
||||
|
||||
print(f"CLUT: pos=({clut_x},{clut_y}), size=({clut_w},{clut_h})")
|
||||
|
||||
clut_data_size = clut_size - 12
|
||||
clut_data = f.read(clut_data_size)
|
||||
if len(clut_data) < clut_data_size:
|
||||
print(f"Warning: CLUT data truncated at 0x{addr:08X}, skipping")
|
||||
continue
|
||||
|
||||
# Создаем CLUT палитру
|
||||
clut = []
|
||||
if clut_mode == 16:
|
||||
for i in range(0, min(len(clut_data), clut_w*clut_h*2), 2):
|
||||
color = struct.unpack('<H', clut_data[i:i+2])[0]
|
||||
rgb = rgb1555_to_rgb(color)
|
||||
clut.append(rgb)
|
||||
|
||||
# Рисуем CLUT (x-координата уже умножена на 2)
|
||||
px = clut_x + (i//2)
|
||||
py = clut_y + ((i//2) // clut_w)
|
||||
if 0 <= px < 2048 and 0 <= py < 512:
|
||||
pixels[px, py] = rgb
|
||||
|
||||
# Обрабатываем текстуру
|
||||
tex_size = read_u32(f)
|
||||
if tex_size is None:
|
||||
print(f"Warning: Invalid texture size at 0x{addr:08X}, skipping")
|
||||
continue
|
||||
|
||||
tex_x = read_u16(f) * 2 # Умножаем только позицию на 2
|
||||
tex_y = read_u16(f)
|
||||
tex_w = read_u16(f) * 2
|
||||
tex_h = read_u16(f)
|
||||
|
||||
if None in (tex_x, tex_y, tex_w, tex_h):
|
||||
print(f"Warning: Invalid texture header at 0x{addr:08X}, skipping")
|
||||
continue
|
||||
|
||||
print(f"Texture: pos=({tex_x},{tex_y}), size=({tex_w},{tex_h})")
|
||||
|
||||
tex_data_size = tex_size - 12
|
||||
tex_data = f.read(tex_data_size)
|
||||
if len(tex_data) < tex_data_size:
|
||||
print(f"Warning: Texture data truncated at 0x{addr:08X}, skipping")
|
||||
continue
|
||||
|
||||
if image_mode == 9 and clut_mode == 16 and clut:
|
||||
for y in range(tex_h):
|
||||
for x in range(tex_w):
|
||||
idx = y * tex_w + x
|
||||
if idx >= len(tex_data):
|
||||
continue
|
||||
color_idx = tex_data[idx]
|
||||
if color_idx >= len(clut):
|
||||
continue
|
||||
# Координаты текстуры (x-позиция уже умножена на 2)
|
||||
px = tex_x + x
|
||||
py = tex_y + y
|
||||
if 0 <= px < 2048 and 0 <= py < 512:
|
||||
pixels[px, py] = clut[color_idx]
|
||||
|
||||
# Сохраняем PNG
|
||||
output_file = os.path.splitext(input_file)[0] + '.png'
|
||||
img.save(output_file)
|
||||
print(f"Image saved to {output_file}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) != 2:
|
||||
print("Usage: python texture_converter.py <input_file>")
|
||||
sys.exit(1)
|
||||
|
||||
input_file = sys.argv[1]
|
||||
if not os.path.exists(input_file):
|
||||
print(f"Error: File {input_file} not found")
|
||||
sys.exit(1)
|
||||
|
||||
process_texture_file(input_file)
|
||||
Reference in New Issue
Block a user