Вторник, 23.04.2024, 23:50
Вы вошли как Гость | Группа "Гости" | RSS

.
 
 
Главная Регистрация Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Lipetsk, Segaman  
Форум » Elektropage.ru » Dune: The Battle for Arrakis [smd] » Dune 2: The Battle for Arrakis (U)
Dune 2: The Battle for Arrakis (U)
Nemesis_cДата: Вторник, 02.08.2011, 23:18 | Сообщение # 1


 
Сообщений: 1148
Статус: Offline
 

r57shell:

Dune 2: The Battle for Arrakis (U)

Статья эта, как пример. Не стал собирать всю инфу из темы на эмо-стране. Посмотрел только первые 5 страниц, а остальное сам. Просьба то, чего знаете кроме этого - писать где-нибудь в форуме.

byte - байт, word - 2 байта, long - 4 байта. null_terminated_string - набор байтов означающих символы пока не встерится нулевой байт.
Как найти конфиги карт (сцен) и не только.

Есть таблица оффсетов карт ROM:00052C34. В ней чередуются оффсет имени файла, оффсет самого файла. Есть две функции связанных с этими файлами ROM:000046A8 - которая берёт оффсет, и ROM:00004A34 которая выдаёт номер по счёту.

Подробнее о функциях.

ROM:000046A8

принимает первым аргументом оффсет на имя файла.
возвращает a0,d0 - file offset. Если файл не найден, возвращет 0.

ROM:00004A34

принимает первым аргументом оффсет на имя файла.
возвращает d0- file id. Если файл не найден, возвращет 0.

Файлы карт имеют имена вида SCE0NX.YYY.INI, где X- дом(House) первая буква, YYY - номер миссии.
Формат карт (сцен) (thanks to Ti_ & Segaman).

Весь файл сцены состоит из команд, и их параметров. Причём обработчик команды сам обрабатывает(пропускает) все свои парамерты, и дальше вступает обработчик следуйщей.

Сначала идёт номер команды размером один байт, а потом параметры команды. Команд всего 11, последняя 10($A). При встрече несуществующей команды, пропускается байт номера команды, и следуйщий байт. При встречи отрицательной команды (чаще всего используется байт $FF) список команд считается оконченным.

Команда 0 - команда настроек [BASIC] - основное.
Первый байт её параметров - номер настройки, а за ним идут параметры самой настройки. Настроек 9, последняя 8.
Настройка 0 - картина пройгрыша (LosePicture).
Первый параметр word означает сколько отступить после этого word-а чтобы продолжить обработку команд, т.е. оффсет на следующую команду.
Второй параметр - строка (null_terminated_string) имя файла картинки. Идёт после предыдущего параметра.
Настройка 1 - картина победы (WinPicture).
Набор параметров такой-же как и у настройки 0.
Настройка 2 - картина введения(BriefPicture - Картина инструкции).
Набор параметров такой-же как и у настройки 0.
Настройка 3 - неизвестно (TimeOut).
Один параметр word.
Настройка 4 - размер карты (MapScale).
Один параметр word. 0 - большая карта. 1 - маленькая карта
Настройка 5 - координата курсора (CursorPos).
Один параметр word. Два байта y,x.
Настройка 6 - координата экрана (TacticalPos).
Один параметр word. Два байта y,x.
Настройка 7 - LoseFlags.
Один параметр word.
Настройка 8 - WinFlags.
Один параметр word.

Команда 1 - земля [MAP] - карта.
Первый байт её параметров - первая буква типа подкоманды:
Подкоманда Bloom - спайсовые точки.
Первый word - количество спайс точек.
Следуйщие word-ы - координаты спайс точек (y,x).
Подкоманда Field - не используется, неизвестно чего было, запоминается только адрес где записаны word-ы.
Первый word - количество.
Следуйщие word-ы - неизвестно.
Подкоманда Seed - номер карты земли. Судя по названию, это был Seed для рандома, т.е. у них вполне возможно был генератор случайных карт.
Один параметр word - номер карты земли.

Команда 2 - конфигурация дома харконенов [Harkonnen].
Первый байт - первая буква настройки. Если хоть одна конфигурация встретилась, после неё должно быть ещё три, иначе может произойти баг.
Quota - word сколько собрать спайса.
Credits - word стартовое количество денег.
Brain - word - первая буква AI. H (Human) - человек. C (СPU) - компьютер. Human обязательно H, остальное - Computer.

