v0.9.4: improved welcome/about scene, and added music composer credit

This commit is contained in:
Evan Debenham 2021-08-02 23:37:34 -04:00
parent 349e227b8a
commit 14872bdff9
5 changed files with 62 additions and 21 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -98,9 +98,9 @@ scenes.titlescene$changesbutton.changes=Current Changes Screen
scenes.titlescene.patreon_body=Shattered Pixel Dungeon is a completely free game, which means that I depend on support from generous players in order to keep making it.\n\nIf you're interested in supporting me, the best way to do so is through Patreon. Patreon gives me a consistent income source, and allows me to give something back to those who support me!\n\nPatrons get exclusive blog posts every week which let them know about what I'm working on before anyone else!\n\nYou can take a look at my Patreon page for the most up to date information about benefits, Thank you for your consideration!\n\n(Patreon rewards are only available in English) scenes.titlescene.patreon_body=Shattered Pixel Dungeon is a completely free game, which means that I depend on support from generous players in order to keep making it.\n\nIf you're interested in supporting me, the best way to do so is through Patreon. Patreon gives me a consistent income source, and allows me to give something back to those who support me!\n\nPatrons get exclusive blog posts every week which let them know about what I'm working on before anyone else!\n\nYou can take a look at my Patreon page for the most up to date information about benefits, Thank you for your consideration!\n\n(Patreon rewards are only available in English)
scenes.titlescene.patreon_button=Patreon Page scenes.titlescene.patreon_button=Patreon Page
scenes.welcomescene.welcome_msg=Shattered Pixel Dungeon is a roguelike RPG, with randomly generated enemies, levels, items, and traps!\n\nEach run is a new challenging experience, but be careful, death is permanent!\n\nHappy Dungeoneering! scenes.welcomescene.welcome_msg=Welcome to Shattered Pixel Dungeon!\n\nEach run through the dungeon is a new challenging experience, and be careful, death is permanent! Getting started is simple, but strategy is required if you want to win!\n\nHappy Dungeoneering!
scenes.welcomescene.update_intro=Shattered Pixel Dungeon has been updated! scenes.welcomescene.update_intro=Shattered Pixel Dungeon has been updated!
scenes.welcomescene.update_msg=v0.9.3 redesigns hero armor abilities and adds a fourth tier to the talent system! There are 13 abilities and 40 new talents in total.\n\nThere's also a new challenge, balance changes, bugfixes and various smaller tweaks.\n\nBe sure to check the changes screen for full details. scenes.welcomescene.update_msg=v0.9.4 contains a variety of content additions and refinements. There is new music, support for new platforms, new alchemy recipes, and a few other odds and ends.\n\nI've also made a bunch of balance changes to hero abilities and various items.\n\nBe sure to check the changes screen for full details.
scenes.welcomescene.patch_intro=Shattered Pixel Dungeon has been patched! scenes.welcomescene.patch_intro=Shattered Pixel Dungeon has been patched!
scenes.welcomescene.patch_bugfixes=This patch contains bugfixes. scenes.welcomescene.patch_bugfixes=This patch contains bugfixes.
scenes.welcomescene.patch_translations=This patch contains translation updates. scenes.welcomescene.patch_translations=This patch contains translation updates.

View File

