Jump to content

Mord

Members
  • Content Count

    2,986
  • Joined

  • Last visited

  • Days Won

    2

Blog Entries posted by Mord

  1. Mord
    Ok optimization done for now. I think I could probably save a few more bytes in there yet but it's ok for now. Plenty of CPU cycles saved overall.
     
    One additional concern to look out for reared its ugly head with this version. The Status Bar routine is extremely tight for timing. To the point where if it's positioned so that one of it's branch operations crosses a page boundary....
     
    To fix that, I've got it ORGed. I'll have to remember to ORG the display code as well so those things don't crop up unexpectedly later on with the more complicated kernel.
     
     
    So now that this is out of the way again, I'm going to return to the display code yet again. At least this time I don't have to reconstruct the entire thing from the ground up to add additional functionality.
     
    In version 0.011 I plan to make the sprites truely positionable rather than have them use the left over settings of the Status Bar. There will be Ugly Black Bars introduced but there's nothing I can do about that until I learn how to write an efficient (and reliable!) Cycle 73/74 HMOVE routine. It's on the To Do list... just... conveniently pushed further ahead.
     
    I'm also going to look through the code and make sure that the sprites are vertically positioned properly (something I'm sure is not being done just now) and that I know exactly how many scanlines are being generated for the playfield. It should be 172ish. I hate 1-off errors.
     

     
    I'm also going to start looking into the sound registers at some point between version 0.13 and 0.20. *nod self* For that I'm going to examine Paul Slocum's music kit 2 which I downloaded ages ago. As to if I actually use that kit or use it as reference to writing something else is anyone's guess... but it's probably safe to assume I'll use it as-is.
  2. Mord
    The screen no longer rolls on hardware when using my Gemini. If anyone runs it on other 2600/7800 models and finds it still rolls the screen, leave a note? (If for no other reason than I know I'll have to come back to it.)
     
    Attached is a rom. While the code has been optimized somewhat it is functionally identical to the version 0.009 release except it works on hardware.
     
    The problem looks to have come from how I terminated the visible portion of the screen right before entering Overscan. I moved the code to activate VBLANKing from the Overscan to right before it since I needed an extra WSYNC in there. I may alter that setup again later when I go back to the display to make sure everything is displaying on all the right lines and exactly the right number of lines are being generated. For now however, it works.
     
    So the rest of version 0.10 will be continuing the optimization. I've found plenty of things already to cut down on time and rom. That being said there are still some big time wasters that can be redone better. Those are next on the hitlist.
     
    Some extra effects have shown up in the new code as well. Not only does it take less time, and seem to be more reliable, but depending on how I apply that code I can alter the effects of player/playfield collisions.
  3. Mord
    I cracked out the Krocodile cart and made a multicart of various games, including what I've done so far for Action RPG. I don't know what's up with it but for some reason the "Adventure" types that I had on the cart (Action RPG included) all rolled.
     
    The TV is fairly new, which could potentially be the cause. I was using a Coleco Gemini (Since it's the only atari 2600 type that I have that actually works well. ) and the three games that showed rolling were Advent, Avalon, and my own. Avalon didn't roll quite as bad. After starting the game it'd only roll every every second or two. The other homebrews seemed to work fine. hm. Perhaps I should look into the cause of this now - although if anyone else with a CC2 or Krocodile cart wants to try it on hardware and let me know how it goes...
     
    *edit*
     
    Specifically, with Advent it doesn't play at all. While for Avalon it rolls but except for certain conditions. For instance if a dragon bites, then the screen stops rolling until it starts chasing you again - and there's at least one room where it doesn't roll at all.
     
    *edit again*
     
    The emulator is too forgiving.
     
    Now to see why it's outputting a full 10 scanlines more than it should. (For Action RPG)
     
    I'm sure I did something stupid somewhere.
  4. Mord
    Still ironing out bugs but it's starting to take shape somewhat. Sorta.
     

     
    This is what happens when you forget to actually copy your new display code into the source.
     
    So I copy it over again and fix the remaining label bugs and the like and I get:
     

     
    I didn't alter my Playfield data for the double-scanline kernel. As a result, stretched vertically.
     
    When in and changed all "F" sized zones to "8" sized zones. to fix the stretch. Edited colors and made sure the BGCOLOR was being set. (that was omitted in init2.)
     
     
     
    Items are not showing however! I also had to add proper vertical delay decisions.
     
    However, after adding that, there's still no change. Since that's the part that rely on skipdraw I must be using it incorrectly. Time to re-examine exactly what it's doing..
     
    *update*
     
    For now, I decided to get the ball working. I knew that wasn't working simply because I had it turned off and it wasn't set to position itself yet. Now the problem with that is that there wasn't really any time to turn the ball on in the kernel itself without hacking something. (A potential option.) So I thought I'd just turn it on in the line above it!
     
    290s_d6a.pdf.zip
     
    Bad idea as you can see from the discolored portion of it sticking out over the top. (That portion is actually still in the StatusBar, or more accurately, the buffer between the two.)
     
    So why don't I turn on it's VDEL I said! Surely that'll turn it on in the next scanline right?!
     
    Apparently not...
     

     
    So... That means I don't really know what triggers the VDEL on the ball. I was -not- expecting it to trigger that late into the screen. Asking in the programming forum for clarification on what triggers it.
  5. Mord
    Looking at what I want the screen to be able to do, there is a problem with trying to update sprites. There's just no time left in the hblank. A sane person would just say "Ok, let's just pull out the playfield color update. All you need is that one extra command in there."
     
    But I don't wanna.
     
    So if you can't do the update in hblank. You'd have to do it during the visible screen. The obvious problems with this would be what if you try updating it when it's being displayed? Are you displaying the right line of graphics depending on if the sprite comes before or after the sta GRP0/GRP1? With P0 and P1 to consider, both which can be displayed anywhere on the screen, the potential headache increases.
     
    But then, these concerns -can- be determined prior to drawing the screen. So what do we need? A way to vary where on the screen we're going to do the update of the sprite so that we know it won't corrupt either P0 or P1. See what I mean about ugly code?
     
    Yeah all because I insist on trying to keep that silly sta COLUPF in there.
     
    I'll be mightily impressed with myself if I can pull this off.
     
    *update*
    I don't know what to think of this. In way of checking the timing, I tried cramming everything I could into the most complex scenario I could think of. (Playfield Color & Data Change, Player Turn On/Off, Sprite Graphic Update) and it -just- fit in a constant 76 cycles. But there's no real room to have multiple trigger points for the sprite drawing during the visible dislpay.
     
    While typing this however I thought up something else that might be useful to enable me to actually get hblank sprite updates. It comes with a tradeoff of having the player's look change slightly on scanlines where this condition occurs, but that's not really a Bad Thing. Getting too tired to attempt it right now tho, so going to leave a note in my code to pick up tomorrow.
  6. Mord
    It's proceeding although I find the thing I'm having the most trouble with right now is fitting the code that would organize when to start displaying the ball or player and keeping track of how many lines of playfield remaining into the kernel. I'm going to have to step back and try to organize my thoughts on paper and see where I can reclaim some cycles or find a more efficient way to do some things. I'll probably think of something.
  7. Mord
    Just a random thought I had while procrastinating on the display half-asleep. (I will work on the kernel again this weekend darnit!!)
     
    The halt line controlled by Maria on the 7800 extends out to the cartridge. So what if that line was tied to the highest address line on a 17-address-line rom? Since the HALT line effectively identifies which CPU is in control, it would automate the task of changing between a rom that Sally saw (filled with data tables, sound info, and algorithms/routines) and a rom that Maria saw that was filled completely with graphics data.
     
    It would potentially be a headache to organize pointers to the graphics data, but I'm sure it'd be doable.
     
    With my limited skillz at hardware, that should work just fine... although it would become a lot trickier if you tried to bankswitch the split roms as well. Bankswitching itself could be easily done, but Maria and Sally would always change their banks to look at the same thing. (Well, more accurately, when Sally changes her bank, Maria's will be changed as well.) This could be a Bad Thing if Sally needed to change banks often for some reason (Maria could be trying to display the screen on different scanlines and be looking at different banks on different lines!) so ideally Sally's active bank should be independantly selectable from Maria's active bank, unless bankswitching is kept to a minimum (to limit excessive data/graphics duplication) or used intelligently. At which point having them tied would be fine.
     
    Ok time to sleep. I'll work on the display when I wake up. I've been reading over skipdraw and vdel for the last couple of days and I think I know how I can use them properly. Now it's just matter of trying to write it up, then spend a week debugging the monstrosity I'll end up with.
     

  8. Mord
    Or so I'm letting myself believe. I'll find out later if that's true though.
     
    I've been thinking over the code needed for what I described in the last entry and I think I have a good idea what's needed. It just feels real ugly.
     
    I hate ugly code. This is why I'm thinking about it more than coding it. I want to make the code as simple as possible, yet as understandable as possible. (For me if nobody else. )
     
    As a result serious attempts at the code are being put off little by little as I think about it. I just know if I rush this it's going to blow up in my face spectacularly. Heck, initial stabs at the player/playfield only kernels blew up spectacularly at first due to stupid semantic errors. While I was hoping to have a version of it at least written by the weekend it looks like there's a chance I won't even start a serious stab at the code until then.
  9. Mord
    Now at Version 0.009 Beta 2. Beta 1 I'll release a bit later when I have more time (Going to bed!) this is just a screen shot of what the new display kernal is capable of. I'm surprised I got it working to this point from the initial stab at it this morning, there wasn't recognizable object displayed at first besides the status bar!
     
    There's still a problem with the bottom of the screen's boundary clipping. I can have the player touch and press against it, and it won't cause a problem, but for some reason the scanline right above it is causing problems and making the screen roll. I'll have a full debugging list tomorrow morning before I continue.
     
     
    *edit* Shortly after posting this, I managed to stop the rolling. However now occationally the bottom of the screen stops drawing one scanline too soon when the player is on the (I believe) second last line from teh bottom. The screen pretty much rushes up to meet you, but backs off as you go that one step further. It doesn't seem to always trigger, probably from the speed code allowing you to jump over it. I'm looking at how to fix it, but at the same time if I can't, it might not be such a big deal. In the game itself, odds are you'll jump right through to the next screen connected to it. I only notice it right now because I can repeatedly bash the square against the bottom without causing the screen to change.
     
    Adding a binary of the modified beta 2. screenshot still applies. it just doesn't roll anymore. (or shouldn't!)
  10. Mord
    Adding the playfield was a nightmare.
     
    I had thought up ways of trying to impliment it but not only could I not get
    them to work at first - I also saw the glaring problem of excessive ram usage that
    really wasn't necessary. As a result, versions 0.002 and 0.003 are dead. I could
    have just named this as version 0.002 but given this version does reuse some of the
    code I wrote in both versions 0.002 and 0.003...
     
    The playfield has a similar, but greater, resolution as Atari's Adventure. Adventure
    divides the screen up into 7 zones. the middle 5 being twice as big as the top and bottom
    zones. Using some simple math on 192 scanlines for a visible picture, you see that
    it uses a 16/32/32/32/32/32/16 zone approach. This is ok, but since I'm planning on
    bankswitching this rom later on, I can afford to use up the extra rom to have equal
    sized zones. In this version, I drew the yellow castle as the playfield. It has nothing
    to do with the game idea I'm heading towards, but does show some of the possibilities.
     
    Additionally, I'm surprised I've still managed to keep in the background changing
    code so far. There was almost not enough time to do everything I wanted however so
    when I go ahead to adding a few more things it'll probably have to go, or get limited
    somehow.
     
    Two problems I had with this code - not updating things fast enough in instances
    where I had to update the player AND the playfield at the same time. I was just barely
    late in updating the Playfield registers. As a result it gave me an odd looking error
    in the form of "playfield bleeding" onto the next line. Because I forgot that P1 is
    arranged differently than P0 and P2, it took me a while to figure out exactly what
    was going on. It was only affecting the left side however so I knew it had to be
    a timing issue. ^^;; To fix it, I moved some things with the background color around,
    pushing the update of the variable to after the playfield was updated (5 cycles freed)
    then moved the loading of the bgcolor variable just before the line's WSYNC instead
    of right after it. (3 cycles)
     
    There was also a case where the screen would roll whenever the player crossed over
    a zone boundary. (the top line of the player only) The problem was with how I had
    added the code to set PlayerSize into Y to determine how long to keep displaying the
    player before we turned it (the missiles) off again.
     

    dec LineCounter ldy PlayerSize bne .SomeLabelI'mForgettingTheNameOf ^^;;
     
    Basically that's what I did. I shoved the ldy right between a DEC that was trying
    to count down the lines remaining in the current zone, and the bne that was waiting to
    test for the Zero Flag that the dec would at one point set and signal a new zone.
     
    Because PlayerSize is always non-zero....
     
    Anyway, moving it fixed the problem.
     
    My next goal is to play with the collision latches and to start in on the
    collision detection between the player (missiles) and the playfield. This should
    be a simple update compared to adding the playfield. X_X
     
    Oh, and while I'm now calling it "Action RPG", don't anyone get their hopes up for a finished
    rom any time soon. For attachments, I've included a screenshot of what version 0.004 looks
    like, as well as a zip containing screenshot, notes, rom, and source for version 0.001.
  11. Mord
    I had the goal for the revive mode being done for this Sunday, but since I added Revive, added GameOver, added 2nd player and implemented the console switches... I might as well do an update now
     

     
    Left Difficulty will eventually turn on/off the background music if I get around to adding any. It sets it's flag properly but there's obviously no sound in the game yet. Sound effects will be unaffected by this setting.
     
    Right Difficulty only matters in a 2-player game. It allows a player that's lost all it's lives to steal a life from the other player if set to Expert. To do so, they have to press both fire buttons during the active or revive modes. It won't work between waves since that'll complicate things a bit, and obviously it won't work during gameover since neither player should have any lives left if you get to that state.
     
    Reset will warm boot the game using "reboot".
     
    Select will move the game to Title Screen instead. Since both the intro section ("Loading...") and Title screen are just place holders for now these don't really have much of a difference. When I get to highscore saving/loading that would be done during the intro section.
     
    The pause function is just whatever's built in to 7800basic for now.
     
    I'll try to work on a temp but less placeholdery Title screen next so that you can actually select a new game properly, change from a 1 player game to a 2 player game, etc. It won't be fancy.
  12. Mord
    Let's see if we can do a weekly release on here until I get it to the point of it being fully playable, at which point I'll officially switch over to the 7800 forum.
     

     
    This doesn't look too different from last week, but it's now able to load waves from a sdata structure. Easy to add new waves by setting things like time to the wave, maximum enemies at one time, what types of enemies, what AI the enemies can have, the colors of the enemies (And status bar as a result) etc. Not everything is actually functional from the wave data, but it's loaded anyway. For instance there's still just the spinning gear enemies, and there's only 1 AI function currently done. (I've got plans for more already written down, and I'm pondering how to do boss type characters.)
     
    Right now the game jumps between master loops based on it's game state. When it finishes a frame it basically checks to see what the current state is suppose to be, and if it's not the current loop, it throws it back to a state_selector at the start of the program. Seems to work well so far.
     
    In between waves, as enemies are cleared from the screen, there are no collisions being calculated. This is intentional.
     
    Over the next week I plan on getting the game to actually let the player die when hit by an enemy. When a player dies, it'll cause the enemies to clear the screen like in between waves, but they'll still be lethal in case there's a second player also playing. This is to help ensure the players won't be revived just as another gear slams into them. Something I always hated in Asteroids.
  13. Mord
    The name of this game will likely change before it's finished. It just describes the goal of the game for the most part.
     
    Right now it's showing the maximum number of free-roaming enemies the engine can do before causing slowdown. The plotvalues and boxcollisions are a big cause of this but there's a lot of 7800basic commands I can re-write into assembly to get that number up again. In case it isn't obvious from playing it a bit, a successful graze flashes the background blue. A hit, which would normally cause a loss of a life, flashes it red.
     
    I don't have the second player in yet. When it's added, it will have a second color to flash the background on a graze. When both players graze at the same time, a third color will be used. I'm pondering doubling the size of the player to make it a bit easier to graze (plus give more detail.) but we'll see. That will be done before a second player is added at any rate.
     

     
    The game is running in 320B. The green backdrop on the status bar is using the same colors as the enemies so it'll change color as the enemies change. Most likely enemies will change with the Wave.
     
    What you see so far is a weekend of coding... well, not quite a weekend since I was visiting family most of the weekend.
  14. Mord
    So a week overdue, and I only really made progress on the horizontal scrolling. I didn't add in solid wall type things yet as I was trying to fix up bugs and the like. You'd be surprised at some of the weird things that would happen...
     
    Going to clean the code up later today, but first, must sleep....
     
    *edit*
     
    Now that sleep is over, I've tried to clean up the source a bit and here it is. I'm going to post it in the 7800 dev forum in a minute as well.
     
    But first, must eat! ... as well as upgrade my 7800Basic to the latest version to make sure it still compiles on that.
  15. Mord
    Admittedly, I tend to post random updates on my Livejournal account far more often than on here. Which is questionable in preferences given probably more people browse this blog, even accidentally!
     
    Anyway, it seems I've been swallowed up by 7800Basic. Started looking through it's sample programs and reading over RandomTerrain's online guide for it. Naturally my first instinct is to enable scrolling to it even though it doesn't support it natively.
     
    Horizontal scrolling took a couple tries, but I got something to work. That attempt was pretty limited in itself however so I'm redoing it (About half done) to be more useful - fixed point movement and full range of movement over the map. The first attempt had, and depended on, a constant speed and the player being centered on the screen. By rights that would have been sufficient for what I wanted to do, but I figured I should make the procedure a bit more reusable.
     
    Vertical scrolling didn't work at all. I wasn't really expecting it to but at least I confirmed it for myself. While it's not part of my goals for this week, I do have an idea on how to enable a coarse vertical screen scrolling that should be sufficient for this particular game idea I'm working on.
     
    Basically my goal for this week, which is questionable right now since I've been half sick with a bad cough, is to get a sample program that'll do the following 3 things:
     
    1. Have a horizontally scrolling map.
    2. Have the map detect passable and non-passable blocks
    3. Start dabbling with making tiles that can potentially be used in the final game. (Probably the hardest of the 3 for me, my art has gotten pretty crappy.)
     
    If I forget to post my results on Sunday here then there's a good chance there will be an update on LiveJournal.
     
    I've been trying to set myself goals to stay on track with learning and developing my skills with 7800Basic, so let's hope I can keep it up. Admittedly I may be setting too slow a pace with it for now.
     
    In unrelated news, here's a crossfade of Ady S's new SoNiKa/vocaloid album on bandcamp.
     
     
     
     
    Yeah, I've gotten onto some kinda Vocaloid kick for the last couple of years. It's the main thing I tend to listen to, apart from the occasional heavy metal.
  16. Mord
    So like, I've been listening to a lot of vocaloid and utauloid music lately.
     
    And so, since I've been thinking about trying to get my own projects back in order and to try to use this blog regularly again, I figured this is as good an excuse as any to learn how the media tag works. Here, listen to a song by CircusP.
     
    http://www.youtube.com/watch?v=6cWVYwDv1IE
  17. Mord
    You know I had almost forgotten about having a blog on Atari Age. It's not from the lack of visiting the site, as shown by my string of posts in the 7800 and Modern Gaming forums.
     
    My Livejournal isn't doing much better for activity however, if that's worth anything.
     
    Don't really have much to say this time either as I haven't been very active with homebrew in the last year or three, so instead I'll just post a screenshot from my minecraft single player. It's basically a dark room tower trap - using pistons on the platforms to push mobs over since putting signs on the sides of the blocks no longer work with the new mob AI.
     
    The difference here is that this dark room trap is an XP grinder. It's designed to deliver all the mobs down the central column alive but reduced down to 1-2 hp. There's a couple places where it was impossible to prevent damage and there's the potential for glitch damage from the pistons but otherwise it's a success in my book. I typically just use a stone swords to kill the creepers/skeletons/zombies that fall down. Spiders won't spawn in this due to the block placement, and the ceilings are too low for endermen. Even if endermen were spawnable you'd never get them down the chute due to the water that would make them teleport outside the trap.
     
    So from this trap I get xp, arrows, bones, rotten flesh, bows, iron ingots, iron shovels, iron helms, iron swords, gunpowder... and records!
     
    Having a lot of skeletons and creepers in that small 2x2 hole (actually 2x1 with the piston magic) makes the skeletons potentially shoot creepers if they see you when you get too close. It wasn't really intended, but I'll take it since I haven't recreated a record factory in my single player the way I have one made on the private server I play.
     

     
    Looks like crap, but functional.
  18. Mord
    Seems most of my gaming went off the table once I managed to fix up Minecraft so it would technically work on my comp. (The black screen bug affects it, so I ended up having to delete the .minecraft folder and redownload the modified client launcher.)
     
    Still, even with that out of the way I have to keep fog up high to have any chance at an acceptable frame rate. And even then, if I'm near a lot of mobs or if the weather stuff is happening, or BGM is playing, or if there's lots of running water around, the frame rate sinks into the floor.
     
    But it's still fun to play!
     
    Since I'm ignoring this blog otherwise at present, I think I'll just do random minecraft updates here if I have nothing else to do.
     
    So to start off, I'll just do a quick little rundown on the Main Base. Main Base is the starting point of my journey although I've traveled out and built several other bases, some far more impressive looking. Main Base is the central structure, roughly, in what I call the Alpha Region. To the north, east, and west there are other bases not too far out. And most of them have pretty extensive cave systems under them. To the south I went traveling... very far. Like 2000 blocks south, on foot. When I finally reached a huge plains/tundra, I decided to set up shop and built a huge castle wall around a section of it. Thus Castle Town was formed. A railway using powered rails connects Castle Town to the Alpha Region, with Skeleton Station somewhere in the middle. I'll talk about each of those locations next time.
     
    Anyway, Main Base!
     

     
    I don't really build things to look pretty - I prefer them to be functional first. This was the first base I started which originally was just a hole in a hill. It's changed a tad since it's original days. It's also changed a lot periodically as I make new mods to it. These are pics from how it looks this morning.
     

     
    The obsidian siding was the latest addition. I was mining up a lake of lava down near my latest Dark Room trap so decided to use a portion of it here.
     

     
    This back portion was added for the mineshaft. Next to it are a ladder for getting back up, and a safe fall for falling quickly to bedrock (safely!).
     
    I originally had a step-down mine before adding this on.
     
    I like glass. Can you tell?
  19. Mord
    Granted, I still post on my Livejournal a bit more regularly.
     
    Been starting to buy games for the Wii/360/PS3 generation even though I still don't own either of the systems. I know I'm going to end up getting them eventually so what's a prepurchase here and there amirite?
     
    To this end, almost all of the games I've been buying are in the > $20 range. I think all of the Wii games were at the 10 dollar price point. The only game above the 20 dollar mark was Deathsmiles since I bought the limited edition. I've always said it, I'm a sucker for limited editions.
     
    Well, limited editions that have physical bonuses. I saw that one of the new Game of the Year editions coming out will just be having a voucher for the DLC content rather than actually having it pre-packaged or an extra DVD containing it. So... yeah, not all that interested in it.
     
    Last two games bought were Assassin's Creed and Bioshock on the PS3. Wal-mart's anniversary sale pushed the price of the games down to the 15 dollar mark.
     
    I won't be getting the systems themselves until next year sometime. Due to needing a new computer for minecraft, I may end up getting a new PC before getting the consoles.
     
    Not tossing this PC away when I get it though, as it runs everything else perfectly still.
  20. Mord
    I "finished" Evil Zone as planned over the weekend by unlocking everything, which basically makes you complete all the story modes, play 1P and 2P modes a lot, etc. I ended up losing a good chunk of the unlocking the first time on Saturday however when the game froze on me when I was over half way through them. I had the game set to auto-save but apparently that only kicks in when you complete story mode or 1P mode. When you're fighting it out in 2P mode to get all the character's selection comments (8 each, gotta play and win fights with them close to 60-80 times or so per character!) I made sure I saved manually the second time doing them.
     
    And with that out of the way, Ar Tonelico has started up. I've decided on two other games to go through prior to moving back to Soul Reaver. Castlevania III: Dracula's Curse (should only take a couple hours when I sit down to actually play it) and Castlevania: Lament of Innocence on the PS2. I'm not the biggest fan of 3d castlevanias really, but both Lament of Innocence and Curse of Darkness were pretty good all the same if you just take them as the kinds of game they are rather than lamenting they're not 2d. (For the record, I do prefer the 2d castlevanias.)
     
    I'll likely do Soul Reaver and Soul Reaver 2 back to back which will probably take me up to the start of summer with the way I play games. This weekend I won't be playing any games however. Instead I'll be devoting as much time as possible to Maze Realms. I'll likely be playing Ar Tonelico an hour here and an hour there during the weekdays.
  21. Mord
    I recently finished Blood Omen: Legacy of Kain. I plan on going through all 5 games throughout 2010. We'll see how that goes. However before I dive into Soul Reaver, I'm going to take a break and re-complete a couple of games for my Games Complete list. I already "completed" these, but it was before I started my list. And I gave myself the requirement of having to re-complete such games if I want to add them.
     
    Those games are:
     
    Evil Zone (PS1) - a 3d fighter. Simplistic with the moves etc, but fun to play. It's one of those games I'd like to see redone and re-released for the current gen simply because PS1 3d fighters weren't exactly stellar in quality. It was great for back in the day however.
     
    Ar Tonelico - a rpg/dating sim type game for the most part. I solved this one prior to the list started as well, so only Ar Tonelico II is on the list so far. Figured I'd get this one added to it prior to Ar Tonelico III being released in North America. (Hoping it will be that is. It gets released in japan later this month.)
     
    I'll probably have Evil Zone completely unlocked Saturday morning at which point I'll start in on Ar Tonelico. I'm also going to be putting time in on Maze Realms. I'll be implementing the room objects properly and starting in on the Inactive Lists. Beyond that I have nothing planned beyond a possible visit with family (Weather pending - I heard we're suppose to get another storm around here soon.) and perhaps a trip to go look into potentially purchasing a new used computer.
     
    Not getting rid of the current one however! I'm just going to use the extra comp to go playing around with Linux again. I'll probably have more patience with learning how to install the comp if I still have a box that works and connects to the internetz while I do so. (Seriously, that's something I needed last time as I kept running into problems with the dsl support - problems that were answered in their ONLINE WIKI.
     

  22. Mord
    Ok, added a couple monsters that I'll be using to test the various aspects of the Inactive List. I'll likely tweak it but for now it's ok. The Data byte for the slots is patched in and it will save to the Inactive list when that's implemented next version.
     
    Color of the object is usually hardwired into the object's data. That will probably work fine for most cases but if the color is read in as 0, it'll load whatever is in the Data byte instead. The application of such is used in the Hearts and the "gear" monster. Each monster has it's own AI. One will never leave the screen it's in. The other will bounce off of dead exits, but otherwise pass through the edge of the screen the same way the player can. It's movement AI is pretty simple but it's just for testing purposes.
     
    Also, the Heart Placer picks a random Data value which ends up giving it's hue (since it flashes the lower bits are meaningless!) however it then does a bit of modification on that Data byte and stores the result in it's HP byte - which is what determines how much HP/Power/Magic/Whateverit'scalledeventually you receive for picking it up.
  23. Mord
    I won't be getting the inactive list working with this release. To really be able to test that setup I'm going to need something extra. Monsters! (After all, monsters don't drop to the list!)
     
    So in preparation for the inactive list setup, I'm going to do a couple very simple non-animated test monsters. One of them will do nothing but bounce around a room, changing direction whenever it hits the edge of the game field. The other will run in a straight line unless it hits a dead exit. Hitting a dead exit will make it turn around.
     
    One monster, when destroyed, will generate a heart. I may alter it so it has a % chance of generating a heart.
     
    The other will generate the Black Key, which by that time will be set up a regional object.
    Some of the ideas I thought up tonight at work may require objects to have one more byte of data for misc info. It's use would be entirely dependent on the mob's AI. It may be necessary to add that variable to the inactive list as well. I believe there's more than enough ram on the cartridge to handle this.
     
    My weekend starts early so hopefully I'll have this sorted out and the next official version done before Sunday! (As it's way too cold to step outside for me without a real good reason!)
  24. Mord
    So after most of a week, I finally managed to replace the old room loader with the less compact but easier to read new room loader. Essentially a change in room format. It doesn't save as much space as the older one but you end up saving space on the code portion to load it. Which is good because the Inactive Object management is going to suck up some rom space when I get to patching it in. (Most of it is written, but not untested.)
     
    I also changed the "undefined" object flag for room objects to trigger on the Input byte instead of the Y coordinate. It was fine for versions up to now where either the object existed or it didn't. Things in the upcoming Inactive Object list however will have a Y value saved. They won't have anything in the Input byte however since that's not saved when they're pushed to Inactive.
     
    Nothing interesting has changed in the rom with this switch so I'm not going to release yet another binary for today. The only visual difference from a player's point of view is that I also fixed a glitch introduced when I changed the status bar. I made the status bar smaller, thus making the gamefield size larger. However I didn't change the values for the Maximum Y coordinate of the player before switching screens which meant if you got close to the bottom of the screen, it'd change screens before you actually touched the bottom. Nothing special here. Just had to fix the associated value in the constants file.
     
    What I WILL show off today, is one of the several freaky "worlds" I created by having bugs in the first few attempts at the new room loader. Basically info is being read wrong for the playfield but it can still be "explored". There are several dead ends etc however so learn where you can and can't go! There was one other "Weird World" that I saw but didn't think to keep a rom of it. It was actually larger than this one too. Ah well.
  25. Mord
    I was starting to procrastinate again due to the anticipated complexity of swapping out the old Action RPG object slot variables with the new more generalized object slot variables. Finally forced myself to sit down today, despite how that's been hurting my lower back mysteriously this last week, and ironed it out.
     
    Funny enough, it went by a lot faster than I had feared it would. In the system now there's only 7 active objects possible instead of the previous 8. Before I consider this version finished however, I'm going to be adding in the Inactive Object list and hopefully get it working.
     
    Objects are classified as Monsters and Items. Items left behind on a screen when the player leaves it will fall from the active objects into the inactive objects list. No AI is done for it while it is there and for most objects the longer it stays off the screen, the greater chance it will be deleted permanently. Some objects however have a degree of permanency. They won't be removed from the objects list unless you leave a realm (Regional Objects) or never at all! (Global Objects)
     
    Monsters don't fall to this inactive list. They'll remain in the active list all the time (global monster), until you leave a realm or it dies (Regional monster) or if it stays off the screen too long or too many monsters are expected to be loaded from the new room. This means you won't be 100% free from a "local monster" (Wandering Monsters really) just because you manage to flee the room.
     
    Anyway here's a rom of the new object slots in action. I've also tweaked the Heart Placing routine to try to make use of all empty object slots available to it. In this case a maximum of 6 since one of the slots will always hold the black key for now. (That'll change when the key can drop to the inactive list later!)
     
    Later I'll be converting the Heart Placer to be a sample Room AI routine which will help litter the inactive list with hearts to test those things out.
×
×
  • Create New...