-
Posts
99 -
Joined
-
Last visited
Content Type
Forums
Events
Downloads
Gallery
Mods
News
Store
Posts posted by tipun
-
-
Link in the first post of this thread. Unfortunately, I don't have much time to do modding at the moment. But there were extra messages when applying effects that appeared in version 2.6. I will try to deal with them. And I will try to add new subraces as soon as possible.
-
0x40a8 is:
0x40A8 IsValidForPartyDialog (O: Object*)
0x40A8 IfValidForPartyDialog (O: Object*)
0x40A8 IsValidForPartyDialogue (O: Object*)
0x40A8 IfValidForPartyDialogue (O: Object*)This is not a new (EE) trigger.
Therefore, there may still be some kind of error when installing a anyone mod. I think it's worth putting in the override trigger.ids from the original BG2EE. -
There is some truth to be learned from jokes too.
Thank you, I will stick to this installation order.
-
On 9/2/2021 at 8:00 PM, RelentlessImp said:
ERROR: cannot resolve trigger 0x40e0
ERROR: cannot resolve trigger 0xebMost likely, Transition is not the problem. I think there is a mod after Transition that has poor EE compatibility (or not compatibility at all). And it replaces the trigger.ids file. Therefore, EET_end cannot find the triggers it needs.
-
16 hours ago, Guest Mike said:
The question remains, are the changes to the actor names by Infinity Animations really needed?
They are not needed. They break the quest with the prisoners and Gityanki (I don't remember how it is written in English) in the city of the Illithids. Because the Override Script Name checkbox is used there. Because of what scripts do not work. Perhaps it is somewhere else.
Sorry for my english.
-
COPY_EXISTING ~shout.bcs~ ~override~ DECOMPILE_AND_PATCH BEGIN REPLACE_TEXTUALLY ~Heard(~ ~Global("JTOAD","LOCALS",0) !CheckSpellState(Myself,DEAFENED) Heard(~ END
^ - matches at beginning of line (weidu readme)
-
Thank you for your feedback.
Improvements suggestions:
1. I didn't really understand this sentence. English is not my native language.
2. As far as I remember, on the character creation screen, the text is generated automatically. Therefore, it is unlikely.
3. It can be done. But I will have to write more code during installation.
4. I know about aasimars and tieflings (I took from IWD2, there they are subraces of people). But new races with a choice when creating a character cannot be added. Therefore, Planetouched can only be created as a subrace.Addon suggestions:
I'm going to add new subraces, but a little later. Now, unfortunately, I don't have time. -
12 hours ago, Endarire said:
I like half-dragons, gnolls, and ogres as playable PC races, but I more prefer what I messaged you, @tipun.
Thankee!I see. Now I'm going to take my half-gnolls for a walk, then I will answer.
-
Oops. I haven't made half-dragons yet. I'm just going to. And with a choice of colors. But if there are any suggestions, I will always listen.
-
@Guest Steve
Thank you for the clarification. I will study this material. And I'll see what I can do. If possible.
And no need to apologize. On the contrary, you gave me new food for thought.
-
I finally made it to BG2EE version 2.6.6.0. I will try to fix the problems that arose with this version of the game.
@Guest steve
I don't quite understand what is meant by ancestry (my English is poor). I took all subraces from IWD2, and when I create new ones, I will need the help of the Internet community. I'm still closer to GURPS in board games than to DND. And I would like to clarify the question.@Endarire
When the version of the game was 2.5.16.6 the mod was compatible with the games BG1EE, BG2EE, EET and IWD1EE. I received version 2.6.6.0 of games only yesterday. I will check. But I think that it will also be compatible with all the games of the new version. I skimmed the ui.menu and the changes are not very big. After all, the code of my mod is looking for places that seem to have already remained unchanged.
-
New door at the area. I replaced the ship on the Waukeen Promenade with a ship from IWD2. Made it like a door. Everything works fine in the game. But Near Infinity now shows an error when trying to open a wed file.
Although I even manually checked all the offsets. Maybe you missed something?
Or maybe you can tell me somewhere I can find functions for editing wed files.The code I used to edit the wed files:
SpoilerDEFINE_PATCH_FUNCTION FC_GET_XY_COORDINATE INT_VAR num = 0 RET x1 y1 BEGIN y1 = ( num >> 16 ) x1 = num - ( y1 << 16 ) END DEFINE_PATCH_FUNCTION ZZ_ADD_WED_DOOR INT_VAR is_door = 1 //tile_0, tile_1 etc. (lookup tiles) poly_opened_cnt = 0 poly_closed_cnt = 0 // 1, flags_2 etc. ( Count = poly_opened_cnt + poly_closed_cnt ) //vertex_cnt_1, vertex_cnt_2 etc. ( Count = poly_opened_cnt + poly_closed_cnt ) //vertex_1, vertex_2 etc. LastTile = 0 Count = 0 overlay_idx = 0 STR_VAR name = "" RET BEGIN PATCH_IF ( is_door > 1 ) OR ( is_door < 0 ) BEGIN SET is_door = 1 END LPM ZZ_READ_WED_OFFSETS LPM ZZ_CREATE_DOOR_Z LPM ZZ_CREATE_DOOR END DEFINE_PATCH_FUNCTION ZZ_GET_POLY_MINMAX_COORDS STR_VAR str = "" RET minX maxX minY maxY BEGIN SET minX = 10000 SET maxX = 0 SET minY = 10000 SET maxY = 0 SET lng = STRING_LENGTH ~%str%~ FOR ( j = 0 ; j < lng ; j = j + 4 ) BEGIN INNER_PATCH_SAVE str ~%str%~ BEGIN READ_SHORT 0x00 + j mnXi READ_SHORT 0x02 + j mnYi END PATCH_IF ( mnXi <= minX ) BEGIN SET minX = mnXi END PATCH_IF ( mnXi >= maxX ) BEGIN SET maxX = mnXi END PATCH_IF ( mnYi <= minY ) BEGIN SET minY = mnYi END PATCH_IF ( mnYi >= maxY ) BEGIN SET maxY = mnYi END END END DEFINE_PATCH_MACRO ZZ_READ_WED_OFFSETS BEGIN READ_LONG 0x08 overlay_num READ_LONG 0x0c doors_num READ_LONG 0x10 overlay_off READ_LONG 0x14 sec_header_off READ_LONG 0x18 doors_off READ_LONG 0x1c door_tmap_lkup_off READ_LONG sec_header_off + 0x0c wall_group_off READ_LONG sec_header_off + 0x00 wall_poly_num READ_LONG sec_header_off + 0x04 wall_poly_off READ_LONG doors_off + 0x12 door_poly_off READ_LONG overlay_off + 0x10 tilemap_offset READ_LONG overlay_off + 0x14 tilemap_lookup_offset SET door_poly_num = 0 SET vertex_door_num = 0 SET tmap_lkp = 0 FOR ( i = 0 ; i < doors_num ; ++i ) BEGIN READ_SHORT doors_off + i * 0x1a + 0x0e door_poly_open READ_SHORT doors_off + i * 0x1a + 0x10 door_poly_closed SET door_poly_all = door_poly_open + door_poly_closed SET door_poly_num = door_poly_num + door_poly_open + door_poly_closed SET ddr_off = doors_off + i * 0x1a READ_LONG ddr_off + 0x12 offs FOR ( j = 0 ; j < door_poly_all ; ++j ) BEGIN READ_LONG offs + j * 0x12 + 0x04 vtx SET vertex_door_num = vertex_door_num + vtx END READ_SHORT doors_off + i * 0x1a + 0x0a tml READ_SHORT doors_off + i * 0x1a + 0x0c tmz SET tmap_lkp = tml + tmz END READ_LONG sec_header_off + 0x10 wall_poly_lkup_off READ_LONG sec_header_off + 0x08 vertex_wall_off READ_LONG door_poly_off + 0x00 vertex_wall_num SET vertex_door_off = vertex_wall_off + vertex_wall_num * 0x04 END DEFINE_PATCH_MACRO ZZ_CREATE_DOOR BEGIN SET length_first = 0x1a SET len = STRING_LENGTH ~%door_tmap_lkup%~ SET length_second = length_first + len SET len = STRING_LENGTH ~%polygons%~ SET length_third = length_second + len SET length_vertex = STRING_LENGTH ~%vert%~ //vertex SET offset = ~%SOURCE_SIZE%~ INSERT_BYTES offset length_vertex WRITE_EVALUATED_ASCII offset ~%vert%~ ( length_vertex ) WRITE_LONG sec_header_off + 0x08 vertex_wall_off + length_third //wall_poly_lkup WRITE_LONG sec_header_off + 0x10 wall_poly_lkup_off + length_third //door polygons SET offset = wall_poly_lkup_off SET len = STRING_LENGTH ~%polygons%~ INSERT_BYTES offset len WRITE_EVALUATED_ASCII offset ~%polygons%~ ( len ) SET poly_offs = offset + length_second //Walls WRITE_LONG sec_header_off + 0x04 wall_poly_off + length_second //Wall groups WRITE_LONG sec_header_off + 0x0c wall_group_off + length_second //Tilemap lookup FOR ( i = 0 ; i < overlay_num ; ++i ) BEGIN READ_LONG overlay_off + i * 0x18 + 0x14 tmap_lookup WRITE_LONG overlay_off + i * 0x18 + 0x14 tmap_lookup + length_second END //door_tilemap_lookup SET door_tilemap_lookup = tilemap_lookup_offset SET len = STRING_LENGTH ~%door_tmap_lkup%~ INSERT_BYTES door_tilemap_lookup len WRITE_EVALUATED_ASCII door_tilemap_lookup ~%door_tmap_lkup%~ ( len ) WRITE_LONG 0x1c door_tmap_lkup_off + length_first //Overlay tilemap FOR ( i = 0 ; i < overlay_num ; ++i ) BEGIN READ_LONG overlay_off + i * 0x18 + 0x10 tmap_offset WRITE_LONG overlay_off + i * 0x18 + 0x10 tmap_offset + length_first END //door SET door_off = tilemap_offset INSERT_BYTES door_off length_first WRITE_EVALUATED_ASCII door_off ~%new_door%~ ( length_first ) WRITE_LONG door_off + 0x12 poly_offs WRITE_LONG door_off + 0x16 poly_offs + poly_opened_cnt * 0x12 WRITE_LONG 0x0c doors_num + 1 END DEFINE_PATCH_MACRO ZZ_CREATE_DOOR_Z BEGIN //overlay SPRINT door_tmap_lkup ~~ PATCH_IF ( VARIABLE_IS_SET $tile(0) ) BEGIN PATCH_IF ( overlay_idx >= overlay_num ) BEGIN SET overlay_idx = overlay_num - 1 END PATCH_IF ( overlay_idx < 0 ) BEGIN SET overlay_idx = 0 END SET door_tmap_lkup_size = 0 FOR ( i = 0 ; i < 65536 ; ++i ) BEGIN PATCH_IF ( VARIABLE_IS_SET $tile(~%i%~) ) BEGIN SET cls_tile = LastTile + i SET cur_tile = $tile(~%i%~) READ_LONG overlay_off + overlay_idx * 0x18 + 0x10 tiled_object_offset WRITE_SHORT tiled_object_offset + cur_tile * 0x0a + 0x04 cls_tile INNER_PATCH_SAVE door_tmap_lkup ~%door_tmap_lkup%~ BEGIN INSERT_BYTES door_tmap_lkup_size 2 WRITE_SHORT door_tmap_lkup_size cur_tile SET door_tmap_lkup_size = door_tmap_lkup_size + 2 END END ELSE BEGIN SET i = 65536 END END END //vertex SPRINT vert ~~ SET vtxnum = 0 PATCH_IF ( VARIABLE_IS_SET $vertex(0) ) BEGIN FOR ( i = 0 ; i < 65536 ; ++i ) BEGIN PATCH_IF ( VARIABLE_IS_SET $vertex(~%i%~) ) BEGIN INNER_PATCH_SAVE vert ~%vert%~ BEGIN INSERT_BYTES i * 0x04 0x04 SET vvx = $vertex(~%i%~) WRITE_LONG i * 0x04 vvx SET vtxnum = vtxnum + 1 END END ELSE BEGIN SET i = 65536 END END END //polygon SPRINT polygons ~~ SET vtx = vertex_wall_num + vertex_door_num SET vn = 0 SET poly_num = 0 PATCH_IF ( VARIABLE_IS_SET $vertex_cnt(0) ) BEGIN FOR ( i = 0 ; i < 65536 ; ++i ) BEGIN PATCH_IF ( VARIABLE_IS_SET $vertex_cnt(~%i%~) ) BEGIN SPRINT polygon ~~ INNER_PATCH_SAVE polygon ~%polygon%~ BEGIN INSERT_BYTES 0x00 0x12 WRITE_LONG 0x00 vtx SET nvtx = $vertex_cnt(~%i%~) WRITE_LONG 0x04 nvtx SET vtx = vtx + nvtx PATCH_IF ( VARIABLE_IS_SET $flags(~%i%~) ) BEGIN SET flg = $flags(~%i%~) END ELSE BEGIN SET flg = 0 END WRITE_BYTE 0x08 flg WRITE_BYTE 0x09 0xff SET zn = nvtx * 4 INNER_PATCH_SAVE vert ~%vert%~ BEGIN READ_ASCII vn * 0x04 abs ( zn ) END LPF ZZ_GET_POLY_MINMAX_COORDS STR_VAR str = EVAL ~%abs%~ RET minX maxX minY maxY END SET vn = vn + nvtx WRITE_SHORT 0x0a minX WRITE_SHORT 0x0c maxX WRITE_SHORT 0x0e minY WRITE_SHORT 0x10 maxY END SPRINT polygons ~%polygons%%polygon%~ SET poly_num = poly_num + 1 END ELSE BEGIN SET i = 65536 END END END //door SPRINT new_door ~~ INNER_PATCH_SAVE new_door ~%new_door%~ BEGIN INSERT_BYTES 0x00 0x1a WRITE_EVALUATED_ASCII 0x00 ~%name%~ ( 8 ) WRITE_SHORT 0x08 is_door WRITE_SHORT 0x0a tmap_lkp WRITE_SHORT 0x0c door_tmap_lkup_size / 2 WRITE_SHORT 0x0e poly_opened_cnt WRITE_SHORT 0x10 poly_closed_cnt END END
-
Three functions:
FC_EDIT_AREA_DOOR
FC_EDIT_AREA_REGION
FC_EDIT_AREA_CONTAINERThey generally correspond to the standard weidu functions:
ALTER_AREA_REGION
ALTER_AREA_CONTAINER
ALTER_AREA_DOOR
but allow polygons to be modified. And the search for the desired structure occurs using a large number of parameters.Spoiler//BLOCK FC_UPDETE_AREA_OFFSETS DEFINE_PATCH_FUNCTION FC_UPDETE_AREA_OFFSETS INT_VAR num = 1 STR_VAR type = actor //actor 0x110, trigger 0x0c4, spawn 0x0c8, entrance 0x068, container 0x0c0, item 0x014, vertex 0x004, ambient 0x0d4, variable 0x050, door 0x0c8, animation 0x04c, automap 0x034, projectile 0x01c RET done BEGIN //BLOCK SET done = 0 READ_LONG 0x054 aco //actor_off READ_LONG 0x05c tro //trigger_off READ_LONG 0x060 spo //spawn_off READ_LONG 0x068 eno //entrance_off READ_LONG 0x070 coo //container_off READ_LONG 0x078 ito //item_off READ_LONG 0x07c veo //vertex_off READ_LONG 0x084 amo //ambient_off READ_LONG 0x088 vao //variable_off READ_SHORT 0x090 ofo //object_flag_off READ_LONG 0x0a0 exo //explored_off READ_LONG 0x0a8 doo //door_off READ_LONG 0x0b0 ano //animation_off READ_LONG 0x0b8 too //tiled_off READ_LONG 0x0bc soo //song_off READ_LONG 0x0c0 reo //rest_off READ_LONG 0x0c4 auo //automap_off READ_LONG 0x0cc pro //projectile_off PATCH_MATCH ~%type%~ WITH ~actor~ BEGIN SET size = num * 0x110 SET off = aco END ~trigger~ BEGIN SET size = num * 0x0c4 SET off = tro END ~spawn~ BEGIN SET size = num * 0x0c8 SET off = spo END ~entrance~ BEGIN SET size = num * 0x068 SET off = eno END ~container~ BEGIN SET size = num * 0x0c0 SET off = coo END ~item~ BEGIN SET size = num * 0x014 SET off = ito END ~vertex~ BEGIN SET size = num * 0x004 SET off = veo END ~ambient~ BEGIN SET size = num * 0x0d4 SET off = amo END ~variable~ BEGIN SET size = num * 0x050 SET off = vao END ~door~ BEGIN SET size = num * 0x0c8 SET off = doo END ~animation~ BEGIN SET size = num * 0x04c SET off = ano END ~automap~ BEGIN SET size = num * 0x034 SET off = auo END ~projectile~ BEGIN SET size = num * 0x01c SET off = pro END DEFAULT SET size = 0 SET off = 0 END PATCH_IF ( size != 0 ) AND ( off != 0 ) BEGIN PATCH_IF ( ~%type%~ STR_CMP ~actor~ ) AND ( aco >= off ) BEGIN WRITE_LONG 0x054 aco + size END PATCH_IF ( ~%type%~ STR_CMP ~trigger~ ) AND ( tro >= off ) BEGIN WRITE_LONG 0x05c tro + size END PATCH_IF ( ~%type%~ STR_CMP ~spawn~ ) AND ( spo >= off ) BEGIN WRITE_LONG 0x060 spo + size END PATCH_IF ( ~%type%~ STR_CMP ~entrance~ ) AND ( eno >= off ) BEGIN WRITE_LONG 0x068 eno + size END PATCH_IF ( ~%type%~ STR_CMP ~container~ ) AND ( coo >= off ) BEGIN WRITE_LONG 0x070 coo + size END PATCH_IF ( ~%type%~ STR_CMP ~item~ ) AND ( ito >= off ) BEGIN WRITE_LONG 0x078 ito + size END PATCH_IF ( ~%type%~ STR_CMP ~vertex~ ) AND ( veo >= off ) BEGIN WRITE_LONG 0x07c veo + size END PATCH_IF ( ~%type%~ STR_CMP ~ambient~ ) AND ( amo >= off ) BEGIN WRITE_LONG 0x084 amo + size END PATCH_IF ( ~%type%~ STR_CMP ~variable~ ) AND ( vao >= off ) BEGIN WRITE_LONG 0x088 vao + size END PATCH_IF ( ofo >= off ) BEGIN WRITE_SHORT 0x090 ofo + size END PATCH_IF ( exo >= off ) BEGIN WRITE_LONG 0x0a0 exo + size END PATCH_IF ( ~%type%~ STR_CMP ~door~ ) AND ( doo >= off ) BEGIN WRITE_LONG 0x0a8 doo + size END PATCH_IF ( ~%type%~ STR_CMP ~animation~ ) AND ( ano >= off ) BEGIN WRITE_LONG 0x0b0 ano + size END PATCH_IF ( too >= off ) BEGIN WRITE_LONG 0x0b8 too + size END PATCH_IF ( soo >= off ) BEGIN WRITE_LONG 0x0bc soo + size END PATCH_IF ( reo >= off ) BEGIN WRITE_LONG 0x0c0 reo + size END PATCH_IF ( ~%type%~ STR_CMP ~automap~ ) AND ( auo >= off ) BEGIN WRITE_LONG 0x0c4 auo + size END PATCH_IF ( ~%type%~ STR_CMP ~projectile~ ) AND ( pro >= off ) BEGIN WRITE_LONG 0x0cc pro + size END SET done = 1 END //BLOCKEND END //BLOCKEND //BLOCK FC_GET_XY_COORDINATE DEFINE_PATCH_FUNCTION FC_GET_XY_COORDINATE INT_VAR num = 0 RET x1 y1 BEGIN y1 = ( num >> 16 ) x1 = num - ( y1 << 16 ) END //BLOCKEND //BLOCK FC_UPDATE_VERTEX_INDEX DEFINE_PATCH_FUNCTION FC_UPDATE_VERTEX_INDEX INT_VAR skip = 0 numx = 100000 adds = 100000 STR_VAR type = trigger //trigger, container, door BEGIN READ_SHORT 0x5a type_cnt READ_LONG 0x5c type_off PATCH_IF ( type_cnt > 0 ) BEGIN FOR ( i = 0 ; i < type_cnt ; ++i ) BEGIN PATCH_IF ( ~%type%~ STR_EQ ~trigger~ ) AND ( i = skip ) BEGIN END ELSE BEGIN READ_LONG type_off + i * 0x0c4 + 0x2c f_vert PATCH_IF ( f_vert >= numx ) BEGIN WRITE_LONG type_off + i * 0x0c4 + 0x2c f_vert + adds END END END END READ_SHORT 0x74 type_cnt READ_LONG 0x70 type_off PATCH_IF ( type_cnt > 0 ) BEGIN FOR ( i = 0 ; i < type_cnt ; ++i ) BEGIN PATCH_IF ( ~%type%~ STR_EQ ~container~ ) AND ( i = skip ) BEGIN END ELSE BEGIN READ_LONG type_off + i * 0x0c0 + 0x50 f_vert PATCH_IF ( f_vert >= numx ) BEGIN WRITE_LONG type_off + i * 0x0c0 + 0x50 f_vert + adds END END END END READ_LONG 0xa4 type_cnt READ_LONG 0xa8 type_off PATCH_IF ( type_cnt > 0 ) BEGIN FOR ( i = 0 ; i < type_cnt ; ++i ) BEGIN PATCH_IF ( ~%type%~ STR_EQ ~door~ ) AND ( i = skip ) BEGIN END ELSE BEGIN READ_LONG type_off + i * 0x0c8 + 0x2c f_vert PATCH_IF ( f_vert >= numx ) BEGIN WRITE_LONG type_off + i * 0x0c8 + 0x2c f_vert + adds END READ_LONG type_off + i * 0x0c8 + 0x34 f_vert PATCH_IF ( f_vert >= numx ) BEGIN WRITE_LONG type_off + i * 0x0c8 + 0x34 f_vert + adds END READ_LONG type_off + i * 0x0c8 + 0x48 f_vert PATCH_IF ( f_vert >= numx ) BEGIN WRITE_LONG type_off + i * 0x0c8 + 0x48 f_vert + adds END READ_LONG type_off + i * 0x0c8 + 0x50 f_vert PATCH_IF ( f_vert >= numx ) BEGIN WRITE_LONG type_off + i * 0x0c8 + 0x50 f_vert + adds END END END END END //BLOCKEND //BLOCK FC_EDIT_AREA_DOOR DEFINE_PATCH_FUNCTION FC_EDIT_AREA_DOOR INT_VAR flags = "-1" hp = "-1" ac = "-1" cursor_idx = "-1" trap_detect_dif = "-1" trap_remove_dif = "-1" is_trapped = "-1" is_trap_detect = "-1" launch_x = "-1" launch_y = "-1" detect_diff = "-1" lock_diff = "-1" open_loc_x = "-1" open_loc_y = "-1" close_loc_x = "-1" close_loc_y = "-1" unlock_message = 99999999 speaker_name = 99999999 //vertex_open_X //vertex_closed_X //impeded_open_X //impeded_closed_X vertex_open_0 = "-1" vertex_closed_0 = "-1" impeded_open_0 = "-1" impeded_closed_0 = "-1" // AND ( $vertex(0) >= 0 ) STR_VAR match_name = "same" match_key = "same" match_script = "same" name = "same" doorId = "same" open_sound = "same" close_sound = "same" key = "same" script = "same" travel_trigger = "same" dialogue = "same" RET done BEGIN //BLOCK SET done = 0 SET match = 0 READ_LONG 0x0a4 ~d_cnt~ READ_LONG 0x0a8 ~d_off~ PATCH_IF ( is_trapped > 1 ) BEGIN SET is_trapped = 1 END PATCH_IF ( is_trap_detect > 1 ) BEGIN SET is_trap_detect = 1 END PATCH_IF ( d_cnt > 0 ) BEGIN FOR ( i = 0 ; i < d_cnt ; ++i ) BEGIN SET offset = d_off + i * 0xc8 PATCH_IF ( ~%match_name%~ STR_CMP ~same~ ) BEGIN READ_ASCII offset d_name (32) NULL PATCH_IF ( ~%match_name%~ STR_EQ ~%d_name%~ ) BEGIN SET match = 1 END ELSE BEGIN SET match = 0 END END PATCH_IF ( ~%match_key%~ STR_CMP ~same~ ) BEGIN READ_ASCII offset + 0x78 d_key (8) NULL PATCH_IF ( ~%match_key%~ STR_EQ ~%d_key%~ ) BEGIN SET match = 1 END ELSE BEGIN SET match = 0 END END PATCH_IF ( ~%match_script%~ STR_CMP ~same~ ) BEGIN READ_ASCII offset + 0x80 d_scr (8) NULL PATCH_IF ( ~%match_script%~ STR_EQ ~%d_scr%~ ) BEGIN SET match = 1 END ELSE BEGIN SET match = 0 END END PATCH_IF (match) BEGIN SET door_pos = i SET i = d_cnt SET patch_offset = offset END END END PATCH_IF (match) BEGIN PATCH_IF ( ~%name%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset ~%name%~ (32) END PATCH_IF ( ~%doorId%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset + 0x20 ~%doorId%~ (8) END PATCH_IF ( ~%flags%~ >= 0 ) BEGIN WRITE_LONG patch_offset + 0x28 ~%flags%~ END PATCH_IF ( ~%hp%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x54 ~%hp%~ END PATCH_IF ( ~%ac%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x56 ~%ac%~ END PATCH_IF ( ~%open_sound%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset + 0x58 ~%open_sound%~ (8) END PATCH_IF ( ~%close_sound%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset + 0x60 ~%close_sound%~ (8) END PATCH_IF ( ~%cursor_idx%~ >= 0 ) BEGIN WRITE_LONG patch_offset + 0x68 ~%cursor_idx%~ END PATCH_IF ( ~%trap_detect_dif%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x6c ~%trap_detect_dif%~ END PATCH_IF ( ~%trap_remove_dif%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x6e ~%trap_remove_dif%~ END PATCH_IF ( ~%is_trapped%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x70 ~%is_trapped%~ END PATCH_IF ( ~%is_trap_detect%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x72 ~%is_trap_detect%~ END PATCH_IF ( ~%launch_x%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x74 ~%launch_x%~ END PATCH_IF ( ~%launch_y%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x76 ~%launch_y%~ END PATCH_IF ( ~%key%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset + 0x78 ~%key%~ (8) END PATCH_IF ( ~%script%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset + 0x80 ~%script%~ (8) END PATCH_IF ( ~%detect_diff%~ >= 0 ) BEGIN WRITE_LONG patch_offset + 0x88 ~%detect_diff%~ END PATCH_IF ( ~%lock_diff%~ >= 0 ) BEGIN WRITE_LONG patch_offset + 0x8c ~%lock_diff%~ END PATCH_IF ( ~%open_loc_x%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x90 ~%open_loc_x%~ END PATCH_IF ( ~%open_loc_y%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x92 ~%open_loc_y%~ END PATCH_IF ( ~%close_loc_x%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x94 ~%close_loc_x%~ END PATCH_IF ( ~%close_loc_y%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x96 ~%close_loc_y%~ END PATCH_IF ( ~%unlock_message%~ != 99999999 ) BEGIN WRITE_LONG patch_offset + 0x98 ~%unlock_message%~ END PATCH_IF ( ~%travel_trigger%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset + 0x9c ~%travel_trigger%~ (24) END PATCH_IF ( ~%speaker_name%~ != 99999999 ) BEGIN WRITE_LONG patch_offset + 0xb4 ~%speaker_name%~ END PATCH_IF ( ~%dialogue%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset + 0xb8 ~%dialogue%~ (8) END //vertex_open_X PATCH_IF ( VARIABLE_IS_SET $vertex_open(0) AND ( $vertex_open(0) >= 0 ) ) BEGIN READ_LONG patch_offset + 0x2c vertex_first READ_SHORT patch_offset + 0x30 vertex_cnt SET deleted_vertex = 0 - vertex_cnt READ_LONG 0x7c all_vertex_off READ_SHORT 0x80 all_vertex_cnt SET v_off = all_vertex_off + vertex_first * 0x004 SET num_v = 0 DELETE_BYTES v_off vertex_cnt * 0x004 SET x_bounding_left = 10000 SET x_bounding_top = 10000 SET x_bounding_right = 0 SET x_bounding_bottom = 0 FOR ( i = 0 ; i < 65535 ; ++i ) BEGIN PATCH_IF ( VARIABLE_IS_SET $vertex_open(~%i%~) ) BEGIN SET v_num = $vertex_open(~%i%~) INSERT_BYTES v_off + i * 0x004 0x004 WRITE_LONG v_off + i * 0x004 v_num LPF FC_GET_XY_COORDINATE INT_VAR num = v_num RET x1 y1 END PATCH_IF ( x_bounding_left > x1 ) BEGIN SET x_bounding_left = x1 END PATCH_IF ( x_bounding_top > y1 ) BEGIN SET x_bounding_top = y1 END PATCH_IF ( x_bounding_right < x1 ) BEGIN SET x_bounding_right = x1 END PATCH_IF ( x_bounding_bottom < y1 ) BEGIN SET x_bounding_bottom = y1 END SET deleted_vertex = deleted_vertex + 1 SET num_v = num_v + 1 END ELSE BEGIN SET i = 65535 END END WRITE_SHORT 0x80 all_vertex_cnt + deleted_vertex WRITE_SHORT patch_offset + 0x30 num_v WRITE_SHORT patch_offset + 0x38 x_bounding_left WRITE_SHORT patch_offset + 0x3a x_bounding_top WRITE_SHORT patch_offset + 0x3c x_bounding_right WRITE_SHORT patch_offset + 0x3e x_bounding_bottom READ_LONG patch_offset + 0x34 upd_vert_1 READ_LONG patch_offset + 0x48 upd_vert_2 READ_LONG patch_offset + 0x50 upd_vert_3 PATCH_IF ( upd_vert_1 >= vertex_first ) BEGIN WRITE_LONG patch_offset + 0x34 upd_vert_1 + deleted_vertex END PATCH_IF ( upd_vert_2 >= vertex_first ) BEGIN WRITE_LONG patch_offset + 0x48 upd_vert_2 + deleted_vertex END PATCH_IF ( upd_vert_3 >= vertex_first ) BEGIN WRITE_LONG patch_offset + 0x50 upd_vert_3 + deleted_vertex END LPF FC_UPDATE_VERTEX_INDEX INT_VAR skip = door_pos numx = vertex_first adds = deleted_vertex STR_VAR type = door END LPF FC_UPDETE_AREA_OFFSETS INT_VAR num = deleted_vertex STR_VAR type = vertex END CLEAR_ARRAY vertex_open END //vertex_closed_X PATCH_IF ( VARIABLE_IS_SET $vertex_closed(0) AND ( $vertex_closed(0) >= 0 ) ) BEGIN READ_LONG patch_offset + 0x34 vertex_first READ_SHORT patch_offset + 0x32 vertex_cnt SET deleted_vertex = 0 - vertex_cnt READ_LONG 0x7c all_vertex_off READ_SHORT 0x80 all_vertex_cnt SET v_off = all_vertex_off + vertex_first * 0x004 SET num_v = 0 DELETE_BYTES v_off vertex_cnt * 0x004 SET x_bounding_left = 10000 SET x_bounding_top = 10000 SET x_bounding_right = 0 SET x_bounding_bottom = 0 FOR ( i = 0 ; i < 65535 ; ++i ) BEGIN PATCH_IF ( VARIABLE_IS_SET $vertex_closed(~%i%~) ) BEGIN SET v_num = $vertex_closed(~%i%~) INSERT_BYTES v_off + i * 0x004 0x004 WRITE_LONG v_off + i * 0x004 v_num LPF FC_GET_XY_COORDINATE INT_VAR num = v_num RET x1 y1 END PATCH_IF ( x_bounding_left > x1 ) BEGIN SET x_bounding_left = x1 END PATCH_IF ( x_bounding_top > y1 ) BEGIN SET x_bounding_top = y1 END PATCH_IF ( x_bounding_right < x1 ) BEGIN SET x_bounding_right = x1 END PATCH_IF ( x_bounding_bottom < y1 ) BEGIN SET x_bounding_bottom = y1 END SET deleted_vertex = deleted_vertex + 1 SET num_v = num_v + 1 END ELSE BEGIN SET i = 65535 END END WRITE_SHORT 0x80 all_vertex_cnt + deleted_vertex WRITE_SHORT patch_offset + 0x32 num_v WRITE_SHORT patch_offset + 0x40 x_bounding_left WRITE_SHORT patch_offset + 0x42 x_bounding_top WRITE_SHORT patch_offset + 0x44 x_bounding_right WRITE_SHORT patch_offset + 0x46 x_bounding_bottom READ_LONG patch_offset + 0x2c upd_vert_1 READ_LONG patch_offset + 0x48 upd_vert_2 READ_LONG patch_offset + 0x50 upd_vert_3 PATCH_IF ( upd_vert_1 >= vertex_first ) BEGIN WRITE_LONG patch_offset + 0x2c upd_vert_1 + deleted_vertex END PATCH_IF ( upd_vert_2 >= vertex_first ) BEGIN WRITE_LONG patch_offset + 0x48 upd_vert_2 + deleted_vertex END PATCH_IF ( upd_vert_3 >= vertex_first ) BEGIN WRITE_LONG patch_offset + 0x50 upd_vert_3 + deleted_vertex END LPF FC_UPDATE_VERTEX_INDEX INT_VAR skip = door_pos numx = vertex_first adds = deleted_vertex STR_VAR type = door END LPF FC_UPDETE_AREA_OFFSETS INT_VAR num = deleted_vertex STR_VAR type = vertex END CLEAR_ARRAY vertex_closed END //impeded_open_X PATCH_IF ( VARIABLE_IS_SET $impeded_open(0) AND ( $impeded_open(0) >= 0 ) ) BEGIN READ_LONG patch_offset + 0x48 vertex_first READ_SHORT patch_offset + 0x4c vertex_cnt SET deleted_vertex = 0 - vertex_cnt READ_LONG 0x7c all_vertex_off READ_SHORT 0x80 all_vertex_cnt SET v_off = all_vertex_off + vertex_first * 0x004 SET num_v = 0 DELETE_BYTES v_off vertex_cnt * 0x004 FOR ( i = 0 ; i < 65535 ; ++i ) BEGIN PATCH_IF ( VARIABLE_IS_SET $impeded_open(~%i%~) ) BEGIN SET v_num = $impeded_open(~%i%~) INSERT_BYTES v_off + i * 0x004 0x004 WRITE_LONG v_off + i * 0x004 v_num SET deleted_vertex = deleted_vertex + 1 SET num_v = num_v + 1 END ELSE BEGIN SET i = 65535 END END WRITE_SHORT 0x80 all_vertex_cnt + deleted_vertex WRITE_SHORT patch_offset + 0x4c num_v READ_LONG patch_offset + 0x2c upd_vert_1 READ_LONG patch_offset + 0x34 upd_vert_2 READ_LONG patch_offset + 0x50 upd_vert_3 PATCH_IF ( upd_vert_1 >= vertex_first ) BEGIN WRITE_LONG patch_offset + 0x2c upd_vert_1 + deleted_vertex END PATCH_IF ( upd_vert_2 >= vertex_first ) BEGIN WRITE_LONG patch_offset + 0x34 upd_vert_2 + deleted_vertex END PATCH_IF ( upd_vert_3 >= vertex_first ) BEGIN WRITE_LONG patch_offset + 0x50 upd_vert_3 + deleted_vertex END LPF FC_UPDATE_VERTEX_INDEX INT_VAR skip = door_pos numx = vertex_first adds = deleted_vertex STR_VAR type = door END LPF FC_UPDETE_AREA_OFFSETS INT_VAR num = deleted_vertex STR_VAR type = vertex END CLEAR_ARRAY impeded_open END //impeded_closed_X PATCH_IF ( VARIABLE_IS_SET $impeded_closed(0) AND ( $impeded_closed(0) >= 0 ) ) BEGIN READ_LONG patch_offset + 0x50 vertex_first READ_SHORT patch_offset + 0x4e vertex_cnt SET deleted_vertex = 0 - vertex_cnt READ_LONG 0x7c all_vertex_off READ_SHORT 0x80 all_vertex_cnt SET v_off = all_vertex_off + vertex_first * 0x004 SET num_v = 0 DELETE_BYTES v_off vertex_cnt * 0x004 FOR ( i = 0 ; i < 65535 ; ++i ) BEGIN PATCH_IF ( VARIABLE_IS_SET $impeded_closed(~%i%~) ) BEGIN SET v_num = $impeded_closed(~%i%~) INSERT_BYTES v_off + i * 0x004 0x004 WRITE_LONG v_off + i * 0x004 v_num SET deleted_vertex = deleted_vertex + 1 SET num_v = num_v + 1 END ELSE BEGIN SET i = 65535 END END WRITE_SHORT 0x80 all_vertex_cnt + deleted_vertex WRITE_SHORT patch_offset + 0x4e num_v READ_LONG patch_offset + 0x2c upd_vert_1 READ_LONG patch_offset + 0x34 upd_vert_2 READ_LONG patch_offset + 0x48 upd_vert_3 PATCH_IF ( upd_vert_1 >= vertex_first ) BEGIN WRITE_LONG patch_offset + 0x2c upd_vert_1 + deleted_vertex END PATCH_IF ( upd_vert_2 >= vertex_first ) BEGIN WRITE_LONG patch_offset + 0x34 upd_vert_2 + deleted_vertex END PATCH_IF ( upd_vert_3 >= vertex_first ) BEGIN WRITE_LONG patch_offset + 0x48 upd_vert_3 + deleted_vertex END LPF FC_UPDATE_VERTEX_INDEX INT_VAR skip = door_pos numx = vertex_first adds = deleted_vertex STR_VAR type = door END LPF FC_UPDETE_AREA_OFFSETS INT_VAR num = deleted_vertex STR_VAR type = vertex END CLEAR_ARRAY impeded_closed END SET done = 1 END //BLOCKEND END //BLOCKEND //BLOCK FC_EDIT_AREA_REGION DEFINE_PATCH_FUNCTION FC_EDIT_AREA_REGION INT_VAR region_type = "-1" trigger_value = "-1" cursor_idx = "-1" flags = "-1" info_text = 99999999 trap_detect_dif = "-1" trap_remove_dif = "-1" is_trapped = "-1" is_trap_detect = "-1" launch_x = "-1" launch_y = "-1" alt_point_x = "-1" alt_point_y = "-1" //vertex_X vertex_0 = "-1" STR_VAR match_name = "same" match_key = "same" match_script = "same" name = "same" dest_area = "same" entrance = "same" key = "same" script = "same" RET done BEGIN //BLOCK SET done = 0 SET match = 0 READ_SHORT 0x05a ~d_cnt~ READ_LONG 0x05c ~d_off~ PATCH_IF ( region_type > 2 ) BEGIN SET region_type = 1 END PATCH_IF ( is_trapped > 1 ) BEGIN SET is_trapped = 1 END PATCH_IF ( is_trap_detect > 1 ) BEGIN SET is_trap_detect = 1 END PATCH_IF ( d_cnt > 0 ) BEGIN FOR ( i = 0 ; i < d_cnt ; ++i ) BEGIN SET offset = d_off + i * 0xc4 PATCH_IF ( ~%match_name%~ STR_CMP ~same~ ) BEGIN READ_ASCII offset d_name (32) NULL PATCH_IF ( ~%match_name%~ STR_EQ ~%d_name%~ ) BEGIN SET match = 1 END ELSE BEGIN SET match = 0 END END PATCH_IF ( ~%match_key%~ STR_CMP ~same~ ) BEGIN READ_ASCII offset + 0x74 d_key (8) NULL PATCH_IF ( ~%match_key%~ STR_EQ ~%d_key%~ ) BEGIN SET match = 1 END ELSE BEGIN SET match = 0 END END PATCH_IF ( ~%match_script%~ STR_CMP ~same~ ) BEGIN READ_ASCII offset + 0x7c d_scr (8) NULL PATCH_IF ( ~%match_script%~ STR_EQ ~%d_scr%~ ) BEGIN SET match = 1 END ELSE BEGIN SET match = 0 END END PATCH_IF (match) BEGIN SET door_pos = i SET i = d_cnt SET patch_offset = offset END END END PATCH_IF (match) BEGIN PATCH_IF ( ~%name%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset ~%name%~ (32) END PATCH_IF ( ~%region_type%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x20 ~%region_type%~ END PATCH_IF ( ~%trigger_value%~ >= 0 ) BEGIN WRITE_LONG patch_offset + 0x30 ~%trigger_value%~ END PATCH_IF ( ~%cursor_idx%~ >= 0 ) BEGIN WRITE_LONG patch_offset + 0x34 ~%cursor_idx%~ END PATCH_IF ( ~%dest_area%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset + 0x38 ~%dest_area%~ (8) END PATCH_IF ( ~%entrance%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset + 0x40 ~%entrance%~ (32) END PATCH_IF ( ~%flags%~ >= 0 ) BEGIN WRITE_LONG patch_offset + 0x60 ~%flags%~ END PATCH_IF ( ~%info_text%~ != 99999999 ) BEGIN WRITE_LONG patch_offset + 0x64 ~%info_text%~ END PATCH_IF ( ~%trap_detect_dif%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x68 ~%trap_detect_dif%~ END PATCH_IF ( ~%trap_remove_dif%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x6a ~%trap_remove_dif%~ END PATCH_IF ( ~%is_trapped%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x6c ~%is_trapped%~ END PATCH_IF ( ~%is_trap_detect%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x6e ~%is_trap_detect%~ END PATCH_IF ( ~%launch_x%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x70 ~%launch_x%~ END PATCH_IF ( ~%launch_y%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x72 ~%launch_y%~ END PATCH_IF ( ~%key%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset + 0x74 ~%key%~ (8) END PATCH_IF ( ~%script%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset + 0x7c ~%script%~ (8) END PATCH_IF ( ~%alt_point_x%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x84 ~%alt_point_x%~ END PATCH_IF ( ~%alt_point_y%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x86 ~%alt_point_y%~ END PATCH_IF ( VARIABLE_IS_SET $vertex(0) AND ( $vertex(0) >= 0 ) ) BEGIN READ_SHORT patch_offset + 0x2a vertex_cnt READ_LONG patch_offset + 0x2c vertex_first SET deleted_vertex = 0 - vertex_cnt READ_LONG 0x7c all_vertex_off READ_SHORT 0x80 all_vertex_cnt SET v_off = all_vertex_off + vertex_first * 0x004 SET num_v = 0 DELETE_BYTES v_off vertex_cnt * 0x004 SET x_bounding_left = 10000 SET x_bounding_top = 10000 SET x_bounding_right = 0 SET x_bounding_bottom = 0 FOR ( i = 0 ; i < 65535 ; ++i ) BEGIN PATCH_IF ( VARIABLE_IS_SET $vertex(~%i%~) ) BEGIN SET v_num = $vertex(~%i%~) INSERT_BYTES v_off + i * 0x004 0x004 WRITE_LONG v_off + i * 0x004 v_num LPF FC_GET_XY_COORDINATE INT_VAR num = v_num RET x1 y1 END PATCH_IF ( x_bounding_left > x1 ) BEGIN SET x_bounding_left = x1 END PATCH_IF ( x_bounding_top > y1 ) BEGIN SET x_bounding_top = y1 END PATCH_IF ( x_bounding_right < x1 ) BEGIN SET x_bounding_right = x1 END PATCH_IF ( x_bounding_bottom < y1 ) BEGIN SET x_bounding_bottom = y1 END SET deleted_vertex = deleted_vertex + 1 SET num_v = num_v + 1 END ELSE BEGIN SET i = 65535 END END WRITE_SHORT 0x80 all_vertex_cnt + deleted_vertex WRITE_SHORT patch_offset + 0x2a num_v WRITE_SHORT patch_offset + 0x22 x_bounding_left WRITE_SHORT patch_offset + 0x24 x_bounding_top WRITE_SHORT patch_offset + 0x26 x_bounding_right WRITE_SHORT patch_offset + 0x28 x_bounding_bottom LPF FC_UPDATE_VERTEX_INDEX INT_VAR skip = door_pos numx = vertex_first adds = deleted_vertex STR_VAR type = trigger END LPF FC_UPDETE_AREA_OFFSETS INT_VAR num = deleted_vertex STR_VAR type = vertex END CLEAR_ARRAY vertex END SET done = 1 END //BLOCKEND END //BLOCKEND //BLOCK FC_EDIT_AREA_CONTAINER DEFINE_PATCH_FUNCTION FC_EDIT_AREA_CONTAINER INT_VAR loc_x = "-1" loc_y = "-1" type = "-1" lock_diff = "-1" flags = "-1" trap_detect_dif = "-1" trap_remove_dif = "-1" is_trapped = "-1" is_trap_detect = "-1" launch_x = "-1" launch_y = "-1" active_range = "-1" break_diff = "-1" lpick_text = 99999999 //vertex_X vertex_0 = "-1" STR_VAR match_name = "same" match_key = "same" match_script = "same" match_owner = "same" name = "same" script = "same" owner = "same" key = "same" RET done BEGIN //BLOCK SET done = 0 SET match = 0 READ_SHORT 0x074 ~d_cnt~ READ_LONG 0x070 ~d_off~ PATCH_IF ( type > 12 ) BEGIN SET type = 4 END PATCH_IF ( is_trapped > 1 ) BEGIN SET is_trapped = 1 END PATCH_IF ( is_trap_detect > 1 ) BEGIN SET is_trap_detect = 1 END /* */ PATCH_IF ( d_cnt > 0 ) BEGIN FOR ( i = 0 ; i < d_cnt ; ++i ) BEGIN SET offset = d_off + i * 0xc0 PATCH_IF ( ~%match_name%~ STR_CMP ~same~ ) BEGIN READ_ASCII offset d_name (32) NULL PATCH_IF ( ~%match_name%~ STR_EQ ~%d_name%~ ) BEGIN SET match = 1 END ELSE BEGIN SET match = 0 END END PATCH_IF ( ~%match_key%~ STR_CMP ~same~ ) BEGIN READ_ASCII offset + 0x78 d_key (8) NULL PATCH_IF ( ~%match_key%~ STR_EQ ~%d_key%~ ) BEGIN SET match = 1 END ELSE BEGIN SET match = 0 END END PATCH_IF ( ~%match_script%~ STR_CMP ~same~ ) BEGIN READ_ASCII offset + 0x48 d_scr (8) NULL PATCH_IF ( ~%match_script%~ STR_EQ ~%d_scr%~ ) BEGIN SET match = 1 END ELSE BEGIN SET match = 0 END END PATCH_IF ( ~%match_owner%~ STR_CMP ~same~ ) BEGIN READ_ASCII offset + 0x58 d_owner (32) NULL PATCH_IF ( ~%match_owner%~ STR_EQ ~%d_owner%~ ) BEGIN SET match = 1 END ELSE BEGIN SET match = 0 END END PATCH_IF (match) BEGIN SET door_pos = i SET i = d_cnt SET patch_offset = offset END END END PATCH_IF (match) BEGIN PATCH_IF ( ~%name%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset ~%name%~ (32) END PATCH_IF ( ~%loc_x%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x20 ~%loc_x%~ END PATCH_IF ( ~%loc_y%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x22 ~%loc_y%~ END PATCH_IF ( ~%type%~ >= 1 ) BEGIN WRITE_SHORT patch_offset + 0x24 ~%type%~ END PATCH_IF ( ~%lock_diff%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x26 ~%lock_diff%~ END PATCH_IF ( ~%flags%~ >= 0 ) BEGIN WRITE_LONG patch_offset + 0x28 ~%flags%~ END PATCH_IF ( ~%trap_detect_dif%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x2c ~%trap_detect_dif%~ END PATCH_IF ( ~%trap_remove_dif%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x2e ~%trap_remove_dif%~ END PATCH_IF ( ~%is_trapped%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x30 ~%is_trapped%~ END PATCH_IF ( ~%is_trap_detect%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x32 ~%is_trap_detect%~ END PATCH_IF ( ~%launch_x%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x34 ~%launch_x%~ END PATCH_IF ( ~%launch_y%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x36 ~%launch_y%~ END PATCH_IF ( ~%script%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset + 0x48 ~%script%~ (8) END PATCH_IF ( ~%active_range%~ >= 0 ) BEGIN WRITE_SHORT patch_offset + 0x56 ~%active_range%~ END PATCH_IF ( ~%owner%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset + 0x58 ~%owner%~ (32) END PATCH_IF ( ~%key%~ STR_CMP ~same~ ) BEGIN WRITE_ASCIIE patch_offset + 0x78 ~%key%~ (8) END PATCH_IF ( ~%break_diff%~ >= 0 ) BEGIN WRITE_LONG patch_offset + 0x80 ~%break_diff%~ END PATCH_IF ( ~%lpick_text%~ != 99999999 ) BEGIN WRITE_LONG patch_offset + 0x84 ~%lpick_text%~ END PATCH_IF ( VARIABLE_IS_SET $vertex(0) AND ( $vertex(0) >= 0 ) ) BEGIN READ_SHORT patch_offset + 0x54 vertex_cnt READ_LONG patch_offset + 0x50 vertex_first SET deleted_vertex = 0 - vertex_cnt READ_LONG 0x7c all_vertex_off READ_SHORT 0x80 all_vertex_cnt SET v_off = all_vertex_off + vertex_first * 0x004 SET num_v = 0 DELETE_BYTES v_off vertex_cnt * 0x004 SET x_bounding_left = 10000 SET x_bounding_top = 10000 SET x_bounding_right = 0 SET x_bounding_bottom = 0 FOR ( i = 0 ; i < 65535 ; ++i ) BEGIN PATCH_IF ( VARIABLE_IS_SET $vertex(~%i%~) ) BEGIN SET v_num = $vertex(~%i%~) INSERT_BYTES v_off + i * 0x004 0x004 WRITE_LONG v_off + i * 0x004 v_num LPF FC_GET_XY_COORDINATE INT_VAR num = v_num RET x1 y1 END PATCH_IF ( x_bounding_left > x1 ) BEGIN SET x_bounding_left = x1 END PATCH_IF ( x_bounding_top > y1 ) BEGIN SET x_bounding_top = y1 END PATCH_IF ( x_bounding_right < x1 ) BEGIN SET x_bounding_right = x1 END PATCH_IF ( x_bounding_bottom < y1 ) BEGIN SET x_bounding_bottom = y1 END SET deleted_vertex = deleted_vertex + 1 SET num_v = num_v + 1 END ELSE BEGIN SET i = 65535 END END WRITE_SHORT 0x80 all_vertex_cnt + deleted_vertex WRITE_SHORT patch_offset + 0x54 num_v WRITE_SHORT patch_offset + 0x38 x_bounding_left WRITE_SHORT patch_offset + 0x3a x_bounding_top WRITE_SHORT patch_offset + 0x3c x_bounding_right WRITE_SHORT patch_offset + 0x3e x_bounding_bottom LPF FC_UPDATE_VERTEX_INDEX INT_VAR skip = door_pos numx = vertex_first adds = deleted_vertex STR_VAR type = container END LPF FC_UPDETE_AREA_OFFSETS INT_VAR num = deleted_vertex STR_VAR type = vertex END CLEAR_ARRAY vertex END SET done = 1 END //BLOCKEND END //BLOCKEND
-
I haven't downloaded the new version yet. But at home he was correcting something. In some script, I don't remember exactly, there was a variable name bg_plot instead of bd_plot. And you can also change the ScriptName for Sendai from BG1. Otherwise, Sendai's murder figures in the achievements already in the first part. It doesn't interest me, but suddenly it matters to someone.
-
I don't mind cooperating. But my approach to IWD is somewhat different. There will be another mod that will combine IWD with the BG story. Now I am drawing locations for the mod. But I am always ready for criticism and discussion.
PS. What we have now, a trip to the IWD, is only for tests. And in the future, they will be available when choosing campaigns.
PPS. In general, my subraces are implemented in a separate mod.
PPS2. I started doing IWD1 when I didn’t have access to the Enhanced Editing version yet. So I took the old game as a basis, and then added what was added to Enhanced Edition. And another question for the authors of Unfinished Business. I have included it in my mod. But I would not like to have problems. If there is an objection, it will be deleted.
-
The failure is most likely due to an empty array. Weidu is a hooligan with this. I'll send Austin the corrected code tomorrow.
-
Нi, @k4trhos. I just have some plans for going through the IWD. but about how to do it, I'm ready to talk. But only to small changes.
-
On 5/23/2021 at 11:35 PM, Fauls said:
In version 2.5.17.6 everything is fine, but in version 2.6.5 begins spam messages, we will wait for the fix ... Maybe there are considerations how to fix it?
I do not know now. I don't have version 2.6+. And I can't say exactly when it will be. Therefore, I cannot check yet.
-
1 hour ago, Guest Feniks said:
Just got Viconia and she has exactly the same problem.
Perhaps some other mod changed something? I tested on SOD, BG2, EET and IWDEE. It never happened.
What version of the game? I have 2.5.17.6. I don't have version 2.6, so I can't check it there.
-
On 5/14/2021 at 2:55 AM, Guest Feniks said:
Hopefully can be fixed, im playing a Drow, whenever i go indoors during the day, i get a repeated message that "Unaffected by effects from" which essentially seems to be the blindness being countered.
Never seen a problem like this. I do not have any messages. It’s strange.
-
jastey is right. Don't confuse this mod with this picture.
-
Not. I want to make wings for basic character animations that the player can choose. In the same way as in 1pp, wings are made for eriniyes(I don't know exactly how this word is spelled in English ).
Therefore, he forbade this race to use helmets.
-
Perhaps the first version of the mod will come out without animation, but I will eventually do it.
-
@Ezakimake I don't know how to say it exactly in English, it is the color of the dragon.
There will be a selection of all dragon colors from DND.
@EndarireI want to make a half-dragon with wings and a tail. Now I'm working on animation.
reading .CRE values and inserting them into a DLG
in Modding Q&A
Posted · Edited by tipun
Alternatively, you can create spells that use opcode # 326 (326) Apply Effects List to set a variable based on the stat value. Which will be applied once every 6 seconds (or more often, or less often).
And through the script, check this value and set the SetTokenGlobal action (You can use Switch().).
True, all this will need to be done for each parameter for each party member. And add variable check with OnCreation ().
Until I thought of another option.