Editing Rules

From NES Hacker Wiki
Revision as of 08:15, 23 June 2017 by TheAlmightyGuru (talk | contribs) (Multiple Players)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

In order to ensure that each page follows a similar style, please read and conform to the following editing rules.

Easy Cheats

These are the cheats that appear at the top of every game page.

General Display

Easy Cheats should be formatted in the following way:

Icon Addr Val Cmp Description
Icon-Powerup.png 08C4 D3 01 Cheat Description
How do I use these?

Each number uses leading zeroes to ensure they're all the same length, 4 digits for the memory address and two digits for the value. If the compare isn't used, fill it with a dash "-". The description should be treated like a title where all important words are upper case, while lesser important words like "a," "of," "the," etc. are lower case.

Multiple Codes Per Cheat

When two or more cheat codes need to be tied together, put them into a single cheat on multiple lines. Add to the description the cheat number, a slash, and the total number surrounded in parenthesis. Here is an example:

Icon Addr Val Cmp Description
Icon-Jump.png 9472
9473
FA
F9
FC
FC
High Jump (1/2)
High Jump (2/2)
How do I use these?

Description Notes

If a cheat will disrupt normal game play, add a note to its description. Place notes in parentheses and only capitalize the first word. For example:

Icon Addr Val Cmp Description
Icon-Powerup.png 0071 63 - Infinite Hearts (Turn off at the end of a stage)
How do I use these?

Order

Cheats should be ordered based on what they do. Cheats affecting lives and/or hit points should be first, followed by power-ups, those that affect movement (jumps, speed, etc.), and then less-important cheats (like infinite time or continues). Similar cheats should be grouped together. Challenger cheats should always be placed at the bottom and be ordered in a similar fashion. For example:

Icon Addr Val Cmp Description
Icon-Lives.png 010A 09 - Start With 9 Lives and 9 Continues
Icon-Lives-Infinite.png 02BE 09 - Infinite Lives
Icon-HitPoints.png C5D0
C889
0F
0F
0A
0A
More Hit Points (1/2)
More Hit Points (2/2)
Icon-HitPoints-Infinite.png 02AB 0B - Infinite Hit Points
Icon-Weapon.png 02A2 01 - Have Knife
Icon-Weapon.png 02A2 01 - Have Nun-chucks
Icon-Time.png 0204 40 - Infinite Time
Icon-Continue.png 02BF 09 - Infinite Continues
Icon-Challenge.png 010A 01 - Start With 1 Life and 1 Continue
Icon-Challenge.png C5D0
C889
06
06
0A
0A
Fewer Hit Points (1/2)
Fewer Hit Points (2/2)
Icon-Challenge.png 02A2 00 - Can't Use Weapons
How do I use these?

Naming Conventions

Some games have specific names for values and those names should be used rather than a generic name. For example, The Legend of Zelda uses the name "rupee" for money. For games that don't have specific names, use the following standards in the cheat code descriptions.

  • Lives - For the number of retries a player gets. Don't used "guys," "1-ups," etc.
  • Hit Points - For when the player can take multiple hits. Don't use "HP," "life," "energy," etc.
  • Level - Try to match the game's terminology (stage, area, etc.), but use "level" as the default when no specific name is listed.
  • Invulnerable - When the player cannot take damage.
  • Invincible - When a player injures enemies on contact.

Multiple Players

When distinguishing between Player 1 and Player 2, always use P1, P2 at the beginning of the code. All P1 codes should be grouped together, then all P2 codes. You can use this same system for RPGs with multiple party members as well. RPGs with four adventurers (like Final Fantasy) and 4-player games (like Gauntlet II) should use P3 and P4 as well. Here is an example:

Icon Addr Val Cmp Description
Icon-Lives-Infinite.png 05B4 89 - P1 Infinite Lives
Icon-HitPoints-Infinite.png 0210 18 - P1 Infinite Hit Points
Icon-Lives-Infinite.png 05E4 89 - P2 Infinite Lives
Icon-HitPoints-Infinite.png 0224 18 - P2 Infinite Hit Points
How do I use these?

Code Duplication

Don't duplicate an existing code unless there is a valid reason. The first code below gives the player 9 oil, the second code gives them 99 oil, but since they both yield infinite oil, each code does the same thing, and one should be eliminated.

Icon Addr Val Cmp Description
Icon-Ammo-Infinite.png 00A4 09 - Infinite Oil
Icon-Ammo-Infinite.png 00A4 99 - Infinite Oil
How do I use these?

However, in this example, the codes have a different purpose. One starts the player with a lot of oil, the other provides infinite oil. In this case, both codes are valid.

Icon Addr Val Cmp Description
Icon-Ammo-Infinite.png 00A4 09 - Infinite Oil
Icon-Ammo.png D86C 2F 03 Start With 99 Oil
How do I use these?

Memory Addresses

Memory addresses include the values found in bytes 0000-07FF. You can also include any memory beyond this section provided it's not code. For example, if there is a data table in the ROM, or the area where the game stores battery memory.

Numbers

Many games handle large numbers like score, hit points, etc. in multiple areas of memory, but there are different forms of doing this, and each form should be displayed in a particular way to remain intuitive. If single digits are stored across multiple memory locations, write them out as follows:

07DE - P1 Score: 9xxxx
07DF - P1 Score: x9xxx
07E0 - P1 Score: xx9xx
07E1 - P1 Score: xxx9x
07E2 - P1 Score: xxxx9

Note that the 9 is the variable position that is being altered, and an x is a place holder to show the full size of the number. Sometimes a game will display a digit that isn't part of actual number. For example, the score may read "125500," but the 00 at the end never changes, and isn't stored in memory. When this occurs, add the unused values to the score to show where they are. For example:

0200 - P1 Score: 9xxx00
0201 - P1 Score: x9xx00
0202 - P1 Score: xx9x00
0203 - P1 Score: xxx900

Sometimes two digits are stored in a single byte. In cases like this, simply display 99 per section and xx in the place holders, like so:

0424 - Score: 99xxxx
0425 - Score: xx99xx
0426 - Score: xxxx99

There is a different way of handling numbers that is a bit more technical. Some games store numbers by multiplying one byte with a second byte (and sometimes even a third or fourth byte). This allows very large numbers to be stored in relatively small areas of memory. When this occurs, use the following notation:

00BC - Gold: x1
00BD - Gold: x255
00BE - Gold: x65535

This implies that the number stored in 00BE is multiplied by 65,535, the number stored in 00BD is multiplied by 255, and the number stored in 00BC is multiplied by 1. Finally, the three are added together to get the total amount of gold. For example, if the memory reads the values below, the total gold it 180,325. Here's why:

00BC - 2A
00BD - C1
00BE - 02

You can figure out how much gold the player has by first converting to decimal:

2A =  42
C1 = 193
02 =   2

Then multiplying by the noted values:

 42 x      1 =      42
193 x    255 =  49,215
  2 x 65,535 = 131,068

And finally, adding them all together to determine the total number of gold:

131,068 + 49,215 + 42 = 180,325

Normal Range

When the game has a normal operating range for a variable, include the normal low and high values. This will also help determine if the value is stored as decimal or hex).

00C6 - Magic Points (00-63)

Do not include all possible values, but rather the expected values. For example, In Super Mario Bros., the player's lives value can technically span from 0 to 255, but the game starts glitching when it surpasses 9, so the line should read:

075A - Lives (00-09)

Example Values

If a byte stores multiple values, each with a different description, try to include each description. For example:

0756 - Powerup Flag (00 - Mario, 01 - Super Mario, 02 - Fire Mario)

When there are too many possibilities to comfortably fit on a line, break the line up into multiple lines, each indented below the first. This is done with a space, then a tab character (to insert a tab character, open Notepad, press tab, highlight the tab space, Copy it, and then paste it into your browser).

00E0 - Tile type on which the player is standing:
	00 - Grass
	01 - Desert
	02 - Hills
	03 - Stairs Up
	04 - Tiles
	05 - Stairs Down
	06 - Swamp
	07 - Town
	08 - Cave
	09 - Castle
	0A - Bridge
	0B - Forest
	0C - Chest
	0D - Force Field

A lot of games will store multiple true or false values (or flags) into a single byte. These should be denoted by a plus sign at the beginning so other readers know how much to add.

680B - Joined party members
	+01 - Mage
	+02 - Bard
	+04 - Fighter
	+08 - Druid
	+10 - Tinker
	+20 - Paladin
	+40 - Ranger
	+80 - Shepherd

Text

Characters should be listed with a two-digit hexadecimal look-up, an equal sign, and then the character value. Do not put spaces before or after the equal sign (unless the crossover character is actually a space, like line 39 in the example). The text table should be sorted in order of the hexadecimal number NOT the character. Here is an example:

00=0
01=1
02=2
...
10=A
11=B
12=C
...
39= 
3A=.
3B=,

Code

Try to use the same indentation for comments as existing games.