-
Content Count
1,383 -
Joined
-
Last visited
Content Type
Profiles
Member Map
Forums
Blogs
Gallery
Calendar
Store
Everything posted by CapitanClassic
-
I would like Bioshock Remastered. Never played it when it first came out, even though everyone said how great it was.
-
Season 10 ~ Week 8/9 ~ Summer FUN!
CapitanClassic replied to Vocelli's topic in 2600 High Score Club
I always thought you should purposely get hit (walk into walls) to better control where you get sent, and to pass through thirsties blocking your way. -
Season 10 ~ Week 8/9 ~ Summer FUN!
CapitanClassic replied to Vocelli's topic in 2600 High Score Club
Small improvement 4420 - CapitanClassic (picnic) -
There is a doc for the debugger here https://stella-emu.github.io/docs/debugger.html#HowToDebugger
-
Thanks! @SpiceWare, I really appreciate the Collect tutorials, and I am looking forward to the newest Arena blog post for CDFJ Collect 3. I am going to try a small game first in 4K/8K, and probably hit some limitations with regard to available time in the kernel. Speaking of which, Collect is a great example of DoDraw and a 2LK. I haven't been able to find a good tutorial for other Kernel strategies such as SwitchDraw, SkipDraw, (others?) Your post here leads me to believe that SkipDraw uses two pointers, one to a ROM mask (which would have to be the size of the Arena) that blanks out the player sprite by setting the pointer such that the mask is 0x00 when the player Sprite isnt being displayed. The kernel is always drawing the player in the Arena, it is just being blanked out when the Y-value of the Arena doesn't match the Y-value of the player (plus player_height). SwitchDraw on the other hand can only be used for short Arenas, because the max Y value is 0×7F (127), but doesn't require the large bit mask. I am trying to draw a dynamic asymmetric playfield (similar to Cosmic Swarm, where playfield bits can be turned on/off dynamically during gameplay), which requires writes to both left and right sides of the playfield (minimum cycles, 6 PFx writes (18) + LDA (18) = 36 cycles). I also want to update both players, both missiles, and ball but only need 2LK accuracy. Is this even possible within 8k/128bytes, or am I going to have to either go with a reflected playfield or CDFJ?
-
ProcessJoystick: lda SWCHA sta Temp ; store Joysticks for later, ; going go be trashing the accumulator ldx #0 ; joystick counter PJLoop: cpx #1 beq LowNibble ; J1 already has bits in correct position lsr ; J0 needs to shift bits right 4 times lsr lsr lsr LowNibble: and #%00001111 ; we only want the low nibble xor #%00001111 ; flip bits so 1=direction held scb ; set carry bit? necessary? sbc #3 bmi MedSpeed ; must be going vertically sbc #2 ; all directions less than 5 aren't diag bmi FastSpeed ; probably going horizontally sbc #3 ; subtract 8 total beq FastSpeed ; going Right ; otherwise ... ; going diagonally lda Temp pha ; push it onto the stack lda Frame ; get the current frame and #7 ; if 8th frame, beq SlowMovement ; branch to rest of handler, like Collect Tutorial pla ; pull off stack lsr lsr lsr lsr jmp NextJoystick MedSpeed: lda Temp ; restore Joystick pha lda Frame and #3 beq SlowMovement pla lsr lsr lsr lsr jmp NextJoystick SlowMovement: pla ; pull back from stack FastSpeed: NormalJP: CheckRight asl bcs CheckLeft ldy ObjectX,x iny <compare with Arena size> CheckLeft: asl bcs CheckDown ... CheckDown: ... CheckUp: ... NextJoystick: inx cpx #2 bne PJLoop rts If I wanted to set the player speed based upon which direction the player is moving, how best to do that? Horizontally (fastest speed) Vertically (medium speed) Diagonally (slowest speed) I know of the Fractional/Sub-pixel movement. This doubles the RAM requirements for X,Y positions for each object. Essentially, you do 16-bit math on the positionX (onscreen) and the fractionalX (sub-pixel), and when the carry overflows into the onscreen Y position (P0_YPosFromBottom+1), the actual pixels get updated. I am still not sure In the example code, how I would modify it to identify the difference between moving vertical and moving vertically+horizontally simultaneously (diagonally). https://alienbill.com/2600/cookbook/subpixel.html ; for up and down, we INC or DEC ; the Y Position ;joystick down? lda #%00010000 bit SWCHA bne DoneMoveDown ;16 bit math, add both bytes ;of the ghost speed constant to ;the 2 bytes of the position clc lda P0_YPosFromBot adc #<C_GHOST_SPEED sta P0_YPosFromBot lda P0_YPosFromBot+1 adc #>C_GHOST_SPEED sta P0_YPosFromBot+1 DoneMoveDown lda #%00100000 ;Up? bit SWCHA bne DoneMoveUp ;16 bit math, subtract both bytes ;of the ghost speed constant to ;the 2 bytes of the position sec lda P0_YPosFromBot sbc #<C_GHOST_SPEED sta P0_YPosFromBot lda P0_YPosFromBot+1 sbc #>C_GHOST_SPEED sta P0_YPosFromBot+1 DoneMoveUp In the Collect Tutorial, the speed is modified by reading the joystick button. It uses a similar approach to handle directional movement as the example above. It left-shifts the SWCHA bits into the carry flag, and then processes each individual direction. Instead of setting the speed via a fractional X/Y position, it checks the current frame and only processes movement if the frame is divisible by 8 (about every 133 millisecond ) My guess is that before I start processing the individual directions RLUDxxxx, I need to determine if the player is moving Diagonally, Vertically, or Horizontally. Since the Atari sets bits as 0 when that direction is held (which does seem backwards), I would need to read SWCHA, store it (so it can be restored when processing the other joystick), set a counter for JoystickNo (X reg), shift-right if processing J0, then AND it with the P1 bitmask (P1_MASK = #%00001111, then XOR with the same mask to get bit=1 (true) for holding that direction. LowerNibble possible Joystick Values, (after AND + XOR) #%1010 - 10, RU-diag, slow speed #%1001 - 9, RD-diag, slow speed #%0110 - 6, LU-diag, slow speed #%0101 - 5, LD-dish, slow speed #%1000 - 8, R, fast speed #%0100 - 4, L, fast speed #%0010 - 2, U, med speed #%0001 - 1, D, med speed #%0000 - 0, not moving (Other impossible combinations, without special controllers) At this point I see two possibilities Poss1 - I should be able to use the lower nibble as a pointer offset to a speed table of possible speeds. (Not sure if I need a table that is 16 bytes or 11 bytes. 11 is the maximum when dealing with normal controllers since some joystick combinations aren’t possible). The table could have fractional speeds (so once again 2-bytes for each speed (20 total ROM bytes), and 4-bytes for each object. (X,Y and fractional for each). Poss2 - I can do what was done in the Collect Tutorial. Instead of saving the speed values, check the current frame and only process joysticks on frames divisible by some number (2^x-1 for best results). I can have conditional branches that first check if we are moving Up/Down (conveniently, this means low-nibble < 3) {only process every 4th frame}, then check if low-nibble is >4 (all low-nibbles 5 or greater are diagonal with the exception of Right = 0x08) and not exactly 8 {only process every 8th frame}, all other conditions {process every 2nd frame}. This should conveniently handle impossible joystick combinations. Code at TOP (seems to be full of errors. I must not be pushing/popping from the stack properly. I also seem to be controlling P0/P1 with the same controller)
-
Do you only have one copy, or multiple copies of P0?
-
@Vocelli, not sure if you made an error here, but shouldn’t the next non-tie score be one higher? The top player scores 50, and then you count down by 1, so the next non-tie score should be +39. (51- <player place>) = score 1st = 50 2nd = 49 ... 11 people with Amazing! (51 - 12 ) = 39 for Jaden Dolphin Scores AMAZING! - RogerPoco (+50) AMAZING! - OyamaFamily (+50) AMAZING! - IsaiahAustin (+50) AMAZING! - Deteacher (+50) AMAZING! - Nads (+50) AMAZING! - TheActivisionary (+50) AMAZING! - PatLarocque (+50) AMAZING! - ZilchSr (+50) AMAZING! - FakeCortex (+50) AMAZING! - CapitanClassic (+50) AMAZING! - GBAG (+50) 222630 - Jaden (+38)
-
Season 10 ~ Week 8/9 ~ Summer FUN!
CapitanClassic replied to Vocelli's topic in 2600 High Score Club
Don’t have proper paddles, so the Picnic score isn’t going to be great (it also appears as if I didn’t capture a screenshot) Kool-Aid 35100 - CapitanClassic Picnic (Don’t have a pic, but I plan on getting a better score) 27xx - CapitanClassic Frogs n Flies 48 - CapitanClassic Checkers (Bonus) 9 - CapitanClassic -
The Commodore 64 dominated Germany during the 80s. The Atari VCS didn’t get to Germany until 1979. Q: When did you first start playing the Atari 2600? Q: What were the video games you grew up with that made the biggest impression on you? (Not necessarily VCS games, could be arcade, other home console, or microcomputer games) (any VCS German exclusive titles worth playing? http://www.atarimania.com/pgelstsoft.awp?system=2&type=G&country=8&original=1&step=25 ) Q: When did you first start programming? Q: When did you first start programming for the Atari 2600?
-
Season 10~ Week 7 ~ Cosmic Commuter
CapitanClassic replied to Vocelli's topic in 2600 High Score Club
Never played this game until the week. Can’t say I like it. The landing sequence is a little too finicky, although most of my dying was due to fast green asteroids. I’m sure I could do better, but I don’t want to. Not one of Activision’s better games. 74072 - CapitanClassic -
Q: Can you share with us your developer’s setup for making 2600 games? (What tool chain are you using, DASM, Visual Studio Code with a plugin or just Notepad++ with/without a plugin). Q: What tools do you use for your graphical editing? Q: What are your favorite tools for development? (Other than Stella and/or a Harmony+VCS). You just created a turbo mode toggle for the Stella emulator to help with reducing the wait time for games where the Atari 2600 is “thinking.” Q: How long have you been making improvements to the Stella emulator? What Stella improvement has been your greatest accomplishment?
-
Q: What is your favorite hack that you think provided the greatest improvement on the original game? Q: What was the most difficult hack you have made for the 2600? Q: How many hacks have you created for the 2600? (Estimate, perhaps break down by graphical hacks, TV format hacks, new gameplay) You have several AtariAge listed hacks ... Amidar DS (Hack of Amidar) Asteroids DC+ (Hack of Asteroids) Atlantis FH (Hack of Atlantis) Battlezone TC (Hack of Battlezone) Missile Command TB (Hack of Missile Command) Omega Race DC (Hack of Omega Race) Robot Tank TC (Hack of Robot Tank) Sadistroids (Hack of Asteroids) Sprintmaster DC (Hack of Sprintmaster) ... other unlisted hacks ... Pitfall!x256 PDP Spacewar ... and NTSC to PAL conversions https://atariage.com/software_conversions.php
-
You have previous stated that you only use 6502 Assembly to make your games, and the results are impressive (Aardvark, Boulder Dash, Thrust, Star Castle Arcade) Q: What are the reasons why you want to to stick with 6502 Assembly? Q: Have you ever developed, or considered developing a game on another 6502 based system, because it had more powerful (graphic/audio/RAM) hardware that the 2600 would be incapable of producing? (Atari 800, Commodore 64, NES, etc.)
-
cribbage squares solitaire - beta 1
CapitanClassic replied to h0trod's topic in Atari 2600 Programming
I have always had a preference for UTC date stamp. That way you know exactly which version was the latest version and exactly when it was released. cribbage_2020_06_25.bin -
Atari 2600 Junior - official name, or unofficial nickname
CapitanClassic replied to Beerbarian's topic in Atari 2600
I dont think you read that correctly. "I should check my 2600 jr. to see if it also has "CX-2600 JR." as its model number" -
Somewhere in that range, the seahorses start coming out twice per sonar arrow. For those rounds you need to jump the top when the sonar leaves the screen, and once again almost immediately. also around that time, it seems like there isn’t enough time after jumping the seahorses to jump immediately and catch the seagull. So, instead you have to porpoisely bump your snout on the seahorses (Hope the squid isn’t within one length) and jump up to catch the seahorse. I never could get the timing down perfectly and would always lose a couple of dolphins getting used ram the new timing.
-
The definitive list of ALL simultaneous multiplayer games?
CapitanClassic replied to godzillajoe's topic in Atari 2600
Medieval Mayhem (Homebrew) or Warlords: (up to 4-paddles) The best 4 player game on the Atari 2600, possibly one of the best games of all time (I would place M.U.L.E. for Atari 800 here). If you have two sets of paddles and 4 or more players, you can have hours of fun trying to demolish your opponents castle. Combat: One of the original releases, and still one of the best. Lots of game variations, like Tank Pong where your shells must bounce off a wall before hurting your opponent, or multiple jets or bi-planes. Difficulty switches can handicap expert players, making it harder for them to dominate. (PS, Combat and Warlords have hacks that have updated menus, making it easier to find the correct game instead of referring to a Game Matrix) Maze Craze: Lots of different game variations; invisible mazes with/(out) peek; Terror mode where you cannot exit until your opponents are eliminated; or Capture mode where you must collect the robbers before exiting; make this game a blast. I especially like the game variations with wounds (G5 /G13) where the robbers can knock you out and you slowly come back to life, sometimes only to be immediately knocked out again by a robber tracing its way back through the maze. Sky Diver: A reflex testing game, with a push your luck aspect. Do you jump just a little earlier, hoping you can make it to the pad with the current wind. Or do you open your chute a little later for more points, but risk splatting on the ground, losing points (and making a satisfying crunching sound). Five game variations, including G5 Chicken, where only the first skydiver to hit the pad getting points. Slot Races / Maze (Sears Telegames): Lots of game variations controlling the speed of the cars and the missiles. Also supports difficulty switch handicapping, forcing experts to retrieve a missed missile before firing another. It is a race to 25 points. I find the slow cars with curving missiles the most fun. It is hilarious to watch a missile coming at you and try to will your car into moving faster to make a turn before it catches up to you. Only to be hit and forced to move a hundred miles an hour into your opponents next missile. -
Legacy versus ARM-based 2600 Game Development
CapitanClassic replied to Thomas Jentzsch's topic in Atari 2600
I’m a little confused here. Aren’t processors/co-processors defined by the width of their registers. So since the Atari 2600 has an 8-bit accumulator (and x/y registers) it is referred to as an 8-bit system. Even though the program counter is a 16-bit register. https://en.m.wikipedia.org/wiki/Processor_register If the ARMs computational registers are 32-bit, wouldn’t that make it a 32-bit co-processor, regardless of the width of the instruction set the processor uses? PS (The Atari Jaguar used some strange math to try to claim they were a 64-bit System, and had an ad campaign around that 64-bits is more than Sony/Sega 32-bit offerings PSX/Saturn.) -
I’m done. I don’t think I can make a near perfect run, only losing one life to beat nads. 11 - Bonus Amazing - CapitanClassic
-
I plan to score better this week, but in case I don’t get a chance posting my current high score. 9 lives 291170 - CapitanClassic
-
Season 10~ Week 7 ~ Cosmic Commuter
CapitanClassic replied to Vocelli's topic in 2600 High Score Club
Bonus: Bowling. Just a man and his balls. -
I. Believe in a previous Atariage hSC, someone scored Hero Rank on B difficulty
