Log In  
Follow
dw817
Follow

Just another mad coder.

We're all mad. I'm mad. You're mad, you must be - or you wouldn't have come here.

Find my books and biographical works HERE:
http://www.writerscafe.org/dw817

Good Afternoon ! It's a great day here at Applecart and let's see what the results are for this week.

I'm thinking it may have been the screen that turned away several programmers this week as we only have one entry for the "3D Space Dock" program. Despite there being only 2-moving objects at a time, it apparently was too much for other coders to wrap their heads around, and that's fine.

This idea was perhaps one of the first as a way of tackling the complexity of how to handle drawing something 3-dimensional on the Apple ][ computer for its day.

Fortunately I understood it. And I dutifully wrote a cart trying to keep the original spirit of the game with the only exception it checks to ensure that if you are hit from the front view either by the rogue asteroid or collision with the still ones, that it must also occur in the side view.

So you can't have a situation that cries collision when the front view hits the moving asteroid and the side view hits the stable asteroid. In the original game that was considered a collision, but not in the cart I wrote. You must be hit by the same object on both screens.

Here is the video for that cart:

And the Pico-8 cart to meet this challenge can be found HERE:

https://www.lexaloffle.com/bbs/?tid=36594


So what have we covered so far ? Quite a bit !


[Destructoid] by chizel9000.


[Saucer Attack] by dw817.


[Saucer Invasion] by Nosnibor


[Saucer Invasion] by dw817


[Bomber (WIP)] by Nosnibor


[Bomber] by dw817


[Star Wars] by Yesyoor


[Star Wars WIP] by Nosnibor28


[Star Wars] by dw817


This next week's challenge is going to be a bit more difficult. Easier in some ways, more difficult in others.

Easier in the fact that it will be a turn-based puzzle, more difficult in that ultimately you will be moving more than just 2-objects at a time.

The name of this Apple ][ game is called, "PENSATE" and operates a little like chess. A little.

The object of the game is to take your piece from one side of the board, the bottom, and move it up to the top. You can move U D L R per move. To stop you will be other pieces on the board going from left to right, right to left, up to down, down to up, or more intelligent than this !

You're in luck ! I uploaded my Apple screen to video HERE:

As you can see the player makes 1-move to start with, but later levels 2 or more, and then the enemies make as many moves themselves to compensate.

What I propose is this, make this game, use the original images if you like, but only have enemies that are relatively easy to code. Perhaps three enemies for the first level, four for the second, five for the third, etc.

Maybe grant the player 3-lives and they gain a level every 2-levels.

Game could be concluded after level 8, for then there would be 10 opponents all bip-bopping around on the board.

Enemies could consist of single arrows facing a direction, moving randomly in a cross, moving randomly diagonally. They travel in that direction after the player makes their move. If for instance the arrow was LEFT and it moved LEFT off of the board, have them reappear to the far right to move left again when it's their turn.

The ones that wander randomly could also wrap around the screen, but not the player.

Any collision with the player counts as a hit and takes away one of the player's men. Lose all men, game over. Could score according to points. 10 for first level, 20 for second level, 30 for third, etc. so on the fourth level the player would have 60 points.

That's it ! As there is no video for this particular Apple ][ cart selection feel free to ask questions on how to proceed if need be. I will also be working on my tribute and version to return next week.

Hope to see you there !

P#72256 2020-01-26 18:08 ( Edited 2020-01-26 20:55)

Cart #t3dsd-0 | 2020-01-25 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

TO LOAD THIS Pico-8 cart in immediate mode type,

load #t3dsd

The current Applecart of 3D Space Dock is due tomorrow.

https://www.lexaloffle.com/bbs/?tid=36559

Thought I would write out my version NOW so it will be ready then.

As in the description it does follow the original 1978 version pretty closely with only one real difference.

In the original game you could collide on one screen with a stationary asteroid and collide into a meteor on the 2nd screen. Which in truth does not constitute a collision, but in the original game it did.

I fixed it so if you run into a 3-dimensional object, it confirms that it is the CORRECT object you are running into on both view screens.

To control your ship is very simple. Use the U D L R arrow keys and the (X) key to swap between side-view controls (default) and normal controls.

When normal controls are set the vertical for the 2nd screen will no longer be controlled but the vertical for the 1st screen will be. And vice-versa if you press (X).

You are scored according to how little fuel you expend and how quickly you can successfully dock to the space station. Score = FuelRemaining * 100 - TimeElapsed

As always the sourcecode to this game or any Applecart I put together is chock full of helpful remarks and information on every programming section. Be looking for them to help you in your own coding.

Questions, comments, or kerosene, please let me know in the comments. :)

