This commit is contained in:
Rikko 2022-10-05 22:30:12 +05:30
parent 9041d5cbf7
commit 6bdc35eda4
2 changed files with 491 additions and 503 deletions

View file

@ -34,7 +34,8 @@ from __future__ import annotations
from typing import TYPE_CHECKING
import ba,_ba
import ba
import _ba
from bastd.actor.playerspaz import PlayerSpaz
@ -46,12 +47,14 @@ from ba._profile import get_player_profile_colors
if TYPE_CHECKING:
from typing import Any, Type, List, Dict, Tuple, Union, Sequence, Optional
import weakref
import os,json
import os
import json
from ba import _lobby
from bastd.actor.spazappearance import *
from ba._lobby import ChangeMessage
from ba._lobby import PlayerReadyMessage
def __init__(self, vpos: float, sessionplayer: _ba.SessionPlayer,
lobby: 'Lobby') -> None:
self._deek_sound = _ba.getsound('deek')
@ -75,7 +78,8 @@ def __init__(self, vpos: float, sessionplayer: _ba.SessionPlayer,
app = _ba.app
self.bakwas_chars=["Lee","Todd McBurton","Zola","Butch","Witch","warrior","Middle-Man","Alien","OldLady","Gladiator","Wrestler","Gretel","Robot"]
self.bakwas_chars = ["Lee", "Todd McBurton", "Zola", "Butch", "Witch", "warrior",
"Middle-Man", "Alien", "OldLady", "Gladiator", "Wrestler", "Gretel", "Robot"]
# Load available player profiles either from the local config or
# from the remote device.
@ -139,7 +143,7 @@ def __init__(self, vpos: float, sessionplayer: _ba.SessionPlayer,
self._character_index = self._random_character_index
self._color = self._random_color
self._highlight = self._random_highlight
self.characterchooser=False
self.characterchooser = False
self.update_from_profile()
self.update_position()
self._inited = True
@ -147,8 +151,6 @@ def __init__(self, vpos: float, sessionplayer: _ba.SessionPlayer,
self._set_ready(False)
def _set_ready(self, ready: bool) -> None:
# pylint: disable=cyclic-import
@ -166,7 +168,7 @@ def _set_ready(self, ready: bool) -> None:
_ba.set_ui_input_device(self._sessionplayer.inputdevice)
return
if ready==False:
if ready == False:
self._sessionplayer.assigninput(
InputType.LEFT_PRESS,
Call(self.handlemessage, ChangeMessage('team', -1)))
@ -190,21 +192,21 @@ def _set_ready(self, ready: bool) -> None:
self._update_text()
self._sessionplayer.setname('untitled', real=False)
elif ready == True:
self.characterchooser=True
self.characterchooser = True
self._sessionplayer.assigninput(
(InputType.LEFT_PRESS, InputType.RIGHT_PRESS,
InputType.UP_PRESS, InputType.DOWN_PRESS,
InputType.JUMP_PRESS, InputType.BOMB_PRESS,
InputType.PICK_UP_PRESS), self._do_nothing)
self._sessionplayer.assigninput(
(InputType.UP_PRESS),Call(self.handlemessage,ChangeMessage('characterchooser',-1)))
(InputType.UP_PRESS), Call(self.handlemessage, ChangeMessage('characterchooser', -1)))
self._sessionplayer.assigninput(
(InputType.DOWN_PRESS),Call(self.handlemessage,ChangeMessage('characterchooser',1)))
(InputType.DOWN_PRESS), Call(self.handlemessage, ChangeMessage('characterchooser', 1)))
self._sessionplayer.assigninput(
(InputType.BOMB_PRESS),Call(self.handlemessage,ChangeMessage('ready',0)))
(InputType.BOMB_PRESS), Call(self.handlemessage, ChangeMessage('ready', 0)))
self._sessionplayer.assigninput(
(InputType.JUMP_PRESS,InputType.PICK_UP_PRESS, InputType.PUNCH_PRESS),
(InputType.JUMP_PRESS, InputType.PICK_UP_PRESS, InputType.PUNCH_PRESS),
Call(self.handlemessage, ChangeMessage('ready', 2)))
# Store the last profile picked by this input for reuse.
@ -237,8 +239,6 @@ def _set_ready(self, ready: bool) -> None:
self._update_text()
else:
# Inform the session that this player is ready.
_ba.getsession().handlemessage(PlayerReadyMessage(self))
@ -257,7 +257,7 @@ def handlemessage(self, msg: Any) -> Any:
if not self._text_node:
print_error('got ChangeMessage after nodes died')
return
if msg.what=='characterchooser':
if msg.what == 'characterchooser':
_ba.playsound(self._click_sound)
# update our index in our local list of characters
self._character_index = ((self._character_index + msg.value) %
@ -293,7 +293,7 @@ def handlemessage(self, msg: Any) -> Any:
elif msg.what == 'character':
_ba.playsound(self._click_sound)
self.characterchooser=True
self.characterchooser = True
# update our index in our local list of characters
self._character_index = ((self._character_index + msg.value) %
len(self._character_names))
@ -303,6 +303,7 @@ def handlemessage(self, msg: Any) -> Any:
elif msg.what == 'ready':
self._handle_ready_msg(msg.value)
def _update_text(self) -> None:
assert self._text_node is not None
if self._ready:
@ -314,14 +315,14 @@ def _update_text(self) -> None:
text = Lstr(value='${A}\n${B}',
subs=[('${A}', text),
('${B}', Lstr(value=""+self._character_names[self._character_index]))])
self._text_node.scale=0.8
self._text_node.scale = 0.8
else:
text = Lstr(value='${A} (${B})',
subs=[('${A}', text),
('${B}', Lstr(resource='readyText'))])
else:
text = Lstr(value=self._getname(full=True))
self._text_node.scale=1.0
self._text_node.scale = 1.0
can_switch_teams = len(self.lobby.sessionteams) > 1
@ -347,14 +348,13 @@ def _update_text(self) -> None:
self._text_node.text = text
# ba_meta export plugin
class HeySmoothy(ba.Plugin):
def __init__(self):
_lobby.Chooser.__init__=__init__
_lobby.Chooser._set_ready=_set_ready
_lobby.Chooser._update_text=_update_text
_lobby.Chooser.handlemessage=handlemessage
_lobby.Chooser.__init__ = __init__
_lobby.Chooser._set_ready = _set_ready
_lobby.Chooser._update_text = _update_text
_lobby.Chooser.handlemessage = handlemessage

View file

@ -50,38 +50,41 @@ from __future__ import annotations
from typing import TYPE_CHECKING
import ba,_ba
import ba
import _ba
from bastd.actor.playerspaz import PlayerSpaz
from bastd.actor.scoreboard import Scoreboard
if TYPE_CHECKING:
from typing import Any, Type, List, Dict, Tuple, Union, Sequence, Optional
import os,json
import os
import json
from bastd.actor.spazappearance import *
spazoutfit={
"color_mask":"neoSpazColorMask",
"color_texture":"neoSpazColor",
"head":"neoSpazHead",
"hand":"neoSpazHand",
"torso":"neoSpazTorso",
"pelvis":"neoSpazTorso",
"upper_arm":"neoSpazUpperArm",
"forearm":"neoSpazForeArm",
"upper_leg":"neoSpazUpperLeg",
"lower_leg":"neoSpazLowerLeg",
"toes_model":"neoSpazToes",
"jump_sounds":['spazJump01', 'spazJump02', 'spazJump03', 'spazJump04'],
"attack_sounds":['spazAttack01', 'spazAttack02', 'spazAttack03', 'spazAttack04'],
"impact_sounds":['spazImpact01', 'spazImpact02', 'spazImpact03', 'spazImpact04'],
"death_sounds":['spazDeath01'],
"pickup_sounds":['spazPickup01'],
"fall_sounds":['spazFall01'],
"icon_texture":"neoSpazIcon",
"icon_mask_texture":"neoSpazIconColorMask",
"style":"spaz"
}
character=None
spazoutfit = {
"color_mask": "neoSpazColorMask",
"color_texture": "neoSpazColor",
"head": "neoSpazHead",
"hand": "neoSpazHand",
"torso": "neoSpazTorso",
"pelvis": "neoSpazTorso",
"upper_arm": "neoSpazUpperArm",
"forearm": "neoSpazForeArm",
"upper_leg": "neoSpazUpperLeg",
"lower_leg": "neoSpazLowerLeg",
"toes_model": "neoSpazToes",
"jump_sounds": ['spazJump01', 'spazJump02', 'spazJump03', 'spazJump04'],
"attack_sounds": ['spazAttack01', 'spazAttack02', 'spazAttack03', 'spazAttack04'],
"impact_sounds": ['spazImpact01', 'spazImpact02', 'spazImpact03', 'spazImpact04'],
"death_sounds": ['spazDeath01'],
"pickup_sounds": ['spazPickup01'],
"fall_sounds": ['spazFall01'],
"icon_texture": "neoSpazIcon",
"icon_mask_texture": "neoSpazIconColorMask",
"style": "spaz"
}
character = None
class Player(ba.Player['Team']):
"""Our player type for this game."""
@ -140,7 +143,6 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
ba.BoolSetting('Epic Mode', default=False),
]
if issubclass(sessiontype, ba.FreeForAllSession):
settings.append(
ba.BoolSetting('Allow Negative Scores', default=False))
@ -158,7 +160,6 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
def __init__(self, settings: dict):
super().__init__(settings)
self.initdic()
@ -171,9 +172,9 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
self._time_limit = float(settings['Time Limit'])
self._allow_negative_scores = bool(
settings.get('Allow Negative Scores', False))
self.bodyindex=0
self.modelindex=0
self.youtube= ba.newnode(
self.bodyindex = 0
self.modelindex = 0
self.youtube = ba.newnode(
'text',
attrs={
'text': "youtube.com/c/HeySmoothy",
@ -181,9 +182,9 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
'scale': 0.02,
'color': (1, 0, 0, 0.4),
'h_align': 'center',
'position': (0,4,-1.9)
'position': (0, 4, -1.9)
})
self.discordservere= ba.newnode(
self.discordservere = ba.newnode(
'text',
attrs={
'text': "discord.gg/ucyaesh",
@ -191,7 +192,7 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
'scale': 0.02,
'color': (0.12, 0.3, 0.6, 0.4),
'h_align': 'center',
'position': (-3,2.7,-1.9)
'position': (-3, 2.7, -1.9)
})
# self.discord= ba.newnode(
# 'text',
@ -204,7 +205,7 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
# 'position': (4,2.7,-1.9)
# })
# Base class overrides.
self.bodypart= ba.newnode(
self.bodypart = ba.newnode(
'text',
attrs={
'text': "<Choose Body Part>",
@ -212,7 +213,7 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
'scale': 0.02,
'color': (1, 1, 0, 1),
'h_align': 'center',
'position': (-4,6,-4)
'position': (-4, 6, -4)
})
self.newmodel = ba.newnode(
'text',
@ -222,7 +223,7 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
'scale': 0.02,
'color': (1, 1, 0, 1),
'h_align': 'center',
'position': (6,6,-4)
'position': (6, 6, -4)
})
self.slow_motion = self._epic_mode
self.default_music = (ba.MusicType.EPIC if self._epic_mode else
@ -241,12 +242,11 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
def on_begin(self) -> None:
super().on_begin()
def nextBodyPart(self):
self.bodyindex =(self.bodyindex+1)%len(self.dic.keys())
self.bodyindex = (self.bodyindex+1) % len(self.dic.keys())
self.bodypart.delete()
PART=list(self.dic.keys())[self.bodyindex]
self.bodypart=ba.newnode(
PART = list(self.dic.keys())[self.bodyindex]
self.bodypart = ba.newnode(
'text',
attrs={
'text': PART,
@ -254,16 +254,14 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
'scale': 0.02,
'color': (1, 1, 1, 1),
'h_align': 'center',
'position': (-4,6,-4)
'position': (-4, 6, -4)
})
def prevBodyPart(self):
self.bodyindex =(self.bodyindex-1)%len(self.dic.keys())
self.bodyindex = (self.bodyindex-1) % len(self.dic.keys())
self.bodypart.delete()
PART=list(self.dic.keys())[self.bodyindex]
self.bodypart=ba.newnode(
PART = list(self.dic.keys())[self.bodyindex]
self.bodypart = ba.newnode(
'text',
attrs={
'text': PART,
@ -271,16 +269,16 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
'scale': 0.02,
'color': (1, 1, 1, 1),
'h_align': 'center',
'position': (-4,6,-4)
'position': (-4, 6, -4)
})
def nextModel(self):
self.newmodel.delete()
PART=list(self.dic.keys())[self.bodyindex]
self.modelindex =(self.modelindex+1)%len(self.dic[PART])
model=self.dic[PART][self.modelindex]
self.newmodel=ba.newnode(
PART = list(self.dic.keys())[self.bodyindex]
self.modelindex = (self.modelindex+1) % len(self.dic[PART])
model = self.dic[PART][self.modelindex]
self.newmodel = ba.newnode(
'text',
attrs={
'text': model,
@ -288,18 +286,18 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
'scale': 0.02,
'color': (1, 1, 1, 1),
'h_align': 'center',
'position': (6,6,-4)
'position': (6, 6, -4)
})
self.setModel(PART,model)
self.setModel(PART, model)
def prevModel(self):
self.newmodel.delete()
PART=list(self.dic.keys())[self.bodyindex]
self.modelindex =(self.modelindex-1)%len(self.dic[PART])
model=self.dic[PART][self.modelindex]
self.newmodel=ba.newnode(
PART = list(self.dic.keys())[self.bodyindex]
self.modelindex = (self.modelindex-1) % len(self.dic[PART])
model = self.dic[PART][self.modelindex]
self.newmodel = ba.newnode(
'text',
attrs={
'text': model,
@ -307,43 +305,43 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
'scale': 0.02,
'color': (1, 1, 1, 1),
'h_align': 'center',
'position': (6,6,-4)
'position': (6, 6, -4)
})
self.setModel(PART,model)
self.setModel(PART, model)
def setModel(self,bodypart,modelname):
def setModel(self, bodypart, modelname):
global spazoutfit
body=_ba.get_foreground_host_activity().players[0].actor.node
if bodypart=='head':
body.head_model=ba.getmodel(modelname)
elif bodypart=='torso':
body.torso_model=ba.getmodel(modelname)
elif bodypart=='pelvis':
body.pelvis_model=ba.getmodel(modelname)
elif bodypart=='upper_arm':
body.upper_arm_model=ba.getmodel(modelname)
elif bodypart=='forearm':
body.forearm_model=ba.getmodel(modelname)
elif bodypart=='hand':
body.hand_model=ba.getmodel(modelname)
elif bodypart=='upper_leg':
body.upper_leg_model=ba.getmodel(modelname)
elif bodypart=='lower_leg':
body.lower_leg_model=ba.getmodel(modelname)
elif bodypart=='toes_model':
body.toes_model=ba.getmodel(modelname)
elif bodypart=='style':
body.style=modelname
elif bodypart=='color_texture':
body.color_texture=ba.gettexture(modelname)
elif bodypart=='color_mask':
body.color_mask_texture=ba.gettexture(modelname)
spazoutfit[bodypart]=modelname
body = _ba.get_foreground_host_activity().players[0].actor.node
if bodypart == 'head':
body.head_model = ba.getmodel(modelname)
elif bodypart == 'torso':
body.torso_model = ba.getmodel(modelname)
elif bodypart == 'pelvis':
body.pelvis_model = ba.getmodel(modelname)
elif bodypart == 'upper_arm':
body.upper_arm_model = ba.getmodel(modelname)
elif bodypart == 'forearm':
body.forearm_model = ba.getmodel(modelname)
elif bodypart == 'hand':
body.hand_model = ba.getmodel(modelname)
elif bodypart == 'upper_leg':
body.upper_leg_model = ba.getmodel(modelname)
elif bodypart == 'lower_leg':
body.lower_leg_model = ba.getmodel(modelname)
elif bodypart == 'toes_model':
body.toes_model = ba.getmodel(modelname)
elif bodypart == 'style':
body.style = modelname
elif bodypart == 'color_texture':
body.color_texture = ba.gettexture(modelname)
elif bodypart == 'color_mask':
body.color_mask_texture = ba.gettexture(modelname)
spazoutfit[bodypart] = modelname
def spawn_player(self, player: Player) -> ba.Actor:
global character
if character!=None:
player.character=character
if character != None:
player.character = character
self.setcurrentcharacter(player.character)
@ -374,31 +372,25 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
player = msg.getplayer(Player)
self.respawn_player(player)
else:
return super().handlemessage(msg)
return None
def setcurrentcharacter(self,charname):
global spazoutfit
char=ba.app.spaz_appearances[charname]
spazoutfit['head']=char.head_model
spazoutfit['hand']=char.hand_model
spazoutfit['torso']=char.torso_model
spazoutfit['pelvis']=char.pelvis_model
spazoutfit['upper_arm']=char.upper_arm_model
spazoutfit['forearm']=char.forearm_model
spazoutfit['upper_leg']=char.upper_leg_model
spazoutfit['lower_leg']=char.lower_leg_model
spazoutfit['toes_model']=char.toes_model
spazoutfit['style']=char.style
spazoutfit['color_mask']=char.color_mask_texture
spazoutfit['color_texture']=char.color_texture
def setcurrentcharacter(self, charname):
global spazoutfit
char = ba.app.spaz_appearances[charname]
spazoutfit['head'] = char.head_model
spazoutfit['hand'] = char.hand_model
spazoutfit['torso'] = char.torso_model
spazoutfit['pelvis'] = char.pelvis_model
spazoutfit['upper_arm'] = char.upper_arm_model
spazoutfit['forearm'] = char.forearm_model
spazoutfit['upper_leg'] = char.upper_leg_model
spazoutfit['lower_leg'] = char.lower_leg_model
spazoutfit['toes_model'] = char.toes_model
spazoutfit['style'] = char.style
spazoutfit['color_mask'] = char.color_mask_texture
spazoutfit['color_texture'] = char.color_texture
def _update_scoreboard(self) -> None:
for team in self.teams:
@ -410,27 +402,29 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
for team in self.teams:
results.set_team_score(team, team.score)
self.end(results=results)
def initdic(self):
self.dic={"head":["bomb","landMine","trees","wing","eyeLid","impactBomb"],
"hand":["hairTuft3","bomb","powerup"],
"torso":["bomb","landMine","bomb"],
"pelvis":["hairTuft4","bomb"],
"upper_arm":["wing","locator","bomb"],
"forearm":["flagPole","bomb"],
"upper_leg":["bomb"],
"lower_leg":["bomb"],
"toes_model":["bomb"],
"style":["spaz","female","ninja","kronk","mel","pirate","santa","frosty","bones","bear","penguin","ali","cyborg","agent","pixie","bunny"],
"color_texture":["kronk","egg1","egg2","egg3","achievementGotTheMoves","bombColor","crossOut","explosion","rgbStripes","powerupCurse","powerupHealth","impactBombColorLit"],
"color_mask":["egg1","egg2","egg3","bombColor","crossOutMask","fontExtras3"]
self.dic = {"head": ["bomb", "landMine", "trees", "wing", "eyeLid", "impactBomb"],
"hand": ["hairTuft3", "bomb", "powerup"],
"torso": ["bomb", "landMine", "bomb"],
"pelvis": ["hairTuft4", "bomb"],
"upper_arm": ["wing", "locator", "bomb"],
"forearm": ["flagPole", "bomb"],
"upper_leg": ["bomb"],
"lower_leg": ["bomb"],
"toes_model": ["bomb"],
"style": ["spaz", "female", "ninja", "kronk", "mel", "pirate", "santa", "frosty", "bones", "bear", "penguin", "ali", "cyborg", "agent", "pixie", "bunny"],
"color_texture": ["kronk", "egg1", "egg2", "egg3", "achievementGotTheMoves", "bombColor", "crossOut", "explosion", "rgbStripes", "powerupCurse", "powerupHealth", "impactBombColorLit"],
"color_mask": ["egg1", "egg2", "egg3", "bombColor", "crossOutMask", "fontExtras3"]
}
chars=["neoSpaz","zoe","ninja","kronk","mel","jack","santa","frosty","bones","bear","penguin","ali","cyborg","agent","wizard","pixie","bunny"]
chars = ["neoSpaz", "zoe", "ninja", "kronk", "mel", "jack", "santa", "frosty",
"bones", "bear", "penguin", "ali", "cyborg", "agent", "wizard", "pixie", "bunny"]
for char in chars:
self.dic["head"].append(char+"Head")
self.dic["hand"].append(char+"Hand")
self.dic["torso"].append(char+"Torso")
if char not in ['mel',"jack","santa"]:
if char not in ['mel', "jack", "santa"]:
self.dic["pelvis"].append(char+"Pelvis")
self.dic["upper_arm"].append(char+"UpperArm")
self.dic["forearm"].append(char+"ForeArm")
@ -438,56 +432,59 @@ class CharacterBuilder(ba.TeamGameActivity[Player, Team]):
self.dic["lower_leg"].append(char+"LowerLeg")
self.dic["toes_model"].append(char+"Toes")
self.dic["color_mask"].append(char+"ColorMask")
if char !="kronk":
if char != "kronk":
self.dic["color_texture"].append(char+"Color")
cm=_ba.chatmessage
cm = _ba.chatmessage
def _new_chatmessage(msg):
if msg.split(" ")[0]=="export":
if len(msg.split(" "))>1:
if msg.split(" ")[0] == "export":
if len(msg.split(" ")) > 1:
savecharacter(msg.split(" ")[1])
else:
_ba.screenmessage("Enter name of character")
elif msg.split(" ")[0]=="import":
elif msg.split(" ")[0] == "import":
importcharacter(msg[7:])
else:
cm(msg)
_ba.chatmessage=_new_chatmessage
_ba.chatmessage = _new_chatmessage
def savecharacter(name):
path=os.path.join(_ba.env()["python_directory_user"],"CustomCharacters" + os.sep)
path = os.path.join(_ba.env()["python_directory_user"], "CustomCharacters" + os.sep)
if not os.path.isdir(path):
os.makedirs(path)
if _ba.get_foreground_host_activity()!=None:
if _ba.get_foreground_host_activity() != None:
with open(path+name+".json",'w') as f:
json.dump(spazoutfit,f,indent=4)
registercharacter(name,spazoutfit)
with open(path+name+".json", 'w') as f:
json.dump(spazoutfit, f, indent=4)
registercharacter(name, spazoutfit)
ba.playsound(ba.getsound("gunCocking"))
_ba.screenmessage("Character Saved")
else:
_ba.screenmessage("Works offline with Character Maker")
def importcharacter(name):
if name in ba.app.spaz_appearances:
global character
character=name
character = name
try:
_ba.get_foreground_host_activity().players[0].actor.node.handlemessage(ba.DieMessage())
_ba.screenmessage("Imported")
except:
_ba.screenmessage("works offline with character maker")
else:
_ba.screenmessage("invalid name check typo \n name is case sensitive")
def registercharacter(name,char):
def registercharacter(name, char):
t = Appearance(name.split(".")[0])
t.color_texture = char['color_texture']
t.color_mask_texture = char['color_mask']
@ -513,26 +510,17 @@ def registercharacter(name,char):
t.style = char['style']
# ba_meta export plugin
class HeySmoothy(ba.Plugin):
def __init__(self):
_ba.set_party_icon_always_visible(True)
path=os.path.join(_ba.env()["python_directory_user"],"CustomCharacters" + os.sep)
path = os.path.join(_ba.env()["python_directory_user"], "CustomCharacters" + os.sep)
if not os.path.isdir(path):
os.makedirs(path)
files=os.listdir(path)
files = os.listdir(path)
for file in files:
with open(path+file, 'r') as f:
character = json.load(f)
registercharacter(file,character)
registercharacter(file, character)