Port of MazezaM to the Intellivision for submission in the 2018 IntyBASIC programming contest.

awilliams fcb31d0461 fixing music/single to work with JimJazz.mid 1 year ago
graphics 496edb09c1 removed missing (hopefully deprecated) piskel file 1 year ago
images a69679126d add new animation of flip phone 1 year ago
levels 3017659b51 The level Two Front Doors was removed from the 10 levels to 30 levels (and was also modified on the Rock Box version) 2 years ago
notes 1a1c9d84f4 final thoughts on this for this morning 1 year ago
references 4572c4a2db it is helpful to have constants.bas as a reference as well 1 year ago
roms 38623a058e increment version number and comment out some unused code to reduce warnings 2 years ago
sandboxes fcb31d0461 fixing music/single to work with JimJazz.mid 1 year ago
.gitignore 8753cda8ad documentation for git ignore 1 year ago
ChangeLog.txt 21597ca75e update change log 2 years ago
Jim.MID 846024888a Jim's music (currently unused) 2 years ago
LICENSE bc0a24f445 Initial commit 2 years ago
Makefile 7f930202d7 organizing the level data currently used in this Intellivision game 2 years ago
MazezaM.bas 9938df0b84 now there are three scores of music yay 2 years ago
MazezaM.rom 5d8eb45d52 IntyBASIC bug? A loop of the form for i = 1 to 0 was running one iteration 2 years ago
README.md bead8bc415 README.md is a copy of manual.txt that displays automatically on the Simon's Rock git repository website 2 years ago
bitmapData.bas ae29e77f3f creation of DrawCharacterSc using clever bitwise defines for the poses ... big .rom size savings ... but the child colors still need to be fixed 2 years ago
constants.bas 8fd85b4dae small typo in constants.bas that you should send to nanochess 1 year ago
controller.bas e64fbe8137 toggling between 0-9 and A-J on the password screen was happening too quickly 2 years ago
levelData.bas 4a483125a2 levels with at most 8 columns now have each row pattern packed into a byte rather than a full 16-bit word 2 years ago
manual.txt 7709152112 adding a manual.txt file 2 years ago
myConstants.bas 2f4fce3af0 forgot to reinstate the constant for waiting 2 years ago
run.sh 9b0f3f400f Add a simple script for running the .rom with jzintv 2 years ago
screenData.bas 8966618414 change title screen to add SOS 2 years ago
sosData.bas 4a483125a2 levels with at most 8 columns now have each row pattern packed into a byte rather than a full 16-bit word 2 years ago
soundData.bas 9938df0b84 now there are three scores of music yay 2 years ago

README.md

Introduction

Welcome to MazezaM SOS for the Intellivision!

MazezaM is a puzzle game originally created by Malcolm Tyrrell (see the Credits section). This version of the game takes the player through all 30 Classic Levels and adds a new twist: In SOS levels the player must rescue another character before completing the level.

Warning: MazezaM puzzles are extremely challenging! How hard is the game? It is PSPACE-hard (see the Computational Complexity section)!

Story

Five children went exploring in MazezaM and have become trapped! You play as the fearless explorer Hannah and it is your mission to travel through the 30 levels and to bring the five children back to safety.

Objective

The goal of each level is guide the main character Hannah to the exit. In SOS levels the player must also guide a second child character to the exit.

Rules

MazezaM has many similarities to the famous block pushing game Sokoban. In both of these games grid-based puzzles the player can push, but not pull, boxes. The main differences between MazezaM and Sokoban are the following:

  1. Boxes can only be pushed horizontally and not vertically.
  2. If a single box is pushed horizontally, then all boxes in the row move.
  3. The goal is to exit the level rather than place the boxes on certain targets.

Controls

Use an Intellivision controller connected to either controller port to play MazezaM SOS.

When navigating the menus use the Enter key or the bottom-right action button to make selections and advance. Use the Clear key or the bottom-left action button to move backwards.

During a level Hannah is controlled using the Intellivision disc. In SOS levels the children are controlled with the number pad. The numbers 2, 4, 6, and 8 will move the child up, left, right, and down.