Enjoy !

P#72243 2020-01-25 22:55 ( Edited 2020-01-26 03:23)

Cart #gf-0 | 2020-01-20 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

TO LOAD THIS Pico-8 cart in immediate mode type:

load #gf

You know how you see something somewhere and you tell yourself, that's pretty neat. I wonder if I can do that.

Well this is an actual classic example of that. I was looking at @LoveDan's interesting frame which appears and disappears:

https://www.lexaloffle.com/bbs/?tid=36564

Well I thought it might be interesting the way I do it, with a kind of sizzle sparkling line that moves over it like a mirror's light. Like a Star Trek transporter or Phaser disintegration.

The demo is a bunch of bouncing balls to show it really does run in the background and uses standard _DRAW() and _UPDATE() functions. Does not write to sprite area so you can animate sprites and stuff while it's running.

  • Press (O) to make the first text appear.
  • Press (X) to make the second text appear.
  • Press UP to clear the frame instantly.
  • Press RIGHT to start the frame's animation over.
  • Press LEFT to make it sparkle and disappear.
P#72133 2020-01-20 21:29 ( Edited 2020-01-20 23:27)

HELLO and welcome back to another exciting week of Applecart.

When we first started, we wanted you programmers out there to give us your own rendition of Apple ]['s own Saucer Attack, an old 6502-assembly Apple ][ game that was originally read in the computer by audiocassette. I could not find a video so I could only describe how it looked - and of course write my own version of what I saw.

There were two entries total, found HERE and HERE.


The week after that we had a new competition, to make a game called Saucer Invasion, slightly different from the above. In this case we had a bonus, a video to look at so we could indeed see the original game, its instructions, presentation, and operation.

Youtube video of Saucer Invasion.

So there were two entries on this one, and you can find those HERE and HERE.


LAST WEEK your challenge was to make the game BOMBER. We also had a video to look at so we could see the original game and the mechanics involved.

Youtube video of Bomber.

There were two entries also on this one, and you can find those HERE and HERE.


The cart request for this past week was a nice tribute to Star Wars, complete with sound bites if possible. We had =3= entries this time, good job guys !

Youtube video of Star Wars.

___


==PLAY GAME==
STAR WARS written by nosnibor28 (01-19-20)



==PLAY GAME==
STAR WARS written by dw817 (01-19-20)



==PLAY GAME==
STAR WARS AppleCart II by yesyoor (01-16-20)


This week's challenge is most definitely an interesting one. A 3-dimensional docking game. But before you turn in your chips realize it's very pseudo-3D, that is it shows two horizontal strips representing a top view of where you are and a side-view. You must control your ship not just Up, Down, Left, And Right, but To and Fro as well to navigate around the treacherous asteroids.

There will always be one rogue asteroid that is hurtling in the opposite direction. Your mission is to circumnavigate the asteroids including the rogue one and dock safely at the space station on the right-hand side of the screen. Your score will be based on how quickly you can do this.

As for programming you only need to move two different objects, the player and the single rogue asteroid. Other than that flag a collision if BOTH screens have the player touching an asteroid. You could even use PGET() if you like.

Here is the video:

As always you have one week to post your best rendering of this cart. May I recommend you use one button like (O) to do normal movements of UDLR and (X) for To and Fro as well as left and right. While there does not appear to be sound you are certainly more than welcome to add some as well as your own creative and graphic ideas.

Good luck out there !

P#72108 2020-01-19 23:46 ( Edited 2020-01-20 04:34)

Cart #applecart_starwars_dw817-0 | 2020-01-19 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
3

Hello and welcome to APPLECART's 4th week running ! The challenge for this week was to make a Star Wars game based on an old Apple ][ game. You can find it and other entries HERE.

I suppose I went a little overboard when I wrote this cart. While it does indeed follow a good portion of the original 1970 game, there's a bit of an Easter Egg in there that can only be found by the most diligent game player AND programmer.

That's right, you might need to look at the source code itself to see how to - for instance - what button to press to change names of the pilot, critical to winning the game. And yes there is a big gala ending if you have the right pilot and shoot down enough enemies.

Find any secrets ? If you want to post them, please use the HIDDEN blocks in typing so you don't spoil it for others.

Now Scrubsandwich said he would be interested in beefing up my paltry music attempts and update this cart. At this time he is more than welcome to do so.

Commands. Use arrow keys to select items and move your ship. Use the (O) button for laser and (X) for a photon torpedo. The torpedo counts 2 energy from your total but has a larger hitbox. There are severals secrets in the game that can help you breeze through the levels quite rapidly. It's up to you to find them.

And enjoy the game ! And feel free to write your own type of this game including any previous Applecart submissions that of Alien Attack, Alien Invasion, and Bomber. All found HERE.

P#72112 2020-01-19 23:22 ( Edited 2020-01-20 19:01)

Hello !

THIS map is from the JELPI demo written by ZEP

I recently wrote this rather nifty utility which will take a .p8 file, calculate all the sprites and the map, and then give you an option to save either as a .JPG or .PNG the entire visual map for reference. It is for WINDOWS and was requested HERE:

https://www.lexaloffle.com/bbs/?tid=36489

I am currently using MEDIAFIRE to host this file. If you can think of a better more reliable site to host it that would be fine.

You can find this utility HERE:

https://www.mediafire.com/file/zn3aefsbhtfmlj3/map2jpg_01-15-20.exe/file

You can speed it up and skip the logo animations by hitting ESC once it first comes up.

It actually has a few debug stuff running which is nice to see.

Choosing a P8 file it shows:

  1. The sprite set, hit a key.
  2. A quick scan of all sprites, hit a key.
  3. The map image ready to save, hit a key.
  4. Filebox, save as PNG or JPG
  5. Done !

If you have any questions or suggestions for further Pico-8 tools, please let me know.

HOPE THIS HELPS !

P#71984 2020-01-16 03:01 ( Edited 2020-01-16 03:09)

HELLO and welcome back to another exciting week of Applecart.

When we first started, we wanted you programmers out there to give us your own rendition of Apple ]['s own Saucer Attack, an old 6502-assembly Apple ][ game that was originally read in the computer by audiocassette.

There were two entries total, found HERE and HERE.

The week after that we had a new competition, to make a game called Saucer Invasion, slightly different from the above. In this case we had a bonus, a video to look at so we could indeed see the original game, its instructions, presentation, and operation.

Youtube video of Saucer Invasion

So there were two entries on this one, and you can find those HERE and HERE.

LAST WEEK your challenge was to make the game BOMBER based on THIS video.

This cart request was different from the others in that when the tank is hit by the bomb it blows up in a brilliant explosion where every pixel that made up the tank explodes outward. Quite lovely.

This week there were two entries. One of course by myself.


==PLAY GAME==
Bomber Revisited written by dw817 (01-12-20)



==PLAY GAME==
Bomber written by Nosnibor28 (01-11-20)


THIS WEEK's challenge (01-12-20) in lieu of the new movie out, "STAR WARS: The Rise Of Skywalker," is in fact STAR WARS. An interesting Apple ][ game in that you are given a choice of 2-different kinds of Ammo to fire at Empire Tie-Fighters in a pseudo 3-dimensional game which is straight out of the popular science fiction series.

Now before you say WAIT A MINUTE I CAN'T DO THAT ! Think about Pico-8 for a second. It has a mapper. What if ... just what if you drew that fancy target background in THERE from some well-placed 8x8 pixel sprites and then just just called MAP() to update the whole background of the screen ? That would do it.

Also as this game uses a regular Apple joystick, we are leaving the mouse behind for this one and you can code it using the arrow keys and (O) to fire a regular laser shot or (X) to fire a ball torpedo. The difference between the two the laser must be precise and counts as one energy while the torpedo doesn't need to be so precise yet counts two energy.

It is also possible for the enemy Empire ships to escape if you don't shoot them in time.

So good luck Squadron Leader ! The Resistance is counting on you !

P#71884 2020-01-12 22:40

Cart #bo-0 | 2020-01-12 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
3
TO LOAD THIS CART in Pico-8, in immediate mode type:

load #bo

BOMBER for the Apple ][ computer has always been one of my favorite quick-shot 6502-assembly machine-language games, and at 32k it was a marvel for what it did.

Using no BASIC code at all, neither Floating Point nor Integer and purely in machine-language it had a jet come from the right-hand side of the screen to soar to the left while a tank below plodded from left to right.

Your mission: to bomb the tank. But it wouldn't be easy. While the initial tank that appeared followed a fairly steady course, the ones to follow were tricky to hit as they sometimes even went in reverse.

To make it more difficult the bomb you dropped followed a slow but steady curve. It was up to you to determine the best way to hit the tank by dropping your bombs on it.

And while you were granted an unlimited number of bombs to drop, you only had 60-seconds in which to do so.

Bomber is my entry in this week's Applecart. You can find more information about this weekly event HERE.

Please enjoy BOMBER, one of the great games from the history of the Apple ][ computer - and especially feel free to read the source-code which is chock full of helpful remarks including how the particle explosion is done. Thanks !

P#71883 2020-01-12 22:02 ( Edited 2020-01-12 22:03)

HELLO and welcome back to another exciting week of Applecart.

When we first started, we wanted you programmers out there to give us your own rendition of Apple ]['s own Saucer Attack, an old 6502-assembly Apple ][ game that was originally read in the computer by audiocassette.

There were two entries total, and you can find those HERE:


==PLAY GAME==
Saucer Attack written by dw817 (12-29-19)



==PLAY GAME==
Destructoid written by chizel9000 (12-29-19)


The week after that we had a new competition, to make a game called Saucer Invasion, slightly different from the above. In this case we had a bonus, a video to look at so we could indeed see the original game, its instructions, presentation, and operation.

Youtube video of Saucer Invasion

So there were two entries on this one, and you can find those HERE:


==PLAY GAME==
Saucer Invasion 2020 by nosnibor28 (01-05-20)



==PLAY GAME==
Saucer Invasion by dw817 (01-05-20)


Your challenge for THIS week is to make this game. BOMBER.

And this just might introduce you to particle effects to handle the explosion.

Now those of you who have been in Pico-8 for some years may recognize me writing this game many years ago. And that's fine, this next Sunday I will release a new version of this cart chock full of helpful remarks. But THIS SUNDAY until then you are encouraged to write your own version.

And it doesn't have to be exact. If you want to add some new items, perhaps new sound effects and graphic eye candy in much the same that nosnibor28 and chizel9000 did with their carts, you are more than welcome to.

Here are some things to consider.

  1. Future versions of this game had the tank initially start out at one speed, but once bombed it would take off in a new speed and possibly in reverse making it that much harder to hit.

  2. You are encouraged to NOT have your sprites flicker. Tribute not clone.

  3. Your game does not need to be B&W, you can make it color if you like.

  4. Experiment with Pico-8's sound and you just might get a jet engine or a tank's motor.

  5. Instead of having the tank or jet blink from one side of the screen to the next when they reach the end of it, have them smoothly glide so it appears they are arriving on one side of the screen as they are leaving the next. You can see this in my Saucer Invasion game.

  6. Notice the bomb from the jet follows an interesting curve. It is this that makes the game challenging.

  7. Game should end if you run out of bombs or time.

  8. Jet of course cannot fire if bomb is already in air or tank is exploding.

Hope these ideas help, and see you then !

P#71777 2020-01-05 22:52 ( Edited 2020-01-05 23:29)

Cart #si-1 | 2020-01-05 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
4
TO LOAD THIS CART into pico-8, type in immediate mode:

load #si

See source-code full of remarks detailing what is happening.


This is my entry into this week's 🍎Applecart series.

The premise is simple but the gameplay is challenging.

You are given 15-missiles to shoot into the UFO in the sky. But your missiles do not just shoot straight out. They take a moment for the rockets to really get going so you'll need to predict where the UFO will be when your missile hits.

And the UFO does not take a straight course either and can change direction in a moment's notice. However the UFO does not take into account the missile's location.

It's up to you to rid our skies of these out-of-this-world visitors, and you only have 90-seconds in which to do it !

Classic start simulates a real Apple ][ computer complete with floppy-drive booting sounds.

Get 50-points for each UFO shot and lose 10-points for each time you miss.

Get through the game and see your final results.

Controls are MOUSE to simulate Apple's Paddle Zero and LEFT button to simulate Apple's button on the paddle.

P#71780 2020-01-05 18:15 ( Edited 2020-01-05 18:23)

Cart #up-1 | 2020-01-02 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
3

(01-02-20) If you just want to see it in action, try out the cart above and examine the source-code. For a more detailed demonstration including compression, try out the cart below this.

Cart #sccm-4 | 2020-01-02 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
3
TO LOAD THIS CART in Pico-8, in immediate mode type:

load #sccm

UPDATE (01-01-20) Removed all loose global variables.
UPDATE (12-31-19) Tightened code slightly.

The mapper for Pico-8 is a good idea, isn't it ? But maybe it doesn't cover all the space you need for all the levels you want in your game. Thus I have made (especially for Scrubsandwich) two useful functions.

One compresses map data to a 6-bit string.
The other decompresses map data from that 6-bit string.

And why would you use a string do you ask ? Quite simply so you can include it directly in your code.

To make use of the first function, STR=COMPRESMAP(H,V,X,Y)

Understand the 5-arguments used for this function:

  1. Where H and V are the top-left hand coordinates of the map you wish to compress.
  2. Where X and Y are the number of tiles across and down for the map you wish to compress.
  3. Where STR is the string that is recorded to.

For instance if you wanted to compress mapper data starting from coordinates 0,0 to 15,15 and wanted to save it in the string called "ROOM" that would be:

ROOM=COMPRESMAP(0,0,15,15)

Room would then be a 6-bit string of about 214-chars. Less if there were less tiles in that area.

. . .

The 2nd function is DECOMPRESMAP(H,V,STR)

Understand the 3-arguments used for this function:

  1. Where H and V are the top-left hand coordinates of where you will overwrite existing mapper data.
  2. Where STR is the 6-bit string that contains the mapper data you wish to overwrite at this position.

For instance if you wanted to decompress mapper data starting from coordinates 0,0 and wanted to use the 6-bit string called, "ROOM" that already contains the mapper data you want, that would be:

DECOMPRESMAP(0,0,ROOM)

Understanding that the SIZE of this map is already encoded in the 6-bit string and does not need to be entered later for decompression.

Thanks big to @merwok for considering using a function within a function. Works great and frees up the need to have true exposed global variables remaining after you compress or decompress.

ALSO important, forgot to mention. I am using the number 255 as a reference to compression so you CANNOT use sprite #255 in here if you want to maintain the compression. Nothing else is needed. You're still welcome to use all the sprites #0-254.

. . .

If you want to save the newly compressed 6-bit map string to your cart, in immediate mode type:

printh(t,"@clip")

Which will save it to your clipboard.

Then in your new cart, type out:

mapp="

(or whatever variable you want to create) with an opening quote. Press CTRL+V, then an ending quote "

Include the CHAR6 routine above and the DECOMPRES() function below and it's all you need !

And that's it. Feel free to try out this demo and examine the source-code to see how it was done. I hope you find these two functions useful and instrumental in your code.

Comments, Questions, Kerosene :) Let me know.

