Jump to content

Recommended Posts

@Bunsen — good memory. OK, I dug it out of the mothballs, and did the best I could to finish it in the one hour I had this morning.

 

Here's Joy Joy Revolution, a party game for up to 4 simultaneous players (requires up to 4 joysticks on an Atari 400/800.)

 

It's Dance Dance Revolution but with joysticks.

 

Things that I like about it: with 1 player, you play the whole chord when you get a direction right. With 2 players, each player gets two notes of the chord, so it sounds best when both people are accurate. With 4 players, each person plays one note of the chord. I like that it keeps track of players' accuracy.

 

Things that I don't like: speed is uneven as levels progress. With four players, level one stats way too fast. It's pretty frantic. Also I think a couple of the notes aren't in tune. I just don't have time to fix it before the deadline.

 

Enjoy.

 

Name: Joy Joy Revolution

Platform: Atari

Author: Kevin Savetz

Language: Turbo BASIC XL

Category: PUR

joyjoy.atr

post-803-0-88834100-1428513582_thumb.png

Edited by Savetz
  • Like 1

Didn't get the bugs out of my code in time, so hoping for another chance next year :? Should have made that utility a ten-liner..... :-D

 

BTW: is the 255 "character" limit in Extreme meant to mean it must be theoretically possible to type the line with 255 characters (using abbreviations) or does that apply to the tokenized line?

 

Have fun in Lübeck!

Edited by slx

Great fun in Lübeck!

Bunsen will announce the results soon.

 

But I know the best TenLiner PUR was .... Carrera 3D

And the best TenLiner EXTREM was .... Broads Revenge

And the winner of the TenLiner LIVE was SKriegel.

 

Congratulations!

Minor issue: there's no information on the official games list about the last entry, called "Maze" - as I see, Sleepy was the author?

 

What about that Tandy Color Computer entry "Overtake"? I didn't know that this platform was "legal" :)

Edited by +Adam+

Sleepy gave me his game 5 minutes before dead line on NOMAM. I was busy on NOMAM with all the tenliners stuff and had no time and no internet connection to update the homepage...

BTW it's a nice small adventure in german. You must try to leave a house with many rooms and doors :-)

 

CoCo: Author had to come to the meeting or send a person who presents his game. So all platforms were possible where BASIC runs on...

Hi!

 

Thanks for all the votes :)

 

This year I programmed a little utility to minimize the basic listing, so I could understand my own code. After that, I started to add more features and I'm attaching the utility here, compiled for Linux (32 and 64 bits) and Windows. I pretend to post the source after cleaning it a little if there is interest.

 

This is the "source" code for my entry, you can transform it to standard listing by "basicParser -v carrera32.bas":

 

' ------------- Carrera 3D ---------------
' ----------- by DMSC - 2015 -------------

0

 ' Reserve 112 pages of memory for graphics and set 160x96 mode
 ' dlist = display lists pointer.
 '         150 bytes per display list, total of 11*6 = 66 display lists,
 '         but can't cross 1k boundary => 11KBytes, 44 pages
 ' gbase = graphic data pointer
 '         40 bytes per line, total of 48*4*2 = 384 lines => 15KBytes, 60 pages
 ' pmadr = Player 0 graphics pointer (plus 8 to pack over last graphics data).
 '         There are 256 bytes for each player, total 1k, 4 pages.
  mem = peek(106)-112
  poke 106,mem
  dlist = mem * 256
  gbase = dlist + $2C00
  pmadr = gbase + $4008

  ' Sets graphics mode, 160x96, 4 colors.
  graphics 7

  ' Sets the start of the image to 255, (full color 3),
  ' we then use a "move" to copy to all the line.
  img = dpeek(88)
  poke img,255

  ' Make display-lists and graphics data
  ' Size of display list
  dlsize = 156
  ' Optimize size, n80 = 80
  n80 = 80
  ' Loop over all Y values
  for y=1 to 48
    r = y+14
    zpos = 384/r - 6
