Jump to content
IGNORED

Pinball games


Asmusr

Recommended Posts

9 minutes ago, Sergioz82 said:

For curiosity, how does it work? Is it made with charsets or is the matrix calculated real time (color table maybe)?

It's really simple (for now at least): Each big character is made of 4x5 characters from a set of 16 patterns defining the big 'pixels'. Ultimately there should have been 3 colors per character, but I find that using inverted colors for the illuminated pixels works quite well. I would like to add scrolling and other effects.

 

That reminds me, if you run the demo of a machine with F18A that allows 32 sprites per line, the masking of the dot matrix panel doesn't work, so you will see sprites moving into the area. There are ways around that using the F18A GPU, but it will take a bit of work.

  • Like 4
Link to comment
Share on other sites

On 10/24/2018 at 10:04 PM, Asmusr said:

I finally made a proof of concept for the TI, very similar to the Java demo that sometimes99 posted a video of a while back, but with scrolling. You can just view the ball bouncing around, or press joystick left and right to steer the ball a little.

 

The collision map is stored uncompressed, so it takes up 40K of the 64K ROM image. From the collision map I get a byte value that can be used to check if there is a wall at the given point and to look up a normal vector for the wall. The normal vector can then be used to calculate the reflection vector for the ball when it hits the wall. Calculations are done using fixed point arithmetic.

 

 

 

pinball-demo-8.bin 64 kB · 56 downloads

source.zip 15.66 kB · 77 downloads

any chance for a source code available for WIN ASM994A ?

Link to comment
Share on other sites

1 hour ago, whoami999ster said:

any chance for a source code available for WIN ASM994A ?

Not right now, but later I will probably put the code on GitHub. I'm using the xas99 assembler, so some changes would be required for asm994a. 

  • Like 1
Link to comment
Share on other sites

This is my first attempt at a level for an actual game, which is heavily inspired by Ignition from Pinball Dreams, but the theme is TI-99/4A as you can see. I still have some patterns left, so let me know if you have ideas for something that could improve how it looks. This is graphics mode, and all characters next to each other must have the same colors. Everything else is sprites. 

 

 backdrop.gif.adda353bc58c37f6a021377ac364c88c.gif

  • Like 18
  • Thanks 5
Link to comment
Share on other sites

Caro Rasmus,

Non sono da molto qualità nella "mondo Ti99" ma subito ho capito che hai delle ENORMI qualita di programmazione?.

Anche oggi, in ogni sessione di gioco che faccio con il mio TI99, non manca mai una partita ad uno dei tuoi giochi?.

Fatti i MERITATI complimenti a te, ti dico che su Amiga500 Pimball dreams e seguiti, erano tra i miei giochi preferiti su questo computer.