P#71599 2019-12-31 19:59 ( Edited 2020-01-02 17:47)

SOLVED: See @samhocevar's solution. Thanks everyone who contributed answers !

It's a pretty simple question that may not have so simple an answer.

Is there a way I can declare locally global variables inside a function.

By this I mean I define variables inside a function that meet two states.

  1. The variable is seen for the first time and is therefore initialized with a new value.

  2. The variable has been seen before and is NOT initialized but in re-entering this function it retains the same values it had before this same function was exited earlier.

I know I can simply declare global variables but what I wanted was to be able to retain values of simply named variables that might be just a single letter. Yet can only be seen and globally recognized by that local function.

Here is an example:

function _init()

word={"one","two","three"}

for i=1,#word do
  count(word[i])
end

end

function count(a)
localglobal n=0
  n+=1
  print(n.." "..a)
end

The results would be:

1 one
2 two
3 three

Understanding that the variable N inside the function of count() will have an entirely different value or no definition at all outside the function where it was not called or initialized.

Can this be done - or is there a kludge ?

P#71597 2019-12-31 18:53 ( Edited 2020-01-02 17:06)

Cart #mgst-1 | 2019-12-30 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
4

TO LOAD THIS CART in Pico-8, from immediate mode type:

load #mgst

UPDATE (12-30-19): web address

