How to add an entrance to an existing map ?
#1
Posted 21 May 2011 - 04:43 AM
I've just added a new travel trigger to an existing map (without any trouble), using this tutorial :
http://forums.gibber...?showtopic=6031
My question : At the moment, I'd like to add it a new entrance. But there's no tutorial for this and I'm just learning weidu language, so I'm afraid of getting loads of errors. How to add an entrance to an existing map, in tp2 file ?
(sorry for my poor English :S)
Thank you a lot !!!
#2
Posted 21 May 2011 - 10:55 AM
-Y-
COPY_EXISTING ~ar2000.are~ ~override~ // We start by reading offsets and numbers READ_SHORT 0x5a "trig_num" READ_LONG 0x5c "trig_off" READ_LONG 0x60 "spawn_off" READ_LONG 0x68 "ent_off" READ_SHORT 0x6c "ent_num" READ_LONG 0x70 "cont_off" READ_LONG 0x78 "item_off" READ_LONG 0x7c "vert_off" READ_SHORT 0x80 "vert_num" READ_LONG 0x84 "amb_off" READ_LONG 0x88 "var_off" READ_LONG 0xa0 "bmp_off" READ_LONG 0xa8 "door_off" READ_LONG 0xb0 "anim_off" READ_LONG 0xb8 "tiled_off" READ_LONG 0xbc "song_off" READ_LONG 0xc0 "rest_off" READ_LONG 0xc4 "note_off" // Add vertices for each side of the travel region bounding box (here we're using just four). Work clockwise from top left. INSERT_BYTES ("%vert_off%" + ("%vert_num%" * 0x4) ) 0x10 WRITE_SHORT ("%vert_off%" + ("%vert_num%" * 0x4) ) 514 WRITE_SHORT ("%vert_off%" + ("%vert_num%" * 0x4) + 0x2) 290 WRITE_SHORT ("%vert_off%" + ("%vert_num%" * 0x4) + 0x4) 571 WRITE_SHORT ("%vert_off%" + ("%vert_num%" * 0x4) + 0x6) 290 WRITE_SHORT ("%vert_off%" + ("%vert_num%" * 0x4) + 0x8) 571 WRITE_SHORT ("%vert_off%" + ("%vert_num%" * 0x4) + 0xa) 400 WRITE_SHORT ("%vert_off%" + ("%vert_num%" * 0x4) + 0xc) 514 WRITE_SHORT ("%vert_off%" + ("%vert_num%" * 0x4) + 0xe) 400 // Now, we add a new entrance. Yippie! INSERT_BYTES ("%ent_off%" + ("%ent_num%" * 0x68) ) 0x68 WRITE_ASCII ("%ent_off%" + ("%ent_num%" * 0x68) ) ~Exitc-ar01~ // Name of the new entrance in the existing area WRITE_SHORT ("%ent_off%" + ("%ent_num%" * 0x68) + 0x20) 541 // Location: X WRITE_SHORT ("%ent_off%" + ("%ent_num%" * 0x68) + 0x22) 409 // Location: Y WRITE_SHORT ("%ent_off%" + ("%ent_num%" * 0x68) + 0x24) 0 // Direction facing (0 - 15) // First, we insert the new trigger by adding 196 bytes at a specific location in the file, then we patch it <img src='http://www.shsforums.net/public/style_emoticons/<#EMO_DIR#>/smile.gif' class='bbc_emoticon' alt=':)' /> INSERT_BYTES ("%trig_off%" + ("%trig_num%" * 0xc4) ) 0xc4 WRITE_ASCII ("%trig_off%" + ("%trig_num%" * 0xc4) ) ~Travc-ar01~ // Name of the new trigger in the existing area WRITE_SHORT ("%trig_off%" + ("%trig_num%" * 0xc4) + 0x20) 0x02 // Which trigger type? 02 = travel WRITE_SHORT ("%trig_off%" + ("%trig_num%" * 0xc4) + 0x22) 512 // Bounding box - top left X WRITE_SHORT ("%trig_off%" + ("%trig_num%" * 0xc4) + 0x24) 286 // Bounding box - top left Y WRITE_SHORT ("%trig_off%" + ("%trig_num%" * 0xc4) + 0x26) 588 // Bounding box - bottom right X WRITE_SHORT ("%trig_off%" + ("%trig_num%" * 0xc4) + 0x28) 412 // Bounding box - bottom right Y WRITE_SHORT ("%trig_off%" + ("%trig_num%" * 0xc4) + 0x2a) 0x04 // Number of vertices (4) WRITE_LONG ("%trig_off%" + ("%trig_num%" * 0xc4) + 0x2c) "%vert_num%" // First vertex index WRITE_LONG ("%trig_off%" + ("%trig_num%" * 0xc4) + 0x34) 0x2A // Cursor index (2Ah = 42 = door) WRITE_ASCII ("%trig_off%" + ("%trig_num%" * 0xc4) + 0x38) ~c-ar01~ // Destination area WRITE_ASCII ("%trig_off%" + ("%trig_num%" * 0xc4) + 0x40) ~Exitc-ar03~ // Exit point in the destination area WRITE_LONG ("%trig_off%" + ("%trig_num%" * 0xc4) + 0x60) 0x04 // Flags (ach! forgot to ask) SAY ("%trig_off%" + ("%trig_num%" * 0xc4) + 0x64) #-1 // Trigger Text (nothing) // Code wrapup - need to adjust numbers of vertices and triggers and adjust offsets WRITE_SHORT 0x80 ("%vert_num%" + 0x04) // Four new vertices WRITE_SHORT 0x5a ("%trig_num%" + 0x01) // One new trigger WRITE_SHORT 0x6c ("%ent_num%" + 0x01) // One new entrance // Remember that even if the offset-fields are listed in one certain order, the offsets aren't SET "adj" = 0xc4 WRITE_LONG 0x60 ("%spawn_off%" + "%adj%") WRITE_LONG 0x68 ("%ent_off%" + "%adj%") SET "adj" = (0xc4 + 0x68) WRITE_LONG 0x70 ("%cont_off%" + "%adj%") WRITE_LONG 0x78 ("%item_off%" + "%adj%") WRITE_LONG 0x7c ("%vert_off%" + "%adj%") WRITE_LONG 0x84 ("%amb_off%" + "%adj%") WRITE_LONG 0x88 ("%var_off%" + "%adj%") WRITE_LONG 0xa8 ("%door_off%" + "%adj%") WRITE_LONG 0xb8 ("%tiled_off%" + "%adj%") SET "adj" = (0xc4 + 0x68 + 0x10) WRITE_LONG 0xa0 ("%bmp_off%" + "%adj%") WRITE_LONG 0xb0 ("%anim_off%" + "%adj%") WRITE_LONG 0xbc ("%song_off%" + "%adj%") WRITE_LONG 0xc0 ("%rest_off%" + "%adj%") WRITE_LONG 0xc4 ("%note_off%" + "%adj%") BUT_ONLY_IF_IT_CHANGES
'Go for the optics, Chiktikka. GO FOR THE OPTICS!!' - Tali vas Neema
DLTCEP Tutorials Update Page
DLTCEP Tutorials Main Page
Yovaneth's AI Scripts for BG1, BG2-SoA and IWD1
Fishing for Trouble - a quest mod for Shadows of Amn
#3
Posted 21 May 2011 - 12:18 PM
Another usage example.
Retired from modding.
#4
Posted 22 May 2011 - 03:31 PM
#5
Posted 23 May 2011 - 06:28 AM
I have a problem with the travel between the existing area (AR0411) and my own area (QQGLY1).
The game crashes with the message : "An Assertion failed in ChVidImage.cpp at line 6134. Programmer says : Tile data accessed when not loaded".
baldur.log says :
---------------------Start Logging Session---------------------
CVisibilityMap::AddCharacter : ( 3464, 3115 ) #:8454273 R:14
CVisibilityMap::AddCharacter : ( 3395, 3062 ) #:8519810 R:14
CVisibilityMap::AddCharacter : ( 1016, 1194 ) #:8454273 R:14
CVisibilityMap::AddCharacter : ( 952, 1194 ) #:8519810 R:14
baldur.err :
---------------------Start Logging Session---------------------
ASSERTION FAILED!
File: ChVidImage.cpp
Line: 6134
Exp: FALSE
Msg: Tile data accessed when not loaded
Run Debugger?
I used Macro method to create an entrance and trigger travel in AR0411 (see the code below), and I also made it (with IETME) in QQGLY1. Others AR0411 travel triggers were deactivated by scripts.
COPY_EXISTING ar0411.are override LPF fj_are_structure INT_VAR fj_type = 2 //travel fj_box_left = 3295 fj_box_top = 2974 fj_box_right = 3623 fj_box_bottom = 3244 fj_cursor_idx = 30 // door fj_flags = 516 // party required, NPCs can't pass fj_vertex_0 = 3295 + (3076 << 16) fj_vertex_1 = 3407 + (2974 << 16) fj_vertex_2 = 3623 + (3144 << 16) fj_vertex_3 = 3464 + (3244 << 16) STR_VAR fj_structure_type = region fj_name = QQTRGLY1 // region name fj_destination_area = QQGLY1 // *.ARE fj_destination_name = QQGLYEN // entrance name END LPF fj_are_structure INT_VAR fj_loc_x = 3271 fj_loc_y = 2950 fj_orientation = 6 // NW STR_VAR fj_structure_type = entrance fj_name = QQ411EN END
An idea ?
EDIT : everything is working now, IETME just failed on saving my QQGLY1.are.
Edited by Huxaltec, 23 May 2011 - 06:57 AM.