Pridanie novej lokácie do worldmapy

Vytváření nových modů není tak obtížné, zkuste si to taky.

Moderátor: Razfallow

Odpovědět
Uživatelský avatar
Valiant
Sigilan
Příspěvky: 95
Registrován: 6.1.2006 9:49
Bydliště: Levice (hometown), Sliač (worktown), Slovakia
Kontaktovat uživatele:

Pridanie novej lokácie do worldmapy

Příspěvek od Valiant »

Zdravím vsetkých :lol:

Táto otázka je adresovaná hlavne Vlasákovi (..mimochodom, cau Vlasy 8-) ), ale ak vie odpovedať aj niekto iný, budem len vdačný...
Moja otázka znie: Ako mám pomocou WeiDU pridať novú lokáciu do worldmapy? Táto lokácia nemá mať žiadne linky, t.j. mám na mysli linky na krajoch mapy (N,W,E,S)... proste len pridanie lokácie na mapu.... s vlastnou ikonou...
Dostat sa do nej bude možné len cez skripty, ale to uz by som si vyriešil sám...
Druhá otázka: Tú novú ikonu, ktorú vyrobím, mám pridať do súboru MAPICONS.BAM alebo nie....??
Prosil by som o napísanie vzorového skriptu...

Dík
Kiski aka Valiant, the 3ds Max mage
Slovakia
Tower Of Deception creator

Obrázek
Uživatelský avatar
Vlasák
Sigilan
Příspěvky: 3017
Registrován: 26.9.2005 7:56
Bydliště: Praha
Kontaktovat uživatele:

Příspěvek od Vlasák »

Kiski: promiň odmlku...

Já se ve weidu moc nevyznám, takže ti přímo s ním moc neporadím, ale aspoň globální myšlenky.

afaik weidu žádnou přímou funkci pro vložení lokace do worldmapy nemá, tudíž se to musí udělat ručně.

Jednou možností by tady bylo vyloženě "ručně" - číst offsety, počty elemetnů sekcí a v cyklech aktualizovat tyhle hodnoty.

S pomocí informací odsud:
http://iesdp.gibberlings3.net/ieformats/wmap_v1.htm

...bys musel načítat příslušné hodnoty a aktualizovat je. Podstatný by tady byl offset 0x0020 ve worldmap entry, který představuje počet lokací v mapě - ten bys musel o 1 zvýšit.

Pak bys za poslední area entry musel vložit celou strukturu area entry s tvými hodnotami. A protože tím se ti posunou area links, musel bys ve všech area entries přepsat jejich offsety na tyto linky (posunují se o délku area entry).

Ono to zní složitě, složité to ani tak moc ale není, ale do detailů to nerozebírám, protože je zde elegatnější možnost (pouze při použití s ToB):
soubor XNEWAREA.2da a přidání řádku do něj.

http://iesdp.gibberlings3.net/2da/2da_tob/xnewarea.htm

Jeho vyplnění je v zásadě intutivní - pouze položka flags ne. Jde tam o bitovou mapu velikosti 4 bytů (byte=8 bitů). Na místo daného bitu se dá 1, pokud má ona vlastnost platit.
O těchto flags jsou známé následující údaje:

Kód: Vybrat vše

bit 0: is area visible? // je lokace od začátku hry viditelná
bit 1: unknown //? mám tady podezření, že jde o lokace přístupné bez průchodu městskou bránou
bit 2: set if area can be visited // lze do ní rovnou cestovat kliknutím
bit 3: set if area has been visited // zřejmě použito je pro začátek hry pro lokaci, kde se začalo...
bits 4-31: unused?
Pokud např. chci, aby byla lokace viditelná a jakoby začáteční (umělý příklad), musím ji nastavit bity 0 a 3 na hodnotu 1. Jak to vypadá (bit nejvíce vlevo je 31., bit nejvíce vpravo 0.):

000...(nepoužité bity 31-4 - nuly)...1001

Tohle je dvojkové (binární) číslo, které převedeš na desítkové a dostaneš hodnotu, kterou zapsat do sloupce FLAGS. V tomto případě 00...0001001 = 9.

Pro druhý příklad - u ar3000, jak je zapsáno v tom .2da, je flags na 7, což dává bitovou mapu 00...000111 (visible, unknown, can be visited).