Metal Gear Solid was an incredible and groundbreaking 3-dimensional stealth game for the Sony Playstation released in the states back in 1998. Not only was it an incredible and challenging game the graphics for its time were nothing short of miraculous if you didn't count Final Fantasy 7.

This then is my tribute to the opening story, where Snake has infiltrated the lower levels, made it to the elevator, reaches the top and is at a secret base in Alaska where he is contacted by CODEC which stimulates the small bones in his ear of his mission and target.

Metal Gear is a copyrighted product of KONAMI.

For more information on this company and this superb game, go here.

Please enjoy my Metal Gear Solid tribute, for the Pico-8 Fantasy Console system.

P#71552 2019-12-30 21:04 ( Edited 2019-12-30 23:12)

Years ago there were only a handful of personal computers out there. The Apple ][ computer is the one I especially remember fondly.

In this I have created the "Applecart." A series of programming events that take old Apple ][ games and refurbish them written in Pico-8. And it's not just by one person.

Every Sunday I have given my team a challenge to write a particular Apple ][ game as well as they can in Pico-8. The only stipulation is it must follow the flow of the original game and try to keep the original sound effects if at all possible. Although creativity is definitely encouraged.

For instance I had remembered one game that I played by reading it off of audiocassette that had a UFO that played a sound that got lower in pitch the lower to the screen it was and higher, the higher it was. It would randomly shoot out a laser and try to hit the player. So the challenge was to hit the UFO fast and hard before the timer gave out, and there were a few ways you could play.

Either wait until the UFO was at the top of the screen where it rarely fired and then just peg it constantly, or wait until it comes low and dangerous and then try to sneak a shot in for higher points knowing that each time you were hit you lost 5-seconds of time.

You also could not fire your laser if you missed hitting your target until the UFO fires again. So it was definitely a strategy game.

And also if you did hit the UFO, you had to get out of there in a hurry as there was always retribution with him firing back. Thus like the original game it has the same controls. A paddle joystick or in this case, your mouse.

. . .

This week (12-29-19) we have the entries. While I couldn't find an exact Youtube video of it there was still one member who wanted to take a crack at it. Please enjoy:

(Destructoid) by Chizel9000

P#71515 2019-12-30 01:39 ( Edited 2020-01-05 23:27)

Cart #fmc-0 | 2019-12-28 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
3
TO LOAD THIS CART in Pico-8, type:

load #fmc

Pico-8 has the ability of setting any of 8-flags for a single tile or sprite from the spritesheet.

For instance, if you created a sprite which was the very first, number 0, and turned on flags 1 and 2, then if you used FGET(0) you would get back 3 as each flag counts as a power of 2, binary.

So this program is pretty powerful what it does.

It will return ALL collisions of a sprite around objects and return their flags. For instance in this example you can easily cross over tiles that have no flags set or the first flag is set (the shazy tiles), but it will not let you cross any tiles that have the 2nd or higher flags set, a wall.

If you are already on top of a tile that has the first flag set and attempt to then cross over into a tile that has the second flag set, you will get back the value 3 and movement will still be prohibited.

This collision function also allows free movement, that is you do not need to jump from one tile to another in steps of 8-pixels nor do you need to move only along a tight 8x8 grid. No, in fact you can freely move including diagonally and slide right along the walls into openings and out of and still return the correct values for collision.

HOPE THIS HELPS !

P#71476 2019-12-28 20:02 ( Edited 2019-12-28 20:03)

Cart #cs-1 | 2019-12-25 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
3

TO LOAD THIS CART in Pico-8, type in immediate mode:

load #cs

Methods of drawing snow have come a long way, haven't they ?

If there's one feature of Pico-8 I have learned about and enjoyed over the years are the two commands ADD and DEL.

With them you can add and delete elements inside an array without having to plug them up with other data or manually skip over them by setting a flag later.

This can especially be seen in my latest offering, "Component Snow."

And it does follow a set of rules.

  1. The snow falls vertically.
  2. If it is obstructed, that is there is snow directly beneath it, a comparison is made.
  3. Can it slide down to the left but the right side is blocked, yes ? Slide down to the left.
  4. Can it slide down to the right but the left side is blocked, yes ? Slide down to the right.
  5. Can it slide down either left or right ? Choose a direction randomly and do so.
  6. Can it not slide down at all ? Draw it then TERMINATE the array element carrying it.

And you can see what happens. Snow falls and it trickles down the edges if there's room for it to do so.
It does not stack itself up in vertical lines but slides down a slippery slope when it can find the chance to. The path of least resistance.

The number to the left shows the current number of active snowflakes. This is the number of snowflakes the computer is keeping track of at the time.

The number to the RIGHT shows the propensity of the snow. Use LEFT and RIGHT arrow keys to change this from a gentle drift to a blizzard.

Some interesting questions to ponder:

  1. What are the maximum number of snowflakes that can be active at any one time ?
  2. How would you write your code to ensure that the snow does not fall off the edges of the screen ?

Please enjoy and ...

MERRY CHRISTMAS

P#71398 2019-12-25 20:51 ( Edited 2019-12-27 16:44)

Alright, in the last article we covered how to fade a picture to black, now let's focus on the reverse, fading a screen's palette from black to a picture, and not just any picture, but one that is already animating and carrying on in the background.

First off understand once again we are NOT going be creating a 240-size table, no, just the nice and small 32 we have.

But now let's think about it. If the whole screen is black, how do you fade to the correct colors ? I mean if you look at the original fade routine it changes a lighter color to a darker and that new darker color is processed in the next pass. So how do you go from darkest to original colors ?

I'll let you think about that for a minute.

Got an answer ? Well, yes and no. Unfortunately the way you described is very complex and tedious. There's a much easier way.

Cart #ioac-0 | 2019-12-13 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

TO LOAD THIS CART in Pico-8, type:

load #ioac

To explain this, let's first off make a sample program that uses an iris opening. That is, a black circle will close in on a scene and open. Two keys (O) and (X) will close and open the iris and not be affected by what is going on in the background which is bouncing blocks.

You see the way the palette is fading to black in my earlier code is essentially drawing a black circle from the center and working your way outward. So how do you do this in reverse ?

Reversing time of course. :)

