Jump to content

Search the Community

Showing results for tags '7800basic'.

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • Atari Systems
    • Atari 2600
    • Atari 5200
    • Atari 7800
    • Atari Lynx
    • Atari Jaguar
    • Dedicated Systems
    • Atari 8-Bit Computers
    • Atari ST/TT/Falcon Computers
  • Gaming General
    • Classic Gaming General
    • Classic Computing
    • Modern Gaming
    • Prototypes
    • Arcade and Pinball
    • Emulation
    • Hardware
    • Gaming Publications and Websites
    • International
  • Marketplace
  • Community
  • Game Programming
  • Site
  • Classic Gaming News
  • The Club of Clubs's Discussion
  • I Hate Sauron's Topics
  • 1088 XEL/XLD Owners and Builders's Topics
  • Atari BBS Gurus's Community Chat
  • Atari BBS Gurus's BBS Callers
  • Atari BBS Gurus's BBS SysOps
  • Atari BBS Gurus's Resources
  • Atari Lynx Programmer Club's CC65
  • Atari Lynx Programmer Club's ASM
  • Atari Lynx Programmer Club's Lynx Programming
  • Atari Lynx Programmer Club's Music/Sound
  • Atari Lynx Programmer Club's Graphics
  • The Official AtariAge Shitpost Club's Shitty meme repository
  • The Official AtariAge Shitpost Club's Read this before you enter too deep
  • Tesla's Vehicles
  • Tesla's Solar
  • Tesla's PowerWall
  • Tesla's General
  • Harmony/Melody's CDFJ
  • Harmony/Melody's DPC+
  • Harmony/Melody's BUS
  • Harmony/Melody's General
  • ZeroPage Homebrew's Discussion
  • Furry Club's Chat/RP
  • PSPMinis.com's General PSP Minis Discussion and Questions
  • PSPMinis.com's Reviews
  • Atari Lynx 30th Birthday's 30th Birthday Programming Competition Games
  • 3D Printing Club's Chat
  • Drivers' Club's Members' Vehicles
  • Drivers' Club's Drives & Events
  • Drivers' Club's Wrenching
  • Drivers' Club's Found in the Wild
  • Drivers' Club's General Discussion
  • Dirtarians's General Discussion
  • Dirtarians's Members' Rigs
  • Dirtarians's Trail Runs & Reports
  • Dirtarians's Wrenching


There are no results to display.

There are no results to display.


  • AtariAge Calendar
  • The Club of Clubs's Events
  • Atari BBS Gurus's Calendar
  • ZeroPage Homebrew's Schedule

Find results in...

Find results that contain...

Date Created

  • Start


Last Updated

  • Start


Filter by number of...


  • Start










Custom Status



Currently Playing

Playing Next

