Hiro the Dragon King

Joined: Jul 31, 04

Home page Email

My libraries

My demos

Blog Comments

Login to post a comment.

#1 Stephie:  

HAAAAAAAIIIIIIII JEFFIE-POO!! :D

Sunday, November 08, 2009 04:20AM

 

 

 

HUD Buttons Gets An Overhaul

Here is the documentation for the overhauled library.

HDK HUD Buttons

______________________________________________________

The Buttons Within
______________________________________________________

I find it much easier to show how to use the library here rather than in the library itself. Thus, the lack of easy-to-read documentation.

The five predefined types of buttons are as follows:
Button
    Head
    Sub
    Group
    Drag
    Simple
    Non


______________________________________________________

Menu Buttons
______________________________________________________

Head
Head is a menu button. Press down on it to open its menu. You can also press down on it and drag your mouse over objects in its menu to highlight them. If the object is a Sub button, it will open the submenu for it. If you let up your mouse over itself or a Sub button in its menu, it will leave the menu open as it is. If you let up your mouse over a Group button in its menu, it will and do whatever the Group button has been defined to do.

Sub
Sub is a sub-menu button under head. Drag your mouse over it from its Head button or click on it to open it's sub-menu.

Group
Group is a menu item button. It may be under a Head button or a Sub button. Drag your mouse over it from its Head button or Sub button or just click on it to activate it.

______________________________________________________

Draggable Buttons
______________________________________________________

Drag
Drag is a simple button. Click on it for effect. By setting a Drag button's 'draggable' variable to 1, a Drag button becomes much more complex. This allows a simple button to be dragged around on the screen. The button's "pixeldrag" variable allows you to define whether or not you woud like to use the pixel movement system or the tile movement system when dragging it around. It also has a list of "dragalongs", which is a list of other Drag, Simple, or Non buttons that can be dragged along with it. And don't worry, you will not be able to accidentally drag a button, or part of a button, 'off screen', I've made sure of that.

Simple
Simple is a standalone button. Press it down, let it go for effect. It can be added to a Drag button's list of "dragalongs".

Non
Non is simply not a button. It is just a blank screen object that can be used for things like backgrounds or displays. It can be added to a Drag button's list of "dragalongs".

______________________________________________________

Creating The Buttons
______________________________________________________

Let's start with creating buttons. This is the general format for defining buttons.
GeneralButton
    parent_type = /Button/Non
    name = "General Button"
    state = "gen"
    columns = 1
    rows = 1
    xx = 1
    yy = 1

The format for calling New() is a little different however. For buttons, it must be called like this.
new/GeneralButton(1,client)
The "client" in the New() is the client on whose screen the button will be created. The "1" in the call to New() tells it to skip normal procedure to check for and create multi-tiled buttons.

This means that all you have to do to create and enormously large button would be:
BigAssButton
    parent_type = /Button/Non
    name = "Big Ass Button"
    state = "big"
    columns = 15
    rows = 15
    xx = 1
    yy = 1
This example would create a 15x15 tile button. You only have to define this first button and New() would take care of the other 224 for you. It is important to note that the "xx,yy" coordinates that you specify for a multi-tiled object will be the bottom left of the overall button.

This shows how the vars of the other five buttons should be defined.
HeadButton
    parent_type = /Button/Head
    menu = "Menu"

SubButton
    parent_type = /Button/Sub
    menu = "Menu"
    submenu = "Submenu

GroupButton
    parent_type = /Button/Group
    menu = "Menu"
    submenu = "Submenu"     //only necessary if it is actually in a sub-menu
    Effect()
        //do some stuff here

SimpleButton
    parent_type = /Button/Simple
    Effect()
        //do some more stuff here

DragButton
    parent_type = /Button/Drag
    draggable = 1       //set this to 1 to allow dragging
    dragalongs = list("That Other Button")  //enter the names of other buttons to have them move with this one
    Effect()
        //do some other stuff here


______________________________________________________

Creating The Icon States
______________________________________________________

First of all, start by defining the icon file for buttons somewhere in your code:
Button/icon = 'buttons.dmi'

In order for you to be able to see your buttons, you must set up each button's icon_state correctly. Every button has the state variable to determine its icon_state.

Each type of button requires different icon_states for their functions.
-Non only requires one icon_state.
-Head, Simple, and Drag require icon_states for up and down.
-Sub and Group require icon_states for up, over, and down.

The letters "u", "o", and "d" are appended to the icon_state for up, over, and down, respectively.
ButtonOne
    parent_type = /Button/Sub
    state = "one"
This button will need three icon_states; "oneu", "oneo", and "oned".