Pico-8 is fast enough that we don't need to create a massive lookup table that covers each color from where it WAS to where it IS now. No, all we need to do is multiple steps of FADING OUT but in reverse order.

You remember the IRIS opening above. You see that it is not drawing small circles from the center to out, no, it is drawing a circle larger than the screen, 3x thickness so no holes appear in it, and then works its way down.

But it is NOT just drawing one set, it draws all the way from the edge of the screen to the new smaller size inside, each machine cycle. So every single frame it is drawing multiple circles until it reaches its goal.

We're going to do the exact same thing with our palette dim method.

To do so, let's start a new project. Now instead of a single shot to dim the colors we put it in a loop so it COUNTS down the number of dimmed colors and does so. To reverse the effect we diminish the number of times we call it essentially "reversing time."

Here is the cart:

Cart #cfc-0 | 2019-12-13 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

TO LOAD THIS CART in Pico-8, type:

load #cfc

That concludes my tutorial on fading, not just to black but back again using the reverse order of levels of brightness via the palette.

Later we'll take a look at the ability to both lighten and darken pixels, not the entire palette but single elements around it, one pixel at a time.

P#70990 2019-12-13 18:32 ( Edited 2019-12-13 21:01)

Cart #wurorogoga-0 | 2019-12-13 | Code ▽ | Embed ▽ | No License

