예제 #1
0
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')
예제 #2
0
파일: megaman.py 프로젝트: pfleg/dl
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
예제 #3
0
파일: megaman.py 프로젝트: Happytogepi/dl
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