(pro převod čísel lze použít kalkulačku ve windows se zapnutým vědeckým rozhraním - tam jsou pak volby mezi dec, hex, bin, oct.


Dále je tam pak sloupec LINK_2DA, kam zapíšeš .2da soubor tvé lokace, kam zapíšeš případné linky.


Takže celý proces spočívá v tom, že pomocí weidu přidáš řádek do XNewArea.2da

Kód: Vybrat vše

COPY_EXISTING ~xnewarea.2da~ ~override~
COUNT_2da_ROWS 5, "numRows" // zjistění, kolik řádků už máme (včetně záhlaví sloupců); 5 zvoleno jen tak, aby se do filtru dostaly důležité řádky a ne i hlavička atp.
APPEND ~xnewarea.2da~ ~("%numRows%" - 1 ) AR9876 AR9876 7 .......~
//a případný APPEND do .2da linků tvé lokace
Takhle nějak rámcově by to mohlo fungovat... ale ber to spíš jako mustr...

jj, ikony patří do mapicons.bam...
Infinity forever! - Baldur's Gate II add-on CZ
Fórum plné RPG - RPG fórum


Obrázek
Uživatelský avatar
Valiant
Sigilan
Příspěvky: 95
Registrován: 6.1.2006 9:49
Bydliště: Levice (hometown), Sliač (worktown), Slovakia
Kontaktovat uživatele:

Příspěvek od Valiant »

To Vlasak: Ano, ale XNEWAREA mozem pouzit len vtedy, ked chcem pridat nejaku lokaciu do mapy, ak mam ToB nainstalovany. Ale ak ho nemam, tato moznost tym padom pada...

Videl som .tp2 skripty niektorych modov, ktore pridavaju lokacie do mapy. Zaciatkom kodov som rozumel, lenze vsetky co som videl, pridavali aj area links, a to som ja nechcel. No ked som z nich zobral iba tu cast kodu, ktora sa tykala iba pridania oblasti na mapu, tak hra padla... Jasne ze padla, lebo som neposunul linky... :oops:

Takze zaverecna otazka: je mozne, ze by si mi taky vzorovy skript napisal?? :roll:
Nazov lokacie daj akychces, ten si zmenit dokazem...

Viem, ze to zvladnes, takze by som ta chcel o to velmi poprosit... :lol:
No ak sa ti nechce alebo nemas cas, tak sa na to vykasli...
Kiski aka Valiant, the 3ds Max mage
Slovakia
Tower Of Deception creator

Obrázek
Uživatelský avatar
Valiant
Sigilan
Příspěvky: 95
Registrován: 6.1.2006 9:49
Bydliště: Levice (hometown), Sliač (worktown), Slovakia
Kontaktovat uživatele:

Příspěvek od Valiant »

To Vlasak: Bude toto pracovat??

Kód: Vybrat vše

COPY ~TOD/Subory/Worldmap.wmp~ ~override~
    READ_LONG  0x30 "area_num"
    READ_LONG  0x34 "area_off"
    READ_LONG  0x38 "link_off"
    READ_LONG  0x3c "link_num"
    WRITE_LONG 0x30 ("%area_num%" + 1)
    WRITE_LONG 0x38 ("%link_off%" + 0xf0)
    WRITE_LONG 0x3c ("%link_num%" + 4)
    //Area Ofsety
    INSERT_BYTES ("%area_off%" + (0xf0 * "%area_num%")) 0xf0 // vlozenie novel lokacie do worldmapy
      WRITE_ASCII ("%area_off%" +        (0xf0 * "%area_num%")) ~VA#001~
      WRITE_ASCII ("%area_off%" + 0x08 + (0xf0 * "%area_num%")) ~VA#001~
      WRITE_ASCII ("%area_off%" + 0x10 + (0xf0 * "%area_num%")) ~VA#001~
      WRITE_LONG  ("%area_off%" + 0x34 + (0xf0 * "%area_num%")) 27 // cislo ikony v MAPINONS.BAM - neexistuje zamerne
      WRITE_LONG  ("%area_off%" + 0x38 + (0xf0 * "%area_num%")) 503 // koordinat X
      WRITE_LONG  ("%area_off%" + 0x3C + (0xf0 * "%area_num%")) 269  // koordinat Y
      WRITE_LONG  ("%area_off%" + 0x50 + (0xf0 * "%area_num%")) 0 // Ziadna linka na N
      WRITE_LONG  ("%area_off%" + 0x54 + (0xf0 * "%area_num%")) ("%link_num%") // N link index
      WRITE_LONG  ("%area_off%" + 0x58 + (0xf0 * "%area_num%")) 0 // Ziadna linka na W
      WRITE_LONG  ("%area_off%" + 0x5c + (0xf0 * "%area_num%")) ("%link_num%" + 3) // W link index
      WRITE_LONG  ("%area_off%" + 0x60 + (0xf0 * "%area_num%")) 0 // Ziadna linka na S
      WRITE_LONG  ("%area_off%" + 0x64 + (0xf0 * "%area_num%")) ("%link_num%" + 2) // S link index
      WRITE_LONG  ("%area_off%" + 0x68 + (0xf0 * "%area_num%")) 0 // Ziadna linka na E
      WRITE_LONG  ("%area_off%" + 0x6c + (0xf0 * "%area_num%")) ("%link_num%" + 1) // E link index
END
Ak nie, fixni to plz...Dik.. :lol:
Kiski aka Valiant, the 3ds Max mage
Slovakia
Tower Of Deception creator

Obrázek
Uživatelský avatar
Vlasák
Sigilan
Příspěvky: 3017
Registrován: 26.9.2005 7:56
Bydliště: Praha
Kontaktovat uživatele:

Příspěvek od Vlasák »

Kiski: zkusím to projít se začátkem týdne, mrknu na to ;-)