If you run the above cart, the moment you hit (O) you will see a pattern quickly appear before changing the palette. This apparently occurs when you make use of the extended color set.

A simple solution for now would be to make use of the extended set before your program actually starts up. Then while it still does it, you can curb it at the beginning.

This does not appear at all in the Pico-8 system though.

I am understanding now this is deliberate and intentional. Perhaps a type of way to punish programmers who want to make use of the extended palette. It currently only appears on the BBS but I suspect with the new Pico-8 release for purchasers, the "glitch" effect will be added there as well.

Understand it ONLY appears if you use the extended color set which most basic coders won't even know how to take advantage of yet.

Closing out this BUG ticket.

P#70964 2019-12-13 04:24 ( Edited 2019-12-13 20:13)

Cart #f2ba-5 | 2019-12-13 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2
TO LOAD THIS CART in Pico-8, type:

load #f2ba

Forced "disruption" early.

"Fade To Black." it's not just a video game it's a video game concept and one that's worth learning as it definitely looks good for any game cart where you want to not just jump screens but have one fade to black.

Now at first you might be thinking well HECK in order to do this properly I would need to create 16-different fadeout colors for each of the 15-colors yielding ... 240 colors I have to enter into a table !

Well, yes, you could do it that way, but an easier way is just to fade one color only one step.

