class Halloween_Elisanne(Adv): a1 = ('s',0.35) conf = {} conf['slots.a'] = Resounding_Rendition()+Spirit_of_the_Season() conf['slots.paralysis.a'] = conf['slots.a'] conf['acl'] = """ `dragon.act('c3 s end'), x=5 or s `s2, s1.charged<=s1.sp-700 and s4.charged<=s4.sp-700 `s4, self.afflics.poison.get() or x=5 `s3 `s1 `fs, x=5 """ coab = ['Wand','Sharena','Peony'] conf['afflict_res.paralysis'] = 0 share = ['Ranzal','Curran'] def prerun(self): self.phase['s1'] = 0 self.vampire_maiden = X_alt(self, 'vampire_maiden', vm_auto_conf, x_proc=self.l_vm_x) def l_vm_x(self, e): self.vampire_maiden.x_proc_default(e) @staticmethod def prerun_skillshare(adv, dst): adv.rebind_function(Halloween_Elisanne, 's1_latency') adv.phase[dst] = 0 def s1_latency(self, t): Teambuff(t.name,0.13,15).on() def s1_proc(self, e): self.phase[e.name] += 1 with KillerModifier(e.name, 'hit', 0.2 * int(self.phase[e.name] == 3), ['paralysis']): self.dmg_make(e.name, 1.17) if self.phase[e.name] > 1: t = Timer(self.s1_latency) t.name = e.name t.on(2.5) self.afflics.paralysis(e.name, 120, 0.97) self.dmg_make(e.name, 1.17*6) self.phase[e.name] %= 3 def s2_proc(self, e): self.charge(e.name, 700) self.vampire_maiden.on()
class Lily(Adv): a1 = ('a', 0.20, 'hp100') a3 = [('prep', 1.00), ('scharge_all', 0.05)] conf = {} comment = 's1 for freeze/frostbite only' conf['slots.a'] = Candy_Couriers() + His_Clever_Brother() conf['slots.d'] = Gaibhne_and_Creidhne() conf['acl'] = """ `dragon.act('c3 s end'), cancel `s1, not self.sim_afflict `s3 `s4 `s2 """ coab = ['Blade', 'Renee', 'Dagger2'] share = ['Gala_Elisanne', 'Eugene'] # conf['slots.a'] = Candy_Couriers()+His_Clever_Brother() # conf['slots.d'] = Siren() # conf['acl'] = """ # `dragon.act('c3 s end'), cancel # `s3 # `s4 # `s2 # `s1 # """ # coab = ['Blade', 'Dagger', 'Lazry'] # share = ['Ranzal', 'Eugene'] def prerun(self): self.crystalian_princess = X_alt(self, 'crystalian_princess', cp_auto_conf, x_proc=self.l_cp_x) def l_cp_x(self, e): with KillerModifier('alt_x_killer', 'hit', 0.3, ['frostbite']): self.crystalian_princess.x_proc_default(e) def s1_proc(self, e): self.afflics.freeze(e.name, 200) self.afflics.frostbite(e.name, 120, 0.41) def s2_proc(self, e): self.crystalian_princess.on()
class Mega_Man(Adv): comment = '16 hits leaf shield (max 32 hits)' conf = megaman_conf.copy() conf['slots.d'] = Gala_Mars() conf['slots.a'] = Primal_Crisis()+Levins_Champion() conf['acl'] = """ # check_s(n) means neither s1 or s2 are active, and s[n] has full ammo `dragon, s=4 `s3, not self.s3_buff `s4 `s1, self.check_s(1) and self.bleed._static['stacks']<3 `s2, self.s1_x.active and self.bleed._static['stacks']>=3 `s1, self.s1_x.active and self.bleed._static['stacks']>=3 """ coab = ['Blade', 'Marth', 'Dagger2'] share = ['Karl'] conf['dragonform'] = { 'act': 'c5 s', 'dx1.dmg': 1.20, 'dx1.startup': 10 / 60.0, # c1 frames 'dx1.hit': 3, 'dx2.dmg': 1.20, 'dx2.startup': 13 / 60.0, # c2 frames 'dx2.hit': 3, 'dx3.dmg': 1.20, 'dx3.startup': 14 / 60.0, # c3 frames 'dx3.hit': 3, 'dx4.dmg': 1.20, 'dx4.startup': 14 / 60.0, # c4 frames 'dx4.hit': 3, 'dx5.dmg': 1.20, 'dx5.startup': 14 / 60.0, # c5 frames 'dx5.recovery': 23 / 60.0, # recovery 'dx5.hit': 3, 'ds.dmg': 6.00, 'ds.recovery': 113 / 60, # skill frames 'ds.hit': 5, 'dodge.startup': 45 / 60.0, # dodge frames } def ds_proc(self): return self.dmg_make('ds',self.dragonform.conf.ds.dmg,'s') def prerun(self): self.s1 = Skill_Ammo('s1', self.conf.s1) self.s1_x = X_alt(self, 's1', self.conf.s1, x_proc=self.l_megaman_s1_x, no_fs=True) # self.a_s1x = X('s1x', self.conf.s1.x) # self.l_s1_x = Listener('x',self.l_megaman_s1_x).off() self.s2 = Skill_Ammo('s2', self.conf.s2) self.s2_x = X_alt(self, 's2', self.conf.s2, x_proc=self.l_megaman_s2_x, no_fs=True) # self.a_s2x = X('s1x', self.conf.s2.x) # self.l_s2_x = Listener('x',self.l_megaman_s2_x).off() # self.fs_normal = self.fs random.seed() self.bleed = Bleed('g_bleed', 0).reset() self.bleed_chance = 0.5 def proc_bleed(self): if random.random() <= self.bleed_chance: self.bleed = Bleed('o_metal_blade', 1.32) self.bleed.quickshot_event.dname = 'o_metal_blade_bleed' self.bleed.true_dmg_event.dtype = 'x' self.bleed.on() def charge(self, name, sp): sp = self.sp_convert(self.sp_mod(name), sp) # ammo self.s1.charge_ammo(self.conf[name.split('_')[0]].ammo) self.s2.charge_ammo(self.conf[name.split('_')[0]].ammo) self.s3.charge(sp) try: self.s4.charge(sp) log('sp', name, sp, f'{self.s1.current_ammo}/{self.s1.ammo}, {self.s2.current_ammo}/{self.s2.ammo}, {self.s3.charged}/{self.s3.sp}, {self.s4.charged}/{self.s4.sp}') except: log('sp', name, sp, f'{self.s1.current_ammo}/{self.s1.ammo}, {self.s2.current_ammo}/{self.s2.ammo}, {self.s3.charged}/{self.s3.sp}') self.think_pin('sp') def s1_proc(self, e): if self.s2_x.active: self.s2_x.off() if self.s1_x.active: self.s1_x.off() else: self.s1_x.on() def s2_proc(self, e): if self.s1_x.active: self.s1_x.off() if self.s2_x.active: self.s2_x.off() else: self.s2_x.on() # def l_range_x(self, e): # if e.name == 's1x' or e.name == 's2x': # return # super().l_range_x(e) def l_megaman_s1_x(self, e): self.add_hits(self.conf.s1.x1.hit) self.dmg_make('o_metal_blade', self.conf.s1.x1.dmg*self.conf.s1.x1.hit, 'x') self.proc_bleed() self.s1.current_ammo -= self.s1.cost log('sp', 'metal_blade', -self.s1.cost,'%d/%d, %d/%d, %d/%d'%(\ self.s1.current_ammo, self.s1.ammo, self.s2.current_ammo, self.s2.ammo, self.s3.charged, self.s3.sp)) if self.s1.current_ammo < self.s1.cost: self.s1_x.off() def l_megaman_s2_x(self, e): self.add_hits(self.conf.s2.x1.hit) self.dmg_make('o_leaf_shield', self.conf.s2.x1.dmg*self.conf.s2.x1.hit, 'x') self.s2.current_ammo -= self.s2.cost log('sp', 'leaf_shield', -self.s2.cost,'%d/%d, %d/%d, %d/%d'%(\ self.s1.current_ammo, self.s1.ammo, self.s2.current_ammo, self.s2.ammo, self.s3.charged, self.s3.sp)) if self.s2.current_ammo < self.s2.cost: self.s2_x.off() def check_s(self, s): if s == 's1' or s == 1: return self.s1.current_ammo >= self.s1.ammo and not self.s1_x.active and not self.s2_x.active elif s == 's2' or s == 2: return self.s2.current_ammo >= self.s2.ammo and not self.s1_x.active and not self.s2_x.active
class Bellina(Adv): a3 = ('crisisattspd', 3) conf = {} conf['slots.a'] = Twinfold_Bonds() + Howling_to_the_Heavens() conf['slots.poison.a'] = Twinfold_Bonds() + The_Plaguebringer() conf['acl'] = """ `s2, sim_duration-now()<1.5 `s3, not self.s3_buff if self.dragondrive_buff.get() `s1, self.dragonform.dragon_gauge>1000 and x=3 `s4, x=3 `fsf, x=3 else `s2 `dragon `fs, x=4 end """ coab = ['Ieyasu', 'Curran', 'Berserker'] share = ['Veronica'] def fs_proc_alt(self, e): with CrisisModifier(e.name, 1.00, self.hp): self.dmg_make('fs', 5.65) self.dragonform.charge_gauge(self.conf.fs.utp, utp=True) def l_dragondrive_x(self, e): xalt = self.dragondrive_x xseq = e.name dmg_coef = xalt.conf[xseq].dmg sp = xalt.conf[xseq].sp hit = xalt.conf[xseq].hit utp = xalt.conf[xseq].utp log('x', xseq, 'dragondrive') self.hits += hit with CrisisModifier('x', 1.00, self.hp): self.dmg_make(xseq, dmg_coef) self.charge(xseq, sp) self.dragonform.charge_gauge(utp, utp=True) def prerun(self): self.dragondrive_buff = Selfbuff('dragondrive', 0.35, -1, 's', 'passive') self.dragonform.set_dragondrive(self.dragondrive_buff) Event('dragon_end').listener(self.dragondrive_on) # cursed Event('dragondrive_end').listener(self.dragondrive_off) self.dragondrive_x = X_alt(self, 'dragondrive', dragondrive_auto_conf, x_proc=self.l_dragondrive_x) self.fs_alt = Fs_alt(self, Conf(dragondrive_fs_conf), self.fs_proc_alt) self.a_s1 = self.s1.ac self.a_s1a = S('s1', Conf({'startup': 0.10, 'recovery': 1.10})) self.a_s2 = self.s2.ac self.a_s2a = S('s2', Conf({'startup': 0.10, 'recovery': 2.26})) self.fsf_a = Fs('fsf', self.conf.fsf) def dragondrive_on(self, e): self.s1.ac = self.a_s1a self.s2.ac = self.a_s2a self.fs_alt.on(-1) self.dragondrive_x.on() self.a_fsf = Fs('fsf', self.conf.fsf) def dragondrive_off(self, e): self.s1.ac = self.a_s1 self.s2.ac = self.a_s2 self.fs_alt.off() self.dragondrive_x.off() def s1_proc(self, e): if self.dragondrive_buff.get(): with CrisisModifier(e.name, 0.50, self.hp): self.dmg_make(e.name, 2.02 * 5) self.hits += 5 self.s1.charge(self.conf.s1.sp) self.dragonform.charge_gauge(-750, utp=True) else: with CrisisModifier(e.name, 0.50, self.hp): self.dmg_make(e.name, 8.40) self.hits += 1 def s2_proc(self, e): if self.dragondrive_buff.get(): with CrisisModifier(e.name, 2.00, self.hp): self.dmg_make(e.name, 12.12) self.hits += 1 self.dragonform.charge_gauge(-3000, utp=True) # -3000 gauge # 2.7666666507720947 (?) # 1212 mod, 3x crisis else: self.dragonform.charge_gauge(1200, utp=True) # 1 hp loss = 1 gauge gain, will assume 3000 max hp here if self.hp > 30: self.dragonform.charge_gauge(3000 * (self.hp - 30) / 100, utp=True) self.set_hp(30) # regular buff duration (?) def s_proc(self, e): if self.dragondrive_buff.get(): s = getattr(self, e.name) self.dragonform.add_drive_gauge_time(s.ac.getstartup() + s.ac.getrecovery(), skill_pause=True)
class Tiki(Adv): comment = 'dragon damage does not work on divine dragon' a1 = ('k_frostbite', 0.30) conf = tiki_conf.copy() conf['slots.a'] = Twinfold_Bonds() + The_Prince_of_Dragonyule() conf['slots.frostbite.a'] = conf['slots.a'] conf['slots.d'] = Nimis() conf['acl'] = """ if self.divine_dragon.get() `s1 `s2 `dodge, x=3 else `s3, not self.s3_buff and x=5 `dragon, self.dragonform.dragon_gauge>=1800 `s2 `s1 end """ coab = ['Blade', 'Xander', 'Dagger'] share = ['Gala_Luca'] def d_slots(self): if self.duration <= 60: self.conf['slots.a'] = Twinfold_Bonds() + The_Chocolatiers() self.conf['slots.frostbite.a'] = self.conf['slots.a'] def x_proc(self, e): xseq = e.name utp = self.conf[xseq].utp self.dragonform.charge_gauge(utp, utp=True) def l_dragon_x(self, e): xalt = self.dragondrive_x xseq = e.name dmg_coef = xalt.conf[xseq].dmg sp = xalt.conf[xseq].sp hit = xalt.conf[xseq].hit # utp = xalt.conf[xseq].utp log('x', xseq, 'divine_dragon') self.hits += hit self.dmg_make(xseq, dmg_coef) self.charge(xseq, sp) # trigger updates on dgauge self.dragonform.charge_gauge(0, utp=True, dhaste=True) def init(self): self.shared_crit = False self.buff_icon_count = lambda: False def prerun(self): self.divine_dragon = Selfbuff('divine_dragon', 1, -1, 'divine', 'dragon') self.divine_dragon.bufftype = 'dd' # self.divine_dragon = Selfbuff('divine_dragon', self.dragonform.ddamage(), -1, 'att', 'dragon') # reeee self.dragonform.set_dragondrive(dd_buff=self.divine_dragon, max_gauge=1800, shift_cost=560, drain=40) Event('dragon_end').listener(self.dragondrive_on) # cursed Event('dragondrive_end').listener(self.dragondrive_off) self.dragondrive_x = X_alt(self, 'divine_dragon', divine_dragon_conf, x_proc=self.l_dragon_x, no_fs=True) self.o_s1 = self.s1 self.d_s1 = Skill( 's1', self.conf.s1 + Conf({ 'startup': 0.10, 'recovery': 1.8, 'sp': 3480 })) self.o_s2 = self.s2 self.d_s2 = Skill( 's2', self.conf.s2 + Conf({ 'startup': 0.10, 'recovery': 1.91, 'sp': 5800 })) self.o_s3 = self.s3 self.d_s3 = Skill('s3', self.conf.s3 + Conf({'sp': 0})) self.d_s3.check = lambda: False self.d_s3.charge = lambda sp: None self.o_s4 = self.s4 self.d_s4 = Skill('s4', self.conf.s4 + Conf({'sp': 0})) self.d_s4.check = lambda: False self.d_s4.charge = lambda sp: None def dragondrive_on(self, e): self.s1 = self.d_s1 self.s2 = self.d_s2 self.s3 = self.d_s3 self.s4 = self.d_s4 self.charge_p('divine_dragon', 100) self.dragondrive_x.on() def dragondrive_off(self, e): self.s1 = self.o_s1 self.s2 = self.o_s2 self.s3 = self.o_s3 self.s4 = self.o_s4 self.dragondrive_x.off() def s1_proc(self, e): if self.shared_crit: crit_mod = Modifier('gala_luca_share', 'crit', 'chance', 0.1 * self.buff_icon_count()) crit_mod.on() if self.divine_dragon.get(): self.dmg_make(e.name, 7.90) self.afflics.frostbite(e.name, 120, 0.41) self.dragonform.add_drive_gauge_time(self.s1.ac.getstartup() + self.s1.ac.getrecovery(), skill_pause=True) else: self.dmg_make(e.name, 3.76) self.dragonform.charge_gauge(260, utp=True, dhaste=True) if self.shared_crit: crit_mod.off() def s2_proc(self, e): if self.divine_dragon.get(): with KillerModifier('s2_killer', 'hit', 0.2, ['frostbite']): self.dmg_make(e.name, 12.05) self.dragonform.add_drive_gauge_time(self.s2.ac.getstartup() + self.s2.ac.getrecovery(), skill_pause=True) else: self.dragonform.charge_gauge(1000, utp=True, dhaste=True)
class Tobias(Adv): a1 = ('bt', 0.25) a3 = ('k_poison', 0.3) conf = {} conf['slots.a'] = A_Dogs_Day() + Castle_Cheer_Corps() conf['slots.poison.a'] = conf['slots.a'] conf['slots.d'] = Freyja() conf['acl'] = """ `s3, not self.s3_buff `s1 """ coab = ['Bow', 'Blade', 'Tiki'] def init(self): self.buff_class = Teambuff if self.condition( 'buff all team') else Selfbuff @staticmethod def prerun_skillshare(adv, dst): adv.buff_class = Dummy if adv.slots.c.ele != 'wind' else Teambuff if adv.condition( 'buff all team') else Selfbuff def prerun(self): self.s2_mode = 0 self.s1.autocharge_init(85) self.s2.charge(1) self.s2_x_alt = X_alt(self, 'sacred_blade', sacred_blade_conf, x_proc=self.l_sacred_blade_x, no_fs=True, no_dodge=True) self.a_s2 = self.s2.ac self.a_s2a = S('s2', Conf({'startup': 0.10, 'recovery': 1.91})) def l_sacred_blade_x(self, e): xseq = e.name dmg_coef = self.s2_x_alt.conf[xseq].dmg sp = self.s2_x_alt.conf[xseq].sp hit = self.s2_x_alt.conf[xseq].hit log('x', xseq, 'sacred_blade') self.hits += hit self.dmg_make(xseq, dmg_coef) self.charge(xseq, sp) def s1_autocharge_off(self, t): self.s1.autocharge_timer.off() def s2_x_alt_off(self, t): self.s2_mode = 0 self.s2.ac = self.a_s2 self.s2.charged = 0 self.s2_x_alt.off() def s1_proc(self, e): self.buff_class(e.name, 0.3, 15).on() def s2_proc(self, e): if self.s2_mode == 0: self.s2.ac = self.a_s2a self.s2_x_alt.on() self.s1.autocharge_timer.on() Timer(self.s1_autocharge_off).on(7 * self.mod('buff')) Timer(self.s2_x_alt_off).on(10 * self.mod('buff')) else: self.dmg_make(e.name, 1.04) self.hits += 8 self.afflics.poison(e.name, 120, 0.582) self.s2.ac = self.a_s2 self.s2_x_alt.on() self.s1.autocharge_timer.off() self.s2.charge(1) self.s2_mode = (self.s2_mode + 1) % 2
class Mega_Man(Adv): comment = '16 hits leaf shield (max 32 hits)' conf = megaman_conf.copy() conf['slot.d'] = Cerberus() conf['slot.a'] = Primal_Crisis() + Dear_Diary() conf['acl'] = """ # check_s(n) means neither s1 or s2 are active, and s[n] has full ammo `s3, not self.s3_buff `s1, self.check_s(1) and self.bleed._static['stacks']<3 `s2, self.s1_x.active and self.bleed._static['stacks']>=3 `s1, self.s1_x.active and self.bleed._static['stacks']>=3 """ conf['dragonform'] = { 'act': 'c5 s', 'dx1.dmg': 1.20, 'dx1.startup': 10 / 60.0, # c1 frames 'dx1.hit': 3, 'dx2.dmg': 1.20, 'dx2.startup': 13 / 60.0, # c2 frames 'dx2.hit': 3, 'dx3.dmg': 1.20, 'dx3.startup': 14 / 60.0, # c3 frames 'dx3.hit': 3, 'dx4.dmg': 1.20, 'dx4.startup': 14 / 60.0, # c4 frames 'dx4.hit': 3, 'dx5.dmg': 1.20, 'dx5.startup': 14 / 60.0, # c5 frames 'dx5.recovery': 23 / 60.0, # recovery 'dx5.hit': 3, 'ds.dmg': 6.00, 'ds.recovery': 113 / 60, # skill frames 'ds.hit': 5, 'dodge.startup': 45 / 60.0, # dodge frames } def ds_proc(self): return self.dmg_make('ds', self.dragonform.conf.ds.dmg, 's') def prerun(self): self.s1 = Skill_Ammo('s1', self.conf.s1) self.s1_x = X_alt(self, 's1', self.conf.s1, x_proc=self.l_megaman_s1_x, no_fs=True) # self.a_s1x = X('s1x', self.conf.s1.x) # self.l_s1_x = Listener('x',self.l_megaman_s1_x).off() self.s2 = Skill_Ammo('s2', self.conf.s2) self.s2_x = X_alt(self, 's2', self.conf.s2, x_proc=self.l_megaman_s2_x, no_fs=True) # self.a_s2x = X('s1x', self.conf.s2.x) # self.l_s2_x = Listener('x',self.l_megaman_s2_x).off() # self.fs_normal = self.fs random.seed() self.bleed = Bleed('g_bleed', 0).reset() self.bleed.quickshot_event.dname = 'x_s1_bleed' self.bleed.true_dmg_event.dtype = 'x' self.bleed_chance = 0.5 def proc_bleed(self): if random.random() <= self.bleed_chance: self.bleed = Bleed('x', 1.32) self.bleed.quickshot_event.dname = 'x_s1_bleed' self.bleed.true_dmg_event.dtype = 'x' self.bleed.on() def charge_p(self, name, percent): percent = percent / 100 if percent > 1 else percent log('sp', name, '{:.0f}% '.format(percent*100),'%d/%d, %d/%d, %d/%d'%(\ self.s1.charged, self.s1.sp, self.s2.charged, self.s2.sp, self.s3.charged, self.s3.sp) ) self.think_pin('prep') def charge(self, name, sp): sp = self.sp_convert(self.sp_mod(name), sp) self.s3.charge(sp) self.think_pin('sp') # ammo self.s1.charge_ammo(self.conf[name.split('_')[0]].ammo) self.s2.charge_ammo(self.conf[name.split('_')[0]].ammo) log('sp', name, sp,'%d/%d, %d/%d, %d/%d'%(\ self.s1.current_ammo, self.s1.ammo, self.s2.current_ammo, self.s2.ammo, self.s3.charged, self.s3.sp)) # def alt_x_on(self, s, alt_l_x, alt_a_x): # self.l_x.off() # alt_l_x.on() # self.fs = self.fs_off # self.x1 = alt_a_x # self.x2 = alt_a_x # self.x3 = alt_a_x # self.x4 = alt_a_x # self.x5 = alt_a_x # s.is_active = True # def alt_x_off(self, s, alt_l_x): # alt_l_x.off() # self.l_x.on() # self.fs = self.fs_normal # self.x1 = self.a_x1 # self.x2 = self.a_x2 # self.x3 = self.a_x3 # self.x4 = self.a_x4 # self.x5 = self.a_x5 # s.is_active = False def s1_proc(self, e): if self.s2_x.active: self.s2_x.off() if self.s1_x.active: self.s1_x.off() else: self.s1_x.on() def s2_proc(self, e): if self.s1_x.active: self.s1_x.off() if self.s2_x.active: self.s2_x.off() else: self.s2_x.on() # def l_range_x(self, e): # if e.name == 's1x' or e.name == 's2x': # return # super().l_range_x(e) def l_megaman_s1_x(self, e): self.hits += self.conf.s1.x1.hit self.dmg_make('o_metal_blade', self.conf.s1.x1.dmg * self.conf.s1.x1.hit) self.proc_bleed() self.s1.current_ammo -= self.s1.cost log('sp', 'metal_blade', -self.s1.cost,'%d/%d, %d/%d, %d/%d'%(\ self.s1.current_ammo, self.s1.ammo, self.s2.current_ammo, self.s2.ammo, self.s3.charged, self.s3.sp)) if self.s1.current_ammo < self.s1.cost: self.s1_x.off() def l_megaman_s2_x(self, e): self.hits += self.conf.s2.x1.hit self.dmg_make('o_leaf_shield', self.conf.s2.x1.dmg * self.conf.s2.x1.hit) self.s2.current_ammo -= self.s2.cost log('sp', 'leaf_shield', -self.s2.cost,'%d/%d, %d/%d, %d/%d'%(\ self.s1.current_ammo, self.s1.ammo, self.s2.current_ammo, self.s2.ammo, self.s3.charged, self.s3.sp)) if self.s2.current_ammo < self.s2.cost: self.s2_x.off() def check_s(self, s): if s == 's1' or s == 1: return self.s1.current_ammo >= self.s1.ammo and not self.s1_x.active and not self.s2_x.active elif s == 's2' or s == 2: return self.s2.current_ammo >= self.s2.ammo and not self.s1_x.active and not self.s2_x.active
class Bellina(Adv): conf = {} conf['slot.a'] = Twinfold_Bonds()+Howling_to_the_Heavens() conf['slot.d'] = Fatalis() conf['acl'] = """ `s2, sim_duration-now()<1.5 `s3, not self.s3_buff if self.dragondrive_buff.get() `s1, self.dragonform.dragon_gauge>850 and x=3 `fsf, x=3 else `s2 `dragon `fs, x=4 end """ def fs_proc_alt(self, e): with CrisisModifier('s1', 1.00, self.hp): self.dmg_make('fs', 5.65) self.dragonform.charge_gauge(self.conf.fs.utp, percent=False) def l_dragondrive_x(self, e): xalt = self.dragondrive_x xseq = e.name dmg_coef = xalt.conf[xseq].dmg sp = xalt.conf[xseq].sp hit = xalt.conf[xseq].hit utp = xalt.conf[xseq].utp log('x', xseq, 'dragondrive') self.hits += hit with CrisisModifier('x', 1.00, self.hp): self.dmg_make(xseq, dmg_coef) self.charge(xseq, sp) self.dragonform.charge_gauge(utp, percent=False) def prerun(self): self.dragondrive_buff = Selfbuff('dragondrive', 0.35, -1, 's', 'passive') self.dragonform.set_dragondrive(self.dragondrive_buff) Event('dragon_end').listener(self.dragondrive_on) # cursed Event('dragondrive_end').listener(self.dragondrive_off) self.dragondrive_x = X_alt(self, 'dragondrive', dragondrive_auto_conf, x_proc=self.l_dragondrive_x) self.fs_alt = Fs_alt(self, Conf(dragondrive_fs_conf), self.fs_proc_alt) self.a3_str = Modifier('a3', 'att', 'passive', 0.20) self.a3_spd = Spdbuff('a3',0.10,-1) self.hp = 100 self.a_s1 = self.s1.ac self.a_s1a = S('s1', Conf({'startup': 0.10, 'recovery': 1.10})) self.a_s2 = self.s2.ac self.a_s2a = S('s2', Conf({'startup': 0.10, 'recovery': 2.70})) self.fsf_a = Fs('fsf', self.conf.fsf) def dragondrive_on(self, e): self.s1.ac = self.a_s1a self.s2.ac = self.a_s2a self.fs_alt.on(-1) self.dragondrive_x.on() self.a_fsf = Fs('fsf', self.conf.fsf) def dragondrive_off(self, e): self.s1.ac = self.a_s1 self.s2.ac = self.a_s2 self.fs_alt.off() self.dragondrive_x.off() def s1_proc(self, e): if self.dragondrive_buff.get(): with CrisisModifier('s1', 0.50, self.hp): self.dmg_make('s1', 2.02 * 5) self.hits += 5 self.s1.charge(self.conf.s1.sp) self.dragonform.charge_gauge(-750, percent=False) # 2.02 mod 1.5x crisis # 0.2666666805744171 + 0.18000000715255737 * 5 # 1.1666666269302368 (?) # -750 gauge # +100% skill else: with CrisisModifier('s1', 0.50, self.hp): self.dmg_make('s1', 8.40) self.hits += 1 # 840 mod, 1.5x crisis # 1.399999976158142 (?) def s2_proc(self, e): if self.dragondrive_buff.get(): with CrisisModifier('s2', 2.00, self.hp): self.dmg_make('s2', 12.12) self.hits += 1 self.dragonform.charge_gauge(-3000, percent=False) # -3000 gauge # 2.7666666507720947 (?) # 1212 mod, 3x crisis else: self.dragonform.charge_gauge(1200, percent=False) # 1 hp loss = 1 gauge gain, will assume 3000 max hp here if self.hp > 30: self.dragonform.charge_gauge(3000 * (self.hp-30)/100, percent=False) self.hp = 30 self.a3_str.on() self.a3_spd.on()