Команда 3 - конфигурация дома атрейдесов [Atreides].
Параметры как у команды 2.

Команда 4 - конфигурация дома ордосов [Ordos].
Параметры как у команды 2.

Команда 5 - конфигурация дома червя? (3-го дома с нуля).
Параметры как у команды 2.

Команда 6 - настройка Starport [CHOAM].
Первый байт - unit (типа юнита).
word - максимальное количество таких юнитов.

Команда 7 - группы [TEAMS].
1. byte - номер групы.
2. word - house (дом)
3. word - первая буква AI. Normal, Kamikaze.
4. word - первая буква типа групп. Foot, Track, Wheel.
5. word - минимальное количество.
6. word - максимальное количество.

Команда 8 - войска [UNITS].
1. byte - неизвестно
2. word - house (дом).
3. word - unit (типа юнита).
4. word - жизнь вроде в процентах (256=$100).
5. word - координаты. Два байта на y,x. y - направление неизвестно. x - слева направо.
6. word - неизвестно.
7. word - неизвестно.

Команда 9 - строения [STRUCTURES].
1. byte - неизвестно.
2. word - неизвестно.
3. word - house (дом).
4. word - building_id (уникальный идентификатор типа юнита).
5. word - жизнь вроде в процентах (256=$100).
6. word - координаты. Два байта на y,x. y - направление неизвестно. x - слева направо.

Команда 10 - десант [REINFORCEMENTS].
Примеры:
Первая миссия за Atreides ROM:00056FAE:
Code
dc.b 0 ; command = BASIC
dc.b 0 ; prop = LosePicture
dc.w $E ; data length
dc.b 'LOSTBILD.WSA',0
dc.b 0
dc.b 0 ; command = BASIC
dc.b 1 ; prop = WinPicture
dc.w $A
dc.b 'WIN1.WSA',0
dc.b $57 ; W ; not used
dc.b 0 ; command = BASIC
dc.b 2 ; prop = BriefPicture
dc.w $C
dc.b 'HARVEST.WSA',0
dc.b 0 ; command = BASIC
dc.b 3 ; prop = TimeOut
dc.w 0 ; value
dc.b 0 ; command = BASIC
dc.b 4 ; prop = MapScale
dc.w 1 ; value = Small
dc.b 0 ; command = BASIC
dc.b 5 ; prop = CursorPos
dc.w $4C8 ; value
dc.b 0 ; command = BASIC
dc.b 6 ; prop = TacticalPos
dc.w $4C8 ; value
dc.b 0 ; command = BASIC
dc.b 7 ; prop = LoseFlags
dc.w 4 ; value
dc.b 0 ; command = BASIC
dc.b 8 ; prop = WinFlags
dc.w 6 ; value
dc.b 1 ; command = MAP
dc.b $53 ; subcommand = earth map id
dc.w 1 ; value
dc.b 3 ; command = Ateides
dc.b $51 ; Q
dc.w $3E8 ; Quota
dc.b 3 ; command = Ateides
dc.b $43 ; C
dc.w $3DE ; Credits
dc.b 3 ; command = Ateides
dc.b $42 ; B
dc.w $48 ; Brain = H = Human
dc.b 3 ; command = Ateides
dc.b $4D ; M
dc.w $19 ; MaxUnits
dc.b 4 ; command = Ordos
dc.b $51 ; Q
dc.w 0 ; Quota
dc.b 4 ; command = Ordos
dc.b $43 ; C
dc.w 0 ; Credits
dc.b 4 ; command = Ordos
dc.b $42 ; B
dc.w $43 ; Brain = C = Computer
dc.b 4 ; command = house ordos
dc.b $4D ; M
dc.w $10 ; MaxUnits
dc.b 6 ; command = CHOAM (Starport)
dc.b $D ; unit
dc.w 5 ; maxcount
dc.b 6 ; command = CHOAM (Starport)
dc.b $F
dc.w 5
dc.b 6 ; command = CHOAM (Starport)
dc.b 9
dc.w 6
dc.b 6 ; command = CHOAM (Starport)
dc.b 7
dc.w 5
dc.b 6 ; command = CHOAM (Starport)
dc.b $A
dc.w 6
dc.b 6 ; command = CHOAM (Starport)
dc.b $10
dc.w 4
dc.b 6 ; command = CHOAM (Starport)
dc.b $11
dc.w 2
dc.b 6 ; command = CHOAM (Starport)
dc.b 1
dc.w 5
dc.b 8 ; command = UNITS
dc.b 1
dc.w 2 ; house=hark
dc.w 4 ; unit
dc.w $100 ; hitpoints
dc.w $41 ; coords
dc.w $80
dc.w $B
dc.b 8 ; command = UNITS
dc.b 2
dc.w 2 ; house=hark
dc.w 4 ; unit
dc.w $100 ; hitpoints
dc.w $46 ; coords
dc.w $80
dc.w 8
dc.b 8 ; command = UNITS
dc.b 3
dc.w 2 ; house=hark
dc.w 4 ; unit
dc.w $100 ; hitpoints
dc.w $91 ; coords
dc.w $80
dc.w 8
dc.b 8 ; command = UNITS
dc.b 4
dc.w 2
dc.w 4
dc.w $100 ; hitpoints
dc.w $DD
dc.w $80
dc.w $B
dc.b 8 ; command = UNITS
dc.b 5
dc.w 2
dc.w 4 ; unit
dc.w $100 ; hitpoints
dc.w $28E
dc.w $80
dc.w 8
dc.b 8 ; command = UNITS
dc.b 6
dc.w 2
dc.w 4 ; unit
dc.w $100 ; hitpoints
dc.w $2D2
dc.w $80
dc.w 8
dc.b 8 ; command = UNITS
dc.b 7
dc.w 2
dc.w 4 ; unit
dc.w $100 ; hitpoints
dc.w $38B
dc.w $80
dc.w 8
dc.b 8 ; command = UNITS
dc.b 8
dc.w 2
dc.w 4 ; unit
dc.w $100 ; hitpoints
dc.w $482
dc.w $80
dc.w 8
dc.b 8 ; command = UNITS
dc.b 9
dc.w 1 ; house=atr
dc.w 4 ; unit
dc.w $100 ; hitpoints
dc.w $486
dc.w $80
dc.w 3
dc.b 8 ; command = UNITS
dc.b $A
dc.w 1 ; house=atr
dc.w $D ; unit
dc.w $100 ; hitpoints
dc.w $48A
dc.w $20
dc.w 3
dc.b 8 ; command = UNITS
dc.b $B
dc.w 2
dc.w 4 ; unit
dc.w $100 ; hitpoints
dc.w $492
dc.w $80
dc.w 8
dc.b 8 ; command = UNITS
dc.b $C
dc.w 1 ; house=atr
dc.w 2 ; unit
dc.w $100 ; hitpoints
dc.w $506
dc.w $80
dc.w 3
dc.b 8 ; command = UNITS
dc.b $D ; unit
dc.w 1 ; house=atr
dc.w 4
dc.w $100 ; hitpoints
dc.w $50B
dc.w $80
dc.w 3
dc.b 8 ; command = UNITS
dc.b $E
dc.w 1 ; house=atr
dc.w $D ; unit=trike
dc.w $100 ; hitpoints
dc.w $587
dc.w $A0
dc.w 3
dc.b 8 ; command = UNITS
dc.b $F
dc.w 2
dc.w 4 ; unit
dc.w $100 ; hitpoints
dc.w $5CD
dc.w $80
dc.w 8
dc.b 8 ; command = UNITS
dc.b $10
dc.w 2
dc.w 4 ; unit
dc.w $100 ; hitpoints
dc.w $603
dc.w $80
dc.w 8
dc.b 8 ; command = UNITS
dc.b $11
dc.w 2
dc.w 4 ; unit
dc.w $100 ; hitpoints
dc.w $70F
dc.w $80
dc.w 8
dc.b 8 ; command = UNITS
dc.b $12
dc.w 2 ; home
dc.w 4 ; unit
dc.w $100 ; hitpoints
dc.w $783 ; coords
dc.w $80
dc.w $B
dc.b 9 ; command = STRUCTURES
dc.b $49
dc.w $13
dc.w 1 ; house=atr
dc.w 8 ; CV
dc.w $100 ; hitpoints
dc.w $4C8 ; coords
dc.b $FF ; end
dc.b $FF


Обработчики команд:

ROM:0001621A dc.w $16 ; 16230 (0) BASIC
ROM:0001621C dc.w $22 ; 1623C (1) MAP
ROM:0001621E dc.w $2E ; 16248 (2) Harkonnen
ROM:00016220 dc.w $2E ; 16248 (3) Atreides
ROM:00016222 dc.w $2E ; 16248 (4) Ordos
ROM:00016224 dc.w $2E ; 16248 (5) house worm
ROM:00016226 dc.w $3E ; 16258 (6) CHOAM (Starport)
ROM:00016228 dc.w $46 ; 16260 (7) TEAMS
ROM:0001622A dc.w $54 ; 1626E (8) UNITS
ROM:0001622C dc.w $62 ; 1627C (9) STRUCTURES
ROM:0001622E dc.w $70 ; 1628A (A) REINFORCEMENTS

Обработчики настроек команды conf:

ROM:00016442 word_16442: dc.w $12 ; DATA XREF: ROM:0001643Ar
ROM:00016442 ; 16454 (0) LosePicture
ROM:00016444 dc.w $26 ; 16468 (1) WinPicture
ROM:00016446 dc.w $3A ; 1647C (2) BriefPicture
ROM:00016448 dc.w $4C ; 1648E (3) TimeOut
ROM:0001644A dc.w $54 ; 16496 (4) MapScale
ROM:0001644C dc.w $5C ; 1649E (5) CursorPos
ROM:0001644E dc.w $84 ; 164C6 (6) TacticalPos
ROM:00016450 dc.w $AC ; 164EE (7) LoseFlags
ROM:00016452 dc.w $B4 ; 164F6 (8) WinFlags

House ID-s

(by Ti_)

00-харконен
01-атредес
02-ордос
03-червь/фремен
04-император

Unit ID-s

(by Ti_)

00-caryall
01-ornithopter
02-пехотаx3
03-тяжелая пехотаx3
04-пехотаx1
05-тяжелая пехотаx1
06-саботер
07-launcher
08-deviator
09-tank
0A-heavy tank
0B-devastator
0C-sonic tank
0D-trike
0E-raider trike
0F-quad
10-harvester
11-MCV
12-death hand(sprite)
13-16- missiles(sprites)
17-cannon sprite
18-sonicblast sprite
19-SANDWORM
1A-косм.перевозчик
1B-unused/other data гаечный ключ
1С-EXIT
1D-FIX
1E-STOP
1F-FIX выделен
20-STOP выделен
FF-cursor sprite

Building ID-s

(by Ti_)

00-плита
01-плита 2x2
02-дворец
03-машинный завод/??/
04-машинный завод quad
05-авиа завод /??/
06-nothing 1X
07-казармы
08-CY
09-windtrap
0A-казармы
0B-starport
0C-refinery
0D-repair
0E-wall
0F-turret
10-r-turret
11-silos
12-radar
13-otherdata гаечный ключ
14-otherdata

так задаются обычные дома в конфиге карты:

0351 03E8 0343 03DE 0342 0048 034D 0019
где каждый нечентный 03xx - что задавать

0351 - квота 3e8 (1000)
0343 - кредиты 3de (995)
0342 - AI или хуман (0048 или 0043)
034D - юнит лимит 0019 (25)

0251 и т д - харконены
0351 - атредесы
0451 - ордосы
0551 - сардукары
06xx - а это уже старпорт

07xx - тимс (дом, тип команды (Normal или Kamikaze) тип техники (footed tracked wheeled slither), кол-во мин и макс)
0701 0000 004E 0046 0004 0005
07xx- ID (кажется 16макс), 0000 - номер дома (харк), 4e=N (нормал), 46= F (footed =пехота),
0004 мин участников, 0005 макс участников

1=Harkonnen,Normal,Wheeled,2,3
Это означает, что ИИ-Харконнены должны строить группы их двух-трех колесных юнитов (квадов) и слать их на базу игрока. Использовалось два типа групп - Normal и Kamikaze, первые будут по пути отстреливаться, если их атакуют, вторые - игнорировать вражеский огонь и переть прямо к выбранной цели (наиболее приоритетному зданию игрока). К сожалению, большинство этих скриптов в PC-версии все равно не работали, т.к. по ошибке везде вместо Wheeled и Tracked (т.е. колесной и гученично техники соответственно) было прописано неправильное Wheel и Track, так что ИИ использовал только атакующие группы пехоты, а технику строил по одному юниту и сразу бросал их на базу игрока (группы, в общем, действуют более организованно. чем индивидуальные юниты, например, моугт отступать и т.п.).
56FF8-9:номер карты
56FE4-5:X-координата курсора
56FFA-B:цель миссии,C-D:прочие данные(в первой миссии-сумма денег, которую над сабрать)

