Sonic and Sega Retro Message Board: Metal Knuckles - Viewing Profile - Sonic and Sega Retro Message Board

Jump to content

Hey there, Guest!  (Log In · Register) Help

Group:
Member: Members
Active Posts:
4374 (1.27 per day)
Most Active In:
General Sonic Discussion (121 posts)
Joined:
22-February 06
Profile Views:
6299
Last Active:
User is offline Today, 12:03 AM
Currently:
Offline

My Information

Member Title:
HAVE SOME FUN WITH MIKU
Age:
27 years old
Birthday:
September 6, 1987
Gender:
Male Male
Location:
New Hampshire, USA
Interests:
Your mother and/or sisters. But not your aunt. I gotta leave something for you.

� _�

ತ_ತ

http://img253.imageshack.us/img253/8849/yokotp9.gif

Previous Fields

Project:
Shadow Alpha, an awesome hack of Sonic 1
National Flag:
us
Wiki edits:
10
SA2 Emblems:
12

Latest Visitors

Topics I've Started

  1. Let's Pimp Out our Steam Library!

    05 August 2014 - 09:03 PM

    Sup.

    There's already a Steam thread or two in General Gaming, but I'd like to address some of the more technical aspects of the software. Steam is pretty swell, since it allows people to interact with each other in the gaming community. However, my interests lie in it's functionality as a video game media center. More specifically, I enjoy sticking as many of my games into the library as possible, for the sake of convenience (as well as showing your friends what games, both Steam and not, you are currently playing). And while adding non-Steam games to the library is largely a simple affair for several applications, the functionality and aesthetics of what Steam has to offer are somewhat lacking.

    Because of this, I'm going to showcase some of the different methods I use to add non-Steam games to my library. Hopefully, this can help some users of the forum who share this same obsessive problem as myself, as well as provide a neat functionality for those with merely a passing interest. Maybe we can also foster some discussion to improve these methods.

    Please keep in mind that this is done with the 'Game Details' view in mind, as all other grid/banner views are a waste of visual space. Additionally, I have no idea how to replicate this on a Mac or Linux distro. Also, I presume you know how to navigate through basic Steam functions, such as adding a non-steam game, without having your hand held the entire way.

    Adding Games without .exe Launchers

    Spoiler


    Changing Game Icons without the (stupid) Shortcut Mark

    Spoiler


    Adding ROMS that Launch through the Emulator (Thanks to CheatFreak for the additional info regarding ICE's features)

    Spoiler


    Adding PSX ISOs that Launch through the Emulator

    Spoiler


    This is currently what I have so far. I'm looking to further this list to include other disc-based emulators, but truth be told my laptop can only run them so well past the 90's generation of consoles. If others are willing and able, let's determine the methods needed to do this with other emulators, and I will update this post to include those methods (with credits to the originators of course).

    As for a starting point? I'm trying to figure out how to get Saturn games to boot through Steam using SSF (given it's the best Saturn emulator currently out there). The problem is that SSF doesn't load ISOs, so games need to either be loaded in a physical disc tray, or mounted with something like Daemon. I've figured that the best bet in this regard would be creating a launcher executable which mounts the specified ISO through Daemon, launches SSF, inputs the commands needed to switch the BIOS to whichever one is appropriate for said game, then unmounts the disc image upon closing of SSF. A tall order, and I have no idea where to start.
  2. Hacking Pokemon Yellow using Pokemon Yellow

    28 November 2012 - 06:46 PM

    source

    Quote



    Introduction

    Think of pokemon yellow as creating a little universe with certain rules. Inside that universe, you can buy items, defeat rival trainers, and raise your pokemon. But within that universe, you are bound by the rules of pokemon. You can't build new buildings, or change the music, or change your clothes.. There are some games (like chess), where it is not possible to alter the rules of the game from within the game. No matter what moves you make in chess, you can never change the rules of the game so that it becomes checkers or basketball. The point of this run is to show that you CAN change the rules in pokemon yellow. There is a certain sequence of valid actions (like walking from one place to another or buying items) that will allow you to transform pokemon yellow into Pacman, or Tetris, or Pong, or a MIDI player, or anything else you can imagine.

    Background

    The speedrun (http://tasvideos.org/2913S.html) by Felipe Lopes de Freitas (p4wn3r), beats pokemon yellow in only 1 minute and 36 seconds. It does it by corrupting the in-game item list so that he can advance the list past its normal limit of 20 items. The memory immediately after the item list includes the warp points for the current map, and by treating that data as items and switching and dropping them, he can make the door from his house take him directly to the end of the game.

    When I first saw that speedrun, I was amazed at how fast pokemon yellow could be beaten, and that it was possible to manipulate the game from the inside, using only the item list. I wondered how far I could extend the techniques found in p4wn3r's run.

    The gameboy is an 8 bit computer. That means that ultimately, anything that happens in pokemon is a result of the gameboy's CPU reading a stream of 8 bit numbers and doing whatever those numbers mean. For example, in the gameboy, the numbers:

    62 16 37 224 47 240 37 230 15 55

    mean to check which buttons are currently pressed and copy that result into the "A" register. With enough numbers, you can spell out an interactive program that reads input from the buttons and allows you to write any program you want to the gameboy. Once you have assembled such a program and forced the game to run it, you have won, since you can use that program to write any other program (like Tetris or Pacman) over pokemon yellow's code. I call a program that allows you to write any other program a "bootstrapping program". So, the goal is to somehow get a bootstrapping program into pokemon yellow and then force yellow to run that program instead of its own.

    How can we spell out such a program? Everything in the game is ultimately numbers, including all items, pokemon, levels, etc. In particular, the item list looks like:

    item-one-id (0-255)
    item-one-quantity (0-255)
    item-two-id (0-255)
    item-two-quantity (0-255)
    .
    .
    .

    Let's consider the button measuring program [37 62 16 37 224 37 240 37 230 15 55] from before. Interpreted as items and item quantities, it is

    lemonade x16
    guard spec. x224
    leaf stone x240
    guard spec. x230
    parlyz heal x55

    So, if we can get the right items in the right quantities, we can spell out a bootstrapping program. Likewise, when writing the bootstrapping program, we must be careful to only use numbers that are also valid items and quantities. This is hard because there aren't many different items to work with, and many machine instructions actually take 2 or even 3 numbers in a row, which severely restricts the types of items you can use. I ended up needing about 92 numbers to implement a bootstrap program. Half of those numbers were elaborate ways of doing nothing and were just there so that the entire program was also a valid item list.

    The final part of the hack is getting pokemon yellow to execute the new program after it has been assembled with items. Fortunately, pokemon keeps a number called a function pointer within easy reach of the corrupted item list. This function pointer is the starting point (address) of a program which the game runs every so often to check for poison and do general maintenance. By shifting an item over this function pointer, I can rewrite that address to point to the bootstrapping program, and make the game execute it. Without this function pointer, it would not be possible to take over the game.

    The Run

    Pallet


    I start off and name my rival Lp/k. These characters will eventually be treated as items and shifted over the function pointer, causing it to execute the bootstrapping program that will soon be constructed. I start the run the same as p4wn3r's and restart the game while saving, so that the pokemon list is corrupted. By switching the 8th and 10th pokemon, I corrupt the item list and can now scroll down past the 20th item. I shift items around to increase the text speed to maximum and rewrite the warp point of my house to Celadon Dept. Store. (p4wn3r used this to go directly to the hall of fame and win the game in his run.) I deposit many 0x00 glitch items into the PC from my corrupted inventory for later use. Then, I withdraw the potion from the PC. This repairs my item list by overflowing the item counter from 0xFF back to 0x00, though the potion is obliterated in the process. I then take 255 glitch items with ID 0x00 from the computer into my personal items.

    Celadon Dept. Store

    Leaving my house takes me directly to Celadon Dept. store, where I sell two 0x00 items for 414925 each, giving myself essentially max money. I hit every floor of the department store, gathering the following items:

    +-------------------+----------+
    |##| Item | Quantity |
    +--+----------------+----------+
    |1 | TM02 | 98 |
    |2 | TM37 | 71 |
    |3 | TM05 | 1 |
    |4 | TM09 | 1 |
    |5 | burn-heal | 12 |
    |6 | ice-heal | 55 |
    |7 | parlyz-heal | 99 |
    |8 | parlyz-heal | 55 |
    |9 | TM18 | 1 |
    |10| fire-stone | 23 |
    |11| water-stone | 29 |
    |12| x-accuracy | 58 |
    |13| guard-spec | 99 |
    |14| guard-spec | 24 |
    |15| lemonade | 16 |
    |16| TM13 | 1 |
    +--+----------------+----------+

    After gathering these items, I deposit them in the appropriate order into the item PC to spell out my bootstrapping program. Writing a full bootstrap program in one go using only items turned out to be too hard, so I split the process up into three parts. The program that I actually construct using items is very limited. It reads only from the A, B, start, and select buttons, and writes 4 bits each frame starting at a fixed point in memory. After it writes 200 or so bytes, it jumps directly to what it just wrote. In my run, I use this program to write another bootstrapping program that can write any number of bytes to any location in memory, and then jump to any location in memory. This new program can also write 8 bits per frame by using all the buttons. Using this new bootstrap program, I write a final bootstrapping program that does everything the previous bootstrapping program does except it also displays the bytes it is writing to memory on the screen.

    Finale

    After completing this bootstrapping program, I go to the Celadon mansion, because I find the metaness of that building to be sufficiently high to serve as an exit point for the pokemon universe. I corrupt my item list again by switching corrupted pokemon, scroll down to my rival's name and discard until it is equal to the address of my bootstrapping program, and then swap it with the function pointer. Once the menu is closed, the bootstrapping program takes over, and I write the payload....

    Other comments

    The entire video was played by the computer using bots. I used functional programming to write search programs over different possible game states to find the most efficient way of performing general actions. Some interesting things I developed but didn't use were pretty printing functions to display the game's internal data structures, and an "improbability drive" that forces improbable events to happen automatically using search.

    Here are a few example scripts:

      (defn-memo viridian-store->oaks-lab
        ([] (viridian-store->oaks-lab
             (get-oaks-parcel) ) )
        ([ script \]
           (->> script
                (walk [↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
                       ← ← ← ← ← ← ← ← ←
                       ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
                       ← ←
                       ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
                       ↓ ↓ ↓ ↓ ↓ ↓ ↓
                       → → → → → → → →
                       ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
                       ← ← ← ← ←
                       ↓ ↓ ↓ ↓
                       ])
                (walk-through-grass
                 [↓ ↓ ↓ ↓ ↓ ↓ ↓])
                (walk [↓ ↓ ← ↓ ↓ ↓ ←
                       ↓ ↓ ↓ ↓ ↓ ↓
                       → → → ↑])
    
                (do-nothing 1) ) ) )
    


    This script walks from the Viridian City pokemon store to Oak's Lab in the most efficient way possible. The walk-through-grass function guarantees that no wild battles will happen by manipulating the game's random number generator.

      (defn-memo hacking-10
        ([] (hacking-10 (hacking-9) ) )
        ([ script \]
           (->> script
                begin-deposit
                (deposit-held-item 17 230)
                (deposit-held-item-named :parlyz-heal 55)
                (deposit-held-item 14 178)
                (deposit-held-item-named :water-stone 29)
                (deposit-held-item 14 32)
                (deposit-held-item-named :TM18 1)
                (deposit-held-item 13 1)
                (deposit-held-item 13 191)
                (deposit-held-item-named :TM02 98)
                (deposit-held-item-named :TM09 1)
                close-menu) ) )
    


    This script calculates the fastest sequence of key presses to deposit the requested items into a PC, assuming that the character starts out in front of a computer.

    Other Comments

    The final payload program is multiple programs. I created a reduced form of MIDI and implemented it in gameboy machine language. Then I translated a midi file from http://www.everyponysings.com/ into this reduced MIDI language. The payload program contains both the music data and the MIDI interpreter to play that data. The picture works in a similar way. There is code to translate a png file into a form that can be displayed on a gameboy, and other code to actually display that image. Both the image and the display code are also written by the final bootstrapping program. Even though my final payload is rather simple, you can write any program at all as the payload. The source for the sound and image displaying code is at http://hg.bortreb.com/vba-clojure

    This entire project is open source and I encourage anyone who wants to take the code and play around!


    A more creepy-pasta-esque example of what this is capable of doing

  3. Cash Register Noise

    17 November 2009 - 08:28 PM

    A while back, I was at a gas station subway with my sister during lunch break at work. As we were standing in line waiting to get our failed creations that Subway creates, a particular chime caught my ear. I could swear that for a second, I had heard the sound of a ring being collected.

    Dsimissing it as needing to get away from you guys more often, I went back to getting my delicious breadstick with a side of one slice of meat, when I heard it again. Curiosity now fully piqued, I looked around wondering whadafu that noise was, when my head caught on a register drawer closing to the sound of a ring. There was obviously a joke about collecting rings here, but I was too mildly surprised to come up with one.

    I treated that as an isolated incidant, but now I have begun noticing it happening in a few other convenient stores around here. And the sound is definitley the same one from Sonic. Has anyone else happened to hear this from registers recently, or has this been isolated to my small state of New Hampshire?
  4. Hollywood Video Radio Ad

    19 April 2009 - 02:15 PM

    So I'm driving into work this morning, when on the radio comes a Hollywood Video ad. You know, that video rental store that isn't Blockbuster. Anywho, it starts off with coverage of some mock-up hockey game, with someone taking the puck down the ice and passing it to... SONIC THE HEDGEHOG!? Sonic then proceeds to move the puck down the rink and pass it to Batman, and the Dark Knight sends the puck into the goal!

    Needless to say, by now I am pulled over and my pants are suddenly wet. I know it's not an officially SEGA endorsed advertisement by any stretch, but in this day and age I find it odd that of all video game characters they could choose to represent that part of their business, they chose Sonic. I suspect that whoever was in charge of creating this add might be one of them internet Sonic fans we keep hearing so much about.

    Anywho, I'm thinking of contacting Hollywood Video for an mp3 of this ad so I can post it, but if I take the "I'm a fan of Sonic and would LOVE that ad!" approach, I doubt they'll even respond. Whereas, if someone who happens to work on an announcements show at their school were to send in a professional looking letter saying that they were contacting various companies for copies of their radio adverts to use on their program as a business project, they could probably get it without having to worry about anything. But where would I find such a member of the forums- oh, hai Tweaker!

    Anywho, even if Tweak isn't up to it, I'll probably take a dive at trying to get it myself. I'm just wondering if anyone else is interested in this, and if I got it whether it would even be worth keeping?

Friends

Metal Knuckles hasn't added any friends yet.