And you're probably asking, how can you fade a whole picture just by fading one step ?

Because once you fade that one color to another THEN the next pass you fade that NEW color that just appeared.

Oh ! And yes that certainly is a lot easier. So you can see Fading is really not that difficult to do at all.

But we're not just going to fade the 15-colors to another of the 15-colors. We have a new palette. Let's make use of it ! And that's just what the cart above does - using the extended palette to give you 7-frames total in a fade.


Change MODE to 1 to test it with 16-color rectangles AND debug information on each color changed.

Cart #f2bb-3 | 2019-12-13 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2
TO LOAD THIS CART in Pico-8, type:

load #f2bb

Forced "disruption" early.

Alright ! So to make use of this fade in your code you can access the function FADEOUT() above which is ready to roll.

HOPE THIS HELPS !

P#70954 2019-12-13 04:09 ( Edited 2019-12-13 05:45)

Cart #esiyc-0 | 2019-12-11 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
8

IN ORDER to make use of this, you must load this cart in Pico-8.

load #esiyc

Now that you've become familiar with Pico-8's own Sprite Editor and are familiar with the unique way of changing the 16-colors to a different set, you may have already picked out a perfect 16-colors for your cart.

Yet in the sprite editor you have to manually remember what colors you've transposed with others which can be a bit of a headache.

I offer this simple solution. LOCK the colors in after the program exits.

So if you run this cart, (ctr-R), then press (O), then RIGHT after that press [ESC] to exit. You can then bring up your sprite editor and see your own custom palette in use, allowing you to easily color and paint the sprites using the custom color set you have created.

See for instance the mounted torch I made using 4-colors of green and 4-colors for the fire.

To reset back to default colors either type RUN and press [ESC] right then or run it through the entire cycle where the palette is restored manually. Typing RUN on any cart automatically resets any color changes you've made.

HOPE THIS HELPS !

P#70909 2019-12-11 18:52 ( Edited 2019-12-11 18:54)

View Older Posts
Follow Lexaloffle:        
Generated 2020-01-26 21:03 | 0.188s | 2097k | Q:236