0142-спайсовые точки; 0003 -кол-во спайсовых точек.; далее их коорд. (0242 03CF 044C)

Пример: 09 49 00 13 00 01 00 08 01 00 04 C8

0949 тип записи для зданий 0013 вроде порядк.номер. 0001 - атредесов. 0008сбордвор 0100 -100%хп 04C8-коорд.

0947 0122 0001 000E - 0947-тип записи(для стен и плит), 0122 коорд, 0001 - дом, 000E - тип строения

0949 000F 0001 000C 0100 01ED - 0949 -тип записи(для зданий). 000F (ID-совпадать не должны), 0001 -дом , 000C - тип строения, 0100 - 100%хп(можно задавать больше), 01ED - коорд.

0813 0001 000С 0100 03A4 0080 0008 - unit(ID), дом, юнит, хп, коорд, unkn, unkn (guardmode?)

0A 05 0004 000B 0006 01 2B - десант, (ID), дом, юнит, unkn(base,home?), через сколько высадка, повторять?(2B=да)

Как найти часть графики (не всю).

По адрессу ROM:000С7С72 находятся оффсеты по 4 байта (long). Самые старшие их биты неизвестно чего означают. И неизвестно что означают определенные значения оффсетов типа $FFFFFFFF.

Оффсеты идут в группах по 4.

1. Оффсет на графику.

Cначала идёт список из групп word,long. Первое похоже флаги, второе оффсеты. если word равен нулю, то список считается закончиным.
2. Оффсет на ещё что-то.

Cначала идёт список из групп word,long. Первое похоже флаги, второе оффсеты. если word равен нулю, то список считается закончиным.
3. Оффсет на палитру. 64 word - цвета. (полная палитра сеги).
4. Оффсет на ещё что-то.

Набор рипнутых спрайтов by Segaman.

Скачать
Дополнительные ссылки.

http://arrakis.dune2k.com/downloads.html - редактор карт, земли и прочего для DOS версии (это PC версия чтоли?), + все ini, seed земли и может быть чего ещё.

http://forum.dune2k.com/index.php?topic=21107.0 - просто дофига ссылок

3 типа червя:
это можно глянуть в реде открыв карты, это просто тип ИИ:
area guard = ест тока в области;
ambush = жрет когда его раскроешь;
hunt = жрет сразу.
 
Nemesis_cДата: Среда, 03.08.2011, 05:08 | Сообщение # 2


 
Сообщений: 1148
Статус: Offline
 

Segaman:

byte - флаг юнита($0
word - house (дом).
word - unit (типа юнита).
word - жизнь вроде в процентах (256=$100).
word - координаты.
Формат:
диапозон координат
x = 0-$3F
y = 0-$3F
формула получения значения
position=x+y*$40

word - угол направления.
диапозон
0-255
формула преобразования в градусы
-(угол/32)*45
word - AI(Искуственный интелект, поведение юнита)
значения флагов ИИ:
0=Attack
1=Move
2=Reterat
3=Guard
4=AreaGuard
5=Harvest
6=Return
7=Stop
8=Ambush
9=Sabotage
10=Die
11=Hunt
12=Deploy
13=Destruct
у строений:
word - флаг строения
word - порядковый номер(ID)
word - house (дом).
word - типа строения
word - жизнь вроде в процентах (256=$100).
word - координаты.
Формат:
диапозон координат
x = 0-$3F
y = 0-$3F
формула получения значения
position=x+y*$40

Десант:
word - флаг десанта
word - дом
word - привозимый юнит
word - цель в ввиде значения(6=вражеская,7=наша)
word - время(имеет цикличность при $2B)
 
Форум » Elektropage.ru » Dune: The Battle for Arrakis [smd] » Dune 2: The Battle for Arrakis (U)
  • Страница 1 из 1
  • 1
Поиск:


Select language:
English
French
German
Portuguese
Chinese
Nemesis_c, r57shell, Smoke, Lipetsk, GoodBye (aka vfiuchcikicshuusrch) & Segaman © 2024
Хостинг от uCoz