Skip to content

Commit 558007f

Browse files
committed
Attempts to bring sanity to the casting code
1 parent c3dc390 commit 558007f

1 file changed

Lines changed: 88 additions & 45 deletions

File tree

objects/obj_pnunit/Alarm_0.gml

Lines changed: 88 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -205,57 +205,100 @@ i=0;
205205
if (instance_exists(obj_enunit)){
206206
for (var i=0;i<array_length(unit_struct);i++){
207207
if (marine_dead[i]==0 && marine_casting[i]=1){
208-
var let,buvvs,buvvs_num;let="D";
209-
if (string_count("D0",marine_powers[i])>0) then let="D";
210-
if (string_count("B0",marine_powers[i])>0) then let="B";
211-
if (string_count("P0",marine_powers[i])>0) then let="P";
212-
if (string_count("T0",marine_powers[i])>0) then let="T";
213-
if (string_count("R0",marine_powers[i])>0) then let="R";
214-
215-
var powerz,buvvs_roll,tha,p;tha=-1;
216-
powerz=string_count(let,marine_powers[i]);
217-
p=-1;repeat(20){p+=1;buvvs[p]=-1;}
218-
if (let="D"){buvvs[1]=2;buvvs[2]=5;buvvs[3]=6;buvvs_num=3;}
219-
if (let="B"){buvvs[1]=2;buvvs[2]=3;buvvs_num=2;}
220-
if (let="P"){buvvs[1]=1;buvvs[2]=2;buvvs_num=2;}
221-
if (let="T"){buvvs[1]=3;buvvs[2]=4;buvvs_num=2;}
222-
if (let="R"){buvvs[1]=2;buvvs_num=1;}
223-
224-
p=0;repeat(10){p+=1;if (buvvs[p]>powerz-1){buvvs_num-=1;buvvs[p]=-1;}}
225-
buvvs_roll=floor(random(100))+1;
226-
227-
if (buvvs_roll<=(105-(obj_ncombat.turns*35))) and (obj_ncombat.enemy_forces>=obj_ncombat.player_forces) and (buvvs_num>0){// Cast buffs
228-
// if (obj_ncombat.turns<2) and (obj_ncombat.enemy_max>=obj_ncombat.player_max) and (buvvs_num>0){
229-
tha=max(buvvs[floor(random(buvvs_num))+1],buvvs[floor(random(buvvs_num))+1]);
230-
}
231-
232-
if (buvvs_roll>(105-(obj_ncombat.turns*35))) or (obj_ncombat.enemy_forces<obj_ncombat.player_forces) or (buvvs_num=0){// Slam away
233-
// if (obj_ncombat.turns>=2) or (obj_ncombat.enemy_max<obj_ncombat.player_max) or (buvvs_num=0){
234-
repeat(100){
235-
if (tha=-1) or (tha=buvvs[1]) or (tha=buvvs[2]) or (tha=buvvs[3]) or (tha=buvvs[4]) or (tha=buvvs[5]){
236-
tha=max(floor(random(powerz)),floor(random(powerz)));
237-
if (marine_type[i]="Chief "+string(obj_ini.role[100,17])) then tha=powerz-choose(-1,0,0,1,1,2);
238-
if (marine_type[i]="Chapter Master") then tha=powerz-choose(-1,0,0,1,1,2);
208+
try {
209+
var known_powers = string_split(unit_struct[i].specials(), "|");
210+
if (array_length(known_powers) > 1) {
211+
array_pop(known_powers);
212+
}
213+
var power_set_letter = "D";
214+
var power_sets = ["D0", "B0", "P0", "T0", "R0"];
215+
for (var p = 0; p < array_length(power_sets); p++) {
216+
if (string_count(power_sets[p], known_powers) > 0) {
217+
power_set_letter = string_char_at(power_sets[p], 1);
218+
break;
239219
}
240220
}
241-
}
242-
243-
enemy=instance_nearest(0,y,obj_enunit);enemy2=enemy;
244-
if (enemy.men+enemy.veh+enemy.medi<=0){
245-
var x5=enemy.x;
246-
with(enemy){
247-
instance_destroy();
221+
222+
var power_index;
223+
var power_count = string_count(power_set_letter, known_powers);
224+
225+
var buff_powers = [];
226+
switch (power_set_letter) {
227+
case "D":
228+
buff_powers = [2, 5, 6];
229+
break;
230+
case "B":
231+
buff_powers = [2, 3];
232+
break;
233+
case "P":
234+
buff_powers = [1, 2];
235+
break;
236+
case "T":
237+
buff_powers = [3, 4];
238+
break;
239+
case "R":
240+
buff_powers = [2];
241+
break;
242+
}
243+
244+
// Decide whenever to cast buffs or attack spells
245+
var buff_cast = 0;
246+
var buff_roll=irandom(100);
247+
if (buff_roll<=(105-(obj_ncombat.turns*35))) and (obj_ncombat.enemy_forces>=obj_ncombat.player_forces) and (array_length(buff_powers) > 0){
248+
// Cast buffs
249+
buff_cast = 1;
250+
// Filter the buff powers that the unit knows
251+
var known_buff_powers = [];
252+
for (var i = 0; i < array_length(buff_powers); i++) {
253+
if (string_count(known_powers, string(buff_powers[i])) > 0) {
254+
array_push(known_buff_powers, buff_powers[i]);
255+
}
256+
}
257+
if (array_length(known_buff_powers) > 0) {
258+
power_index = array_random_element(known_buff_powers);
259+
power_index = string_char_at(power_index, 2);
260+
}
261+
} else {
262+
// Cast attack spells
263+
// Filter the attack powers that the unit knows
264+
var known_attack_powers = [];
265+
for (var i = 0; i < array_length(known_powers); i++) {
266+
if (string_count(buff_powers, string(known_powers[i])) == 0) {
267+
array_push(known_attack_powers, known_powers[i]);
268+
}
269+
}
270+
if (array_length(known_attack_powers) > 0) {
271+
power_index = array_random_element(known_attack_powers);
272+
power_index = string_char_at(power_index, 2);
273+
}
248274
}
275+
249276
enemy=instance_nearest(0,y,obj_enunit);
250277
enemy2=enemy;
278+
if (enemy.men+enemy.veh+enemy.medi<=0){
279+
var x5=enemy.x;
280+
with(enemy){
281+
instance_destroy();
282+
}
283+
enemy=instance_nearest(0,y,obj_enunit);
284+
enemy2=enemy;
285+
}
286+
287+
// I'm not sure what was the plan, but "Z" powers (hacks) are unused in scr_powers
288+
/* var ham=false;
289+
if (marine_type[i]="Chapter Master") and (obj_ncombat.kamehameha=true) and ((obj_ncombat.big_boom>0) or (choose(1,2)=2)){
290+
if (obj_ncombat.enemy_forces>=40) then ham=true;
291+
}
292+
293+
if (ham=false) then scr_powers(string_upper(power_set_letter),power_index,enemy2,i);
294+
if (ham=true) then scr_powers("Z",power_index,enemy2,i); */
295+
296+
scr_powers(string_upper(power_set_letter),power_index,enemy2,i);
297+
} catch (_exception) {
298+
show_debug_message($"buff_cast: {buff_cast}");
299+
show_debug_message($"known_powers: {known_powers}");
300+
handle_exception(_exception);
251301
}
252-
253-
var ham=false;
254-
if (marine_type[i]="Chapter Master") and (obj_ncombat.kamehameha=true) and ((obj_ncombat.big_boom>0) or (choose(1,2)=2)){
255-
if (obj_ncombat.enemy_forces>=40) then ham=true;
256-
}
257-
if (ham=false) then scr_powers(string_upper(let),tha,enemy2,i);
258-
if (ham=true) then scr_powers("Z",tha,enemy2,i);
259302
}
260303
}
261304
}

0 commit comments

Comments
 (0)