To reset your progress on a level press the Clear key or the bottom-left action button. This will cause the rows and the characters to move back to their initial positions. Pressing the Clear key or the bottom-left action button again will exit the level back to the Level Select screen.

During a level you may also press the top-left or top-right action button to pause the level. The pause screen will also display the level name and number as well as the number of moves required to earn 1, 2, or 3 Stars (see the Achievements section) and the current number of Stars earned on the level. The pause screen also shows the current password (See the Password section). SOS levels cannot be paused.

             ---------
             |       |            2: move child up
             | 1 2 3 |            4: move child left
             |       |            6: move child right
            [| 4 5 6 |]           8: move child down
             |       |          [,]: pause
            <| 7 8 9 |>              password toggle 0-9 and A-J
             |       |          <,C: reset / abort
             | C 0 E |               navigate backwards
             |       |          >,E: select
             ---------               navigate forwards

                ( )             ( ): move Hannah
                                     navigate menu options

Pro-Tip: On SOS levels a friend can control the trapped child by using the number pad on the opposite controller.

Characters

  • Hannah is the main character who plays in each level.
  • Otto communicates with Hannah at the beginning of the game and when she is approaching one of the children.
  • Renner is can be found after after level 6. He is not very experienced with MazezaM puzzles and should be easy to rescue.
  • Aja can be found after after level 12. They are trapped in a location that will require a little bit of thought to reach.
  • Habibah can be found after after level 18. She has experience with MazezaM levels and will be the first really challenging child to rescue.
  • Eve can be found after after level 24. She is the child that will be the most difficult to reach.
  • Nitin can be found after after level 30. He is known to be a bit of a joker.

Making and Saving Progress

Achievements

When completing each levels 1-30 you will be rewarded with 1, 2, or 3 Stars.

  • Earn 3 Stars by completing the level in the minimum number of moves possible.
  • Earn 2 Stars by completing the level using up to 20% more moves.
  • Earn 1 Star by completing the level using any number of moves.

The number of stars earned on each level 1-30 can be viewed from the Level Select menu. Stars are not earned during SOS levels.

When working on a level the top row of the screen will display two counters. The counter on the right is the total number of moves made so far and counts up. The counter on the left counts down based on the number of moves remaining to earn 3 Stars or 2 Stars. Once you have used more moves than the 2 Star accomplishment, this counter begins counting up to show how many extra moves that you have made.

The move counter (and your progress in the level) is reset by using the Clear key or the bottom-left action button. Immediately pressing these again will you to exit the level.

Unlocking

There are two types of level locking in MazezaM SOS.

  1. The SOS levels are locked based on the total number of stars earned.
  2. The levels 1-30 are locked based on the children that have been rescued.

You can attempt to rescue each of the children after earning the following number of stars.

  • 10 Stars: You can attempt to rescue Renner.
  • 20 Stars: You can attempt to rescue Aja.
  • 30 Stars: You can attempt to rescue Habibah.
  • 40 Stars: You can attempt to rescue Eve.
  • 50 Stars: You can attempt to rescue Nitin.

However, you must rescue the children in sequence. For example, you cannot attempt to rescue Habibah unless Aja has been rescued, even if you have already earned 30 or more stars.

The levels 1 - 6 are initially unlocked. After rescuing each of the children the following levels are unlocked.

  • Levels 7 - 12 are unlocked after rescuing Renner.
  • Levels 13 - 18 are unlocked after rescuing Aja.
  • Levels 19 - 24 are unlocked after rescuing Habibah.
  • Levels 25 - 30 are unlocked after rescuing Eve.

Completing the Game

The game is completed once Nitin is rescued. This will require rescuing Eve and earning 50 stars.

Completing MazezaM SOS will take most players dozens of hours of solid concentration, so you will want to save your progress!

Password

In MazezaM SOS you can save your progress using a password system. Each password saves the following information.

  • The number of Stars earned on each level 1 - 30.
  • The number of children that have been rescued.

