Making Telemachus | Learning bAtari Basic! | Collisions + Color

Поделиться
HTML-код
  • Опубликовано: 12 сен 2024
  • #Atari2600 #bAtariBasic #AtariHomebrew #GameDev #IndieGame
    More fun with confusion! In this third video about learning bAtari Basic I take a look at collision statements, color questions, the origins of dim, some weird rand results, and using every bit of a byte.
    Includes a photo from the first use of BASIC taken by Adrian N. Bouchard. Courtesy of Rauner Special Collections Library, Dartmouth College.
    Resources___________________________
    Garry Kitchen on porting DONKEY KONG to the 2600 (cycle talk 35:35) //
    gamehistory.or...
    Birth of BASIC at Dartmouth //
    • Birth of BASIC
    bAtari Basic //
    Created by Fred Quimby--
    github.com/bat...
    Atari Dev Studio //
    Created by chunkypixel--
    marketplace.vi...
    bAtari Basic Commands //
    My main cheat-sheet, by alienbill-
    alienbill.com/...
    8bitsinthebasement //
    Started my journey with Peter’s excellent bAtari Basic tutorials!
    / @8bitsinthebasement
    Memelvar //
    Humorous 'making of' an Atari game in assembly-
    / @memelvar
    8Blit //
    Deep dives into the Atari 2600, including assembly code exercises available via Github-
    / @8blit
    Atari Age //
    Informative programming forums-
    forums.atariag...
    Into the Vertical Blank //
    Fun Atari podcast-
    intothevertical...
    Special thx //
    To my kid brother Wayne and my pal Dr. Gonzo for their cartridge photography- check a look at Wayne's arcade and pinball videos-
    / @vgre3000