1   p = r div 8
    n = (r+p+3) div 2
    z = 2*r+p
    ' Loop over the 4 possible X values
    for x=0 to 3
      ' Clean the screen
      move img, img+1, n80
      ' Draws the road with color 1 borders
      color 1
      plot x,1
      drawto p+x,1
      color 0
      drawto z+x-1,1
      color 1
      drawto z+p+x,1
      move img+n, gbase + x*n80, n80
      ' Draw the road with color 2 borders
      color 2
2     plot x,1
      drawto p+x,1
      plot z+x,1
      drawto z+p+x,1
      move img+n, gbase + 40 + x*n80, n80
    next x
    ' Now, calculate the shifted track position for each curve value and set
    ' the value in each of the display lists.
    d = dlist + 3*y
    for curvature=-5 to 5
      ' Calculate the X position
      x = 3 - y*0.07
      x = int( x*x*curvature + n80 -r-p)
      ' Get the graphics address to print this position
      tmp = gbase + 40 - n + x&3 * n80
3     tmp = tmp - x div 4
      ' Calculate each of the 6 frames (with shifted Z value)
      for z=zpos to zpos+2 step 0.34
        dpoke d,77
        dpoke d+1, tmp + z&1 * 40
        d = d + dlsize
      next z
      d = d+88
    next curvature
    ' Advance the pointer to the graphics data
    gbase=gbase+320
    ' Fixes crossing over 4KB - this depends on the initial address!!
    if gbase&960 = 960
      gbase = gbase+256
    endif
   next y
  ' Moved here to optimize space, corresponds to the clearing of PM data
  dpoke pmadr,0
4
  ' Adds display list first and last bytes to all DLs
  d = dlist
  for curvature=0 to 10
    for z=0 to 5
      dpoke d, $7070
      dpoke d+1, $70
      d = d + dlsize
      dpoke d-9, $4270
      dpoke d-7, dpeek(660)
      dpoke d-5, $41
      dpoke d-4, d - dlsize
    next z
    d = d + 88
  next curvature
5
  ' Sets PM data (continued from above)
  move pmadr, pmadr+1, 999
  move adr("\18\18\18\3C\3C\24\24\3C\00\18\18\3C\7E\7E\00\FF\00\7E\7E"), pmadr+345, 19
  move adr("\24\24\24\3C\3C\00\7E\18\DB\C3\C3\C3\FF\FF\FF\C3\C3\C3\C3"), pmadr+91, 19

  ' P/M over playfield and P0+P1 / P2+P3 blends
  dpoke 623,33

  ' Set color registers
  dpoke 712, 8
  dpoke 704, $4482
6
  dpoke 710, $D2
  dpoke 708, $EE52
  dpoke 706, $8640

  ' Set P/M data address
  poke $D407, mem+104

  ' "e" is the GTIA address, space optimization
  gtia = $d000

  ' Enable P/M
  dpoke gtia + $1d, 2
  ' P0 quad width, P1 double width
  dpoke gtia + $08, 259

  ' P2 shows distance traveled, set a basic shape
  dpoke pmadr+631, 511

  ' Enable ANTIC P/M DMA
  dpoke 559, 58

  ' Stored for optimized space later
  _657 = 657

  ' Start of game loop
  do

    '# Current "drag"
    drag = 0
7
    '# Position in track
    trackPos = 0
    '# Current speed
    speed = 0
    '# Location of "curve" DL ( 1024 * (c+5) )
    curvature = 5
    '# End of current track segment
    segend = 99
    '# Position of car
    x = $78

    ' Main game loop, starts from "pmadr", on first run has a value bigger
    ' than the end, so the race goes straight to the end screen.
    ' This is a tricky optimization!!
    for z=pmadr to 3000
      ' Waits for VBLANK, read collision register
      pause 0
      tmp = peek(gtia + $04)

      ' Clear collision register and sets player position
      poke gtia + $1e, 0
      ' Set PM0 and PM1 x coordinates
      dpoke gtia, int(x) * 257 - 8

      ' Sets DL (for next frame)
      dpoke 560, dlist + curvature*1024 + dlsize * int(trackPos mod 6)

      ' Advance track position
      trackPos = trackPos + speed