If a button is multi-tiled, it will need its part number appended to its icon_state, directly after its state.
ButtonTwo
    parent_type = /Button/Group
    state = "two"
    columns = 2
    rows = 2
This button will need twelve icon_states; "one1u", "one1o", "one1d", "one2u", "one2o", "one2d", "one3u", "one3o", "one3d", "one4u", "one4o", and "one4d".

The order in which to name the icon_states with part numbers is just like a book; left to right, next line, repeat.

______________________________________________________

The Pixel System
______________________________________________________

Currently, the pixel system I use is inherently slow due to its use of JavaScript in lieu of BYOND's lack of mouse interaction.

There are a bunch of variables to use with the pixel system, but the results are fantastic. The pixel system allows for objects of literally any size to be placed and dragged around on your screen, provided it fits on your screen. The first thing you need to know in order to use it though, is when a client logs in, you need to call:
client.ChangeView(X,Y)
This proc is necessary because it will change the view for you and grab the size of the view in pixels for usage in the pixel related procs.

If you want to use the full 32x23 pixel icons, you only need to define the buttons like you normally would. If you wish to create buttons of different sizes, you must define a few more variables. First of all, you will need to make sure that all of your icons for pixel related buttons start in the bottom right of the 32x32 gird. Next:
Button
    pixeldrag = 1       //Turns on the pixel system for this and attached buttons.
    lastx       //This defines how many pixels wide the icons on the far right of your button are.
    lasty //This defines how many pixels wide the icons on the top of your button are.
The default is 32. These are necessary for accurate bounds checking.

So:
    columns = 1
    rows = 1
    lastx = 16
    lasty = 16
This will create a 48x48 pixel button.

For pixel based buttons, you may also define pixel offsets for the starting location on screen.
    px = 16
    py = 16
This will offset your button North and East by 16 pixels each. Note that if you set these for buttons that use the tile system, they will be canceled out as soon as you move the button, otherwise, it is okay to use for other buttons too.

______________________________________________________

Button Procedures
______________________________________________________

For this next part, I will just quote the library itself.

In order to change the icon state of a button, you must call the Parts() proc.
Parts proc

Format:
    Parts(D, client/C)

Args:
    D: the status of the button you wish to change "u" for up, "o" for open, "d" for down
    client/C: the client on whose screen the button belongs

Example:
    Parts("u", usr.client)

This example will first check to see if the Button is multi-tiled and if so, search the usr's screen for all buttons with the same name, e.g., multi-tiled buttons, and change the icon state according their own state and part number, if any.
______________________________________________________

In order to change the a variable of a button, you should make a proc to do so. There are already two procs built-in that change the variables, "pressed" and "opened". At the moment, these are the only variables that need to be changed when working with buttons normally.
Parts proc && Opened proc

Formats:
    Pressed(num, client/C)
    Opened(num, client/C)

Args:
    num: the number you wish to change the button's variable to.
    client/C: the client on whose screen the button belongs

Example:
    Opened(1, client/C)

This example will first check to see if the Button is multi-tiled and if so, search the usr's screen for all buttons with the same name, and change their variable, "opened" to 1.

______________________________________________________

Menus
______________________________________________________

There are two menu related client variables in this library.

client.menusopen
-This is a list of menus currently opened. This is to be maintained by you in client.OpenMenu() and client.CloseMenu().

client.menuloc
-Set this variable to 1 to prevent interaction with menus.

In order for the menu buttons to work, you must first define how their menu works under client.OpenMenu() and client.CloseMenu(). Here is slightly longer example showing how they work.
Menu
    parent_type = /Button/Head
    menu = "Menu"

SubMenu1
    parent_type = /Button/Sub
    menu = "Menu"
    submenu = "SubMenu1"
SubMenu2
    parent_type = /Button/Sub
    menu = "Menu"
    submenu = "SubMenu2"

MenuItem1
    parent_type = /Button/Group
    menu = "Menu"
    submenu = "SubMenu1"
    Effect(client/C)                    //The client is automatically passed to the Effect() proc from the mouse procs
                                //as to give easy access to the client responsible.
        world << "Yes."
        C.CloseMenu("[menu]")        //Closes the menu this belongs to.
MenuItem2
    parent_type = /Button/Group
    menu = "Menu"
    submenu = "SubMenu2"
    Effect(client/C)
        world << "No."
        C.CloseMenu("[menu]")
MenuItem3
    parent_type = /Button/Group
    menu = "Menu"
    submenu = "SubMenu3"
    Effect(client/C)
        world << "Maybe."
        C.CloseMenu("[menu]")
MenuItem4
    parent_type = /Button/Group
    menu = "Menu"
    submenu = "SubMenu4"
    Effect(client/C)
        world << "I don't know."
        C.CloseMenu("[menu]")
