def sound_play(self, event): """ Plays the currently selected sound. """ if self.selected_row == 0: return utils.sound_play(self.patch.sound_names[self.selected_index], self.pwads)
def sound_play(self, event): """ Plays a sound entry. """ key = self.PROPS_SOUNDNAMES[event.GetId()] sound_index = self.patch.things[self.selected_index]['sound' + key] if sound_index == 0: return utils.sound_play(self.patch.sound_names[sound_index - 1], self.pwads)
def set_state(self, state_index): """ Sets a new state index. """ if state_index <= 1 or state_index >= len(self.patch.states): self.ticks = -1 self.anim_stop() return state = self.patch.states[state_index] sprite_index = state['sprite'] sprite_name = self.patch.sprite_names[sprite_index] sprite_frame = state['spriteFrame'] & 0x3FFF self.Sprite.show_sprite(sprite_name, sprite_frame) self.StateIndex.SetLabel(str(state_index)) self.StateInfo.SetLabel('{}{}'.format(sprite_name, chr(65 + sprite_frame))) action_label = '' # Play any state-related sound. if state['action'] is not None: # Support for RandomJump action that takes parameters to jump to a random next state. if state['action'] == 'RandomJump' and random.randint(0, 255) < state['unused2']: self.set_state(state['unused1']) return action_label = state['action'] action_name = state['action'] action = self.patch.engine.actions[action_name] sound_label = '' sound_index = None spawn_sound_label = '' spawn_sound_index = None if 'sound' in action: parts = action['sound'].split(':') if len(parts) != 2: raise Exception('Invalid sound for action {}'.format(action_name)) if parts[0] == 'sound': sound_index = int(parts[1]) elif parts[0] == 'thing': if self.ref_thing_index is not None: sound_index = self.ref_thing[parts[1]] else: sound_label = '{}:{}'.format(parts[0], parts[1]) elif parts[0] == 'state': sound_index = state[parts[1]] # Action spawns a thing. if 'spawns' in action: thing = self.patch.things[action['spawns']] spawn_sound_index = thing['soundAlert'] # Playback sounds for this action. Any specific sound overrides a spawned thing sound. if sound_index is not None: utils.sound_play(self.patch.sound_names[sound_index - 1], self.pwads) sound_label = self.patch.sound_names[sound_index - 1] elif spawn_sound_index is not None: utils.sound_play(self.patch.sound_names[spawn_sound_index - 1], self.pwads) spawn_sound_label = self.patch.sound_names[spawn_sound_index - 1] self.SpawnSound.SetLabel(spawn_sound_label.upper()) self.StateSound.SetLabel(sound_label.upper()) self.StateAction.SetLabel(action_label) self.state_index = state_index self.ticks = state['duration']