@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.scenes;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.effects.Flare; import com.shatteredpixel.shatteredpixeldungeon.effects.Flare;
import com.shatteredpixel.shatteredpixeldungeon.ui.Archs;
import com.shatteredpixel.shatteredpixeldungeon.ui.ExitButton; import com.shatteredpixel.shatteredpixeldungeon.ui.ExitButton;
import com.shatteredpixel.shatteredpixeldungeon.ui.Icons; import com.shatteredpixel.shatteredpixeldungeon.ui.Icons;
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock;
@ -49,6 +50,13 @@ public class AboutScene extends PixelScene {
int w = Camera.main.width; int w = Camera.main.width;
int h = Camera.main.height; int h = Camera.main.height;
Archs archs = new Archs();
archs.setSize( w, h );
add( archs );
//darkens the arches
add(new ColorBlock(w, h, 0x88000000));
ScrollPane list = new ScrollPane( new Component() ); ScrollPane list = new ScrollPane( new Component() );
add( list ); add( list );
@ -69,7 +77,11 @@ public class AboutScene extends PixelScene {
"Developed by: _Evan Debenham_\nBased on Pixel Dungeon's open source", "Developed by: _Evan Debenham_\nBased on Pixel Dungeon's open source",
"ShatteredPixel.com", "ShatteredPixel.com",
shpxLink); shpxLink);
shpx.setRect((w - fullWidth)/2f, 6, 120, 0); if (landscape()){
shpx.setRect((w - fullWidth)/2f - 6, 10, 120, 0);
} else {
shpx.setRect((w - fullWidth)/2f, 6, 120, 0);
}
content.add(shpx); content.add(shpx);
CreditsBlock alex = new CreditsBlock(false, Window.SHPX_COLOR, CreditsBlock alex = new CreditsBlock(false, Window.SHPX_COLOR,
@ -80,7 +92,7 @@ public class AboutScene extends PixelScene {
"https://www.alekskomitov.com"); "https://www.alekskomitov.com");
alex.setSize(colWidth/2f, 0); alex.setSize(colWidth/2f, 0);
if (landscape()){ if (landscape()){
alex.setPos(shpx.right(), shpx.top() + (shpx.height() - alex.height())/2f); alex.setPos(shpx.right(), shpx.top() + (shpx.height() - alex.height()*2)/2f);
} else { } else {
alex.setPos(w/2f - colWidth/2f, shpx.bottom()+5); alex.setPos(w/2f - colWidth/2f, shpx.bottom()+5);
} }
@ -95,6 +107,15 @@ public class AboutScene extends PixelScene {
charlie.setRect(alex.right(), alex.top(), colWidth/2f, 0); charlie.setRect(alex.right(), alex.top(), colWidth/2f, 0);
content.add(charlie); content.add(charlie);
CreditsBlock kristjan = new CreditsBlock(false, Window.SHPX_COLOR,
"Music:",
Icons.KRISTJAN.get(),
"Kristjan Haaristo",
"youtube.com/c/Kristjan",
"https://www.youtube.com/channel/UCL1e7SgzSWbD_DQxB_5YcLA");
kristjan.setRect(alex.right() - colWidth/4f, alex.bottom() + 5, colWidth/2f, 0);
content.add(kristjan);
//*** Pixel Dungeon Credits *** //*** Pixel Dungeon Credits ***
final int WATA_COLOR = 0x55AAFF; final int WATA_COLOR = 0x55AAFF;
@ -105,9 +126,9 @@ public class AboutScene extends PixelScene {
"pixeldungeon.watabou.ru", "pixeldungeon.watabou.ru",
"http://pixeldungeon.watabou.ru"); "http://pixeldungeon.watabou.ru");
if (landscape()){ if (landscape()){
wata.setRect(shpx.left(), shpx.bottom() + 8, colWidth, 0); wata.setRect(shpx.left(), kristjan.bottom() + 8, colWidth, 0);
} else { } else {
wata.setRect(shpx.left(), alex.bottom() + 8, colWidth, 0); wata.setRect(shpx.left(), kristjan.bottom() + 8, colWidth, 0);
} }
content.add(wata); content.add(wata);
@ -121,9 +142,9 @@ public class AboutScene extends PixelScene {
null); null);
cube.setSize(colWidth/2f, 0); cube.setSize(colWidth/2f, 0);
if (landscape()){ if (landscape()){
cube.setPos(wata.right(), wata.top() + (wata.height() - cube.height())/2f); cube.setPos(wata.right() + colWidth/4f, wata.top() + (wata.height() - cube.height())/2f);
} else { } else {
cube.setPos(alex.left(), wata.bottom()+5); cube.setPos(alex.left() + colWidth/4f, wata.bottom()+5);
} }
content.add(cube); content.add(cube);
@ -132,7 +153,7 @@ public class AboutScene extends PixelScene {
final int GDX_COLOR = 0xE44D3C; final int GDX_COLOR = 0xE44D3C;
CreditsBlock gdx = new CreditsBlock(true, CreditsBlock gdx = new CreditsBlock(true,
GDX_COLOR, GDX_COLOR,
null, "libGDX",
Icons.LIBGDX.get(), Icons.LIBGDX.get(),
"ShatteredPD is powered by _libGDX_!", "ShatteredPD is powered by _libGDX_!",
"libGDX.com", "libGDX.com",
@ -146,12 +167,6 @@ public class AboutScene extends PixelScene {
addLine(gdx.top() - 4, content); addLine(gdx.top() - 4, content);
//blocks the rays from the LibGDX icon going above the line
ColorBlock blocker = new ColorBlock(w, 8, 0xFF000000);
blocker.y = gdx.top() - 12;
content.addToBack(blocker);
content.sendToBack(gdx);
CreditsBlock arcnor = new CreditsBlock(false, GDX_COLOR, CreditsBlock arcnor = new CreditsBlock(false, GDX_COLOR,
"Pixel Dungeon GDX:", "Pixel Dungeon GDX:",
Icons.ARCNOR.get(), Icons.ARCNOR.get(),
@ -184,7 +199,7 @@ public class AboutScene extends PixelScene {
"ShatteredPD is community-translated via _Transifex_! Thank you so much to all of Shattered's volunteer translators!", "ShatteredPD is community-translated via _Transifex_! Thank you so much to all of Shattered's volunteer translators!",
"www.transifex.com/shattered-pixel/", "www.transifex.com/shattered-pixel/",
"https://www.transifex.com/shattered-pixel/shattered-pixel-dungeon/"); "https://www.transifex.com/shattered-pixel/shattered-pixel-dungeon/");
transifex.setRect((Camera.main.width - colWidth)/2f, purigro.bottom() + 8, colWidth, 0); transifex.setRect((Camera.main.width - colWidth)/2f, purigro.bottom() + 12, colWidth, 0);
content.add(transifex); content.add(transifex);
addLine(transifex.top() - 4, content); addLine(transifex.top() - 4, content);
@ -233,7 +248,7 @@ public class AboutScene extends PixelScene {
btnExit.setPos( Camera.main.width - btnExit.width(), 0 ); btnExit.setPos( Camera.main.width - btnExit.width(), 0 );
add( btnExit ); add( btnExit );
fadeIn(); //fadeIn();
} }
@Override @Override

View File

@ -21,6 +21,7 @@
package com.shatteredpixel.shatteredpixeldungeon.scenes; package com.shatteredpixel.shatteredpixeldungeon.scenes;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.Challenges; import com.shatteredpixel.shatteredpixeldungeon.Challenges;
import com.shatteredpixel.shatteredpixeldungeon.Chrome; import com.shatteredpixel.shatteredpixeldungeon.Chrome;
@ -29,15 +30,19 @@ import com.shatteredpixel.shatteredpixeldungeon.Rankings;
import com.shatteredpixel.shatteredpixeldungeon.SPDSettings; import com.shatteredpixel.shatteredpixeldungeon.SPDSettings;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.effects.BannerSprites; import com.shatteredpixel.shatteredpixeldungeon.effects.BannerSprites;
import com.shatteredpixel.shatteredpixeldungeon.effects.Fireball;
import com.shatteredpixel.shatteredpixeldungeon.messages.Languages; import com.shatteredpixel.shatteredpixeldungeon.messages.Languages;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.Archs;
import com.shatteredpixel.shatteredpixeldungeon.ui.Icons; import com.shatteredpixel.shatteredpixeldungeon.ui.Icons;
import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock; import com.shatteredpixel.shatteredpixeldungeon.ui.RenderedTextBlock;
import com.shatteredpixel.shatteredpixeldungeon.ui.StyledButton; import com.shatteredpixel.shatteredpixeldungeon.ui.StyledButton;
import com.watabou.glwrap.Blending; import com.watabou.glwrap.Blending;
import com.watabou.noosa.Camera; import com.watabou.noosa.Camera;
import com.watabou.noosa.ColorBlock;
import com.watabou.noosa.Game; import com.watabou.noosa.Game;
import com.watabou.noosa.Image; import com.watabou.noosa.Image;
import com.watabou.noosa.audio.Music;
import com.watabou.utils.FileUtils; import com.watabou.utils.FileUtils;
import java.util.ArrayList; import java.util.ArrayList;
@ -68,8 +73,14 @@ public class WelcomeScene extends PixelScene {
int w = Camera.main.width; int w = Camera.main.width;
int h = Camera.main.height; int h = Camera.main.height;
Archs archs = new Archs();
archs.setSize( w, h );
add( archs );
//darkens the arches
add(new ColorBlock(w, h, 0x88000000));
Image title = BannerSprites.get( BannerSprites.Type.PIXEL_DUNGEON ); Image title = BannerSprites.get( BannerSprites.Type.PIXEL_DUNGEON );
title.brightness(0.6f);
add( title ); add( title );
float topRegion = Math.max(title.height - 6, h*0.45f); float topRegion = Math.max(title.height - 6, h*0.45f);
@ -79,6 +90,9 @@ public class WelcomeScene extends PixelScene {
align(title); align(title);
placeTorch(title.x + 22, title.y + 46);
placeTorch(title.x + title.width - 22, title.y + 46);
Image signs = new Image( BannerSprites.get( BannerSprites.Type.PIXEL_DUNGEON_SIGNS ) ) { Image signs = new Image( BannerSprites.get( BannerSprites.Type.PIXEL_DUNGEON_SIGNS ) ) {
private float time = 0; private float time = 0;
@Override @Override
@ -165,6 +179,12 @@ public class WelcomeScene extends PixelScene {
} }
private void placeTorch( float x, float y ) {
Fireball fb = new Fireball();
fb.setPos( x, y );
add( fb );
}
private void updateVersion(int previousVersion){ private void updateVersion(int previousVersion){
//update rankings, to update any data which may be outdated //update rankings, to update any data which may be outdated

View File

@ -79,9 +79,12 @@ public enum Icons {
WATA, WATA,
WARNING, WARNING,
//32x32 icons for credits //credits icons:
//16x16
ALEKS, ALEKS,
//32x32
CHARLIE, CHARLIE,
KRISTJAN,
CUBE_CODE, CUBE_CODE,
PURIGRO, PURIGRO,
ARCNOR; ARCNOR;
@ -220,12 +223,15 @@ public enum Icons {
icon.frame( icon.texture.uvRect( 34, 81, 48, 95 ) ); icon.frame( icon.texture.uvRect( 34, 81, 48, 95 ) );
break; break;
//32*32 icons are scaled down to match game's size
case ALEKS: case ALEKS:
icon.frame( icon.texture.uvRect( 48, 80, 64, 96 ) );
break;
//32*32 icons are scaled down to match game's size
case CHARLIE:
icon.frame( icon.texture.uvRect( 0, 96, 32, 128 ) ); icon.frame( icon.texture.uvRect( 0, 96, 32, 128 ) );
icon.scale.set(PixelScene.align(0.49f)); icon.scale.set(PixelScene.align(0.49f));
break; break;
case CHARLIE: case KRISTJAN:
icon.frame( icon.texture.uvRect( 32, 96, 64, 128 ) ); icon.frame( icon.texture.uvRect( 32, 96, 64, 128 ) );
icon.scale.set(PixelScene.align(0.49f)); icon.scale.set(PixelScene.align(0.49f));
break; break;