MenuItem5
    parent_type = /Button/Group
    menu = "Menu"
    submenu = "SubMenu5"
    Effect(client/C)
        world << "Can you repeat the question?"
        C.CloseMenu("[menu]")

client
    OpenMenu(menu)
        switch(menu)
            if("Menu")
                CloseAll()              //This is generally called for top level menus as to close all the other
                                //menus that are open. This only works by calling CloseMenu() for all the
                                //menus currently listed in client.menusopen. It is important to call this
                                //before "..()" so that you don't accidentally close the menu you're opening.
                ..()                    //This will add the name of the menu to the client's "menusopen" variable.
                                //It is important to call this for top level menus in order to properly
                                //keep track of what menus are open.
                new/SubMenu1
                new/SubMenu2
                new/MenuItem1(1,src)
            if("SubMenu1")
                CloseMenu("Submenu2")       //Closes the other sub-menu when this one is opened.
                new/MenuItem2(1,src)       //Creates the menu items under the sub-menu.
                new/MenuItem3(1,src)
            if("SubMenu2")
                CloseMenu("Submenu1")
                new/MenuItem4(1,src)
                new/MenuItem5(1,src)
    CloseMenu(menu)
        ..()
        switch(menu)
            if("Menu")
                for(var/Button/Sub/B in screen)          //Finds all Sub buttons..
                    if(B.menu == "Menu")                       //under this menu...
                        del B                                              //and deletes them..
                for(var/Button/Group/B in screen)        //then does the same for Group buttons.
                    if(B.menu == "Menu")
                        del B
                for(var/Button/Head/B in screen) //Finds all Menu buttons...
                    if(B.menu == "Menu")                       //for this menu...
                        B.Parts("u", src)                   //and returns their icon_state to the upright position...
                        B.Opened(0, src)                        //then sets their "opened" variable to 0.
                                                    //This is an important step. If "opened" isn't 0, it will still
                                                    //think that the button is opened and attempt to close it when
                                                    //you press it.
            if("SubMenu1")
                for(var/Button/Group/B in screen)
                    if(B.submenu == "SubMenu1")
                        del B
                for(var/Button/Sub/B in screen)
                    if(B.submenu == "SubMenu1")
                        B.Parts("u", src)
                        B.Opened(0, src)
            if("SubMenu2")
                for(var/Button/Group/B in screen)
                    if(B.submenu == "SubMenu2")
                        del B
                for(var/Button/Sub/B in screen)
                    if(B.submenu == "SubMenu2")
                        B.Parts("u", src)
                        B.Opened(0, src)
This is a functional menu with a menu item, two sub-menus, and two items in each sub-menu. Each of the menu items will output their own message before closing the menu.

______________________________________________________

Extras
______________________________________________________

There are five more miscellaneous features in the library:

client.buttonloc
-Set this to 1 to restrict all interactions with buttons.

client.menuloc
-Set this to 1 to restrict all interactions with the menu buttons. Other buttons that open menus will still work, though. If it is necessary, I will change that.

client.maxview
-The maximum view size in which client.ChangeView() will work.

client.minview
-The minimum view size in which client.ChangeView() will work.

client.ResetDrag()
-Calling this will reset all buttons back to their original position.

______________________________________________________

Fin
______________________________________________________

Posted by Hiro the Dragon King on Tuesday, October 27, 2009 12:47AM - 0 comments / Members say: yea +1, nay -0

HDK HUD Buttons: My First Library

First off, I'd like to say that I'm very bad at writing these blog posts. I have already made a post about this in the Developer Forum but I thought that my site could use it's own, too. In this one, though, I can put a little back-story into it.

The Story Behind It
Two years ago, while I was in college and long before the release of 4.0, I became very distracted in my Psychology class and began writing up designs for an RPG character creation screen that used no pop-ups, browser elements, etc.; only screen objects. When I fell into my Photoshop class, distracted again, I began designing buttons for the interface. The buttons seen in the demo for this library use the buttons I created in that class. As a bunch of life related problems came up, I put down the project.

In June of last year, I started programming the basic structure of the interface (terribly, I might add) and got pretty far. Balancing between my newborn, my life, AMV projects (that I never finished), games, etc., I never truly finished it.

In August of last year, we had horrible, horrible storms in my area and constant power outages. During the power outages, I was always doing some hardcore bittorrenting, so I ended up effectively destroying both of my main hard drives. After getting back up on my feet with my third HDD, my PSU finally gave out.

