v2.5.0: added landmark functionality for level feelings

This commit is contained in:
Evan Debenham
2024-06-25 16:19:52 -04:00
parent 995a8836c3
commit da42665e80
6 changed files with 129 additions and 30 deletions

View File

@@ -231,6 +231,21 @@ levels.level.statue_desc=Someone wanted to adorn this place, but failed, obvious
levels.level.alchemy_desc=This pot is filled with magical water. Items can be mixed into the pot to create something new!
levels.level.empty_well_desc=The well has run dry.
levels.level$feeling.chasm_title=Chasm Floor
levels.level$feeling.water_title=Water Floor
levels.level$feeling.grass_title=Grass Floor
levels.level$feeling.dark_title=Dark Floor
levels.level$feeling.large_title=Large Floor
levels.level$feeling.traps_title=Traps Floor
levels.level$feeling.secrets_title=Secrets Floor
levels.level$feeling.chasm_desc=Your steps echo across the dungeon.
levels.level$feeling.water_desc=You hear water splashing around you.
levels.level$feeling.grass_desc=The smell of vegetation is thick in the air.
levels.level$feeling.dark_desc=You can hear enemies moving in the darkness.
levels.level$feeling.large_desc=This dungeon floor seems unusually large.
levels.level$feeling.traps_desc=The ground seems especially treacherous here.
levels.level$feeling.secrets_desc=The atmosphere hints that this floor hides many secrets.
levels.mininglevel.wall_desc=A smooth rock wall that's a little softer than usual. You can mine through it with your pickaxe, but it'll take some effort and increase your hunger a bit.
levels.mininglevel.gold_extra_desc=You can probably mine it out with your pickaxe.
levels.mininglevel.crystal_name=Crystal spike

View File

@@ -36,13 +36,6 @@ scenes.gamescene.warp=The walls warp and shift around you!
scenes.gamescene.return=You return to floor %d of the dungeon.
scenes.gamescene.resurrect=You materialize somewhere on floor %d.
scenes.gamescene.secret_hint=You're certain that there's a secret room somewhere on this floor.
scenes.gamescene.chasm=Your steps echo across the dungeon.
scenes.gamescene.water=You hear water splashing around you.
scenes.gamescene.grass=The smell of vegetation is thick in the air.
scenes.gamescene.dark=You can hear enemies moving in the darkness.
scenes.gamescene.large=This dungeon floor seems unusually large.
scenes.gamescene.traps=The ground seems especially treacherous here.
scenes.gamescene.secrets=The atmosphere hints that this floor hides many secrets.
scenes.gamescene.choose_examine=Choose Examine
scenes.gamescene.multiple_examine=There are multiple things of interest here, which one do you want to examine?
scenes.gamescene.dont_know=You don't know what is there.

View File

