Skip to content

Commit de18d08

Browse files
KRdaMysticOH296
authored andcommitted
feat: Combat overhaul Pt 1 (#352)
1 parent 59e623c commit de18d08

File tree

5 files changed

+631
-513
lines changed

5 files changed

+631
-513
lines changed

objects/obj_p_assra/Step_0.gml

Lines changed: 85 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ if (boarding=true) and (board_cooldown>=0) and (instance_exists(target)) and (in
6767
board_cooldown-=1;
6868

6969
if (board_cooldown=0){board_cooldown=60;
70-
var o,challenge,difficulty,roll1,roll2,attack,arp,wep,ac,dr,co,i,hits,hurt,damaged_ship;
71-
o=firstest-1;difficulty=50;challenge=0;roll1=0;roll2=0;attack=0;arp=0;wep="";hits=0;hurt=0;damaged_ship=0;
70+
var o,challenge,boarding_odds,boarding_difficulty,boarding_advantage,boarding_disadvantage,gear_bonus,marine_bonus,outcome_roll,damage_roll,attack,arp,wep,ac,dr,co,i,hits,hurt,damaged_ship,bridge_damage;
71+
o=firstest-1;boarding_odds=0;challenge=0;outcome_roll=0;damage_roll=0;attack=0;arp=0;wep="";hits=0;hurt=0;damaged_ship=0;bridge_damage=1;
7272
co=0;i=0;ac=0;dr=1;
7373

7474
for (var o=0;o<array_length(origin.board_co);o++){
@@ -79,38 +79,61 @@ if (boarding=true) and (board_cooldown>=0) and (instance_exists(target)) and (in
7979

8080
co=origin.board_co[o];
8181
i=origin.board_id[o];
82-
difficulty=50;
8382
ac=0;
8483
dr=1;
8584
unit=fetch_unit([co,i]);
85+
gear_bonus=0;
86+
marine_bonus=0;
87+
boarding_odds=50;
88+
boarding_advantage=0;
89+
boarding_disadvantage=0;
8690
if (unit.hp()>0){
8791

8892
// Bonuses
89-
difficulty+=unit.experience/20;
90-
difficulty+=(1-(target.hp/target.maxhp))*33;
91-
//TODO define tag for bording weapons
92-
if (array_contains(["Chainfist","Meltagun","Lascutter","Boarding Shield"], unit.weapon_one())) then difficulty+=3;
93-
if (array_contains(["Chainfist","Meltagun","Lascutter","Boarding Shield"], unit.weapon_two())) then difficulty+=3;
93+
marine_bonus+=unit.experience/20;
94+
marine_bonus+=(1-(target.hp/target.maxhp))*33; // if wounded marine will perform worse
9495

95-
if (scr_has_adv("Boarders")) then difficulty+=7;
96-
if (scr_has_adv("Assault Doctrine")) then difficulty+=3;
97-
if (scr_has_adv("Lightning Warriors")) then difficulty+=3;
96+
var _weapons = [unit.get_weapon_one_data(), unit.get_weapon_two_data()];
97+
if (_weapons[0] == "" && _weapons[1] == "") {
98+
gear_bonus -= 10;
99+
} else {
100+
for (var i = 0; i <= 1; i++) {
101+
var _weapon = _weapons[i];
102+
if (!is_struct(_weapon)) then break
103+
104+
if (_weapon.has_tag("boarding 1")) {
105+
gear_bonus += 2;
106+
bridge_damage = max(bridge_damage, 3);
107+
} else if (_weapon.has_tag("boarding 2")) {
108+
gear_bonus += 4;
109+
bridge_damage = max(bridge_damage, 5);
110+
} else if (_weapon.has_tag("boarding 3")) {
111+
gear_bonus += 6;
112+
bridge_damage = max(bridge_damage, 7);
113+
}
114+
}
115+
}
116+
if (scr_has_adv("Boarders")) then marine_bonus+=7;
117+
if (scr_has_adv("Assault Doctrine")) then marine_bonus+=3;
118+
if (scr_has_adv("Lightning Warriors")) then marine_bonus+=3;
119+
120+
boarding_advantage+=(gear_bonus+marine_bonus)
98121

99122
// Penalties
100-
if (unit.weapon_one()=="")then difficulty-=10;
101-
if (unit.weapon_two()=="")then difficulty-=10;
102123
if (unit.base_group == "astartes"){
103-
if (unit.gene_seed_mutations.occulobe==1) then difficulty-=5;
124+
if (unit.gene_seed_mutations.occulobe==1) then boarding_disadvantage-=5;
104125
}
105-
if (target.owner = eFACTION.Imperium) or ((target.owner = eFACTION.Chaos) and (obj_fleet.csm_exp=0)) then difficulty-=0;// Cultists/Pirates/Humans
106-
if (target.owner = eFACTION.Player) or (target.owner = eFACTION.Ecclesiarchy) or (target.owner = eFACTION.Ork) or (target.owner = eFACTION.Eldar) or (target.owner = eFACTION.Necrons) then difficulty-=10;
107-
if (target.owner = eFACTION.Chaos) and (obj_fleet.csm_exp=1) then difficulty-=20;// Veteran marines
108-
if ((target.owner = eFACTION.Chaos) and (obj_fleet.csm_exp=2)) or (target.owner = eFACTION.Tyranids) then difficulty-=30;// Daemons, veteran CSM, tyranids
109-
110-
roll1=floor(random(100))+1;
126+
if (target.owner = eFACTION.Imperium) or ((target.owner = eFACTION.Chaos) and (obj_fleet.csm_exp=0)) then boarding_disadvantage-=0;// Cultists/Pirates/Humans
127+
if (target.owner = eFACTION.Player) or (target.owner = eFACTION.Ecclesiarchy) or (target.owner = eFACTION.Ork) or (target.owner = eFACTION.Eldar) or (target.owner = eFACTION.Necrons) then boarding_disadvantage-=10;
128+
if (target.owner = eFACTION.Chaos) and (obj_fleet.csm_exp=1) then boarding_disadvantage-=20;// Veteran marines
129+
if ((target.owner = eFACTION.Chaos) and (obj_fleet.csm_exp=2)) or (target.owner = eFACTION.Tyranids) then boarding_disadvantage-=30;// Daemons, veteran CSM, tyranids
130+
131+
boarding_odds+=boarding_advantage+boarding_disadvantage;
132+
boarding_odds=clamp(boarding_odds,0,100);
133+
outcome_roll=floor(random(100))+1;
111134

112135

113-
if (roll1<=difficulty){// Success
136+
if (outcome_roll<=boarding_odds){// Success
114137
if (damage=true) and (steal=false){// Damaging
115138
var to_bomb;to_bomb=false;
116139
if (plasma_bomb=true) and (obj_ini.gear[co][i]="Plasma Bomb") then to_bomb=true;
@@ -124,39 +147,12 @@ if (boarding=true) and (board_cooldown>=0) and (instance_exists(target)) and (in
124147
obj_ini.gear[co][i]="";
125148
}
126149
}
150+
127151
if (steal=true) and (damage=false){// Stealing
128-
var bridge_damage=0;
129152
damaged_ship=max(1,damaged_ship);
130-
131-
var we,whi,we1,we2;we="";
132-
we1=unit.weapon_one();
133-
we2=unit.weapon_two();
134-
whi=0;
135-
136-
bridge_damage=3;
137-
//TODO tagging system to slove this
138-
we="Heavy Thunder Hammer";
139-
if (we1=we) or (we2=we) then bridge_damage=max(bridge_damage,8);
140-
we="Eviscerator";
141-
if (we1=we) or (we2=we) then bridge_damage=max(bridge_damage,7);
142-
we="Chainfist";
143-
if (we1=we) or (we2=we) then bridge_damage=max(bridge_damage,7);
144-
we="Lascutter";
145-
if (we1=we) or (we2=we) then bridge_damage=max(bridge_damage,7);
146-
we="Meltagun";
147-
if (we1=we) or (we2=we) then bridge_damage=max(bridge_damage,7);
148-
we="Power Fist";
149-
if (we1=we) or (we2=we) then bridge_damage=max(bridge_damage,6);
150-
we="Thunder Hammer";
151-
if (we1=we) or (we2=we) then bridge_damage=max(bridge_damage,6);
152-
we="Plasma Gun";
153-
if (we1=we) or (we2=we) then bridge_damage=max(bridge_damage,5);
154-
we="Relic Blade";
155-
if (we1=we) or (we2=we) then bridge_damage=max(bridge_damage,4);
156-
if (string_pos("&",string(obj_ini.wep1[co][i])+string(obj_ini.wep2[co][i]))>0) then bridge_damage=9;
157-
158153
target.bridge-=bridge_damage;
159154
}
155+
160156
if ((target.hp<=0) or (target.bridge<=0)){
161157
var husk=instance_create(target.x,target.y,obj_en_husk);
162158

@@ -196,67 +192,67 @@ if (boarding=true) and (board_cooldown>=0) and (instance_exists(target)) and (in
196192
}
197193

198194

199-
if (roll1>difficulty){// FAILURE
195+
if (outcome_roll>boarding_odds){// FAILURE
200196

201197
ac=unit.armour_calc()
202198
dr = unit.damage_resistance()/100
203199

204-
roll2=floor(random(100))+1;
200+
damage_roll=floor(random(100))+1;
205201

206202
//TODO streamline enemy weapons
207203
if (target.owner = eFACTION.Imperium) or (target.owner = eFACTION.Chaos) or (target.owner = eFACTION.Ecclesiarchy){
208204
// Make worse for CSM
209205
wep="Lasgun";
210206
hits=1;
211-
if (roll2<=90) then hits=2;
212-
if (roll2<=75) then hits=3;
213-
if (roll2<=50){wep="Bolt Pistol";hits=1;}
214-
if (roll2<=40){wep="Bolter";hits=1;}
215-
if (roll2<=30){wep="Bolter";hits=2;}
216-
if (roll2<=20){wep="Heavy Bolter";hits=1;}
217-
if (roll2<=10){wep="Plasma Pistol";hits=1;}
218-
if (roll2<=5){wep="Meltagun";hits=1;}
207+
if (damage_roll<=90) then hits=2;
208+
if (damage_roll<=75) then hits=3;
209+
if (damage_roll<=50){wep="Bolt Pistol";hits=1;}
210+
if (damage_roll<=40){wep="Bolter";hits=1;}
211+
if (damage_roll<=30){wep="Bolter";hits=2;}
212+
if (damage_roll<=20){wep="Heavy Bolter";hits=1;}
213+
if (damage_roll<=10){wep="Plasma Pistol";hits=1;}
214+
if (damage_roll<=5){wep="Meltagun";hits=1;}
219215
}
220216
if (target.owner = eFACTION.Eldar){
221217
wep="Shuriken Pistol";hits=1;
222-
if (roll2<=90) then hits=2;
223-
if (roll2<=75) then hits=3;
224-
if (roll2<=60){wep="Shuriken Catapult";hits=2;}
225-
if (roll2<=50){wep="Shuriken Catapult";hits=3;}
226-
if (roll2<=40){wep="Shuriken Catapult";hits=4;}
227-
if (roll2<=30){wep="Wraith Cannon";hits=1;}
228-
if (roll2<=20){wep="Singing Spear";hits=1;}
229-
if (roll2<=10){wep="Meltagun";hits=1;}
218+
if (damage_roll<=90) then hits=2;
219+
if (damage_roll<=75) then hits=3;
220+
if (damage_roll<=60){wep="Shuriken Catapult";hits=2;}
221+
if (damage_roll<=50){wep="Shuriken Catapult";hits=3;}
222+
if (damage_roll<=40){wep="Shuriken Catapult";hits=4;}
223+
if (damage_roll<=30){wep="Wraith Cannon";hits=1;}
224+
if (damage_roll<=20){wep="Singing Spear";hits=1;}
225+
if (damage_roll<=10){wep="Meltagun";hits=1;}
230226
}
231227
if (target.owner = eFACTION.Ork){
232228
wep="Shoota";hits=1;
233-
if (roll2<=90) then hits=2;
234-
if (roll2<=75) then hits=3;
235-
if (roll2<=60) then hits=4;
236-
if (roll2<=50){wep="Dakkagun";hits=1;}
237-
if (roll2<=40){wep="Big Shoota";hits=1;}
238-
if (roll2<=30){wep="Big Shoota";hits=2;}
239-
if (roll2<=15){wep="Rokkit";hits=1;}
229+
if (damage_roll<=90) then hits=2;
230+
if (damage_roll<=75) then hits=3;
231+
if (damage_roll<=60) then hits=4;
232+
if (damage_roll<=50){wep="Dakkagun";hits=1;}
233+
if (damage_roll<=40){wep="Big Shoota";hits=1;}
234+
if (damage_roll<=30){wep="Big Shoota";hits=2;}
235+
if (damage_roll<=15){wep="Rokkit";hits=1;}
240236
}
241237
if (target.owner = eFACTION.Tau){
242238
wep="Pulse Rifle";hits=1;
243-
if (roll2<=80) then hits=2;
244-
if (roll2<=65) then hits=3;
245-
if (roll2<=50) then hits=4;
246-
if (roll2<=40){wep="Missile Pod";hits=1;}
247-
if (roll2<=30){wep="Burst Rifle";hits=1;}
248-
if (roll2<=15){wep="Meltagun";hits=1;}
239+
if (damage_roll<=80) then hits=2;
240+
if (damage_roll<=65) then hits=3;
241+
if (damage_roll<=50) then hits=4;
242+
if (damage_roll<=40){wep="Missile Pod";hits=1;}
243+
if (damage_roll<=30){wep="Burst Rifle";hits=1;}
244+
if (damage_roll<=15){wep="Meltagun";hits=1;}
249245
}
250246
if (target.owner = eFACTION.Tyranids){
251247
wep="Flesh Hooks";hits=1;
252-
if (roll2<=90) then hits=2;
253-
if (roll2<=75) then hits=3;
254-
if (roll2<=60){wep="Devourer";hits=2;}
255-
if (roll2<=50){wep="Devourer";hits=3;}
256-
if (roll2<=40){wep="Devourer";hits=4;}
257-
if (roll2<=30){wep="Venom Cannon";hits=1;}
258-
if (roll2<=20){wep="Lictor Claws";hits=1;}
259-
if (roll2<=10){wep="Zoanthrope Blast";hits=1;}
248+
if (damage_roll<=90) then hits=2;
249+
if (damage_roll<=75) then hits=3;
250+
if (damage_roll<=60){wep="Devourer";hits=2;}
251+
if (damage_roll<=50){wep="Devourer";hits=3;}
252+
if (damage_roll<=40){wep="Devourer";hits=4;}
253+
if (damage_roll<=30){wep="Venom Cannon";hits=1;}
254+
if (damage_roll<=20){wep="Lictor Claws";hits=1;}
255+
if (damage_roll<=10){wep="Zoanthrope Blast";hits=1;}
260256
}
261257

262258
if (wep="Lasgun"){attack=25;arp=0;}

scripts/scr_equipment_struct/scr_equipment_struct.gml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,17 @@ function EquipmentStruct(item_data, core_type,quality="none") constructor{
173173
array_push(special_properties_array, special_properties[k]);
174174
}
175175
}
176-
if (arp>0){
177-
array_push(special_properties_array, "Armour Piercing")
176+
if (arp=1){
177+
array_push(special_properties_array, "Anti Vehicle")
178178
}
179-
else if (arp<0){
179+
else if (arp=0){
180180
array_push(special_properties_array, "Low Penetration")
181+
}
182+
else if (arp=-1){
183+
array_push(special_properties_array, "Medium Penetration")
184+
}
185+
else if (arp=-2){
186+
array_push(special_properties_array, "High Penetration")
181187
}
182188
if (array_length(second_profiles)>0){
183189
for (var h = 0; h < array_length(second_profiles); h++) {

0 commit comments

Comments
 (0)