Found 22 results

  1. This is my first attempt at an Atari 7800 game and is programmed in 7800basic using Atari Dev Studio. Arkanoid The era and time of this story is unknown. After the mothership “Arkanoid” was destroyed, a spacecraft “Vaus” scrambled away from it. But only to be trapped in space warped by someone…… Multi-colored backgrounds WIP Videos Multi-ball How to play You control a paddle (the spacecraft Vaus) at the bottom of the screen which you use to deflect an energy ball towards rows of “Bricks” at the top the screen, thus destroying them and eventually clearing the screen to progress to the next level. Certain bricks when destroyed release power-up capsules which grant additional powers such as capturing the energy ball, equipping your Vaus with a laser cannon or opening a warp gate allowing you to escape to the next level. The final 33rd stage is a confrontation between the Vaus and the entity “Doh”. To destroy the Doh and return from distorted space, hit the Doh repeatedly with your energy ball whilst avoiding the deadly projectiles he spits from his mouth. Controls Use paddles (recommended), joypad or joystick to move the Vaus left and right to direct the energy ball back towards the bricks. The position the ball hits the Vaus will determine the direction of the energy ball. Note: When playing on real hardware, insert a joypad/joystick into the left port and the paddles (if used) into the right port. The menu system on the title requires the joystick to make changes but once the paddle is selected you can use those buttons to start the game. [Testing] To change levels press the Select key (or E key in A7800). State of the game This is an early work in progress release. The following has been completed: Title/High Score/Credits, Intro (gfx in progress), Outro (gfx in progress) and Game Over screens Difficulty - novice (3 lives, 20,000, 60,000, 60,000+ for additional lives) or arcade (2 lives, 60,000, 100,000, 60,000+ for additional lives) Music (Pokey) and sound effects (Pokey and TIA) Vaus - controls: paddle (press button to release ball and fire vaus laser), joypad (press button 2 to release ball and fire vaus laser, button 2 for half speed), joystick (press button to release ball, fire vaus laser and half speed) Variable speed ball movement and collisions All 33 levels with multi-colored backgrounds and final DOH level Capsules layout, selection rules, dropping and animations. Activity on collection: Enlarge (E) - makes the vaus bigger Laser (L) - destroy bricks with your laser weapon Catch (C) - catch and hold the ball, press button to release (auto-releases after a period of time) Break (B) - open a warp gate and leave the level - 10,000 bonus points Slow (S) - slow the speed of the ball Disruption (D) - split the ball into 3 Extra Life (P) Most sprites and objects have been rendered Brick animations (specific bricks on collision with the ball) Vaus animations (transitions between normal, laser and large or any combination) In progress/to be started: Review variable ball speed (in progress) High Score entry (in progress) Flying enemies Pokey Support Arkanoid currently requires Pokey support to hear the music (you will not hear anything without it) but most sound effects (using TIA) will be heard regardless. A separate release with TIA music will be made available in the future. Note: if you are using A7800 to play the game you will need to activate the XM Expansion Module cart to hear the POKEY sound for the time being: command line: a7800 a7800 -cart1 xm -cart2 arkanoid.bas.a78 Help Thanks to the following people who though their contributions, wisdom and guidance are helping to create this game: Mike Saarna (code) Bob DeCrescenzo (code) Bobby Clark (music and sound) Marco Sabbetta (graphics) Robert Tuccitto, Steve Ramirez, Kevin Mosley (testing) John Calcano (box, cart and poster design) Latest release 20190907 - 20190907.arkanoid.zip Previous releases 20190829 - 20190829.arkanoid.zip 20190716 - 20190716.arkanoid.zip 20190713 - 20190713.arkanoid.zip 20190711 - 20190711.arkanoid.zip 20190706 - 20190706.arkanoid.zip 20190704 - 20190704.arkanoid.1.zip 20190704 - 20190704.arkanoid.zip 20190629 - 20190629.arkanoid.zip
  2. Welcome to Atari Dev Studio for designing homebrew games for the Atari 8-bit systems (Atari 2600 and 7800). Atari Dev Studio is a one-stop-shop for any programmer and includes a number of built-in features to allow you to design, develop and test games for your favourite system. Get started with batari Basic (2600) or 7800basic (7800) using easy to learn BASIC-like languages or go hard-core with assembly using dasm. During development test your creation using the Stella (2600) or A7800 (7800) emulators right from within Atari Dev Studio. Requirements Atari Dev Studio is an extension for Microsoft's cross-platform IDE Visual Studio Code and will run on the Windows, Linux and macOS platforms. The latest releases of batari Basic, 7800basic, dasm, Stella and A7800 are included so you can begin coding straight after installing the extension. Features Atari Dev Studio includes the following features: Develop your game on Windows, Linux or macOS Compile source code for your Atari 2600 or 7800 using batari Basic, 7800basic or dasm Optionally launch and test your game using the Stella (2600) or A7800 (7800) emulators Built-in Sprite Editor (also suitable for tiles and other objects) [preview] Manage your project using the File Explorer or version-control your source code directly with GitHub (and others) using the built-in features of the Visual Studio Code platform. Provide references to your own specific releases of each language or emulator rather than use the includes ones via the Settings. Additional features are planned for the future. At this time the focus is on the core functionality and ensuring full cross-platform support. Installing Atari Dev Studio What is Visual Studio Code? Visual Studio Code (VS Code) is a streamlined code editor with support for development operations like debugging, task running, and version control. It aims to provide just the tools a developer needs for a quick code-build-debug cycle and leaves more complex workflows to fuller featured IDEs, such as Visual Studio. Which OSs are supported? VS Code is a cross-platform application which runs on Windows, Linux and macOS. See requirements for the supported versions. Note: Linux users on 64-bit systems will be required to install the 32-bit compatibility libraries on your system to ensure everything will run as expected. Installing the extension Once you have installed VS Code (available here), open the VS Code program and complete the following: From the Activity Bar, click the Extensions button to display the Extensions window. From the Extensions window, type Atari into the Search box and press Enter to display the list of available extensions. From the list of available extensions, locate Atari Dev Studio and click the green Install button. Updating the extension Updates will be regularly made available and will be announced via the AtariAge forum (you will also be notified in VS Code). To update to the latest release: From the Activity Bar, click the Extensions button to display the Extensions window. From the Extensions window, search the Enabled list, locate Atari Dev Studio and click the Update button. Note: It is recommended you restart VS Code after installing an update. Using Atari Dev Studio Compiling your program To display the available extension features press CTRL+SHIFT+P to display the Command Palette. From the command palette prompt type adv to short-list the available options: ads: Open the Welcome page ads: Compile source code ads: Compile source code and run in emulator Language Selection When you load a file the initial language will be chosen based on the file extension. For example: batari Basic (.bas, .bb) [Default for .bas files] 7800basic (.bas, .78b) dasm (.dasm, .asm, .a, .h) To change a language you can click on the Status Bar Language selector and a list will be shown allowing you to choose another language. Optionally in the Settings you will be able to either let the extension choose based on the active language or set a specific language to always compile against. Status Bar Apart from using the Command Palette to select compilation, there are a number of short-cut buttons on the Status Bar allowing you to: Display the extension version (might be useful at times) Open the Welcome page Open the Sprite Editor Compile source code Compile source code and run Note: The short-cut buttons on the Status Bar can be turned off via the Settings. Sprite Editor [preview] Atari Dev Studio includes a simple and easy to use Sprite Editor allowing you to create sprites, tiles and other objects for use in your projects. It has the following features: New Project wizard allowing you to select the size, region (palette) and total colors of your sprites Load and Save projects allowing you to save and come back to on-going work Editing features such and palette selector, zoom, pen, eraser, fill and move modes Ability to manage your sprites in a sortable list with options to copy, paste, duplicate, resize and delete Export sprites to .png - either selected or all (compatible with 7800basic 3+1 and 12+1 image requirements) Load and save palettes More features are planned... The Sprite Editor is based on Spritemate by Ingo Hinterding (GitHub) and was suggested by RandomTerrain for inclusion in Atari Dev Studio. I have customised the source to provide the required features necessary for editing sprites, tiles and objects for the Atari platforms. This work is currently in preview and will be on-going until all required features have been added. Note: The Sprite Editor is currently configured for working with 7800basic images. Settings There are a number of compiler, emulator and editor configuration options available in Atari Dev Studio which can be changed via the Settings (Preferences -> Settings -> Extensions -> Atari Dev Studio). This is a preview This software is currently in preview and contains the following missing or untested features: [macOS] Stella emulator is missing. You will be required to provide your own path to Stella for the time-being (via the Settings). [macOS] 7800basic and the A7800 emulator is untested [Linux] Potential for missing packages (On Ubuntu 18.04.02 x64 I have been required to install a number) I don't currently have direct access to a macOS machine to finalise feature integration but will do so in the near future. The previous incarnation of this extension (containing batari Basic and dasm) has been tested by users on macOS and as the process is very similar to Linux I do expect the extension to function correctly. Debugging the extension During the development phase of the extension I've added some developer output to assist with any issues that may appear. To view this output, open the VS Code Developer Tools by selecting Help -> Toggle Developer Tools from the menu, and in the debugger window ensure the Console tab is activated. This information may help identify the area where the extension is failing to process as expected. Known Issues There are currently no known feature issues. If you find a problem please raise an issue on GitHub or contact mksmith at the AtariAge community. Acknowledgements This extension is only available due to the great people of the AtariAge community who have created these tools to help developers build their vision. Special thanks to the following for either allowing the inclusion of their tools or for their ongoing help and encouragement: 7800basic - Mike Saarna (RevEng) batari Basic - Fred 'batari' Quimby dasm - the many contibutors Stella emulator - Stephen Anthony (stephena) A7800 emulator - Mike Saarna (RevEng) and Trebor Muddyfunster, TwentySixHundred, Lillapojkenpåön and vbauer for their additional testing and bug-reporting of the previous incarnation of this extension for batari Basic. Mats Engstrom (SmallRoomLabs) for his valued testing, suggestions and enhancements to Atari Dev Studio The AtariAge community including Albert, RevEng, Random Terrain, Gemintronic, Karl G and ZeroPage Homebrew Languages Atari Dev Studio includes the following programming languages: batari Basic (release BB.1.1d.reveng41) batari Basic created by Fred 'batari' Quimby is a BASIC-like language used in the creation of Atari 2600 games. batari Basic is compiled to generate a binary file that can by used on actual Atari 2600 VCS hardware via cartridge (such as a Harmony or UNO cart) or by using an Atari 2600 VCS emulator such as Stella. batari Basic is an external project and can be downloaded separately from here. Further information is about this release is available here at AtariAge. 7800basic (release 0.6 Jul 13 2019 22:37:29) 7800basic is a BASIC-like language for creating Atari 7800 games. It is a compiled language that runs on a computer, and it creates a binary file that can be run with an Atari 7800 emulator, or the binary file may be used to make a cartridge that will operate on a real Atari 7800. 7800basic is derived from batari basic, a BASIC-like language for creating Atari 2600 games. Special thanks to the bB creator, Fred Quimby, and all of the the bB contributors! 7800basic is included as part of this extension with many thanks to Mike Saarna (RevEng). 7800basic is an external project and can be downloaded separately here. Further information about this release is available here at AtariAge. dasm (release 2.20.11 - 20171206) dasm is a versatile macro assembler with support for several 8-bit microprocessors including MOS 6502 & 6507, Motorola 6803, 68705 & 68HC11, Hitachi HD6303 (extended Motorola 6801), and Fairchild F8. Matthew Dillon started dasm in 1987-1988. Olaf 'Rhialto' Seibert extended dasm in 1995. Andrew Davie maintained dasm in 2003-2008. During all this time, several other versions of dasm sprung up all over the net as well, making the exact chronology quite complicated. Peter Froehlich started maintaining dasm in 2008, hoping (against hope) to unify the various strands of development a little, and to maybe give dasm another 20 years of productive life. 🙂 Emulation Atari Dev Studio includes the following emulators for testing purposes: Stella (release 6.0.1 - 20190606) Stella is a multi-platform Atari 2600 VCS emulator released under the GNU General Public License (GPL). Stella was originally developed for Linux by Bradford W. Mott, and is currently maintained by Stephen Anthony. Since its original release several people have joined the development team to port Stella to other operating systems such as AcornOS, AmigaOS, DOS, FreeBSD, IRIX, Linux, OS/2, MacOS, Unix, and Windows. The development team is working hard to perfect the emulator and we hope you enjoy our effort. Stella is included as part of this extension with many thanks to Stephen Anthony. Stella is an external project and can be downloaded separately here. If you enjoy using Stella place consider donating to ensure it's continued development. A7800 (release 188-03) A7800 is a fork of the MAME Atari 7800 driver, with several enhancements added: Support for emulation of Proline Joysticks, VCS Joysticks, Lightguns, Paddles, Driving Controllers, Keypads, Trak-Balls, Amiga Mice, and ST Mice. Maria DMA timing has been improved further, with the addition of accurate DMA hole penalties. Improved saturated/normalized colors with palette selection. Streamlined UI including menu options to have an Atari 7800 system focus. A bug in the existing RIOT emulation has been fixed. MAME compatibility and syntax has been maintained, to allow for the reuse of MAME configuration files and front-ends. A7800 is included as part of this extension with many thanks to Mike Saarna (RevEng). A7800 is an external project and can be downloaded separately here. Releases 20190807 - Build v0.2.8 Fixed issue with rem keyword mis-highlighting when used within variables (batariBasic and 7800basic) Added missing 7800basic keywords: tallsprite Updated existing and added additional hover tooltips for 7800basic keywords 20190711 - Build v0.2.7 Added missing 7800basic keywords: hsgamename, noflow, trackersupport Added additional hover tooltips for 7800basic keywords Sprite Editor Updated Editor window to be resizable Re-arranged Toolbar order 20190614 - Build v0.2.5 Added hover tooltips for 7800basic keywords (a large majority) Updated 7800basic to 0.6 Jul 13 2019 22:37:29 20190611 - Build v0.2.4 Updated Stella to 6.0.1 (Windows, Linux) 20190604 - Build v0.2.3 20190528 - Build v0.2.2 20190522 - Build v0.2.1 20190521 - Build v0.2.0 20190513 - Build v0.1.9 20190510 - Build v0.1.8 20190506 - Build v0.1.7 20190428 - Build v0.1.6 20190425 - Build v0.1.5 20190421 - Build v0.1.2 & v0.1.3 20190420 - Build v0.1.1 20190419 - Build v0.1.0 Initial release Manual download
  3. Hi everyone, Just updated to the latest version of Paint.Net (v4.2.4) and upon reading the release notes (v4.2.2) noticed that you can now save .png images to 4-bit. Just tested and these are compatible with 7800basic! There is no transparancy for the background when saved but you can just set that to 0 in your incgraphic call. Nice!
  4. Welcome to the TIATracker module for batari Basic and 7800basic allowing you to play TIATracker music in your Atari console game. What is TIATracker TIATracker is a tool created by Kylearan for making Atari VCS music on the PC and a new sound routine for the VCS. It features ADSR envelopes, up to 7 melodic and 15 percussion instruments, customizable pitch guides for optimizing the number of in-tune notes, a size-optimized and configurable replayer routine and much more. More information is available here Example For a full example of incorporating your TIATracker music into your source check the following depending on your platform: batari Basic - TIATrackerPlayer.bas 7800basic - TIATrackerPlayer.78b Known issues Currently only one track per game can be added. Titlescreen Kernal Has been tested and works with the Titlescreen module Releases 20190926 - 20190926.TIATrackerPlayer.zip Previous Releases 20190125 - TIATrackerPlayer.v1.1.20190125.zip 20190123 - TIATrackerPlayer.20190123.zip Instructions The following outlines how to add the TIATracker module to your source and incorporate your music. If you are having issues refer to the example for assistance. 1. Copy the tiatracker folder into the root of your source folder 2. Copy the content of file tiatracker/tiatracker_variables.bas into your variable definitions of your source. 3. Add the following to your source (either at the bottom of your file or bank depending on your requirements): rem include the tiatracker source asm include "tiatracker/tiatracker.asm" end 4. In the initalisation of your screen add the following to initialise the tracker: rem initialise tiatracker gosub tiatrackerinit 5. In your screen loop, after the drawscreen call add the following: rem play track gosub tiatrackerplay TIATracker 1. Create your music or get someone to do the hard work! 2. Select File > Export track data to dasm... from the menu. On the Save As dialog locate your tiatracker/track folder in your batari Basic game folder, enter a filename of 'track' and click the Save button to export your music. 3. In file tiatracker/track/track_variables.asm remove the Permanent and Temporary variables from the file (otherwise you will receive a compilation error). Note: This will need to be done each time you export your data.
  5. Hi, By swapping charactersets (as shown by Synthpopolooza) you can very quickly swap an entire set of characters each frame using memory pointers. So currently if you wanted to animate a single char with say 8 different frames you can setup screen ram, then do a memset with the next character index and thus create an animated char (even a full background). One of the great examples of what I'm thinking is Delta on the c64 - the animated starfield was pretty much a range of characters cycling to move the stars across the screen. Now we get to the fun bit. Can you configure something in memory (such as a small characterset) and update a pointer to cycle a character to animate a char on-screen? I certainly believe this could be the most efficient way to do something like this... So the question is can this be done??
  6. Hi, Been taking a little break this week from Arkanoid to recharge and wanted to test a theory I have with the code RevEng created for the brick layout... I'm looking to store a map grid area in memory (say 25*25 squares) and need to (based on the x and y of character position) determine what is stored at that memory location. dim mapTable = $2200 dim charX = a dim charB = b rem map area 25x25 (0-24) const mapWidth = 24 const mapHeight = 24 rem char position charX = 18 : charY = 22 rem get value at location offset=charX+(charY*mapWidth) : value = mapTable[offset] I'm getting stuck as the offset can obviously be >255. The question is what would be the most optimal way to calculate the offset in this situation? Assembly solution is acceptable.
  7. Currently i'm trying to add additional lives once you reach a stated number (in this case first 20,000 then every 60,000 points). I'm trying to do the following: sc0=score0 sc1=score0+1 sc2=score0+2 scoreLifeBenchmark = 0 validateExtraLife rem check 20,000 if sc0 >= $02 && scoreLifeBenchmark = 0 then playerLives = playerLives + 1 : scoreLifeBenchmark = scoreLifeBenchmark + 1 : goto _exitValidateExtaLife rem check every 60,000 value = 6*scoreLifeBenchmark if sc0 >= value then playerLives = playerLives + 1 : scoreLifeBenchmark = scoreLifeBenchmark + 1 : goto _exitValidateExtaLife _exitValidateExtaLife return thisbank So essentially what happens as you reach a benchmark it increases that value by one thus you can then check 6*1=6 (60,000), 6*2=12 (120,000), 6*3=18 (180,000) etc against the first 2 digits in the score. Can anyone shed some light - the score stuff does my head in regularly!
  8. Ok since I've been letting yet another side project rot away for too long and I really don't know if/when I'll get back to it, here's another little demo as I fiddle with scrolling. In a nutshell the program uses plotmapfile to display full screens in 160A and the player can move about in 4 directions, going 1 full tile at a time. When you reach the edge of the screen that is connected to a different map, it will scroll that map in black and white to the new screen then flash the color back. There are only two screens in this program. The screen you start in, and the screen to the left of it. Any other screen edges you can reach are "dead" and won't trigger a change. There's a "template" tmx file included that's got the embedded tiles, etc all set up for adding new screens for playing around with. Additionally this demo includes collision detection between the player and the map tiles. Changing around the order of tiles in the tmx files would obviously mess around with the collision code so keep that in mind. Compiling instructions in a command/dos window are listed in the bank0c.bas file. As mentioned in that file feel free to use anything in the code in your own projects. And yes, I suck at drawing hero sprites. rpg7800.zip rpg.bas.a78 rpg.bas.bin rpg7800-fixed.zip
  9. As I mentioned over in the homebrew forum, here's a demo/source/tutorial/etc showing a way to aim projectiles at a target. It's basically a way of setting the X and Y speeds of a projectile based on the coordinates of the firing enemy and the target. The source has some commented out code that can make the enemy a little less precise at aiming, which can be good for having it spread it's fire out. You can move the player with player 1 controls, or the enemy with player 2 controls. binaries, source, and a zip of both attached. aim.bas.a78 aim.bas.bin aim.zip aim.bas
  10. Sorry couldn't think of a better title. So, I'm trying to implement moving and placing blocks in order to place them as defenses in front of the player's base. I wrote a simple code, just two lines, so that when the player's x and y are within a range of the block's x and y (15 pixels on the x, 10 on the y), and then the player presses a button, the block will jump to be 4 pixels away from the player's x and y ("carrying" the block). Everything works fine until the block gets to blockx=14 (and blocky=9) when the the block will detach from the player (the variable 'nearbase' is no longer true) and will not allow itself to be picked up again (nearbase is never re-set as 1), even if the player's x and y go away from the edge of the screen. I used plotvalue to display that the variables for player and base x and y are correct, stay what they should be and stay within range. There is no problem on the other end of the screen, only in the lower numbers. When the strange behaviour is happening, I ask (via plotting a debug image) if the playerx is within range, it says it isn't, despite the plotvalue clearly showing that, in fact, it is. playerx and playery are dimensioned as a and b while blockx and blocky are $2557 and $2561 so it doesn't seem to be an overwriting issue. The block is called 'base' in the code, so blockx=basex. if playerx<basex+15 && playerx>basex-15 && playery<basey+10 && playery>basey-10 then nearbase=1 else nearbase=0 if joy0fire1 && nearbase=1 then basex=playerx+4:basey=playery+4:basepickedup=1 else basepickedup=0 Anyone know what's going on?
  11. Mord

    I suck at sprites.

    So while trying to do up semi-humanoid characters, I realized I suck at doing this. More than I anticipated that is. So, let's just BS an armless blob of a monster with stubby feet and call it the hero! It's going to be "fun" trying to figure out what this guy's powers are going to be. XD Going to be more fun trying to figure out what kind of game I'm even making. Oh well, to heck with planning, it's only ever aided my procrastination anyway! Yes I'm aware of the number of colors used in the image, given any game with this little blob will likely be in 160A. That's not an issue as the teeth and eyes will be drawn first with a specific sprite, then the main monster plotted over it - letting the eyes and teeth shine through some transparent gaps in the main sprites. Animations for walking left and right are done. Up and Down walking are tentatively done but I want to try to rework them a bit more.
  12. Mord

    Horizontal Scrolling

    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.
  13. Mord

    Graze (2015-05-18)

    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. At times, when coding in 7800Basic with Windows, sometimes you may get one of those dreaded messages, '7800Basic Has Stopped Working', and crashes. Before you get really upset and throw your computer across the room, or get help as to wonder if there is a problem with the application itself, there are two instances in which this can happen. Sometimes 7800Basic can catch the error, but other times it'll crash. The first common mistake is inadvertently using an "if-then" statement without the "then" in the statement. For example: If boxcollision (x_thing,y_thing,16,16,ape_x,ape_y,16,16) goto __banana The "then" is missing from the code. It is easy to miss this after typing hundreds of lines of code. The other instance is also related to the "if-then" statement where the line is unfinished: if room>4 && This will also, at times, cause 7800Basic to crash since it is uncompleted. Sometimes you may just forget to finish it. So, these are two instances (from my own experiences) to as why 7800Basic may crash under Windows environments. I don't know if the same happens to Ubuntu/Mac users, but it might save someone from getting their blood pressure up to a boiling point.
  15. Since the last update, DQ has been a 48k, then a 128k, now a 256k game. I didn't release a 128k version since I wanted more maps. I've added several maps such as another overworld map, caves and additional dungeons. I've also started maps for a sky tower and so far two floors have been added. A title screen and "game over" have been added. This game is still a demo and there are still bugs and other things I need to fix. One noticeable one is the first cave map has slow down and I need to find what's (possibly a plotsprite issue) causing it. Please let me know through the blog comments or even PM if you run into any problems. Overview: You're a draker, a dragon-like creature, and while living on Draker Island, a mysterious spell has been cast all over the island. The spell cannot make the little drakers fly and it's up to you to find out what or whom is behind the spell. All you have is your fire orb to fight enemies that appeared after the spell was cast. Long ago, sections of the island were divided with gates. Dungeons below hold the keys to open the gates. But the dungeons are full of enemies. VERY IMPORTANT: The Prosystem emulator will NOT work with this game. You'll need to use MESS or some other emulator that can support 256K. http://www.mess.org/start DQ_Alpha.bas.a78 DQ_Alpha.bas.bin
  16. Does 7800basic have bit shift operators? I can't find them in the documentation here: http://www.randomterrain.com/7800basic.html And if it doesn't, then how would I use the 7800basic "asm" command to write the 6502 assembly code to perform the operation, say, num1 << num2 (logical shift left)? Thanks!
  17. Note: Gameplay has changed a bit compared to what's explained below. I'll try to rewrite this to make sense later! For now keep in mind that the timer is increased a bit while you graze enemies. If it drops to 0 it's game over instantly! Object of the game is to try to tag the enemies flying and bouncing around the screen without getting hit directly. scoring will certainly change between now and then along with bonuses awarded between waves. Currently you gain points by grazing against enemies (Trying to touch the edges of the enemy without letting the enemy touch the center pixel of the player), or outright destroying them if your graze power is high enough. If you can manage a long enough graze you'll get more points than just destroying the enemy! Different enemies give different points for destroying them. Additionally you gain bonus points at the end of each wave based on the number of enemies you successfully touched without destroying, as well as a survival bonus for not dying during the wave that's relative to how much grazing you've managed to do! The waves included are mostly for testing. Enemies have different colors each wave, although they will all share the same palette due to the screen mode. Once the end of the wave data in the rom has been reached, it will begin looping. Enemies: Gears - simple bouncing enemies. Some wiggle in their path to make it harder to avoid/graze. (100pts) Heli-pod - A propeller based cannon. They can fire a variety of bullets. Their propeller can not be grazed so be careful when trying to graze the enemy! (500pts) Lancer - A simple two pronged spear enemy that flies, quickly, in a straight line. If it hits you, it'll take you with it and try to pin you to the wall for a time! Try to dash to make it release you! Bullet Types: Small bullet - simple energy shot that will despawn after hitting a player. Large bullet - A stronger punch compared to the small one. In effect it pulls a double-hit. If the player dies from the first hit, then the bullet will continue on as a small bullet. Paralyser - Grazing this bullet drains your Graze Charge instead of fills it. Quickly! If you're hit, it will slow the player for a couple of seconds. BossBullet - A rather large bullet that will crawl along the walls and occasionally attempt to jump across the screen at the player. Named because usually it will be bosses using them! (For now the helipod uses them but in the final game it won't.) Power Ups: Points (P) - simply awards a larger bonus for destroying the enemy. 1000 instead of the usual 100-200. Graze Bonus (G) - increases the points/enemy awarded at the end of the round for grazed enemies by 9pts. Reset at death. Minimum 9pts, maximum 99. Speed Bonus (S) - Increases player speed slightly. Reset at death. After 4 bonuses, you'll reach maximum speed. Regeneration ® - Causes the graze power to charge automatically for about 10 seconds. It'll stop automatically on death however! Right now G/S/R increases the points-to-destroy bonus of the gear from 100 to 200. When you've saturated the bonus of the powerup, the bonus will increase to 500pts since you won't get an increase in graze or speed bonus. In the case of Regen, you'll get the 500 bonus as well as reset the timer on the Regeneration to max. Controls: joystick moves the player. Fire Button 1 (or was it 2...): Dash! Fire Button 2 (or was it 1...): Slow speed! Console switches Reset - reboots the game. Select - returns to the title/menu screen. Right Difficulty: Enables/Disables Life Stealing in 2 player games. (If one player runs out of lives, they can take a reserve from the surviving player so long as they have more than 1.) Pause - should work with the default 7800basic behavior. Two-Player Modes: (Old versions only) Standard - the default mode. Basically no benefit or penalty is presented. It's pretty much like it is in 1-player. Co-op - Players share graze charge to help stay alive longer. It won't a player's charge go below 40, but above that it will attempt to share out the charge power between players. Versus - Players compete each round for points. Whoever has the higher bonus point score at the end of a round takes a spare life from the losing player, assuming they have one to spare. At present I can't test on real hardware so if anyone finds anything that seems weird let me know. Binaries for 2016-06-09 are the last ones with 2-player modes available. Leaving them here. 2016-06-09-graze.bas.a78 2016-06-09-graze.bas.bin 2017-09-21-graze.bas.a78 2017-09-21-graze.bas.bin
  18. Mord

    Graze (2015-05-28)

    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.
  19. Mord

    Graze (2015-05-25)

    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.
  20. Hope it's ok that I create a new thread each time I need help, I figured it would help people in future search if they're stuck on something. Anyway, I've created bullets for the player to shoot and now I'm trying to get the bullets to disappear when they hit a wall. I admit that I don't fully understand peekchar, but I get weird behaviour around line 29 in the below code. Before I put in the peekchar code, the bullets shoot from the player in whatever direction they're moving, as expected, but when I put in those peekchar lines around line 29 below, I get behaviour I don't understand. The appearance or otherwise of the bullet seems to depend on the player's position when in theory, that shouldn't affect it at all. The bullets also only appear when the player is on a certain side of the screen, not when they are touching a certain character, which is what I thought peekchar does. In theory it should be the character underneath either the player or the bullet which affects behaviour, no? Everything works fine until I set what 'tempbx' and 'tempby' are for the peekchar function. I put in a debug line which plots another face sprite which should match the same conditions as the bullet, but it appears at different times, seemingly random. On one run through the game crashed and plotted out a load of numbers at the top of the screen (this happened before during a different bug when I had mis-assigned a variable. I went through several times to make sure I hadn't done that this time and it doesn't look like it. It seems like there's something about peekchar that I don't understand. I tried to create a gif to illustrate the issue but apparently it's not allowed. My abridged code looks like the following: set collisionwrap on set doublewide on <assign variables> ; this next line is copied from Atarius Maximus's code dim screenram = $2200 : rem to $24EF (20*12=240 bytes) rem $24F0 to $27FF are free ;screen0map is the name of the map I made with alphachars memcpy screenram screen0map 240 plotmap screenram 1 0 0 20 12 savescreen main pprevx=playerx: pprevy=playery <movement code> if joy0fire0 && btimer=0 then gosub bullInit ; *** Plotting and Moving Bullets if firecon>10 then firecon=firecon-1 for x=0 to firecon ;giving variables to the bullets, in order to work in the if statement bx=bullx[x]: by=bully[x] ;check if the Bullet has hit a wall tempbx=bx/16:tempby=by/8 ;the bullets stop plotting for some reason after I enter this line tempchar2=peekchar(screenram,tempbx,tempby,20,12) if player_bullets[x]=1 && tempchar2=2 then player_bullets[x]=0 if tempchar2=2 then plotsprite face1 0 0 50 ;this is a debug line, though has weird behaviour too ;if the bullet is active, plot it and move it depending on it's direction for the next frame if player_bullets[x]=1 then plotsprite bullet 0 bx by: bullx[x]=bullx[x]+bdr[x]: bully[x]=bully[x]+bdd[x] next <some other code to prevent player moving off screen> if btimer>0 then btimer=btimer-1 plotsprite face1 0 playerx playery drawscreen goto main bullInit ;gives initial bullet variables bullx[firecon]=playerx: bully[firecon]=playery ; sets initial bullet coords at the player's coords player_bullets[firecon]=1 ;this basically sets the bullet to be active bdd[firecon]=playery-pprevy ;this sets the up/down velocity of the bullet depending on the player's movement bdr[firecon]=playerx-pprevx ;the same as above for left/right firecon=firecon+1 ; firecon keeps track of how many bullets there are btimer=10 ;this prevents too many bullets being plotted too quickly return ;checks for collision when player moves down checkmovedown tempx=(playerx+1)/8 tempy=(playery+8)/16 tempchar1=peekchar(screenram,tempx,tempy,20,12) if tempchar1=2 then return playery=playery+2:return <other code for player collision detection> alphachars ' [email protected]#$%^&*()_+-=[]{}:";<>,.?/' alphadata screen0map tileset_blanks2 ' ' ' ' 'aaaaaa aaaaaaaaa' ' ' ' aaaa ' ' aaaaaa ' ' ' ' aaaaa ' ' ' 'aaaaaaaaaa aaaa' ' ' ' ' end Thanks as always for any help.
  21. So I needed a quick break from Graze and it turned into something like this. Not planning on developing this further (I do have RPG ideas, but they're pretty far away still.) so feel free to make use of it if desired. rpgtiledemo.zip rpgtiledemo.bas.bin rpgtiledemo.bas.a78
  22. I've been tinkering with the samples included with 7800Basic, and because I'm going to want it eventually, I decided to try to get some horizontal scrolling working. I tried to get vertical scrolling as well, but naturally that failed. I did think of how to get some zelda-styled screen switching vertically but haven't actually tried to implement it yet. At any rate, after a couple weeks of slamming my head into a wall, yesterday I finally stopped and decided to rework the calculations I had done up for it that were causing... interesting results. I cleaned up the code a bit, and I'm sure it's not nearly as efficient as it could be, but it works! Feel free to use/modify/etc for your own games if you think it'll help. As you can see from the graphics used, I essentially built/expanded this from the adventurer.bas sample. scroll.zip scroll.bas.a78
  • Create New...