This commit is contained in:
brostosjoined 2024-01-24 21:14:55 +03:00
parent 6de5f5f3a7
commit fcd4cc8169
9 changed files with 518 additions and 68 deletions

View file

@ -0,0 +1,85 @@
# Ported to api 8 by brostos using baport.(https://github.com/bombsquad-community/baport)
# ba_meta require api 8
# (see https://ballistica.net/wiki/meta-tag-system)
from __future__ import annotations
from typing import TYPE_CHECKING
import babase
import bauiv1 as bui
import bascenev1 as bs
import random
from bascenev1lib.actor.spaz import Spaz
from bascenev1lib.actor.spazfactory import SpazFactory
if TYPE_CHECKING:
pass
Spaz._old_init = Spaz.__init__
def __init__(self,
color: Sequence[float] = (1.0, 1.0, 1.0),
highlight: Sequence[float] = (0.5, 0.5, 0.5),
character: str = 'Spaz',
source_player: bs.Player = None,
start_invincible: bool = True,
can_accept_powerups: bool = True,
powerups_expire: bool = False,
demo_mode: bool = False):
self._old_init(color, highlight, character, source_player, start_invincible,
can_accept_powerups, powerups_expire, demo_mode)
if self.source_player:
self.equip_shields()
def animate_shield():
if not self.shield:
return
bs.animate_array(self.shield, 'color', 3, {
0.0: self.shield.color,
0.2: (random.random(), random.random(), random.random())
})
bs.timer(0.2, animate_shield, repeat=True)
self.impact_scale = 0
def equip_shields(self, decay: bool = False) -> None:
"""
Give this spaz a nice energy shield.
"""
if not self.node:
babase.print_error('Can\'t equip shields; no node.')
return
factory = SpazFactory.get()
if self.shield is None:
self.shield = bs.newnode('shield',
owner=self.node,
attrs={
'color': (0.3, 0.2, 2.0),
'radius': 1.3
})
self.node.connectattr('position_center', self.shield, 'position')
self.shield_hitpoints = self.shield_hitpoints_max = 650
self.shield_decay_rate = factory.shield_decay_rate if decay else 0
self.shield.hurt = 0
factory.shield_up_sound.play(1.0, position=self.node.position)
if self.impact_scale == 0:
return
if self.shield_decay_rate > 0:
self.shield_decay_timer = bs.Timer(0.5,
bs.WeakCall(self.shield_decay),
repeat=True)
# So user can see the decay.
self.shield.always_show_health_bar = True
# ba_meta export plugin
class InfinityShieldPlugin(babase.Plugin):
Spaz.__init__ = __init__
Spaz.equip_shields = equip_shields