Example #1
0
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()
Example #2
0
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()
Example #3
0
File: megaman.py Project: 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
Example #4
0
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)
Example #5
0
File: tiki.py Project: zzonnee/dl
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)
Example #6
0
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
Example #7
0
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
Example #8
0
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()