Immagina quanto aspetto con trepidazione questo! (Come quando leggevo i diari dei vari giochi su Zzap tipo TURRICAN o CREATURES, sapendo già che questi giochi sarebbero diventati dei capolavori.

Detto questo, buona programmazione e grazie di tutto!

Edited by Serafini Lapo
Correzioni
  • Like 3
Link to comment
Share on other sites

Just for the record... I just saw this thread, and actually back in 2018 when the thread was started, I programmed the pinball portion of Baby Pac-Man for the Atari 7800 because the main programmer, Bob, couldn't wrap his head around the physics. I basically did sort of a collision map as shown earlier in this thread, but with some twists to save space. I'll try to explain how my version works...

 

First there is a main map which consists of 8 numbers per column. I did it per column because the pinball part of Baby Pac-Man is symmetric, so the same map gets used for the left and right half of the screen, and also, the number of objects per column is more consistent than the number of objects per row.

The first (I think) of the 8 numbers gives the zone definition map to be used for this column (more on this below), the remaining numbers (which are always in ascending order) give up to 7 rows where the column definition changes. Typically, this means that the first of these numbers is one less than the top row the ball is able to reach when it's on this column. The next is the bottom row it can reach while not bouncing into the next obstacle, the next one after that is maybe in the middle of the obstacle, or it's the next row where the ball can roll freely again, depending on if the same handler is being used for the top and bottom of the obstacle or two different ones.

In each frame, depending on the column the ball is on, a hardcoded binary search gives the running number of the zone the ball is on.

 

The zone number in this table is there to group the playfield into columns which contain the same obstacle, so the next table only needs to contain one entry for each of those groups.

 

So with the zone number found and the zone definition number of that column, a second table is accessed which, for each zone, contains 8 more numbers which encode the handler to be used for this row and column. The handler now controls the behavior of the ball... some of the obstacles are only walls, so there are tables which typically give the angle of each column. Others are active in that they reflect the ball with more force, or they are the flippers at the bottom which are again divided in multiple zones reacting depending on the flipper position.

 

Here's an example (made up here)...

 

Let's say we're in row 53, column 32, and the table for column 32 contains the entries 25, 32, 33, 37, 54, 58, 142 and 147.

Number 25 is the zone number in the next table, and the binary search shows the ball row being greater than the 4th number, so the position number as a result is 4.

Now we access row 25 of the zone table (according to the number 25 at the start of the row of the first table). Row 25 is 3, 0, 4, 7, 0, 13, 15, 2, so according to the number 4, we access the 4th element in this row, which is 7.

So now we run handler number 7 which makes the ball react to the object it is touching.

 

This way, the tables are pretty small although the code for each handler is a bit bigger. The first table is the biggest at 512 bytes, then, if I remember right, there are 37 zones in Baby Pac-Man, so the second table contains 296 bytes. Then there are a few more angle tables for the objects which aren't a single line, but they are only 30-50 bytes at most per object. All in all, the physics part of Baby Pac-Man, including the tables, but not including sound and graphics, only takes up about 4K of ROM. The way the collision map is done was inspired by the way it's done in "Pinball Magic" on the Atari 2600 which was once ported to the Atari 8-bits with commented and released source code.

  • Like 5
Link to comment
Share on other sites

I serviced a BABY PAC-MAN PINBALL machine once... Almost lost my mind trying to breathe life into it again. All those lights, and I seem to remember a bell! The times I got it to power-up, it scared the bejesus out of me!!!:lol:

 

 P.S. whosoever heard of a pinball machine with a CRT game screen.:razz:

 

 P.P.S. I liked neither the video game, nor the playfield.:grin: Some things just don't work together...

 

Spoiler

...Killed two songs with one shot!:evil:

 

  • Like 2
Link to comment
Share on other sites

On 4/12/2022 at 9:17 PM, Asmusr said:

This is my first attempt at a level for an actual game, which is heavily inspired by Ignition from Pinball Dreams, but the theme is TI-99/4A as you can see. I still have some patterns left, so let me know if you have ideas for something that could improve how it looks. This is graphics mode, and all characters next to each other must have the same colors. Everything else is sprites. 

 

 backdrop.gif.adda353bc58c37f6a021377ac364c88c.gif

Congrats Rasmus. Saw the videos already. You really impress us.
Regarding ideas on the pic: The big blue background area above the two paddles could be turned into a blue TI logo. 

  • Like 3
Link to comment
Share on other sites

6 hours ago, kl99 said:

Regarding ideas on the pic: The big blue background area above the two paddles could be turned into a blue TI logo. 

Thanks. Well the starting point for that blue blop was actually a TI logo. It's difficult to do any discreet background graphics because all the colors are so bright, so that's why I came up with the idea of using something dithered (also because the smooth scrolling means coloring is very restrictive).  

  • Like 5
Link to comment
Share on other sites

  • 2 weeks later...

 

I suppose the idea of dithered blue as a great choice for subtler backgrounds on the TI-99 is one with some original era precedent.  Because I think it works really well in Slymoids:

 

 

image.thumb.png.e6ac6e9ba47d844ca56d3cc214d8384e.png

 

Slymoids doesn't get a tonne of credit, since it came out so late in the TI-99's life and is a rather simple game.  But I really think that, artistically, it was the best in-house TI-99 game there was. 

 

  • Like 7
Link to comment
Share on other sites

Slymoids was one of a very few of the old-school TI games I played a lot of, but like my skill set with games in general, I never really got good at it.

 

On the dithered blue, that is one of those color combinations that really pops on CRTs.

  • Like 2
Link to comment
Share on other sites

3 minutes ago, Ksarul said:

Slymoids was one of a very few of the old-school TI games I played a lot of, but like my skill set with games in general, I never really got good at it.

 

On the dithered blue, that is one of those color combinations that really pops on CRTs.

Right, same here. I loved trying.. but, nahh... but I love watching

  • Like 1
Link to comment
Share on other sites

 

Here's a preview of how things are going with the project. The working title is the not very inspired "Pinball 99". The sound and music is still borrowed from other projects. The speech is converted from the voice of a modern speech synth. I have given up thinking about making it work without 32K, although in theory that could have worked.

  • Like 8
  • Thanks 4
Link to comment
Share on other sites

I noticed a bug at 2:30 in the video: I'm getting the 2x bonus even though the 'I' is still not lit. BTW, I have implemented the same system as in Pinball Dreams where you can shift which of the T I 9 9 letters are lit using the flipper keys in order to make it easier to get a bonus.

  • Like 4
  • Thanks 1
Link to comment
Share on other sites

34 minutes ago, Asmusr said:

 

Here's a preview of how things are going with the project. The working title is the not very inspired "Pinball 99". The sound and music is still borrowed from other projects. The speech is converted from the voice of a modern speech synth. I have given up thinking about making it work without 32K, although in theory that could have worked.

 

It looks spectacular! ? 

 

Please, add also the joystick support (left/right for buttons, up to throw the ball, up/fire for tilt), so we can play it on bit TVs in lounge. ;-) 

 

  • Like 5
Link to comment
Share on other sites

44 minutes ago, tmop69 said:

Please, add also the joystick support (left/right for buttons, up to throw the ball, up/fire for tilt), so we can play it on bit TVs in lounge.

The problem with joystick support is, of course, that you can't engage both flippers at the same time, but maybe it's not such a big problem if you're not aiming to break the world record?

Edited by Asmusr
  • Like 3
Link to comment
Share on other sites

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