Ještě jeden trik k řešení - zkus tam tu svou lokaci přidat natvrdo třeba přes DLTCEP nebo NI a nastavuj to tak dlouho, až to bude fungovat ;-) Pak se podívej, co se přidalo do worldmap.wmp a přidané hodnoty jsou samozřejmě ty, kterými to pak přes weidu budeš patchovat při distribuci modu.
Infinity forever! - Baldur's Gate II add-on CZ
Fórum plné RPG - RPG fórum


Obrázek
Uživatelský avatar
Valiant
Sigilan
Příspěvky: 95
Registrován: 6.1.2006 9:49
Bydliště: Levice (hometown), Sliač (worktown), Slovakia
Kontaktovat uživatele:

Příspěvek od Valiant »

Radšej počkám, kým sa mi na to mrkneš... :roll:

Ale myslím, že takto by to mohlo fungovať...

Tak potom daj vedieť, ci to fachčí...

Zatial čaf.. :lol:
Kiski aka Valiant, the 3ds Max mage
Slovakia
Tower Of Deception creator

Obrázek
Uživatelský avatar
Valiant
Sigilan
Příspěvky: 95
Registrován: 6.1.2006 9:49
Bydliště: Levice (hometown), Sliač (worktown), Slovakia
Kontaktovat uživatele:

Příspěvek od Valiant »

Vlasy, tak čo, mrkol si sa mi na tu worldmapu??... ;-)
Kiski aka Valiant, the 3ds Max mage
Slovakia
Tower Of Deception creator

Obrázek
Uživatelský avatar
Vlasák
Sigilan
Příspěvky: 3017
Registrován: 26.9.2005 7:56
Bydliště: Praha
Kontaktovat uživatele:

Příspěvek od Vlasák »

Promiň, nemrkol :roll: Bohužel teď nemám čas na nějaké hluboké zkoušení - zkus ten svůj patch a uvidíš - mně připadá celkem správný.
Infinity forever! - Baldur's Gate II add-on CZ
Fórum plné RPG - RPG fórum


Obrázek
Uživatelský avatar
Valiant
Sigilan
Příspěvky: 95
Registrován: 6.1.2006 9:49
Bydliště: Levice (hometown), Sliač (worktown), Slovakia
Kontaktovat uživatele:

Příspěvek od Valiant »

Tak som nakoniec skontaktoval CamDawna na BWL fore, a ten mi ten zdrojovy kod upravil pre moje potreby. Takze uz to mam vyriesene. Ale aj tak diky za pomoc, Vlasy :)
Kiski aka Valiant, the 3ds Max mage
Slovakia
Tower Of Deception creator

Obrázek
Uživatelský avatar
Valiant
Sigilan
Příspěvky: 95
Registrován: 6.1.2006 9:49
Bydliště: Levice (hometown), Sliač (worktown), Slovakia
Kontaktovat uživatele:

Příspěvek od Valiant »

Takže výsledný kód pre pridanie novej lokácie do worldmapy je tu. Jedná sa ale o lokaciu, do ktorej sa partia premiestňuje skriptom, t.j. nemá žiadne S,J,Z a V linky. V tom prípade by bol kód zložitejší. Uvádzam ho tu len kvôli zaujímavosti, hádam ho niekto využije, ako to bolo aj v mojom prípade...

Kód: Vybrat vše

COPY_EXISTING ~worldmap.wmp~ ~override~
 READ_LONG  0x30 "area_num"
 READ_LONG  0x34 "area_off"
 READ_LONG  0x38 "link_off"
 WRITE_LONG 0x30 ("%area_num%" + 1)
 WRITE_LONG 0x38 ("%link_off%" + 0xf0)
 INSERT_BYTES ("%area_off%" + (0xf0 * "%area_num%")) 0xf0 // inserting new area to wmp
   WRITE_ASCII ("%area_off%" +        (0xf0 * "%area_num%")) ~G3G12B~ // area name
   WRITE_ASCII ("%area_off%" + 0x08 + (0xf0 * "%area_num%")) ~G3G12B~ // .are resref
   WRITE_ASCII ("%area_off%" + 0x10 + (0xf0 * "%area_num%")) ~G3G12B~ // area long name
   WRITE_LONG  ("%area_off%" + 0x34 + (0xf0 * "%area_num%")) 27 // mapicon number--set to invalid (no icon)
   WRITE_LONG  ("%area_off%" + 0x38 + (0xf0 * "%area_num%")) 0  // x coordinate
   WRITE_LONG  ("%area_off%" + 0x3C + (0xf0 * "%area_num%")) 0  // y coordinate
   WRITE_LONG  ("%area_off%" + 0x54 + (0xf0 * "%area_num%")) ("%link_num%") // N link index
   WRITE_LONG  ("%area_off%" + 0x5c + (0xf0 * "%area_num%")) ("%link_num%") // W link index
   WRITE_LONG  ("%area_off%" + 0x64 + (0xf0 * "%area_num%")) ("%link_num%") // S link index
   WRITE_LONG  ("%area_off%" + 0x6c + (0xf0 * "%area_num%")) ("%link_num%") // E link index
Kiski aka Valiant, the 3ds Max mage
Slovakia
Tower Of Deception creator

Obrázek
Odpovědět

Zpět na „Infinity Engine“