Created
November 12, 2025 01:51
-
-
Save klawx3/91131a628b5e5e612f50adbf1ec03eaf to your computer and use it in GitHub Desktop.
arc riders mini lab
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from enum import Enum | |
| class ShieldType(Enum): | |
| NONE = 0 | |
| LIGHT = 1 | |
| MEDIUM = 2 | |
| HEAVY = 3 | |
| class RiderHealth: | |
| #None is no shield | |
| light_shield_health = 40 # 0 | |
| medium_shield_health = 70 # 1 | |
| high_shield_health = 80 # 2 | |
| def __init__(self, selected_shield: ShieldType): | |
| self.selected_shield = selected_shield | |
| self.reset_health() | |
| def reset_health(self): | |
| self._heal = 100 | |
| self._shield = self._get_shield_health() | |
| self._total_hits = 0 | |
| self._history = [] | |
| def get_selected_shield(self): | |
| return self.selected_shield | |
| def get_health_status(self): | |
| return (self._heal, self._shield) | |
| def _get_shield_health(self) -> int: | |
| if self.selected_shield == ShieldType.NONE: | |
| return 0 | |
| elif self.selected_shield == ShieldType.LIGHT: | |
| return self.light_shield_health | |
| elif self.selected_shield == ShieldType.MEDIUM: | |
| return self.medium_shield_health | |
| elif self.selected_shield == ShieldType.HEAVY: | |
| return self.high_shield_health | |
| def _get_shield_migation(self) -> float: | |
| if self.selected_shield == ShieldType.NONE: | |
| return 0 | |
| elif self.selected_shield == ShieldType.LIGHT: | |
| return 0.4 | |
| elif self.selected_shield == ShieldType.MEDIUM: | |
| return 0.425 | |
| elif self.selected_shield == ShieldType.HEAVY: | |
| return 0.525 | |
| def hit(self,damage:int): | |
| self._pre_hit_history() | |
| self._total_hits += 1 | |
| if self._shield == 0: | |
| self._heal -= damage | |
| else: | |
| self._heal -= (1 - self._get_shield_migation()) * damage | |
| damage_to_shield = damage | |
| if (self._shield - damage_to_shield) < 0: # destroyed shield | |
| self._shield = 0 | |
| else: | |
| self._shield -= damage_to_shield | |
| self._post_hit_history() | |
| #self._heal -= additional_health_damage | |
| def _pre_hit_history(self): | |
| pass | |
| def _post_hit_history(self): | |
| pass | |
| def alive(self) -> bool: | |
| return self._heal > 0 | |
| def shield_up(self) -> bool: | |
| return self._shield > 0 | |
| def get_total_hits(self): | |
| return self._total_hits | |
| class RiderLab: | |
| def __init__(self): | |
| self.reload_all_lab() | |
| def reload_all_lab(self): | |
| self.rider_none = RiderHealth(selected_shield=ShieldType.NONE) | |
| self.rider_light = RiderHealth(selected_shield=ShieldType.LIGHT) | |
| self.rider_medium = RiderHealth(selected_shield=ShieldType.MEDIUM) | |
| self.rider_heavy = RiderHealth(selected_shield=ShieldType.HEAVY) | |
| self.all_specimens = [] | |
| self.all_specimens.append(self.rider_none) | |
| self.all_specimens.append(self.rider_light) | |
| self.all_specimens.append(self.rider_medium) | |
| self.all_specimens.append(self.rider_heavy) | |
| def hit_until_die(self, damage:int , verbose=False): | |
| for rider in self.all_specimens: | |
| while rider.alive(): | |
| health_before_hit , shield_before_hit = rider.get_health_status() | |
| rider.hit(damage) | |
| health_after_hit , shield_after_hit = rider.get_health_status() | |
| if verbose: | |
| print(f"Rider with shield {rider.get_selected_shield()}: Health : {health_before_hit} -> {health_after_hit}\t Shield: {shield_before_hit} -> {shield_after_hit}") | |
| if not rider.alive(): | |
| print(f"Rider with shield {rider.get_selected_shield()}: is dead with {rider.get_total_hits()}hits if damage is {damage}\n") | |
| if __name__ == "__main__": | |
| lab = RiderLab() | |
| lab.hit_until_die(6 * 2.5,verbose=True) # this is an example of bobcat dmg with headshoot mult |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Rider with shield ShieldType.NONE: Health : 100 -> 85.0 Shield: 0 -> 0 | |
| Rider with shield ShieldType.NONE: Health : 85.0 -> 70.0 Shield: 0 -> 0 | |
| Rider with shield ShieldType.NONE: Health : 70.0 -> 55.0 Shield: 0 -> 0 | |
| Rider with shield ShieldType.NONE: Health : 55.0 -> 40.0 Shield: 0 -> 0 | |
| Rider with shield ShieldType.NONE: Health : 40.0 -> 25.0 Shield: 0 -> 0 | |
| Rider with shield ShieldType.NONE: Health : 25.0 -> 10.0 Shield: 0 -> 0 | |
| Rider with shield ShieldType.NONE: Health : 10.0 -> -5.0 Shield: 0 -> 0 | |
| Rider with shield ShieldType.NONE: is dead with 7hits if damage is 15.0 | |
| Rider with shield ShieldType.LIGHT: Health : 100 -> 91.0 Shield: 40 -> 25.0 | |
| Rider with shield ShieldType.LIGHT: Health : 91.0 -> 82.0 Shield: 25.0 -> 10.0 | |
| Rider with shield ShieldType.LIGHT: Health : 82.0 -> 73.0 Shield: 10.0 -> 0 | |
| Rider with shield ShieldType.LIGHT: Health : 73.0 -> 58.0 Shield: 0 -> 0 | |
| Rider with shield ShieldType.LIGHT: Health : 58.0 -> 43.0 Shield: 0 -> 0 | |
| Rider with shield ShieldType.LIGHT: Health : 43.0 -> 28.0 Shield: 0 -> 0 | |
| Rider with shield ShieldType.LIGHT: Health : 28.0 -> 13.0 Shield: 0 -> 0 | |
| Rider with shield ShieldType.LIGHT: Health : 13.0 -> -2.0 Shield: 0 -> 0 | |
| Rider with shield ShieldType.LIGHT: is dead with 8hits if damage is 15.0 | |
| Rider with shield ShieldType.MEDIUM: Health : 100 -> 91.375 Shield: 70 -> 55.0 | |
| Rider with shield ShieldType.MEDIUM: Health : 91.375 -> 82.75 Shield: 55.0 -> 40.0 | |
| Rider with shield ShieldType.MEDIUM: Health : 82.75 -> 74.125 Shield: 40.0 -> 25.0 | |
| Rider with shield ShieldType.MEDIUM: Health : 74.125 -> 65.5 Shield: 25.0 -> 10.0 | |
| Rider with shield ShieldType.MEDIUM: Health : 65.5 -> 56.875 Shield: 10.0 -> 0 | |
| Rider with shield ShieldType.MEDIUM: Health : 56.875 -> 41.875 Shield: 0 -> 0 | |
| Rider with shield ShieldType.MEDIUM: Health : 41.875 -> 26.875 Shield: 0 -> 0 | |
| Rider with shield ShieldType.MEDIUM: Health : 26.875 -> 11.875 Shield: 0 -> 0 | |
| Rider with shield ShieldType.MEDIUM: Health : 11.875 -> -3.125 Shield: 0 -> 0 | |
| Rider with shield ShieldType.MEDIUM: is dead with 9hits if damage is 15.0 | |
| Rider with shield ShieldType.HEAVY: Health : 100 -> 92.875 Shield: 80 -> 65.0 | |
| Rider with shield ShieldType.HEAVY: Health : 92.875 -> 85.75 Shield: 65.0 -> 50.0 | |
| Rider with shield ShieldType.HEAVY: Health : 85.75 -> 78.625 Shield: 50.0 -> 35.0 | |
| Rider with shield ShieldType.HEAVY: Health : 78.625 -> 71.5 Shield: 35.0 -> 20.0 | |
| Rider with shield ShieldType.HEAVY: Health : 71.5 -> 64.375 Shield: 20.0 -> 5.0 | |
| Rider with shield ShieldType.HEAVY: Health : 64.375 -> 57.25 Shield: 5.0 -> 0 | |
| Rider with shield ShieldType.HEAVY: Health : 57.25 -> 42.25 Shield: 0 -> 0 | |
| Rider with shield ShieldType.HEAVY: Health : 42.25 -> 27.25 Shield: 0 -> 0 | |
| Rider with shield ShieldType.HEAVY: Health : 27.25 -> 12.25 Shield: 0 -> 0 | |
| Rider with shield ShieldType.HEAVY: Health : 12.25 -> -2.75 Shield: 0 -> 0 | |
| Rider with shield ShieldType.HEAVY: is dead with 10hits if damage is 15.0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment