v2.2.0: added various safety checks to prevent rare crash errors

This commit is contained in:
Evan Debenham
2023-08-17 17:22:04 -04:00
parent 4be8b8b658
commit caaa820038
5 changed files with 35 additions and 22 deletions

View File

@@ -280,6 +280,7 @@ public class Group extends Gizmo {
}
public synchronized void clear() {
if (length == 0) return;
for (int i=0; i < length; i++) {
Gizmo g = members.get( i );
if (g != null) {

View File

@@ -79,10 +79,14 @@ public enum Sample {
@Override
public void run() {
for (String asset : toLoad) {
try {
Sound newSound = Gdx.audio.newSound(Gdx.files.internal(asset));
synchronized (INSTANCE) {
ids.put(asset, newSound);
}
} catch (Exception e){
Game.reportException(e);
}
}
}
}.start();

View File

@@ -448,8 +448,10 @@ public abstract class Char extends Actor {
enemy.damage(-1, this);
DeathMark.processFearTheReaper(enemy);
}
if (enemy.sprite != null) {
enemy.sprite.showStatus(CharSprite.NEGATIVE, Messages.get(Preparation.class, "assassinated"));
}
}
Talent.CombinedLethalityTriggerTracker combinedLethality = buff(Talent.CombinedLethalityTriggerTracker.class);
if (combinedLethality != null){
@@ -464,13 +466,17 @@ public abstract class Char extends Actor {
enemy.damage(-1, this);
DeathMark.processFearTheReaper(enemy);
}
if (enemy.sprite != null) {
enemy.sprite.showStatus(CharSprite.NEGATIVE, Messages.get(Talent.CombinedLethalityTriggerTracker.class, "executed"));
}
}
combinedLethality.detach();
}
if (enemy.sprite != null) {
enemy.sprite.bloodBurstA(sprite.center(), effectiveDamage);
enemy.sprite.flash();
}
if (!enemy.isAlive() && visibleFight) {
if (enemy == Dungeon.hero) {

View File

@@ -104,6 +104,7 @@ public class NecromancerSprite extends MobSprite {
}
public void finishSummoning(){
if (summoningBones != null) {
if (summoningBones.visible) {
Sample.INSTANCE.play(Assets.Sounds.BONES);
summoningBones.burst(Speck.factory(Speck.RATTLE), 5);
@@ -111,6 +112,7 @@ public class NecromancerSprite extends MobSprite {
summoningBones.on = false;
}
summoningBones = null;
}
idle();
}

View File

@@ -120,7 +120,7 @@ public class Toolbar extends Component {
return;
}
if (Dungeon.hero.ready && !GameScene.cancel()) {
if (Dungeon.hero != null && Dungeon.hero.ready && !GameScene.cancel()) {
String[] slotNames = new String[6];
Image[] slotIcons = new Image[6];
@@ -199,7 +199,7 @@ public class Toolbar extends Component {
add(btnWait = new Tool(24, 0, 20, 26) {
@Override
protected void onClick() {
if (Dungeon.hero.ready && !GameScene.cancel()) {
if (Dungeon.hero != null && Dungeon.hero.ready && !GameScene.cancel()) {
examining = false;
Dungeon.hero.rest(false);
}
@@ -221,7 +221,7 @@ public class Toolbar extends Component {
}
protected boolean onLongClick() {
if (Dungeon.hero.ready && !GameScene.cancel()) {
if (Dungeon.hero != null && Dungeon.hero.ready && !GameScene.cancel()) {
examining = false;
Dungeon.hero.rest(true);
}
@@ -234,7 +234,7 @@ public class Toolbar extends Component {
add(new Button(){
@Override
protected void onClick() {
if (Dungeon.hero.ready && !GameScene.cancel()) {
if (Dungeon.hero != null && Dungeon.hero.ready && !GameScene.cancel()) {
examining = false;
Dungeon.hero.rest(true);
}
@@ -251,7 +251,7 @@ public class Toolbar extends Component {
add(new Button(){
@Override
protected void onClick() {
if (Dungeon.hero.ready && !GameScene.cancel()) {
if (Dungeon.hero != null && Dungeon.hero.ready && !GameScene.cancel()) {
Dungeon.hero.waitOrPickup = true;
if ((Dungeon.level.heaps.get(Dungeon.hero.pos) != null || Dungeon.hero.canSelfTrample())
&& Dungeon.hero.handle(Dungeon.hero.pos)){
@@ -271,7 +271,7 @@ public class Toolbar extends Component {
}
protected boolean onLongClick() {
if (Dungeon.hero.ready && !GameScene.cancel()) {
if (Dungeon.hero != null && Dungeon.hero.ready && !GameScene.cancel()) {
examining = false;
Dungeon.hero.rest(true);
}
@@ -288,7 +288,7 @@ public class Toolbar extends Component {
add(btnSearch = new Tool(44, 0, 20, 26) {
@Override
protected void onClick() {
if (Dungeon.hero.ready) {
if (Dungeon.hero != null && Dungeon.hero.ready) {
if (!examining && !GameScene.cancel()) {
GameScene.selectCell(informer);
examining = true;
@@ -324,7 +324,7 @@ public class Toolbar extends Component {
@Override
protected void onClick() {
if (Dungeon.hero.ready || !Dungeon.hero.isAlive()) {
if (Dungeon.hero != null && (Dungeon.hero.ready || !Dungeon.hero.isAlive())) {
if (SPDSettings.interfaceSize() == 2) {
GameScene.toggleInvPane();
} else {
@@ -394,7 +394,7 @@ public class Toolbar extends Component {
add(new Button(){
@Override
protected void onClick() {
if (Dungeon.hero.ready && !GameScene.cancel()) {
if (Dungeon.hero != null && Dungeon.hero.ready && !GameScene.cancel()) {
ArrayList<Bag> bags = Dungeon.hero.belongings.getBags();
String[] names = new String[bags.size()];
Image[] images = new Image[bags.size()];