//////////////LEVEL FIFTY RULES////////////////////////////////// BEGIN @441 REQUIRE_PREDICATE NOT (FILE_EXISTS_IN_GAME ~DD0204.are~ OR FILE_EXISTS_IN_GAME ~RA4300.are~) //TDD or RoT /* FORBID_FILE ~data/ROT-RULE.bif~ @444 FORBID_FILE ~data/TDD-RULE.bif~ @442 */ //----- FUNCTIONS TO EXTEND THE TABLES UP TO LEVEL 50 -----// //prepare the file so that it's big enough DEFINE_ACTION_FUNCTION prepare INT_VAR shorter=0 rows=0 toadd=0 i=0 level=50 STR_VAR patch = ~$ $ $~ BEGIN SILENT // otherwise, it writes some hundreds of 'appending column-wise' ACTION_IF FILE_EXISTS_IN_GAME ~%file%.2da~ BEGIN COPY_EXISTING ~%file%.2da~ ~override~ SPRINT levels ~#%level% ###~ FOR (i=%level%-1 ; i>0 ; i -= 1) BEGIN SPRINT levels ~%i% %levels%~ //writes 1 2 ... 49 #50 END REMOVE_2DA_ROW 0 3 //remove level row INSERT_2DA_ROW 0 3 ~%levels%~ //rewrite it till level 50. Don't use number 50 for unless use COUNT_2DA_ROWS 3 rows COUNT_2DA_ROWS 1 rw shorter = rows FOR (i=3 ; (i<=%level% AND shorter=rows) ; i+=1) BEGIN COUNT_2DA_ROWS i shorter END //stops when it reaches the first too short line toadd = %level%+ 4 - i FOR (i=3 ; i10 only, otherwise, it changes 2DA as well! BUT_ONLY_IF_IT_CHANGES PRINT @443 //kits and classes OUTER_SPRINT file ~clabba02~ //blade LAUNCH_ACTION_FUNCTION ~prepare~ END COPY_EXISTING ~%file%.2da~ ~override~ COUNT_2DA_ROWS 3 rw FOR (j=25 ; j<=50 ; j += 4) BEGIN toset=1 justset=2 FOR (i=1 ; (i=2 BEGIN //it's on the second line SET_2DA_ENTRY i j 3 ~GA_SPCL321~ toset -= 1 END PATCH_IF "%test%" STRING_EQUAL_CASE "GA_SPCL321" BEGIN toset -= 1 END END PATCH_IF toset=1 BEGIN LAUNCH_PATCH_FUNCTION addrow END COUNT_2DA_ROWS 3 rw SET_2DA_ENTRY (%rw%-1) j 3 ~GA_SPCL321~ END END LAUNCH_PATCH_FUNCTION ~fill~ INT_VAR rows = rw END BUT_ONLY UNLESS ~^\ *L?E?V?E?L?S?[0-9\|\ ]*50~ OUTER_SPRINT file ~clabfi03~ //wizard slayer LAUNCH_ACTION_FUNCTION ~prepare~ END COPY_EXISTING ~%file%.2da~ ~override~ COUNT_2DA_ROWS 3 rw FOR (j=26 ; j<=50 ; j += 2) BEGIN toset=1 FOR (i=1 ; (i=2 BEGIN //it's on the second line SET_2DA_ENTRY i j 3 ~AP_SPCL131~ toset -= 1 END PATCH_IF "%test%" STRING_EQUAL_CASE "AP_SPCL131" BEGIN toset -= 1 END END PATCH_IF toset=1 BEGIN LAUNCH_PATCH_FUNCTION addrow END COUNT_2DA_ROWS 3 rw SET_2DA_ENTRY (%rw%-1) j 3 ~AP_SPCL131~ END END FOR (j=25 ; j<=50 ; j +=2) BEGIN toset=3 justset=0 FOR (i=1 ; (ijustset) ; i+=1) BEGIN READ_2DA_ENTRY i j 3 test PATCH_IF ("%test%" STRING_EQUAL "###" OR "%test%" STRING_EQUAL "****") BEGIN PATCH_IF toset!=3 THEN BEGIN SET_2DA_ENTRY i j 3 ~AP_SPCL131~ justset +=1 END ELSE BEGIN SET_2DA_ENTRY i j 3 ~AP_SPCL819~ toset -=1 END END PATCH_IF "%test%" STRING_EQUAL_CASE "AP_SPCL819" BEGIN toset -=1 END PATCH_IF "%test%" STRING_EQUAL_CASE "AP_SPCL131" BEGIN justset +=1 END END WHILE toset>justset BEGIN LAUNCH_PATCH_FUNCTION addrow END COUNT_2DA_ROWS 3 rw PATCH_IF toset=3 THEN BEGIN SET_2DA_ENTRY (%rw%-1) j 3 ~AP_SPCL819~ END ELSE BEGIN SET_2DA_ENTRY (%rw%-1) j 3 ~AP_SPCL131~ END toset -= 1 END END LAUNCH_PATCH_FUNCTION ~fill~ INT_VAR rows = rw END BUT_ONLY UNLESS ~^\ *L?E?V?E?L?S?[0-9\|\ ]*50~ ACTION_FOR_EACH file IN ~clabfi04~ ~yrkensai~ BEGIN //kensai and Chloe ACTION_IF FILE_EXISTS_IN_GAME ~%file%.2da~ BEGIN LAUNCH_ACTION_FUNCTION ~prepare~ END COPY_EXISTING ~%file%.2da~ ~override~ COUNT_2DA_ROWS 3 rw //single ability every 3 levs: 141 FOR (j=26 ; j<=50 ; j += 3) BEGIN toset=1 FOR (i=1 ; (i1 BEGIN SET_2DA_ENTRY i j 3 ~AP_SPCL143~ toset -= 1 END PATCH_IF "%test%" STRING_EQUAL_CASE "AP_SPCL143" BEGIN toset -= 1 END END PATCH_IF toset=1 BEGIN LAUNCH_PATCH_FUNCTION addrow END COUNT_2DA_ROWS 3 rw SET_2DA_ENTRY (%rw%-1) j 3 ~AP_SPCL143~ END END FOR (j=25 ; j<=50 ; j += 4) BEGIN toset=1 FOR (i=1 ; (i1 BEGIN SET_2DA_ENTRY i j 3 ~GA_SPCL144~ toset -= 1 END PATCH_IF "%test%" STRING_EQUAL_CASE "GA_SPCL144" BEGIN toset -= 1 END END PATCH_IF toset=1 BEGIN LAUNCH_PATCH_FUNCTION addrow END COUNT_2DA_ROWS 3 rw SET_2DA_ENTRY (%rw%-1) j 3 ~GA_SPCL144~ END END LAUNCH_PATCH_FUNCTION ~fill~ INT_VAR rows = rw END BUT_ONLY UNLESS ~^\ *L?E?V?E?L?S?[0-9\|\ ]*50~ END END OUTER_SPRINT file ~clabfi05~ //barbarian LAUNCH_ACTION_FUNCTION ~prepare~ END COPY_EXISTING ~%file%.2da~ ~override~ COUNT_2DA_ROWS 3 rw FOR (j=25 ; j<=50 ; j += 4) BEGIN toset=1 FOR (i=1 ; (i=2 BEGIN SET_2DA_ENTRY i j 3 ~AP_SPCL813~ toset -= 1 END PATCH_IF "%test%" STRING_EQUAL_CASE "AP_SPCL813" BEGIN toset -= 1 END END PATCH_IF toset=1 BEGIN LAUNCH_PATCH_FUNCTION addrow END COUNT_2DA_ROWS 3 rw SET_2DA_ENTRY (%rw%-1) j 3 ~AP_SPCL813~ END END LAUNCH_PATCH_FUNCTION ~fill~ INT_VAR rows = rw END BUT_ONLY UNLESS ~^\ *L?E?V?E?L?S?[0-9\|\ ]*50~ OUTER_FOR (k=1 ; k<=4 ; k += 1) BEGIN OUTER_SPRINT file ~clabpa0%k%~ //all paladins LAUNCH_ACTION_FUNCTION ~prepare~ END COPY_EXISTING ~%file%.2da~ ~override~ COUNT_2DA_ROWS 3 rw FOR (j=25 ; j<=50 ; j += 1) BEGIN toset=2 justset=3 FOR (i=1 ; (i=2 BEGIN SET_2DA_ENTRY i j 3 ~GA_SPCL121~ toset -= 1 END PATCH_IF "%test%" STRING_EQUAL_CASE "GA_SPCL121" BEGIN toset -= 1 END END PATCH_IF toset=1 BEGIN LAUNCH_PATCH_FUNCTION addrow END COUNT_2DA_ROWS 3 rw SET_2DA_ENTRY (%rw%-1) j 3 ~GA_SPCL121~ END END END LAUNCH_PATCH_FUNCTION ~fill~ INT_VAR rows = rw END BUT_ONLY UNLESS ~^\ *L?E?V?E?L?S?[0-9\|\ ]*50~ END OUTER_FOR (k=1 ; k<=4 ; k += 1) BEGIN OUTER_SPRINT file ~clabth0%k%~ //all thieves LAUNCH_ACTION_FUNCTION ~prepare~ END COPY_EXISTING ~%file%.2da~ ~override~ COUNT_2DA_ROWS 3 rw //traps for everyone!! FOR (j=26 ; j<=50 ; j += 5) BEGIN toset=1 FOR (i=1 ; (i1 OR k=1) BEGIN SET_2DA_ENTRY i j 3 ~GA_SPCL412~ toset -= 1 END PATCH_IF "%test%" STRING_EQUAL_CASE "GA_SPCL412" BEGIN toset -= 1 END END PATCH_IF toset=1 BEGIN LAUNCH_PATCH_FUNCTION addrow END COUNT_2DA_ROWS 3 rw SET_2DA_ENTRY (%rw%-1) j 3 ~GA_SPCL412~ END END //kits special abilities PATCH_IF k=2 BEGIN FOR (j=25 ; j<=50 ; j += 4) BEGIN toset=1 FOR (i=1 ; (i1 OR k=1) BEGIN SET_2DA_ENTRY i j 3 ~GA_SPCL423~ toset -= 1 END PATCH_IF "%test%" STRING_EQUAL_CASE "GA_SPCL423" BEGIN toset -= 1 END END PATCH_IF toset=1 BEGIN LAUNCH_PATCH_FUNCTION addrow END COUNT_2DA_ROWS 3 rw SET_2DA_ENTRY (%rw%-1) j 3 ~GA_SPCL423~ END END END ELSE BEGIN PATCH_IF k=3 BEGIN FOR (j=26 ; j<=50 ; j += 5) BEGIN toset=1 FOR (i=1 ; (i1 OR k=1) BEGIN SET_2DA_ENTRY i j 3 ~GA_SPCL414~ toset -= 1 END PATCH_IF "%test%" STRING_EQUAL_CASE "GA_SPCL414" BEGIN toset -= 1 END END PATCH_IF toset=1 BEGIN LAUNCH_PATCH_FUNCTION addrow END COUNT_2DA_ROWS 3 rw SET_2DA_ENTRY (%rw%-1) j 3 ~GA_SPCL414~ END END END ELSE BEGIN FOR (j=25 ; j<=50 ; j += 5) BEGIN toset=1 justset=4 FOR (i=1 ; (i