class Marishiten(DragonBase): ele = 'shadow' att = 121 a = [('a', 0.6)] dragonform = { 'act': 'c5 c5 s c4', 'dx1.dmg': 2.20, 'dx1.startup': 25 / 60.0, # c1 frames 'dx1.hit': 1, 'dx2.dmg': 2.31, 'dx2.startup': 32 / 60.0, # c2 frames 'dx2.hit': 1, 'dx3.dmg': 2.44, 'dx3.startup': 53 / 60.0, # c3 frames 'dx3.hit': 2, 'dx4.dmg': 2.55, 'dx4.startup': 26 / 60.0, # c4 frames 'dx4.hit': 1, 'dx5.dmg': 3.22, 'dx5.startup': 69 / 60.0, # c5 frames 'dx5.recovery': 720 / 60.0, # recovery unknown but longer than dodge 'dx5.hit': 2, 'ds.recovery': 228 / 60, # skill frames 'ds.hit': 6, 'dodge.startup': 45 / 60, # dodge frames } def oninit(self, adv): super().oninit(adv) from module.bleed import Bleed self.bleed = Bleed('ds', 1.46).reset() def ds_proc(self): dmg = self.adv.dmg_make('ds',1.04,'s') self.bleed.on() return dmg + self.adv.dmg_make('ds',5.20,'s')
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 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