Post subject: Solomon's Key
Joined: 10/20/2006
Posts: 4
Hello! * I´m search Game Genie codes for Solomons key to make the game more hard. For example: Replace the head-enemies with red dragons comes down form the mirror. In the arcade-version comes green slime-balls from some mirror, for example in Level 3 (Only "Zipang" for PCE) and in some another levels comes green slime-balls. Perhaps I can fixed the green Slime-balls in Nes-version with some Game Genie code. * Do you know a Level-editor for thie fantastic game? --- I want to edit all 50 levels in the game :). From Alexander in Sweden !! [Edit by Bisqwit: Made the topic more descriptive of its actual contents]
Active player (310)
Joined: 2/28/2006
Posts: 2275
Location: Milky Way -> Earth -> Brazil
The only editor I've seen from this game was web-based and it's currently offline. The source is at Zophar's Domain. (it's PHP)
http://www.zophar.net/utilities/download/Solomon's_Web_Edit_1.0.zip
"Genuine self-esteem, however, consists not of causeless feelings, but of certain knowledge about yourself. It rests on the conviction that you — by your choices, effort and actions — have made yourself into the kind of person able to deal with reality. It is the conviction — based on the evidence of your own volitional functioning — that you are fundamentally able to succeed in life and, therefore, are deserving of that success." - Onkar Ghate
Bisqwit wrote:
Drama, too long, didn't read, lol.
Post subject: Solomons key !!
Joined: 10/20/2006
Posts: 4
pirate_sephiroth wrote:
The only editor I've seen from this game was web-based and it's currently offline. The source is at Zophar's Domain. (it's PHP)
http://www.zophar.net/utilities/download/Solomon's_Web_Edit_1.0.zip
Hello! But I can´t find any exe-file in this zip-file. I can see many picture-files but I can´t edit the game :( Have a nice weekend !! MVH at1981 !!
Player (36)
Joined: 9/11/2004
Posts: 2624
It's PHP, you have to run a webserver on the your computer with a PHP plugin in order for this to work. Don't worry, you can do this for free, your best bet would probably be apache.
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Joined: 10/20/2006
Posts: 4
OmnipotentEntity wrote:
It's PHP, you have to run a webserver on the your computer with a PHP plugin in order for this to work. Don't worry, you can do this for free, your best bet would probably be apache.
Hello! Can you explain exactly how I do to use Level Editor for Solomons key? Perhaps you can make pictures with "Print Screen" so I can see how you do :). How I get the PHP-plugin and How I do to start this Level editor? From at1981 in Sweden !!
Player (36)
Joined: 9/11/2004
Posts: 2624
http://www.apachefriends.org/en/xampp-windows.html Check there for an automatic installer for everything you need. Then just drop the files into your http root directory and browse to http://127.0.0.1/
Build a man a fire, warm him for a day, Set a man on fire, warm him for the rest of his life.
Banned User
Joined: 12/23/2004
Posts: 1850
OmnipotentEntity wrote:
http://www.apachefriends.org/en/xampp-windows.html Check there for an automatic installer for everything you need. Then just drop the files into your http root directory and browse to http://127.0.0.1/
I prefer OmniSecure for less-serious webservers, especially if you're brain dead when it comes to installing them. I had nothing but problems when I tried to install xampp, as well.
Perma-banned
Editor, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Solomon's Key! I am surprised to see that there is no existing discussion thread for this game. It is a puzzle game where the protagonist, who is an old and clumsy magician, can conjure into existence and dissipate solid bricks. I have previously created a TAS of it. 498M completes all rooms, including all secrets, excluding the fairy bonus rooms, and thus gets the best ending. I have long planned to improve it, but progress has been extremely slow. This is a difficult game to TAS, because the game's timings are extremely volatile. Really. It seems like the game does not obey any frame granularity whatsoever. The timer ticks at different rates, and frames can be lost without any apparent lag occurring. Due to changes in my life I am not going to expend personal labor in TASing this game. Here is a table that collects the timings from my previous run (measured in game timer): [1] ― or [2] if Nach has noticed my URL restore request. Now, I created a bot once to play levels in this run. However, despite my extensive and best efforts, I have not been able to create a bot that bests the volatileness features of the game's timings. In fact, Randil managed to create a test that completed the 1st room with 9370 (more) left in the timer, while expending the same number of frames as my bot did. Here is the source code of my bot: http://bisqwit.iki.fi/kala/solomonbot1.cc (Modified to not require coroutines ― this version assumes that FCEUI_FrameAdvance() actually runs a frame and does not just set some flag. Should be easy (hah!) to port to LUA.) This bot is not autonomous. It works like this: 1. Operator (you) defines an objective. An objective is Dana's coordinates must reach a certain rectangle, and the maximum number of frames to expend doing the objective. 2. Operator creates a savestate at the beginning of the scene that the bot must play from 3. Operator runs the bot, tells to start from that savestate. 4. Bot runs, and when it reaches the objective, it saves and reports the success, refines the input, saves and reports it again, then tries harder (tighter time limits). 5. When the operator is satisfied, he takes the movie again, replays the input that the bot defined, then goes to step 1. To help the bot, the operator can add extra conditions occasionally. For example, if Dana's Y coordinate > 0x5C, it might indicate that Dana has fell from the platform and the attempt is failure. Or he might require that Dana must pick the key during this objective. I am releasing this to the TASvideos community in the hope that it is useful to someone. If anyone wants to obsolete my TAS, go ahead. It was created with Famtasia, too! Techniques involved in this bot: ― Generate random input (attributes: hold L or R for quite some frames, occasionally change, sometimes hit A, possibly while ducking; sometimes jump). ― If the given input accomplishes the goal within the allowed time, yay! Then attempt to refine that input with certain mutation types: ― Mutation method 1: Delete a random frame from the input ― Mutation method 2: Randomly duplicate some frame ― Mutation method 3: Randomly add a new input frame somewhere in between ― Mutation method 4: Swap two random sections of the input sequence ― Mutation method 5: Change some frame into new random input ― If the mutated input accomplishes the goal faster, yay ― If the mutated input accomplishes the goal in the same time, but with better bonus pickups, yay ― If the mutated input accomplishes the goal in the same time, but the input is simpler than the previous find, yay ― If no improvement has been achieved after N mutations, go back to generating new random inputs Input simplicity is emphasized because the bot is supposed to report its generated inputs to the human operator, and the human is supposed to repeat them by reading them from the text. RAM map at: http://bisqwit.iki.fi/jutut/solokey.map Disassembly of the game (with labels on RAM/ROM address where known). If you know more RAM / ROM addresses, let me know and I'll update the disassembly.
Post subject: discoveries
Editor, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
After revising the disassembly a few times, I have discovered the source of the volatileness of the game's timings. This game uses coroutines (single-core multithreading with voluntary context switching). Such simple operations like responding to the player's input, or spawning new fairies, or running enemy AI, are handled by threads, where there is no guarantee whatsoever that any particular thread gets run during a single frame. Conversely, the same thread may well get run multiple times during the same frame. In other words, the game's running speed depends entirely on what it has to process. Pressing the up button during a jump may cause the timer to count an extra tick. Spawning 10 fairies may cause enemies to walk through walls, because their AI threads receive too little runtime in proportion to that thread that just pushes them all forward on their current trajectories. Yes. And oh, Dana does have subpixel coordinates and the timer has an invisible fractional counter. Now that I know the rules of this game, I have much better chances of creating an useful bot. I have managed to reach beat Randil's timing for the first stage already, with 9380 remaining in the timer. :) Interestingly enough, it is quite easy to optimize in this game for frame count. Optimizing for the game's timer, not easy. Do a 1 frame longer route, and you may +10 units better timer result...
Joined: 3/18/2006
Posts: 81
Location: Finland
Two years ago, I tried to tried to improve the published run. The run was supposed to base on timer, but then I noticed how evil the timer actually was. These discoveries are very helpful when I'm trying to understand why my attempt failed. If somebody picks up this project, this run should be based on frame count IMO. If thread handling is that awful, timer would be useless since it has no regular ticking pattern? (If I understood correctly)
Skilled player (1900)
Joined: 4/20/2005
Posts: 2160
Location: Norrköping, Sweden
Yeah, the timer shouldn't be used as a reference - it decreases when RAM address $0437 performs one cycle, and this RAM address increases by 34 each frame (so on average life decreases every 256/34=7.53 frames), so by starting a level with a high value on this address will make the timer decrease sooner at the start of the level. I think a run of this game should aim for fastest real time - aiming for best in-game time would sometimes force you to wait a few frames before finishing a level to get a good value of $0437 at the start of the next one. Oh yes, I have a pretty new WIP of this game - I tried it again, but as Bisqwit has pointed out, this game is very evil when it comes to randomness, so I don't think I will continue it. Here it is if anyone wants to take a look. It's hard to compare this to the published run since it's a Famtasia run, so this WIP might in fact be a frame or so slower on one or more levels - either way, this was more of a test run, so I believe more frames can be squeezed out. EDIT: After thinking about this some more, I think a TAS of this game could have fastest in-game time as a secondary goal, but mainly aim for fastest real time. But overall, it's no big deal for me, I don't think a run that aims for fastest in-game time as primary goal will look very different anyway. :)
Editor, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
I started creating a new Solomon's Key TAS experimentally with most of the bulk work done by Lua scripts. As for the timing related goals, I'm doing somewhat a mixture here. From http://tasvideos.org/Bisqwit/Projects/SolomonsKey.html: ③Ⓐ least frame count ③Ⓑ biggest remaining timer readings Goals ③Ⓐ and ③Ⓑ are somewhat adjacent and vary. <...> I am primarily aiming for fastest level completions frame-wise, but within that goal, I am aiming to optimize for maximum remaining timer reading. However, I do take the hourglass items which reduce the timer to 5000 when possible, because it makes the score tallying go quicker after the room is completed. In short, I try to get the best of both worlds. I have programmed these goals in the Lua script I use, but I when working manually, I do not do frame count comparisons; I use the game's timer for that.
Skilled player (1900)
Joined: 4/20/2005
Posts: 2160
Location: Norrköping, Sweden
I wish you the best of luck with your bot project, hopefully it works out well. Will you post your progress in this thread or only on your personaly Solomon's Key page? And is there any chance that you'll upload your movie file on you SK page (or in this thread) so that we can take a look at your progress as it goes along?
Editor, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Randil wrote:
I wish you the best of luck with your bot project, hopefully it works out well. Will you post your progress in this thread or only on your personaly Solomon's Key page? And is there any chance that you'll upload your movie file on you SK page (or in this thread) so that we can take a look at your progress as it goes along?
Thanks Randil, but I think I just gave up. Here is my current WIP. http://dehacked.2y.net/microstorage.php/info/1912856927/solomonskey-bisqwit6-wip-3rooms.fm2 At the beginning of room 3, it is three frames behind your WIP (despite higher timer readings in both preceding stages). In room 3, it finishes with 8070 in the clock (yours has 8060), but the room is still 16 frames slower than yours. As it stands that aiming for only short-term optimizations is not enough in this game (extensive optimizations done early can screw up progress later on in the same room), I find the TAS demanding more work than I am comfortable with, and therefore I quit. I am however releasing my Lua scripts for those who want to use them. To run the bot, start FCEU with the solokey.lua script loaded and the movie loaded:
fceu/fcx --loadlua solokey.lua --playmov solokey.fm2 solokey.nes
It will load the savestate from slot #0 and immediately start working towards accomplishing the objective that is set using the state:setobjective function, with input generated by InputGenerator. Once it finds something that accomplishes the goal, it attempts to refine it with InputSimplifier, found in luafuncs.lua. Then it proceeds finding more solutions, with the refined frame&timer limits. When it finds a new, better solution, it saves the solution in savestate slot #8 and reports the input that generated that solution by using FCEU.message(). It is recommended to modify FCEUX such that FCEU.message() always outputs to stderr and that extreme frameskipping is used while the Lua script runs (so it runs faster). Objectives are specified as coordinate regions where Dana must reach (for example, X coordinate between 0x53..0xFF and Y coordinate between 0x70..0x80), as the maximum frame count to expend in doing so, and as whether possessing the key is mandatory for the objective to count. Input can be generated randomly or programmatically. I used both, at times. Programmatic approaches can amount to "hold R, until Y coordinate > 0x50; when X is (a randomly selected value), hit A and wait 17 frames", etc. This can be used to e.g. find the best location to cast magic where the timer gets most delayed while the framecount stays at minimum. The successfulness of the objective is quantified as a function of the frame count, dana's coordinates, the internal timer, and a sum of various things including the score, number of fireballs in inventory, and the such, with the frame count serving as the primary decisive measure. A death, or failing to reach the destined coordinates within the frame limit, amounts to failure.
Post subject: On the timer speed (includes two demo fm2s)
Editor, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Randil wrote:
this RAM address increases by 34 each frame (so on average life decreases every 256/34=7.53 frames)
Actually, in rooms 13, 20, 24 and many others, it changes by 25 per frame. In room 34 and the fairy room, it changes by 45 per frame. Yes, this game is screwy. P.S. In room 34, you should take the white jar (visible), which will multiply your timer by 5 (and the timer decrement speed as well), and then the orangehourglass which is at (7,3) ― it will set the timer to 5000. As a result, the remaining timer at level completion should cut very close to 0, because after taking the hourglass, you've got about 9.5 seconds ((5000/50) * (256/45) / 60) before your time runs out. The same strategy is theoretically possible also in stages 17, 24, 26 and 46, but only in 34 and 46 it may save time (due to the order in which they coincide with Dana's path). EDIT: Example demonstrating the effects of the jar+hourglass. -- http://dehacked.2y.net/microstorage.php/info/1155111567/solokey34-fail.fm2 -- surprisingly quick death; this is in fact the fastest possible way and location in the game to get a "time over" death from the beginning of a room. -- http://dehacked.2y.net/microstorage.php/info/26091512/solokey34.fm2 -- death is narrowly averted by keeping the timer preoccupied at the last moment, allowing completing the room. Transition to room 35 is quite short.
Player (246)
Joined: 8/10/2008
Posts: 113
Hi, This looks like the most recent thread for Solomon's Key, so I'll post here. I'm planning a console speedrun for Solomon's Key. Hopefully it will end up on sda. The first goal is to get a run with the bad ending using warps. Anyways, I'm gathering information about different solutions for the rooms in order to get through as quickly as possible. I've studied the tas and picked up some good stuff. I have also question marks regarding some of the choices in the current tas that might be interesting to take into account in case anyone decides to improve it. - In level 1, it looks faster breaking the block, jumping to take the key and going down the newly created hole. - In level 45, I'm quite sure it's a waste of time going to the left at first. You can make the block under the blue flame (the one revealing the golden goose) be broken by blocking one of the demon heads. - In level 46, it's actually possible to pick up the seal after the key is picked up. In fact, it's not even more difficult than something I would go for if I were to do a best ending console run one day. I don't think you guys have much to learn from my route choices, but in case you're interested, they're at http://www.youtube.com/view_play_list?p=B101178851225DEA If you are indeed looking into this game and are planning to study my strategies, feel free to comment as well (should probably be done outside this forum though, since it's about console techniques). I picked up the basics for many of my strategies from a Japanese player http://www.youtube.com/watch?v=9Pz1poV9sAQ&feature=related There might be more stuff in his run for a future tas improvement, but I haven't looked into it since I don't play all levels right now. By the way, if any of the ideas above should prove useful for you, I don't take any credit for them. I did not find them on my own, I just collected them...
Joined: 4/29/2005
Posts: 1212
It might be a little hard to top the current runs for this game. I know there are already 100% and any% Tases for this already, I believe. I know the 100% TAS exists for sure since I have it downloaded.
Player (246)
Joined: 8/10/2008
Posts: 113
Kitsune wrote:
It might be a little hard to top the current runs for this game. I know there are already 100% and any% Tases for this already, I believe. I know the 100% TAS exists for sure since I have it downloaded.
I'm not sure I see your point. The current tas is indeed very well done, as is basically every other video on this site. However, my examples above show that there are faster ways to clear some of the levels. If you don't use the fastest route to begin with, it doesn't matter how much you're working on the optimization, it can still be done faster.
Editor, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Thank you ktwo for posting this information. I verified that at least level 1 can be improved with your means. (And that my robot was unable to discover the fact on its own, as expected, considering that it is guided by manually choosing its route.)
Skilled player (1315)
Joined: 9/7/2007
Posts: 1354
Location: U.S.
I did some tests and level 1 sadly cant be improved using that. Nice try though. ;) As said by Randil & Bisqwit, This game would be a pain in the ass to optimize. This can be said due to some weird physics as well as the inconsistent timer(Which starts at 9910 rather than 9990, btw). I hope an improvement comes soon as this is THE last Famtasia movie standing. EDIT: Wait! I did this method and it turns out that...Its actually 1 frame faster!
Editor, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Sonikkustar wrote:
I did some tests and level 1 sadly cant be improved using that. Nice try though. ;)
Really? Oh well. Because I did two lax attempts, one in the old manner and one in the suggested manner (both of course optimized such that not a frame is wasted not doing something), and the new one was two or three frames faster. But the timings in the game are indeed much unreliable.
Skilled player (1315)
Joined: 9/7/2007
Posts: 1354
Location: U.S.
Oh. Well heres a crappy tidbit I just did: . I dont think Im ready to handle a game this crazy yet. :O I'll leave it to the experts.
Skilled player (1900)
Joined: 4/20/2005
Posts: 2160
Location: Norrköping, Sweden
If anyone's interested, ktwo just published his PAL console speedrun on youtube, here.
Editor, Active player (296)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Sonikkustar wrote:
So, Is there still interest of obsoleting Solomon's Key? I remember TASing Room 1 and posting on the forums if anyone wants to start.
In my usual contrived manner, I welcome* anyone to submit a movie of this game, but not with Famtasia extermination being the sole motive. I expect to see an optimized movie, not one that just replaces a Famtasia movie. And I take no pleasure in knowing all too well that optimizing in this game is quite painful. In the game of Go, there's a term called whole-board tsumego which describes situations sometimes arising where a life-and-death problem, that usually occurs in some self-contained little area, such as some 6x6 area in some corner, suddenly involves the entire contents of the 19x19 board. As an optimization challenge, Solomon's Key is a whole-room-tsumego. Except that in some circumstances it's more like a whole-game-tsumego, when the last moves in the previous room affect your first moves in the next room. *) Not that I have a say to whether someone can submit something or not.
Post subject: Re: Solomon's Key
Joined: 4/26/2010
Posts: 46
Location: Albuquerque, NM
Bisqwit wrote:
I have long planned to improve it, but progress has been extremely slow.This is a difficult game to TAS, because the game's timings are extremely volatile. Really. It seems like the game does not obey any frame granularity whatsoever. The timer ticks at different rates, and frames can be lost without any apparent lag occurring. Due to changes in my life I am not going to expend personal labor in TASing this game.
If the timer is screwy, then why aim for in-game time? I would just go for real time (which is calculated by frames, if I'm not mistaken.)
Games to TAS: 1. Rampart (NES) 2. Pokemon Yellow (GB) 3. Aladdin (SNES) 4. Shadowrun (SNES) ----- <sonicsonic3> and please tell me...WHAT IS THE BACK LONG JUMP CODE!? [on SM64's BLJ]