Around January, I actually did a Knoppix boot on my fiancée's computer and retrieved the old files. To my dismay, none of the icon files were left intact. Fortunately though, a copy of the .dmb was. I extracted all my icons from that and started working on it again, trying to pick up where I left off. After back and forth neglect up until March, I realized that it was crap and scrapped it.

Around the middle of last month, I began anew with another RPG based project. After a while of creating stupidly complex stat systems, I began to wander into my old character creation screen ideas and around the beginning of this month, I started remaking it. When I first finished writing it, I didn't think anything of dragging screen objects around but I figured it might good enough for my first library. I found it to be quite empty, though, and searched around for an idea I have yet to see; draggable buttons. After finding none, the decision was made. And here it is:

HDK HUD Buttons

It's a quaint little library that can handle several types of screen objects for almost any need. It can handle drop-down, drag-and-drop menus, with or without sub-menus, standalone buttons, buttons that you can drag around on the screen, buttons that can drag other buttons along with it, buttons that don't do anything and are technically not buttons at all, and anything in between... with a little modifying, anyway. It can also handle multi-tiled buttons of everytype.
______________________________________________________

Here is a small (166MB) demonstration of what my library was made for. This is an almost fully realized version of the character creation screen that my idea stemmed from.

RPG Character Creation Screen using HDK HUD Buttons
All of the icons for this were created by myself (which, by the way, took a shit-ton of time), with the exception of the grass and the hair. I got the grass from a free resource sometime last year. The hair was borrowed from Mystic Journey (he probably got them from RPG Maker) as a sort of joke between me and some friends.
______________________________________________________

The Buttons Within
I find it much easier to show how to use the library here rather than in the library itself. Thus, the lack of easy-to-read documentation.

The five predefined types of buttons are as follows:
Button
    Head
    Sub
    Group
    Simple
    Single
    Non


Menu Buttons
______________________________________________________

Head
Head is a menu button. Press down on it to open its menu. You can also press down on it and drag your mouse over objects in its menu to highlight them. If the object is a Sub button, it will open the submenu for it. If you let up your mouse over itself or a Sub button in its menu, it will leave the menu open as it is. If you let up your mouse over a Group button in its menu, it will and do whatever the Group button has been defined to do.

Sub
Sub is a sub-menu button under head. Drag your mouse over it from its Head button or click on it to open it's sub-menu.

Group
Group is a menu item button. It may be under a Head button or a Sub button. Drag your mouse over it from its Head button or Sub button or just click on it to activate it.


Draggable Buttons
______________________________________________________

Simple
Simple is a simple button. Click on it for effect. By setting a Simple button's 'draggable' variable to 1, a Simple button becomes much more complex. This allows a simple button to be dragged around on the screen. It also has a list of "dragalongs", which is a list of other Simple, Single, or Non buttons that can be dragged along with it. And don't worry, you will not be able to accidentally drag a button, or part of a button, 'off screen', I've made sure of that.

Non
Single is a standalone button. Press it down, let it go for effect. It can be added to a Simple button's list of "dragalongs".

Non
Non is simply not a button. It is just a blank screen object that can be used for things like backgrounds or displays. It can be added to a Simple button's list of "dragalongs".
______________________________________________________

Creating The Buttons
______________________________________________________

Let's start with creating buttons. This is the general format for defining buttons.
GeneralButton
    parent_type = /Button/Non
    name = "General Button"
    state = "gen"
    columns = 1
    rows = 1
    xx = 1
    yy = 1

The format for calling New() is a little different however. For buttons, it must be called like this.
new/GeneralButton(1,client)
The "client" in the New() is the client on whose screen the button will be created. The "1" in the call to New() tells it to skip normal procedure to check for and create multi-tiled buttons.

This means that all you have to do to create and enormously large button would be:
BigAssButton
    parent_type = /Button/Non
    name = "Big Ass Button"
    state = "big"
    columns = 1
    rows = 1
    xx = 15
    yy = 15
This example would create a 15x15 tile button. You only have to define this first button and New() would take care of the other 224 for you. It is important to note that the "xx,yy" coordinates that you specify for a multi-tiled object will be the bottom left of the overall button.

This shows how the vars of the other five buttons should be defined.
HeadButton
    parent_type = /Button/Head
    menu = "Menu"

SubButton
    parent_type = /Button/Sub
    menu = "Menu"
    submenu = "Submenu

GroupButton
    parent_type = /Button/Group
    menu = "Menu"
    submenu = "Submenu"     //only necessary if it is actually in a sub-menu
    Effect()
        //do some stuff here

SingleButton
    parent_type = /Button/Single
    Effect()
        //do some more stuff here

SimpleButton
    parent_type = /Button/Simple
    draggable = 1       //set this to 1 to allow dragging
    dragalongs = list("That Other Button")  //enter the names of other buttons to have them move with this one
    Effect()
        //do some other stuff here


______________________________________________________

Creating The Icon States
______________________________________________________

First of all, start by defining the icon file for buttons somewhere in your code:
Button/icon = 'buttons.dmi'

In order for you to be able to see your buttons, you must set up each button's icon_state correctly. Every button has the state variable to determine its icon_state.

Each type of button requires different icon_states for their functions.
-Non only requires one icon_state.
-Head, Single, and Simple require icon_states for up and down.
-Sub and Group require icon_states for up, over, and down.

The letters "u", "o", and "d" are appended to the icon_state for up, over, and down, respectively.
ButtonOne
    parent_type = /Button/Sub
    state = "one"
This button will need three icon_states; "oneu", "oneo", and "oned".

If a button is multi-tiled, it will need its part number appended to its icon_state, directly after its state.
ButtonTwo
    parent_type = /Button/Group
    state = "two"
    xx = 2
    yy = 2
This button will need twelve icon_states; "one1u", "one1o", "one1d", "one2u", "one2o", "one2d", "one3u", "one3o", "one3d", "one4u", "one4o", and "one4d".

The order in which to name the icon_states with part numbers is just like a book; left to right, next line, repeat.

______________________________________________________

Button Procedures
______________________________________________________

For this next part, I will just quote the library itself.

In order to change the icon state of a button, you must call the Parts() proc.
Parts proc

Format:
    Parts(D, client/C)

Args:
    D: the status of the button you wish to change "u" for up, "o" for open, "d" for down
    client/C: the client on whose screen the button belongs

Example:
    Parts("u", usr.client)

This example will first check to see if the Button is multi-tiled and if so, search the usr's screen for all buttons with the same name, e.g., multi-tiled buttons, and change the icon state according their own state and part number, if any.
______________________________________________________

In order to change the a variable of a button, you should make a proc to do so. There are already two procs built-in that change the variables, "pressed" and "opened". At the moment, these are the only variables that need to be changed when working with buttons normally.
Parts proc && Opened proc

Formats:
    Pressed(num, client/C)
    Opened(num, client/C)

Args:
    num: the number you wish to change the button's variable to.
    client/C: the client on whose screen the button belongs

Example:
    Opened(1, client/C)

This example will first check to see if the Button is multi-tiled and if so, search the usr's screen for all buttons with the same name, and change their variable, "opened" to 1.

______________________________________________________

Menus
______________________________________________________

There are two menu related client variables in this library.

client.menusopen
-This is a list of menus currently opened. This is to be maintained by you in client.OpenMenu() and client.CloseMenu().

client.menuloc
-Set this variable to 1 to prevent interaction with menus.

In order for the menu buttons to work, you must first define how their menu works under client.OpenMenu() and client.CloseMenu(). Here is slightly longer example showing how they work.
Menu
    parent_type = /Button/Head
    menu = "Menu"

SubMenu1
    parent_type = /Button/Sub
    menu = "Menu"
    submenu = "SubMenu1"
SubMenu2
    parent_type = /Button/Sub
    menu = "Menu"
    submenu = "SubMenu2"

MenuItem1
    parent_type = /Button/Group
    menu = "Menu"
    submenu = "SubMenu1"
    Effect(client/C)                    //The client is automatically passed to the Effect() proc from the mouse procs
                                //as to give easy access to the client responsible.
        world << "Yes."
        C.CloseMenu("[menu]")        //Closes the menu this belongs to.
MenuItem2
    parent_type = /Button/Group
    menu = "Menu"
    submenu = "SubMenu2"
    Effect(client/C)
        world << "No."
        C.CloseMenu("[menu]")
MenuItem3
    parent_type = /Button/Group
    menu = "Menu"
    submenu = "SubMenu3"
    Effect(client/C)
        world << "Maybe."
        C.CloseMenu("[menu]")
MenuItem4
    parent_type = /Button/Group
    menu = "Menu"
    submenu = "SubMenu4"
    Effect(client/C)
        world << "I don't know."
        C.CloseMenu("[menu]")
MenuItem5
    parent_type = /Button/Group
    menu = "Menu"
    submenu = "SubMenu5"
    Effect(client/C)
        world << "Can you repeat the question?"
        C.CloseMenu("[menu]")

client
    OpenMenu(menu)
        switch(menu)
            if("Menu")
                CloseAll()              //This is generally called for top level menus as to close all the other
                                //menus that are open. This only works by calling CloseMenu() for all the
                                //menus currently listed in client.menusopen. It is important to call this
                                //before "..()" so that you don't accidentally close the menu you're opening.
                ..()                    //This will add the name of the menu to the client's "menusopen" variable.
                                //It is important to call this for top level menus in order to properly
                                //keep track of what menus are open.
                new/SubMenu1
                new/SubMenu2
                new/MenuItem1(1,src)
            if("SubMenu1")
                CloseMenu("Submenu2")       //Closes the other sub-menu when this one is opened.
                new/MenuItem2(1,src)       //Creates the menu items under the sub-menu.
                new/MenuItem3(1,src)
            if("SubMenu2")
                CloseMenu("Submenu1")
                new/MenuItem4(1,src)
                new/MenuItem5(1,src)
    CloseMenu(menu)
        ..()
        switch(menu)
            if("Menu")
                for(var/Button/Sub/B in screen)          //Finds all Sub buttons..
                    if(B.menu == "Menu")                       //under this menu...
                        del B                                              //and deletes them..
                for(var/Button/Group/B in screen)        //then does the same for Group buttons.
                    if(B.menu == "Menu")
                        del B
                for(var/Button/Head/B in screen) //Finds all Menu buttons...
                    if(B.menu == "Menu")                       //for this menu...
                        B.Parts("u", src)                   //and returns their icon_state to the upright position...
                        B.Opened(0, src)                        //then sets their "opened" variable to 0.
                                                    //This is an important step. If "opened" isn't 0, it will still
                                                    //think that the button is opened and attempt to close it when
                                                    //you press it.
            if("SubMenu1")
                for(var/Button/Group/B in screen)
                    if(B.submenu == "SubMenu1")
                        del B
                for(var/Button/Sub/B in screen)
                    if(B.submenu == "SubMenu1")
                        B.Parts("u", src)
                        B.Opened(0, src)
            if("SubMenu2")
                for(var/Button/Group/B in screen)
                    if(B.submenu == "SubMenu2")
                        del B
                for(var/Button/Sub/B in screen)
                    if(B.submenu == "SubMenu2")
                        B.Parts("u", src)
                        B.Opened(0, src)
This is a functional menu with a menu item, two sub-menus, and two items in each sub-menu. Each of the menu items will output their own message before closing the menu.

______________________________________________________

Extras
______________________________________________________

There are two more miscellaneous features in the library:

client.buttonloc
-Set this to 1 to restrict all interactions with buttons.

client.ResetDrag()
-Calling this will reset all buttons back to their original position.

______________________________________________________

Fin
______________________________________________________

Posted by Hiro the Dragon King on Friday, September 25, 2009 05:41PM - 0 comments / Members say: yea +1, nay -0
(Edited on Saturday, September 26, 2009 12:17PM)

45 Improvements For Pokemon Heart Gold And Soul Silver

45 Things That Would Make Heart Gold/Soul Silver The Best Pokemon Games Ever!

When I heard that remakes of Pokemon Gold and Silver were in progress, I was ecstatic. Finally, I would get to play an updated version of one of my favorite games of all time. Unfortunately, there are many areas that the developers can fail, and citing D/P/Pt's shortcomings, they probably will. So I have compiled a list of upgrades, fixes, and reasonable additions that need to be taken into account during the production of this game. I realize that this list will never get any attention from the developers so it is more of a wish list than it is production notes. Either way, this is my list. Most of the items on this list will hopefully be reasonable, but some of them will be a little more unreasonable. A couple of them are really detailed and some of them are short and specific and some of them detail on parts of other ones but all in all, this is what needs to be done.

1) Starting with the my biggest problem with playing D/P/Pt, speed up the battles. I don't know anything about the loading speed of the cartridges for the DS, but the battle speed was slow and annoying. Random encounters took way too long. In every game in the series up until this point, early battles were in and out.

2) Another D/P/Pt fault was the save system. It was atrocious. There were two save files and you could only have one saved game. I realize that this was for the prevention of save file corruption but it ruined one crucial aspect of save files; starting a new game. The first thing I did when I bought my used copy of Pearl was to start a new game. After playing for about an hour, I came to find out that I could not overwrite the previous save file. Another thing I did a lot of, was starting the game over like nine times in a row to see if I could the best stats for my starter. If I did get the best, I would save it. If I didn't like the new stats, I would just stick with the other save file. If having two save files for one saved game ruined the ability to overwrite it, why not dedicate the extra 16MB of space on the card to another set of save files? Fix it. Fix it now.

3) Another problem I had with Emerald and D/P/Pt was the entrance animations for the Pokemon. Most of them consisted of stretching, rotating, of moving the sprite around. It just looked stupid and lazy. It was acceptable for the battle animations, but not the introductory animations. I loved Crystal version because the sprites were actually animated. I know that it would increase the size of the game, but D/P/Pt was only 50MB. With 256MB cards available for the DS and Pokemon's incredible ability to make money, availability and cost are no excuse, just laziness. I will wait another year for this game if it takes that long to animate the sprites correctly.

4) Alternate ways to get Leafeon and Glaceon. Since the rocks aren't in Kanto or Johto, not to mention that was stupid, there needs to be a way to get the native to this game. I'm tired of having to trade to other games for evolutions of Eevee, i.e. Espeon and Umbreon for FR/LG.

5) I want to decorate my room in my own house again. Forts were stupid and unnecessary; no one could see them. The underground however was pretty fun, but I would still like to decorate my room. More dolls, rugs, beds and plants and all the Nintendo systems would be cool, and changing the table and wallpaper would be cool as well.

6) Put Celebi the $#!+ back in the game. Celebi was in the Japanese version of Crystal and the developers restricted the quest to get him in the English version.

7) Giovanni. A little closure on what happened to this nut case. Even a one liner about his whereabouts, or a mention about him from his redheaded son, as he seems to show up a lot. A single battle with him somewhere really late in the game would be great. Team Rocket never really had any closure in G/S/C with out the final boss.

8) Keep all the features that were added in Crystal. Extremespeed Dratini, Unown puzzles, the Pokemon Communication Center in Goldenrod City, Buena's radio program, Odd Egg, Egg Card, Scuicune's side quests, etc.

9) Safari Zone. Apparently, there just wasn't enough room on the GB/GBC cartridges and the Safari Zone had to be scrapped. With the DS cartridges reaching up to 256MB, there is absolutely no reason for it to be missing this time. Safari Zone would also benefit from being expanded upon and having some of the Hoenn and Johto species "imported."

10) While on the topic of more room, it would be nice to have a fully realized future of not only Kanto (it was a bit lacking in G/S/C), but the Sevii Islands and maybe even Hoenn as well. Mt. Moon needs to a lot larger and still retain the pokemon that used to be in it. Seafoam Islands, Cinnabar Island, Viridian Forest, Pokemon Tower, Victory Road, the Power Plant (for all intents and purposes) and Unkown Dungeon were all but gone. The next few suggestions will be ways to the aforementioned disappointments. Every part of Kanto was just... empty.

11) The trainers all over Kanto need to have Pokemon around the levels of 60-80. Everything after the first Elite Four was a let down in the originals. Nothing was a challenge anymore. The Gym Leaders need to be between 80 and 90 and Red needs to be in his 90s with a pumped up Pikachu sitting at level 100.

12) Viridian Forest needs to be reinstated in full with a major upgrade. Make it bigger and fill it with all kinds of bug Pokemon, migrating some from both Johto and Hoenn (Being three years after R/S/E as well). Being a hot spot for bug catchers, it needs to have a collection of the biggest, baddest bug collectors in the history of the game. I'm talking competitive move sets, high levels, and rare breeds such as Scizor, Heracross and Armaldo with moves like Fury Cutter, Megahorn and X-scissor.

13) Victory Road. The Kanto side needs to be brought back. The place where Moltres used to be should have a small crater and some melted rocks and flooring. Nostalgia is what G/S/C was all about. Even FR/LG threw over a hint to the future G/S/C series.

14) Cinnabar Island. There needs to be a Volcano on the island. The residents and buildings from Cinnabar Island need a relocation. There needs to be some sort of cave, alcove, anything for Blaine to sit. Maybe a cave system he's looking through with little bits of the buildings that used to be on the island visible in the walls. That way Seafoam Islands will be clear.

15) Seafoam Islands need to come back. Better than ever it should have ne puzzles with whirlpools, waterfalls, currents, ice and boulders. At the end, where Articuno used to be there needs to be some kind of ice formation with some other prize in it.

16) The Power Plant needs another set of rooms with wild electric Pokemon in it. There was really no other place in the originals for electric types to roam. Also another nod to Zapdos with a circular pattern of burn scars on the floor would be cool, too.

17) The only quip I had about Unknown Dungeon was that It was completely caved in. I was hoping for at least a little alcove with some scientists in it.

18) Pokemon Tower being gone wasn't too bad seeing as you could catch the other ghost in other places, but it still left Lavender Town completely empty. Not to mention, where did all the graves go in three years? That small building doesn't hold them all that's for sure. They should've expanded Lavender town to the east and put the Radio Tower right next to the Pokemon Tower. A gathering spot for the ghost types in the new game would be nice.

19) The Radio needs a bunch more channels. It should act kind of like a sound check, using just the music though. It would also be could if you could get stations the played the songs from the original versions.

20) There should be a Beauty Contest building in Goldenrod City and Celadon.

21) The ship that travels between Johto and Kanto should also travel to the Sevii Islands.

22) There should be two more Kimono Girls in Ecruteak City to accommodate the two new Eevee evolutions.

23) There needs to be more breeding-only egg moves and more complicated chain breeding lines.

24) Most of the trainers to have rematches and progressively become stronger. A lot stronger, with more intervals of levels.

25) Gym Leader Morty needs to have at least one other kind of ghost Pokemon. All he has is the Gengar family. Add a Misdreavus in there, at least.

26) The levels of the Pokemon trainers in Johto need to be slightly higher and slightly more progressive.

27) Redesign Rock Tunnel. It has been the same for three generations of games. Make it longer and harder.

28) Extend Ice Cave to include the newer ice puzzles gimmicks.

30) In three years, the Diglett and Dugtrio haven't dug any new tunnels? Bull. Make it bigger and a little more complicated than a straight line. Include exploration and puzzles (See a pattern here?), maybe some puzzles involving Dig.

31) Update the music. Remix the current music using synthesizers and real sound effects. Make the music something worth remembering. The music hasn't changed in the last thirteen years and it is the part of the game most complained about.

32) Allow the player to have his lead Pokemon, aside from legendaries follow him, not just his starter. I want my Espeon to follow me.

33) Reopen the Museum in Pewter City, and its little side building.

34) Change around the trainers and passengers on the ship and have them get progressively stronger every time you fight them as well. Seeing the same crew every other trip gets annoying. At least shuffle around the rooms where the passengers stay and the positions that the crew sit.

35) Make all 140 TMs, 11 HMs, and Move Tutor moves from all the games obtainable through at least one of these methods.

36) For the love of GOD and all sanity's sake, stop CAPITALIZING everything. I realize that it is to make NAMES stand out, but why not just make the important words BLACK now that all the other text is generally either RED or BLUE. I like reading things where all the word are UNIFORM and grammatically correct. The CAPITALIZATION has always bothered me.

37) Make both Lugia and Ho-oh know their signature move when you capture them. In G/S, one of the two did not. I believe that neither did in Crystal.

38) Pump up the difficulty and make the A.I., outside of battle tower, a lot smarter. Allow them to use items the way players do. There have been numerous Pokemon battle tournaments around the world with people using particular move sets and strategies. Take a hint from them and implement a few of them into the game. I want to see a trainer try and Toxic/Roar my party.

39) Add Pal Park to these games as well. I don't want to Pal Park to D/P/Pt then trade to HG/SS just to get a R/S/E/FR/LG Pokemon. That would be nuts.

40) Progress the story line further. Create some havoc in Kanto. Bring Silver, the supporting character, Lance and Team Rocket into Kanto. There wasn't much to do later in the game, story wise, in the previous games. Have Red and Blue come in and kick some Team Rocket @$$.

41) Add a little more story to Silver. We learned nothing about him in G/S/C and he kinda gave up trying to do anything after you get to the Elite Four. Progress his story further. Send him out to Kanto and give him some more screen time. Tell us a little about his father.

42) Expand upon the Ruins of Alph. It already has a few innovative puzzles, why not a few more. I love doing the Unown puzzles. Expand on the whole mysterious radio signal plot.

43) Give Espeon the ability to learn a sleep inducing move (other than Yawn) so that Dream Eater could be used skillfully in her move sets. It seems that every other Pokemon of every other type can learn Hypnosis (Ponyta!?).

44) Give Phanpy a higher chance of being found on Route 46 as he is the only Pokemon before reaching Goldenrod with the Pickup ability. Alternatively, you could make Aipom more accessible earlier, or you could give Sentret or Rattata the Pickup ability as well.

45) Stop giving us the legendary Pokemon through #$(*%@ events that take place once, in one city, ever. In ten years, when I play this game again, I want to get that Pokemon again without cheating. Just create some really cool areas the need Big Goron Sword-like quests in order to reach. Or you know what? Use the Internet to distribute it. The DSi's main new feature is that on-line store. Hand it out there. Do something about it.

-FIN-

Posted by Hiro the Dragon King on Sunday, May 31, 2009 11:15PM - 7 comments / Members say: yea +1, nay -0
(Edited on Tuesday, September 08, 2009 02:28AM)

LOLZ XD ROFLCOPTER

DOOD I'M SO NOT HIRO!!!!!!!!!111111111!!!!ONE!!!!!

Posted by Hiro the Dragon King on Sunday, September 02, 2007 06:09PM - 3 comments / Members say: yea +0, nay -0

 

 

 

Blog Calendar

October 2009
Su Mo Tu We Th Fr Sa
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
 
«Sep  

My Guilds