8
      ' "motor" sound. Note the values of frequency=k*31-1 produce pure tones,
      ' but we don't have enough space to filter out.
      sound 0, 255-speed * 112, 6, 8
      ' Process collisions with the outside of the track
      if tmp
        ' Decreases the speed by 5%
        speed = speed * 0.95
      else
        ' Increases the speed, max speed is 2 if button is not pressed, 1 if pressed.
        speed = 0.01 + 0.01*STRIG(0) + speed * 0.99
      endif
      ' Read joystick
      tmp = STICK(0)
      ' Updates X position, adds joystick and "drag" times "speed"
      x = x + 0.25*(tmp&4) -0.125*(tmp& - drag*speed
      ' Test if current track segment is over
      if trackPos > segend
        ' Yes, generate a new segment
        ' (first, set text position to 0)
        dpoke _657, 0
9
        ' New random direction
        curvature = rand(11)
        ' Drag is from -0.9 to 0.9
        drag = curvature * 0.18 - 0.9
        ' New random length, from 10 to 110.
        segend=segend+rand(99)+10
        ' Shows the current time and position (!0 is shorthand for "INT")
        print "T:"; z, "D:"; trackPos!0,
      endif

      ' Sets the Player 2 position to current track position
      dpoke gtia + $02, 48 + trackPos div 32
    next z

    ' End of game, shows score, turns of sound and waits for keystroke
    print "LAST:"; trackPos!0;
    sound
    get tmp

    ' Next race starts at time 0 (a full race)
    pmadr=0
  loop

basicParser-v1.zip

carrera3d.bas

  • Like 4

I talked with skr, the organizer of the ABBUC software contest. Upgraded Tenliners are very welcome to take part at the ABBUC Contest. Especially the winners and second in both categories are suitable for the contest. Give them a title screen, some music, a highscore list, some (more) levels and they are fine for taking part.

Is someone making an ATR of all the Atari entries?

Here it is. Thanks to skr who wrote the menu and won the first prize of live coding at NOMAM :)

 

skr satisfied all my expectations for the menu (not so easy with Atari BASIC and Turbo BASIC mixed in the competition and the ATARI BASIC games should run with original speed)

40MENU.atr

  • Like 3

I collected some prizes for the first three of the categories PUR and EXTREM. A big THANKS to the sponsors TheMontezuma, Yellow_Man, Zaxxon_HH, ABBUC, Kay Hallies and 8BitJunkie.

 

PUR

1st - 1 SIO2BT spent by TheMontezuma

2nd - 1 Pro© Magazine spent by Zaxxon_HH and 1 Dimo's Quest prototype disc (2/11) spent by 8BitJunkie

3rd - 1 ABBUC Mag spent by ABBUC, 1 german computer mag "CK" spent by Kay Hallies and 1 tape game spent by Yellow_Man

 

EXTREM

1st - 1 T-Shirt spent by ABBUC and 1 Tenliners book 2014

2nd - 1 Dimo's Quest prototype disc (1/11) spent by 8BitJunkie and 1 tape game spent by Yellow_Man

3rd - 1 ABBUC Mag spent by ABBUC, 1 german computer mag "CK" spent by Kay Hallies and 1 tape game spent by Yellow_Man

 

These are only some small prizes, but I hope the winners will have some joy with it.

  • Like 1

Here it is. Thanks to skr who wrote the menu and won the first prize of live coding at NOMAM :)

 

skr satisfied all my expectations for the menu (not so easy with Atari BASIC and Turbo BASIC mixed in the competition and the ATARI BASIC games should run with original speed)

 

Thank you both @bunsen and @skr.

  • 2 months later...

Hi!,

 

I collected some prizes for the first three of the categories PUR and EXTREM. A big THANKS to the sponsors TheMontezuma, Yellow_Man, Zaxxon_HH, ABBUC, Kay Hallies and 8BitJunkie.

 

PUR

1st - 1 SIO2BT spent by TheMontezuma

 

I finally received my prize :) :) :) , seems the post was slower than usual...

 

post-18634-0-19658700-1436404024_thumb.jpg

 

So, now the fun begins!

 

Thanks to TheMontezuma and Bunsen

 

  • Like 2

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...