/**
* THIS IS CREATED BY tom_mai78101. PLEASE GIVE CREDIT FOR WORKING ON A CLONE.
*
* ALL WORKS COPYRIGHTED TO The Pokémon Company and Nintendo. I REPEAT, THIS IS A CLONE.
*
* YOU MAY NOT SELL COMMERCIALLY, OR YOU WILL BE PROSECUTED BY The Pokémon Company AND Nintendo.
*
* THE CREATOR IS NOT LIABLE FOR ANY DAMAGES DONE. FOLLOW LOCAL LAWS, BE RESPECTFUL, AND HAVE A GOOD DAY!
* */
package resources;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.GraphicsEnvironment;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
import main.MainComponent;
import screen.BaseBitmap;
import screen.BaseScreen;
public class Art {
// Animation
// Tiles
public static BaseBitmap[] water;
public static BaseBitmap[] water_top;
public static BaseBitmap[] water_top_left;
public static BaseBitmap[] water_left;
public static BaseBitmap[] water_top_right;
public static BaseBitmap[] water_right;
// ----------------------------------------------------------
public static BaseBitmap[] exit_arrow;
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// Dialog
public static BaseBitmap dialogue_next;
public static BaseBitmap dialogue_bottom;
public static BaseBitmap dialogue_bottom_left;
public static BaseBitmap dialogue_left;
public static BaseBitmap dialogue_top_left;
public static BaseBitmap dialogue_top;
public static BaseBitmap dialogue_top_right;
public static BaseBitmap dialogue_right;
public static BaseBitmap dialogue_bottom_right;
public static BaseBitmap dialogue_background;
public static BaseBitmap dialogue_pointer;
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// Editor
public static BaseBitmap error;
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// Floor
public static BaseBitmap grass;
public static BaseBitmap mt_ground;
public static BaseBitmap path;
public static BaseBitmap forestEntrance;
public static BaseBitmap carpet_indoors;
public static BaseBitmap carpet_outdoors;
public static BaseBitmap hardwood_indoors;
public static BaseBitmap tatami_1_indoors;
public static BaseBitmap tatami_2_indoors;
// ----------------------------------------------------------
public static BaseBitmap stairs_left;
public static BaseBitmap stairs_top;
public static BaseBitmap stairs_right;
public static BaseBitmap stairs_bottom;
public static BaseBitmap stairs_mt_left;
public static BaseBitmap stairs_mt_top;
public static BaseBitmap stairs_mt_right;
public static BaseBitmap stairs_mt_bottom;
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// House
public static BaseBitmap house_door;
public static BaseBitmap house_bottom;
public static BaseBitmap house_bottom_left;
public static BaseBitmap house_bottom_right;
public static BaseBitmap house_left;
public static BaseBitmap house_left_windows_right;
public static BaseBitmap house_center;
public static BaseBitmap house_center_windows_center;
public static BaseBitmap house_center_windows_left;
public static BaseBitmap house_center_windows_right;
public static BaseBitmap house_right;
public static BaseBitmap house_right_windows_left;
public static BaseBitmap house_roof_left;
public static BaseBitmap house_roof_middle;
public static BaseBitmap house_roof_right;
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// Inventory
public static BaseBitmap inventory_gui;
public static BaseBitmap inventory_backpack_potions;
public static BaseBitmap inventory_backpack_keyItems;
public static BaseBitmap inventory_backpack_pokeballs;
public static BaseBitmap inventory_backpack_TM_HM;
public static BaseBitmap inventory_tag_potions;
public static BaseBitmap inventory_tag_keyItems;
public static BaseBitmap inventory_tag_pokeballs;
public static BaseBitmap inventory_tag_TM_HM;
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// Ledge
public static BaseBitmap ledge_bottom;
public static BaseBitmap ledge_bottom_left;
public static BaseBitmap ledge_left;
public static BaseBitmap ledge_top_left;
public static BaseBitmap ledge_top;
public static BaseBitmap ledge_top_right;
public static BaseBitmap ledge_right;
public static BaseBitmap ledge_bottom_right;
public static BaseBitmap Ledge_bottom_left_corner;
public static BaseBitmap Ledge_bottom_right_corner;
// ----------------------------------------------------------
public static BaseBitmap ledge_mt_bottom;
public static BaseBitmap ledge_mt_bottom_left;
public static BaseBitmap ledge_mt_left;
public static BaseBitmap ledge_mt_top_left;
public static BaseBitmap ledge_mt_top;
public static BaseBitmap ledge_mt_top_right;
public static BaseBitmap ledge_mt_right;
public static BaseBitmap ledge_mt_bottom_right;
// ----------------------------------------------------------
public static BaseBitmap ledge_inner_bottom;
public static BaseBitmap ledge_inner_bottom_left;
public static BaseBitmap ledge_inner_left;
public static BaseBitmap ledge_inner_top_left;
public static BaseBitmap ledge_inner_top;
public static BaseBitmap ledge_inner_top_right;
public static BaseBitmap ledge_inner_right;
public static BaseBitmap ledge_inner_bottom_right;
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// Object (Items, Movable)
public static BaseBitmap item;
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// Obstacle
public static BaseBitmap smallTree;
public static BaseBitmap logs;
public static BaseBitmap planks;
public static BaseBitmap scaffolding_left;
public static BaseBitmap scaffolding_right;
public static BaseBitmap sign;
public static BaseBitmap workbench_left;
public static BaseBitmap workbench_right;
public static BaseBitmap deadSmallTree;
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// Player (Entities)
public static BaseBitmap[][] player;
public static BaseBitmap[][] player_surf;
public static BaseBitmap[][] player_bicycle;
public static BaseBitmap shadow;
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Area
public static BaseBitmap testArea;
public static BaseBitmap testArea2;
public static BaseBitmap testArea3;
// Font
public static Font font;
public static void loadAllResources(BaseScreen screen) {
// Animation
water = loadAnimation(screen, 16, "art/animation/water/water00");
water_top = loadAnimation(screen, 16, "art/animation/water/water_top00");
water_top_left = loadAnimation(screen, 16, "art/animation/water/water_top_left00");
water_left = loadAnimation(screen, 16, "art/animation/water/water_left00");
water_top_right = loadAnimation(screen, 16, "art/animation/water/water_top_right00");
water_right = loadAnimation(screen, 16, "art/animation/water/water_right00");
// ----------------------------------------------------------
exit_arrow = loadAnimation(screen, 10, "art/animation/arrow/arrow00");
// Dialogue
dialogue_next = BaseScreen.load("art/dialog/dialogue_next.png");
dialogue_bottom = BaseScreen.load("art/dialog/dialogue_bottom.png");
dialogue_bottom_left = BaseScreen.load("art/dialog/dialogue_bottom_left.png");
dialogue_left = BaseScreen.load("art/dialog/dialogue_left.png");
dialogue_top_left = BaseScreen.load("art/dialog/dialogue_top_left.png");
dialogue_top = BaseScreen.load("art/dialog/dialogue_top.png");
dialogue_top_right = BaseScreen.load("art/dialog/dialogue_top_right.png");
dialogue_right = BaseScreen.load("art/dialog/dialogue_right.png");
dialogue_bottom_right = BaseScreen.load("art/dialog/dialogue_bottom_right.png");
dialogue_background = BaseScreen.load("art/dialog/dialogue_bg.png");
dialogue_pointer = BaseScreen.load("art/dialog/dialogue_pointer.png");
// Editor
error = BaseScreen.load("art/editor/no_png.png");
// Floor
grass = BaseScreen.load("art/floor/grass.png");
mt_ground = BaseScreen.load("art/floor/mt_ground.png");
forestEntrance = BaseScreen.load("art/floor/forestEntrance.png");
path = BaseScreen.load("art/floor/path.png");
stairs_left = BaseScreen.load("art/floor/stairs_left.png");
stairs_top = BaseScreen.load("art/floor/stairs_top.png");
stairs_right = BaseScreen.load("art/floor/stairs_right.png");
stairs_bottom = BaseScreen.load("art/floor/stairs_bottom.png");
stairs_mt_left = BaseScreen.load("art/floor/stairs_mt_left.png");
stairs_mt_top = BaseScreen.load("art/floor/stairs_mt_top.png");
stairs_mt_right = BaseScreen.load("art/floor/stairs_mt_right.png");
stairs_mt_bottom = BaseScreen.load("art/floor/stairs_mt_bottom.png");
carpet_indoors = BaseScreen.load("art/floor/carpet_indoors.png");
carpet_outdoors = BaseScreen.load("art/floor/carpet_outdoors.png");
hardwood_indoors = BaseScreen.load("art/floor/hardwood_indoors.png");
tatami_1_indoors = BaseScreen.load("art/floor/tatami_1_indoors.png");
tatami_2_indoors = BaseScreen.load("art/floor/tatami_2_indoors.png");
// House
house_door = BaseScreen.load("art/house/house_door.png");
house_bottom = BaseScreen.load("art/house/house_bottom.png");
house_bottom_left = BaseScreen.load("art/house/house_bottom_left.png");
house_bottom_right = BaseScreen.load("art/house/house_bottom_right.png");
house_center = BaseScreen.load("art/house/house_center.png");
house_center_windows_center = BaseScreen.load("art/house/house_center_windows_center.png");
house_center_windows_left = BaseScreen.load("art/house/house_center_windows_left.png");
house_center_windows_right = BaseScreen.load("art/house/house_center_windows_right.png");
house_left = BaseScreen.load("art/house/house_left.png");
house_left_windows_right = BaseScreen.load("art/house/house_left_windows_right.png");
house_right = BaseScreen.load("art/house/house_right.png");
house_right_windows_left = BaseScreen.load("art/house/house_right_windows_left.png");
house_roof_left = BaseScreen.load("art/house/house_roof_left.png");
house_roof_middle = BaseScreen.load("art/house/house_roof_middle.png");
house_roof_right = BaseScreen.load("art/house/house_roof_right.png");
// Inventory
inventory_gui = BaseScreen.load("art/inventory/inventory_gui.png");
inventory_backpack_potions = BaseScreen.load("art/inventory/backpack_potions.png");
inventory_backpack_keyItems = BaseScreen.load("art/inventory/backpack_keyitems.png");
inventory_backpack_pokeballs = BaseScreen.load("art/inventory/backpack_pokeballs.png");
inventory_backpack_TM_HM = BaseScreen.load("art/inventory/backpack_tm_hm.png");
inventory_tag_potions = BaseScreen.load("art/inventory/potions.png");
inventory_tag_keyItems = BaseScreen.load("art/inventory/keyitems.png");
inventory_tag_pokeballs = BaseScreen.load("art/inventory/pokeballs.png");
inventory_tag_TM_HM = BaseScreen.load("art/inventory/tm_hm.png");
// Ledges
ledge_bottom = BaseScreen.load("art/ledge/ledge_bottom.png");
ledge_bottom_left = BaseScreen.load("art/ledge/ledge_bottom_left.png");
ledge_left = BaseScreen.load("art/ledge/ledge_left.png");
ledge_top_left = BaseScreen.load("art/ledge/ledge_top_left.png");
ledge_top = BaseScreen.load("art/ledge/ledge_top.png");
ledge_top_right = BaseScreen.load("art/ledge/ledge_top_right.png");
ledge_right = BaseScreen.load("art/ledge/ledge_right.png");
ledge_bottom_right = BaseScreen.load("art/ledge/ledge_bottom_right.png");
Ledge_bottom_left_corner = BaseScreen.load("art/ledge/ledge_bottom_left_corner.png");
Ledge_bottom_right_corner = BaseScreen.load("art/ledge/ledge_bottom_right_corner.png");
ledge_mt_bottom = BaseScreen.load("art/ledge/ledge_mt_bottom.png");
ledge_mt_bottom_left = BaseScreen.load("art/ledge/ledge_mt_bottom_left.png");
ledge_mt_left = BaseScreen.load("art/ledge/ledge_mt_left.png");
ledge_mt_top_left = BaseScreen.load("art/ledge/ledge_mt_top_left.png");
ledge_mt_top = BaseScreen.load("art/ledge/ledge_mt_top.png");
ledge_mt_top_right = BaseScreen.load("art/ledge/ledge_mt_top_right.png");
ledge_mt_right = BaseScreen.load("art/ledge/ledge_mt_right.png");
ledge_mt_bottom_right = BaseScreen.load("art/ledge/ledge_mt_bottom_right.png");
ledge_inner_bottom = BaseScreen.load("art/ledge/ledge_inner_bottom.png");
ledge_inner_bottom_left = BaseScreen.load("art/ledge/ledge_inner_bottom_left.png");
ledge_inner_left = BaseScreen.load("art/ledge/ledge_inner_left.png");
ledge_inner_top_left = BaseScreen.load("art/ledge/ledge_inner_top_left.png");
ledge_inner_top = BaseScreen.load("art/ledge/ledge_inner_top.png");
ledge_inner_top_right = BaseScreen.load("art/ledge/ledge_inner_top_right.png");
ledge_inner_right = BaseScreen.load("art/ledge/ledge_inner_right.png");
ledge_inner_bottom_right = BaseScreen.load("art/ledge/ledge_inner_bottom_right.png");
// Object
item = BaseScreen.load("art/object/item.png");
// Obstacle
logs = BaseScreen.load("art/obstacle/logs.png");
planks = BaseScreen.load("art/obstacle/planks.png");
scaffolding_left = BaseScreen.load("art/obstacle/scaffolding_left.png");
scaffolding_right = BaseScreen.load("art/obstacle/scaffolding_right.png");
smallTree = BaseScreen.load("art/obstacle/small_tree.png");
sign = BaseScreen.load("art/obstacle/sign.png");
workbench_left = BaseScreen.load("art/obstacle/workbench_left.png");
workbench_right = BaseScreen.load("art/obstacle/workbench_right.png");
deadSmallTree = BaseScreen.load("art/obstacle/dead_small_tree.png");
// Player, NPCs
player = screen.cut("art/player/player.png", 16, 16, 0, 0);
player_surf = screen.cut("art/player/player_surf.png", 16, 16, 0, 0);
player_bicycle = screen.cut("art/player/player_bicycle.png", 16, 16, 0, 0);
shadow = BaseScreen.load("art/player/shadow.png");
// Areas
testArea = BaseScreen.load("area/test/testArea.png");
testArea2 = BaseScreen.load("area/test/testArea2.png");
// Miscellaneous
font = loadFont("font/font.ttf");
}
private static BaseBitmap[] loadAnimation(BaseScreen screen, int frames, String filename) {
BaseBitmap[] result = new BaseBitmap[frames];
for (int i = 0; i < frames; i++) {
// There are 16 frames for the water.
if (i < 10) {
result[i] = BaseScreen.load(filename + "0" + String.valueOf(i) + ".png");
}
else {
result[i] = BaseScreen.load(filename + String.valueOf(i) + ".png");
}
}
return result;
}
public static Font loadFont(String filename) {
Enumeration<URL> urls = null;
URL url = null;
try {
urls = Art.class.getClassLoader().getResources(filename);
}
catch (IOException e2) {
e2.printStackTrace();
}
for (; urls.hasMoreElements();)
url = urls.nextElement();
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
Font result = null;
try {
result = Font.createFont(Font.TRUETYPE_FONT, url.openStream());
}
catch (FontFormatException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
catch (NullPointerException e) {
try {
result = Font.createFont(Font.TRUETYPE_FONT, Art.class.getResourceAsStream(filename));
}
catch (FontFormatException e1) {
e1.printStackTrace();
}
catch (IOException e1) {
e1.printStackTrace();
try {
result = Font.createFont(Font.TRUETYPE_FONT, new File("res/font/font.ttf"));
}
catch (FontFormatException e2) {
e2.printStackTrace();
}
catch (IOException e2) {
e2.printStackTrace();
}
}
}
if (result != null) {
ge.registerFont(result);
System.out.println(filename);
}
return result.deriveFont(Font.PLAIN, 8f * MainComponent.GAME_SCALE);
}
public static BaseBitmap changeColors(BaseBitmap bitmap, int color) {
BaseBitmap result = new BaseBitmap(bitmap.getWidth(), bitmap.getHeight());
int[] pixels = bitmap.getPixels();
int[] resultPixels = result.getPixels();
for (int i = 0; i < pixels.length; i++) {
int alpha = (pixels[i] >> 24) & 0xFF;
// May be possible this will expand in the future.
switch (alpha) {
case 0x01:
resultPixels[i] = 0xFF000000 | BaseScreen.lighten(color, 0.2f);
break;
default:
resultPixels[i] = 0xFF000000 | BaseScreen.darken(color, 0.1f);
break;
}
}
return result;
}
public static int blendPixels(int bgColor, int blendColor) {
int alphaBlend = (blendColor >> 24) & 0xFF;
int alphaBackground = 256 - alphaBlend;
int bgRed = (bgColor >> 16) & 0xFF;
int bgGreen = (bgColor >> 8) & 0xFF;
int bgBlue = bgColor & 0xFF;
int blendRed = (blendColor >> 16) & 0xFF;
int blendGreen = (blendColor >> 8) & 0xFF;
int blendBlue = blendColor & 0xFF;
int red = ((blendRed * alphaBlend + bgRed * alphaBackground) >> 8) & 0xFF;
int green = ((blendGreen * alphaBlend + bgGreen * alphaBackground) >> 8) & 0xFF;
int blue = ((blendBlue * alphaBlend + bgBlue * alphaBackground) >> 8) & 0xFF;
return 0xFF000000 | red | green | blue;
}
}