@@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.journal;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.items.keys.Key;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.BlacksmithSprite;
@@ -85,7 +86,13 @@ public class Notes {
}
public enum Landmark {
//a landmark for each depth type
CHASM_FLOOR,
WATER_FLOOR,
GRASS_FLOOR,
DARK_FLOOR,
LARGE_FLOOR,
TRAPS_FLOOR,
SECRETS_FLOOR,
//more special room landmarks?
// distant well
@@ -124,7 +131,38 @@ public class Notes {
public Image icon(){
switch (landmark){
default:
return super.icon();
return Icons.STAIRS.get();
//TODO using a 2x bloated sprite isn't ideal..
// but I want them to visually match what's in the game scene
case CHASM_FLOOR:
Image result = Icons.DEPTH_CHASM.get();
result.scale.set(2f);
return result;
case WATER_FLOOR:
result = Icons.DEPTH_WATER.get();
result.scale.set(2f);
return result;
case GRASS_FLOOR:
result = Icons.DEPTH_GRASS.get();
result.scale.set(2f);
return result;
case DARK_FLOOR:
result = Icons.DEPTH_DARK.get();
result.scale.set(2f);
return result;
case LARGE_FLOOR:
result = Icons.DEPTH_LARGE.get();
result.scale.set(2f);
return result;
case TRAPS_FLOOR:
result = Icons.DEPTH_TRAPS.get();
result.scale.set(2f);
return result;
case SECRETS_FLOOR:
result = Icons.DEPTH_SECRETS.get();
result.scale.set(2f);
return result;
case WELL_OF_HEALTH:
return Icons.get(Icons.WELL_HEALTH);
@@ -157,12 +195,30 @@ public class Notes {
@Override
public String title() {
return landmark.title();
switch (landmark) {
default: landmark.title();
case CHASM_FLOOR: return Messages.get(Level.Feeling.class, "chasm_title");
case WATER_FLOOR: return Messages.get(Level.Feeling.class, "water_title");
case GRASS_FLOOR: return Messages.get(Level.Feeling.class, "grass_title");
case DARK_FLOOR: return Messages.get(Level.Feeling.class, "dark_title");
case LARGE_FLOOR: return Messages.get(Level.Feeling.class, "large_title");
case TRAPS_FLOOR: return Messages.get(Level.Feeling.class, "traps_title");
case SECRETS_FLOOR: return Messages.get(Level.Feeling.class, "secrets_title");
}
}
@Override
public String desc() {
return "";
switch (landmark) {
default: return "";
case CHASM_FLOOR: return Messages.get(Level.Feeling.class, "chasm_desc");
case WATER_FLOOR: return Messages.get(Level.Feeling.class, "water_desc");
case GRASS_FLOOR: return Messages.get(Level.Feeling.class, "grass_desc");
case DARK_FLOOR: return Messages.get(Level.Feeling.class, "dark_desc");
case LARGE_FLOOR: return Messages.get(Level.Feeling.class, "large_desc");
case TRAPS_FLOOR: return Messages.get(Level.Feeling.class, "traps_desc");
case SECRETS_FLOOR: return Messages.get(Level.Feeling.class, "secrets_desc");
}
}
@Override

View File

@@ -121,7 +121,15 @@ public abstract class Level implements Bundlable {
DARK,
LARGE,
TRAPS,
SECRETS
SECRETS;
public String title(){
return Messages.get(this, name()+"_title");
}
public String desc() {
return Messages.get(this, name()+"_desc");
}
}
protected int width;

View File

@@ -64,6 +64,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.MimicTooth;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon;
import com.shatteredpixel.shatteredpixeldungeon.journal.Document;
import com.shatteredpixel.shatteredpixeldungeon.journal.Journal;
import com.shatteredpixel.shatteredpixeldungeon.journal.Notes;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
@@ -545,13 +546,34 @@ public class GameScene extends PixelScene {
}
switch (Dungeon.level.feeling) {
case CHASM: GLog.w(Messages.get(this, "chasm")); break;
case WATER: GLog.w(Messages.get(this, "water")); break;
case GRASS: GLog.w(Messages.get(this, "grass")); break;
case DARK: GLog.w(Messages.get(this, "dark")); break;
case LARGE: GLog.w(Messages.get(this, "large")); break;
case TRAPS: GLog.w(Messages.get(this, "traps")); break;
case SECRETS: GLog.w(Messages.get(this, "secrets")); break;
case CHASM:
GLog.w(Dungeon.level.feeling.desc());
Notes.add(Notes.Landmark.CHASM_FLOOR);
break;
case WATER:
GLog.w(Dungeon.level.feeling.desc());
Notes.add(Notes.Landmark.WATER_FLOOR);
break;
case GRASS:
GLog.w(Dungeon.level.feeling.desc());
Notes.add(Notes.Landmark.GRASS_FLOOR);
break;
case DARK:
GLog.w(Dungeon.level.feeling.desc());
Notes.add(Notes.Landmark.DARK_FLOOR);
break;
case LARGE:
GLog.w(Dungeon.level.feeling.desc());
Notes.add(Notes.Landmark.LARGE_FLOOR);
break;
case TRAPS:
GLog.w(Dungeon.level.feeling.desc());
Notes.add(Notes.Landmark.TRAPS_FLOOR);
break;
case SECRETS:
GLog.w(Dungeon.level.feeling.desc());
Notes.add(Notes.Landmark.SECRETS_FLOOR);
break;
}
for (Mob mob : Dungeon.level.mobs) {

View File

@@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.SPDAction;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.journal.Document;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
@@ -36,6 +37,7 @@ import com.shatteredpixel.shatteredpixeldungeon.windows.WndGame;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndJournal;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndKeyBindings;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndStory;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndTitledMessage;
import com.watabou.input.GameAction;
import com.watabou.noosa.BitmapText;
import com.watabou.noosa.Game;
@@ -84,23 +86,26 @@ public class MenuPane extends Component {
depthButton = new Button(){
@Override
protected String hoverText() {
switch (Dungeon.level.feeling) {
case CHASM: return Messages.get(GameScene.class, "chasm");
case WATER: return Messages.get(GameScene.class, "water");
case GRASS: return Messages.get(GameScene.class, "grass");
case DARK: return Messages.get(GameScene.class, "dark");
case LARGE: return Messages.get(GameScene.class, "large");
case TRAPS: return Messages.get(GameScene.class, "traps");
case SECRETS: return Messages.get(GameScene.class, "secrets");
if (Dungeon.level.feeling != Level.Feeling.NONE){
return Dungeon.level.feeling.desc();
} else {
return null;
}
return null;
}
@Override
protected void onClick() {
super.onClick();
//just open journal for now, maybe have it open landmarks after expanding that page?
GameScene.show( new WndJournal() );
if (Dungeon.level.feeling == Level.Feeling.NONE){
GameScene.show(new WndJournal());
} else {
Image icon = Icons.get(Dungeon.level.feeling);
icon.scale.set(2f);
GameScene.show(new WndTitledMessage(icon,
Dungeon.level.feeling.title(),
Dungeon.level.feeling.desc()));
}
}
};
add(depthButton);