Комментарии • 22

  • @byWilliamJMeyer
    @byWilliamJMeyer  8 месяцев назад

    In honor of Warren Robinett hiding his credit on-screen in ADVENTURE-- which arachnid-infested cartridge did I "hide" in this video?

    • @8bitpoet
      @8bitpoet 7 месяцев назад +1

      Spotted the Centipede cart at 17:24! Nice work on this series! Are you on the AtariAge forums? That shakescreen command isn't in any of the documentation for bB.

    • @byWilliamJMeyer
      @byWilliamJMeyer  7 месяцев назад +1

      :) ! Thank you, I appreciate that. Although I don't have an account, I read AtariAge to learn specifics. I found *shakescreen* by searching something like: "how do I shake the screen" in their 2600 programming forums.

    • @8bitpoet
      @8bitpoet 7 месяцев назад +1

      @@byWilliamJMeyer You should consider joining the community. I recently finished a new 2600 game called Fly Hunter that I programmed in batariBasic. In fact, it's going to be featured on ZeroPageHomebrew's Twitch stream tonight! www.twitch.tv/zeropagehomebrew/

    • @byWilliamJMeyer
      @byWilliamJMeyer  7 месяцев назад +1

      Oh, that's you? Congrats!

    • @8bitpoet
      @8bitpoet 7 месяцев назад +1

      @@byWilliamJMeyerThat's me! Thank you! Your videos helped inspire me to give batariBasic a try.

  • @mrvbnz
    @mrvbnz 8 месяцев назад +1

    That video is really comforting in some strange way. I already knew all that concepts but it's so interesting to see it applied to such an old hardware

  • @acuddle
    @acuddle 8 месяцев назад +1

    Wow~ 😮
    Seeing letters as variables reminds me of the little games I've made in the TI-82 calculator... At least one can make aliases and access the vars bit by bit there (unless that last bit 😋 is also true on the TI and I never realized it). Making something complicated like a ship going to various places with screens and all would be almost impossible there... at least with the standard programming, I remember there were "apps" that probably had way less restrictions and more vars~, though the TI also had array and even matrix stuff too 😎

  • @8bitsinthebasement
    @8bitsinthebasement 8 месяцев назад +3

    The quality of these videos is truly outstanding. You explain the material very well and add historic bits and pieces, really well made stuff. If I'm honest, I've never used the random function in bAtari, I had a variable or two left over so I got lazy and set up a counter a=a+1 that ran each and every cycle. So when I wanted a number between 0 and 255 I called A, it's wasteful but gave a true random value ;) I've heard that using division (/) somehow gives a more random, random number, but again I've not tried. You're doing a really great job on the development of your game. Working really hard getting things to work just like you want and learning so much in the process that after a while you find that you could easily improve what you've done, so you start over. I wish you the very best of luck and look forward to your next video and of course maybe playing a wip demo at some stage. Anyway a very merry Christmas to you, or if you don't celebrate Christmas I wish you happy holidays and take good care of yourself ;)

    • @byWilliamJMeyer
      @byWilliamJMeyer  8 месяцев назад +1

      Thank you! I'm taking the 'kitchen sink' approach to these videos lol. Thx for that suggestion on generating a number-- I've been wondering about having a counter run in the background, from which I can just summon a number at any time for multiple purposes-- I read someplace another random approach is to have a counter running on your title screen and when the player starts the game that 'freezes' a number that somehow acts as the random seed? When I have the first objective working I'll def check in with you about testing, thanks so much. Merry Christmas and Happy Holidays to you and yours! (p.s. I read they recently discovered five new species of hedgehog!)

  • @krunkcleanup2949
    @krunkcleanup2949 Месяц назад +1

    One way to make sure you dont go over cycles is to open Stella's prompt and type breakif {_scan>#262} then return to the program.
    This will open up the debugger if your scanline count ever exceeds 262. Then at the end of your loop you can add some code to intentionally waste cycles by doing some commands with known cycle counts like WSYNC or nop, which will pause the cpu until the start of the next scanline, which could be anywhere up to 76 cycles for the first one and 76 for each additional one. If you want an accurate count, use lots of WSYNC until your program goes over, then remove one WSYNC, then add some nop before the WSYNC's until it goes over again. Then add up the cycles!
    Example:
    asm
    nop ; 2 cycles 2 total
    sta WSYNC ; 76 cycles 78 total
    sta WSYNC ; 76 cycles 154 total
    end

    • @byWilliamJMeyer
      @byWilliamJMeyer  Месяц назад

      Amazing! Thank you so much for this--!! I copied it into my coding documents folder.

  • @LtCdrRoyFokker
    @LtCdrRoyFokker 21 день назад +1

    Just checking in after a few months to see if there was any progress on the game. As a fellow first time bB coder, I definitely understand when life gets in the way and you take months off (I certainly have as well!) but figured I'd chime in for a morale boost regardless.

    • @byWilliamJMeyer
      @byWilliamJMeyer  21 день назад +1

      Hi. Thank you for this kind message, I appreciate it. I am partway through making the next video. It will primarily be about sundry playfield collision bugs ...and also learning some bankswitching. But also feature actual (gasp) gameplay. No ETA, though.

    • @LtCdrRoyFokker
      @LtCdrRoyFokker 21 день назад

      @@byWilliamJMeyer Glad to hear it and looking forward to the next video. :)

  • @LtCdrRoyFokker
    @LtCdrRoyFokker 6 месяцев назад +1

    Looking forward to seeing more as an aspiring future bB user myself!! I'm curious about your comment regarding not checking collision every frame to save on CPU cycles. Would that actually matter unless you're alternating between different checks depending on the frame? Admittedly I'm not a programmer (or more accurately haven't been since a sophomore year class in the early 90s!) but I was under the impression from following various AtariAge threads that the only CPU cycle count that matters is the worst case scenario based on if/then situations per scanline. Would it matter then unless you're in desperate need for those cycles for some other function that frame?

    • @byWilliamJMeyer
      @byWilliamJMeyer  6 месяцев назад

      Yes, I think you are right-- since at some point the game would need to run that particular code in addition to everything else anyway-- at which time there would be no cycle savings for that given frame-- unless that frame had a different equivalent offset of "unrun" code.

  • @tiagosr
    @tiagosr 8 месяцев назад +1

    So, your issue with 'rand' is more related to the '&' operator than with 'rand' per se - the value 68 is 01000100 in binary, and the & operator masks out any other bits in 'rand', thus only allowing 4 separate values, as these would be 00000000, 00000100, 01000000 and 01000100. You might want to use values that are (power of 2)-1 on (rand&n), as they would produce bit patterns that would not mask off any value of rand lower than n, as they would operate like the modulo (%) operator in these cases, which is more what you are looking for - but unfortunately modulo division won't be anywhere near performant enough for use with the poor 6507.
    I think what you might want is to compose your random number as a sum of multiple (rand & ((2^n)-1)) values, where the (2^n)-1 values summed up will amount to the range you want. Ex.: if the range is 68, you can use (rand&63) + (rand&3) + (rand&1) + (rand&1), where 63 is (2^6)-1, 3 is (2^2)-1 and 1 is (2^1)-1. This gives you a range from 0 to 68, but with a heavy shift away from the numbers 0, 1, 2, 66, 67 and 68, due to the nature of averaging pseudorandom distributions.

    • @byWilliamJMeyer
      @byWilliamJMeyer  8 месяцев назад +1

      Wow, tremendous. Thank you so much for this explanation. Fantastic!