You can view your current password in two ways.

  1. Pause the game during any of the levels 1 - 30. Note: You cannot pause the game in any SOS level.
  2. Navigate to the Password menu from the Main Menu screen. You can navigate back to the Main Menu by repeatedly pressing the Clear key or the bottom-left action button.

Each password is 20 characters long, and each character is a digit 0-9 or a letter A-J. For example, the following password gives you a total of 11 Stars and access to the first SOS level.

                         C168 05AD 4933 8B27

Note: Be mindful of the distinction between the digit 8 and the letter B. These two characters are distinct, but can look similar in the standard Intellivision font. The digit 1 and I are also similar.

You can enter a password from the Password screen which is available from the Main Menu.

To enter a password you can use the Intellivision disc, where left and right are used to select the position, and up and down are used to change the character.

You can also use the Intellivision keypad to enter your password more quickly. By default the keys 0-9 are used to enter that character. By pressing the top-left or top-right action button, these keys are toggled to letters A-J. Pressing the action button again will toggle the keys back to 0-9.

To enter a password press the Enter key or the bottom-right action button. To exit the Password Screen press the Clear key or the bottom-left action button.

Pro-Tip: When entering passwords it is faster to enter all of the digits 0-9 then toggle to the letters A-J and enter all of them.

Additional Notes

Credits

MazezaM was invented by Malcolm Tyrrell in 2000. He first released the game on the ZX Spectrum in 2002. In 2010 he won a video game contest by reimplemented the game to have 30 levels and take only 1kb in space.

The levels 1-30 in this port are identical to those in Malcolm’s 1kb version of the game in 2010 (except that the title of «A Mismatch Made in Heaven» was renamed «A Mismatch in Heaven» to fit on one line of Intellivision text).

This version of the game was created by Aaron Williams for entry in the IntyBASIC Programming Contest 2018. More specifically, Version 0.9 was submitted by email before the deadline, with minor optimizations and bug fixes having been made since then. The Atari Age subforum about the contest and the specific thread about this game are below.

http://atariage.com/forums/forum/194-intybasic-programming-contest-2018/ http://atariage.com/forums/topic/277362-entry-2018-mazezam/

The idea for the SOS mode was invented by Aaron Williams. This is the first version of MazezaM to include the SOS concept. The SOS levels were created in an academic paper discussed below.

History

MazezaM has been ported to nearly 40 different platforms and has been released as a commercial product on the Super Nintendo and the ColecoVision. For a complete list of available MazezaM games refer to Malcolm Tyrrell’s website.

https://sites.google.com/site/malcolmsprojects/mazezam-home-page

Computational Complexity

Ben North proved that MazezaM is NP-hard in an unpublished manuscript from 2008.

http://redfrontdoor.org/blog/?p=174 http://redfrontdoor.org/blog/wp-content/uploads/2012/10/MazezaM-NP-complete.pdf

The manuscript assumed that MazezaM would also belong in the class NP, and so the term NP-complete was used in the manuscript instead of NP-hard.

A sequence of MazezaM levels requiring an exponential number of moves to solve was published at the JCDCGGG 2017 conference by Greenblatt, Kopinsky, North, Tyrrell, and Williams.

http://www.jcdcgg.u-tokai.ac.jp/ https://www.researchgate.net/publication/318885919_MazezaM_Levels_with_Exponentially_Long_Solutions_Extended_Abstract

Ben North created a visualization showing how to solve these levels.

http://redfrontdoor.org/blog/?p=1361 https://bennorth.github.io/simpler-exponential-mazezam/index.html

These exponentially-long levels effectively force the player to count in binary using an alternate ordering called the binary reflected Gray code. They also formed the basis for the SOS levels in this port of the game, with the second character being trapped late in each level.

The authors of the JCDCGGG paper are currently working on an article that proves that MazezaM is PSPACE-complete, meaning that it is harder than NP-complete (unless NP = PSPACE).

License

MazezaM was released by Malcolm Tyrell under the GNU Public License and this has contributed to the large number of ports that have been written for it.

This version of MazezaM is also released under the GNU Public License, more specifically, GPL Version 3.0.