Code Monkey home page Code Monkey logo

speccy-misifu's Introduction

speccy-misifu (remeowed!)

Misifu Remeow! - zxspectrum

2021 version download

https://jbinary.itch.io/misifu-remeow

Colored

NOTE: Colored branch code is in https://github.com/jsmolina/speccy-misifu/tree/master-colored

Story

La pérrada ha raptado a Fred, y sólo lo liberará si destrozas las habitaciones del edificio del 
propietario del banco que ha deshauciado a sus amigos. ¿Cómo lo harás? Como ya sabes, 
¡a lo gatuno, misifu!
The dogad has kidnapped Fred, and they will only free him if you destroy the rooms of a building. 
This building belongs to the bank that evicted 'dogad' friends. How do you do it? 
Just be a cat, misifu!!

Controls: OPQA SPACE

Levels

EN

  • Alley. Try to jump inside a window, but be aware of the dog, he will try to bite you and take a live.
  • Cheese. Try to eat ALL the mousies. Some holes are connected if you press space, just discover them
  • Fishtank. Enter inside fishtank jumping inside it. Inside fishtank: eat all fishes but be aware of eels and oxygen.
  • Bookself. Destroy the vases in the bookself, but be aware of the spider, and the dog!
  • Bird. Throw the birdcage, eat the bird!
  • Sleeping dogs. Press space when on drinkers, be aware of touching them twice, or you'll awake them... and that's not ending so well.
  • Hearts. That's the last level and thus the most difficult. Reach the topmost without falling and you'll rescue Fred and see the ending. Game will restart from Alley after hearts.

ES Controles: OPQA / Kempston (b = pausa)

  • Alley. intenta saltar en una ventana, pero cuidado con el perro ya que intentará morderte y quitarte una vida!
  • Queso. Intenta comerte todos los ratones. Algunos agujeros están conectados si pulsas espacio, tendrás que descubrir cuáles.
  • Pecera. Entra en la pecera saltando sobre ella desde más arriba. Dentro de la pecera: cómete todos los peces, pero cuidado con las anguilas electricas y el oxígeno.
  • Estantería. Rompe los jarrones de la estanteria, pero cuidado con la araña... y como siempre, el perro!
  • Jaula/pajaro. Tira la jaula, cómete el pájaro y ojo con el perro.
  • Perros durmiendo. Presiona espacio en los bebederos, pero cuidado con tocar un mismo perro dos veces, o los levantarás... y ya sabemos que eso no acaba bien.
  • Corazones. Este es el último nivel, y el más dificil. Consigue llegar a lo más arriba y rescatarás a Fred, para ver el final. El juego empezará de nuevo en el callejón.

PT Controles: OPQA / Kempston (b = pausa)

  • Ruela. Tenta pular por uma janela, mas cuidado com o cão que tentará tirar-te a vida!
  • Queijo. Tenta comer todos os ratos. Alguns buracos estão conectados entre si, terás que descobrir quais.
  • Aquário. Entra no aquário, saltando de cima. Dentro do aquário: come todos os peixes, mas cuidado com as enguias elétricas e com o oxigénio.
  • Estante. Quebra os jarros da estante, mas cuidado com a aranha... E como sempre, com o cão!
  • Gaiola/Pássaro. Quebra a gaiola, come o pássaro e cuidado com o cão.
  • Cães a dormir. Pressiona a tecla de “espaço” nos bebedouros, mas cuidado para não tocares os cães duas vezes ou irás acordá-los... E já sabemos que isso não termina bem.
  • Corações. Este é o último nível e o mais difícil. Tenta chegar o mais alto possível e salvar Fred para ver o final. O jogo começa então novamente na ruela.

Apesar de se abrirem diferentes janelas... Só após terminares este nível, poderás passar ao próximo.

RU

Догад похитил Фреда, и они освободят его, только если вы уничтожите комнаты здания. Это здание принадлежит банку, который выселит друзей Догада. Как ты сделаешь это? Просто будь кошкой, Мисифу !!

Управление: OPQA SPACE / Kempston (b = пауза)

  • Аллея. Попробуйте прыгнуть в окно, но будьте внимательны с собакой, она постарается вас укусить и съесть.
  • Сыр. Попробуйте съесть всех мышей. Некоторые отверстия связаны, если вы нажмете пробел, то откроете их.
  • Аквариум. Войдите в аквариум, прыгнув в него. Внутри аквариума ешьте всех рыб, но помните о угрях и кислороде.
  • Книжная полка. Уничтожьте вазы на книжной полке, но будьте осторожны с пауком и собакой!
  • Птица. Сбрось птичью клетку и съешь птицу!
  • Спящие собаки. Нажимайте пробел, когда стоите на поилках, будьте внимательны, касаясь их. Если ты коснёшься их трижды, то разбудешь их … и это не так хорошо заканчивается.
  • Сердца. Это последний уровень и, следовательно, самый сложный. Доберитесь до самого верха, не упав, и вы спасете Фреда и увидите конец. Игра перезапустится с Аллеи после комнаты с сердцами.

Вы не сможете получить доступ к следующему уровню, пока не закончите текущий, неважно, в какое окно вы вошли.

Building

You'll need z88dk, so you could download it from here: http://nightly.z88dk.org/ (tested on v13056-e8264f0-20181009)

If you get a version error compiling it, please download https://github.com/stefanbylund/vt_sound then compile it, and copy lib/sdci_iy/vt_sound.lib into ay folder.

Just execute : $ make

Rebuilding sprites

Requires: https://github.com/jsmolina/png2sp1sprite

See the Makefile as it contains udg and sprites lines.

Contributions/suggestions are more than welcome!

Collaborators

  • jarlaxe, for the newer version with pixel-perfection sprites.
  • alvin, first for being author of the GREAT z88dk, and second for helping me with moving AY to bank 6.
  • ER on the graphic material.
  • nq for ingame music.
  • beykersoft for intro music.
  • Marcelo Nunes for the portuguese translation of instructions.

Special Thanks to

  • Timmy, helping with Splib offsets.
  • Matthew Logue helping with some testing.
  • Ivan Sánchez, motivation.
  • Alexey, helping on very good ideas.
  • Dario, who helped with feedback.

Dedicated to

Clàudia and Gemma :)

Why it is not Fred again?

First, the original, GREAT AND ORIGINAL game Alley Cat is what it is, and I have to give it a respect. Second, nowadays my daughter asks me for a female hero. Third, because misifu is a very affectionate way of calling a cat in Spain, my grandma did it so often.

Appearances on media of old version

Indieretronews: http://www.indieretronews.com/2019/01/alley-cat-ataridos-cat-classic-as-128k.html

Some youtube videos that game appeared:

Modern ZX-Retro Gaming (first walkthrough!) https://www.youtube.com/watch?v=2TCfAb7khP4&app=desktop

Arnau Jess https://www.youtube.com/watch?v=JFjiWd7ziHM

Javi Ortiz https://youtu.be/iBZ9AfL0jOo?t=161

Game running on a real +2A (mine) https://www.youtube.com/watch?v=v-mvxf3EnuI

Appearances on media of 2021 version

Indie Retro News

http://www.indieretronews.com/2021/03/misifu-remeow-if-you-loved-1980s.html

ElMundoDelSpectrum

http://www.elmundodelspectrum.com/nuevo-misifu-remeow-de-jordi/

PlanetaSinclair

https://planetasinclair.blogspot.com/2021/03/saiu-misifu-remeow.html

high-voltage.cz

https://www.high-voltage.cz/sortky/misifu-remeow-alley-cat-pro-zx-spectrum/

spectrum retro and new

https://spectrumandretronew.blogspot.com/2021/03/misifu-remeow-zx-spectrum.html

retroinvaders

https://retroinvaders.com/es/121381/nuevo-misifu-remeow-de-jordi

zx-pk.ru

https://zx-pk.ru/archive/index.php/t-30180.html

mechanism.fr

https://mechanism.fr/getRecord.php?id=747

idpixel.ru

https://idpixel.ru/news/2383-vyshla-misifu-remeow-remejk-alley-cat-na-zx-spectrum-s-uluchshennoj-grafikoj/en/

speccy-misifu's People

Contributors

jsmolina avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

speccy-misifu's Issues

hearts room

  • throw cupid arrow and destroy floor
  • make cat fall if floor is destroyed
  • exit from room if cat falls from bottom floor
  • add blowing cats that make this level a bit more difficult.

new remeow missing things

  • función reducida de memoria para pintar puntos.
  • mismo sample de sonido cuando te atrapan los cachorros que cuando te atrapa su papá
  • fix colisiones: cuerda lateral derecho y pecera.
  • versión coloreada
  • al capturar el pájaro a veces se ve fuera.
  • dar una vida cada 500 pts

Take alvin's input

https://www.z88dk.org/forum/viewtopic.php?pid=17010#p17010

Hi jordi,

I downloaded a zip and built the game - it's looking good! It's a little finicky with jumping onto the barrels in the first level; I don't know if that's how the original works or not but if not maybe a little smoothing over there would help smile

2018-10-29 10:06 AM 22,823 misifu_CODE.bin

The binary size is 22823 bytes and that has all code and data in it. ORG is at 25124 (zpragma.inc) so the program extends to ~ 0xbb4b.

I saw in your zpragma file that you created a single queue for the block memory allocator. I think this is a remnant from the Black Hole example as I can't see you using the block allocator anywhere. SP1 will call malloc implicitly to allocate memory when creating sprites but the Black Hole example actually overrides malloc to allocate using the block allocator instead. When using the heap, what happens is the crt will take memory from the end of your program (~ 0xbb4b) up to SP - 512 = 0xd000 - 512 = 0xce00 and add that to the heap. So in total there is about 0xce00-0xbb4b = 4789 bytes to create sprites. That sounds like it's quite a bit depending on what your are doing. If you exceed this amount, the create and addcol functions will fail with 0 and if you don't test for that you may see crashes when creating new sprites.

SP1 takes memory from the top of the memory space for its data structures and by default the memory map looks like this:
( https://github.com/z88dk/z88dk/blob/mas … sp1.m4#L35 )

Code:

# DEFAULT MEMORY MAP
#
# With these default settings the memory map is:
#
# ADDRESS (HEX)   LIBRARY  DESCRIPTION
#
# f200 - ffff     SP1.LIB  horizontal rotation tables
# f000 - f1ff     SP1.LIB  tile array
# d200 - efff     SP1.LIB  update array for full size screen 32x24
# d1ff - d1ff     SP1.LIB  attribute buffer
# d1f7 - d1fe     SP1.LIB  pixel buffer
# d1ed - d1f6     SP1.LIB  update list head - a dummy struct sp1_update acting as first in invalidated list
#  * d1ef - d1f0  SP1.LIB  update list tail pointer (inside dummy struct sp1_update)
# d1d4 - d1ec     --free-  25 bytes free
# d1d1 - d1d3     -------  JP to im2 service routine (im2 table filled with 0xd1 bytes)
# d101 - d1d0     --free-  208 bytes
# d000 - d100     IM2.LIB  im 2 vector table (257 bytes)
# ce00 - cfff ------- z80 stack (512 bytes) set SP=d000

You can see the stack is at the bottom so it's perfectly fine for the heap to take memory from the end of your program up to the stack.

Stefan's vt_sound library is assigning all pt3 related code and data to sections "code_user", etc, and you've put the song in "rodata_user" so it will all be part of your main binary. This is ok as you still have 4.7k space. If you ever needed to move that to another memory bank, you'd change the section assignment.

Your interrupt routine is a tiny bit off:

Code:

IM2_DEFINE_ISR_8080(isr)
{
   // update the clock
   ++tick;
   vt_play_isr();

   // todo this call only makes noise! vt_play_isr();

   if (row1_moving != NONE) {
        --row1_moving;
   }
}

An 8080 isr means only registers AF,BC,DE,HL are saved by the isr. This is ok for most lightweight interrupt routines like you have there with the exeception of "vt_play_isr()". "vt_play_isr" comes from the vt_sound library:

https://github.com/stefanbylund/vt_soun … nd.asm#L50

where you can see it's a standalone isr in its own right that preserves and restores all registers. The small problem is that at the end it re-enables interrupts when it returns meaning your isr's tail code (if row_moving...) is running with interrupts enabled. If you intended that to be atomic then it's not now. It may be better to have your isr preserve all registers and call the vt_play routine yourself:

Code:

IM2_DEFINE_ISR(isr)
{
   // update the clock
   ++tick;

   if (_vt_play_isr_enabled)
      vt_play_raw();

   if (row1_moving != NONE) {
        --row1_moving;
   }
}

The one problem with this is you want to call "VT_PLAY" as in ( https://github.com/stefanbylund/vt_soun … nd.asm#L67 ) but this symbol is not exported by the vtsound library. The one exported "_vt_play" ( https://github.com/stefanbylund/vt_soun … nd.asm#L67 ) disables and re-enables interrupts which is not what you want. So you would have to add an asm define to your project "defc _vt_play_raw = VT_START + 5" (see https://github.com/stefanbylund/vt_soun … nd.asm#L12 ) and make that public so that the c compiler can see "vt_play_raw" if you wanted to do this. Or you could just make the call to vt_play last in the isr so everything before it runs atomically. There's a little extra push/pop but that won't kill anyone.

I can't see anything that would cause a crash unless you are running out of memory for creating sprites. 4700 bytes is quite a lot but the amout of memory needed is also large for each sprite. If you allocate and forget to free when done or if you do a lot of allocating and freeing in a tight space you may get fragmentation problems in the heap, these may cause you to run out of sprite memory. Black Hole used the block memory allocator specifically to avoid fragmentation issues.

fish room

  • start
  • background
  • fishtank

En otra habitación, hay un acuario donde tenemos que bucear para comer a todos los peces, pero hay anguilas eléctricas, si permaneces mucho tiempo sumergido te puedes ahogar.

Ivan's feedback

  • [descartada] Los corazones deberían ser más anchos

  • poder saltar diagonal abajo en la habitación del queso.

  • [decidiendo] Deja la diagonal en la fase de la araña pleaseeeee 🙂

  • [decidiendo] También lo de que el salto sea más alto cuando el gato lleva un rato andando un rato 😉

Add Fx sounds

El ayfx editor de shiru te permite convertir wav a fxs de ay y funcionan con el mfx player de Gandalf

misifu 'caganera' feature

If there's room for more features, I would like to have a 'poo' feature for misifu, once per level.

x_poo will create (once per level and always on floor) a defecation that will force broom to clean it.

It will be the Catalan touch of 'caganer' tradition.

descarga 1

Cosas pendientes por hacer.

SPRITES:

  • Evitar que se corte el sprite de la gatita cuando salta o nada en vertical.

  • Sustituir el sprite del perro por el nuevo. Aplicarle las mismas propiedades que se le dió al "gato travieso". (Transparencia y color blanco)

  • Hacer que el sprite de la escoba, sea “transparente” como el teléfono, a ver si conseguimos que no pinte de negro las cortinas al pasar por encima.

  • Lo mismo con la gatita protagonista, a ver que tal reacciona el escenario si se le da esa propiedad.

  • El perro, es un incordio total! Si se le mantiene la cadencia en la que aparece en pantalla, por lo menos que corra un poco más lento. XD

PANTALLA DEL CALLEJÓN:

  • Si no se puede reducir la altura del salto de la gata, volver a hacer que se apoye en el cubo un tile más abajo. (Perderemos en vistosidad, pero es clave para la jugabilidad que salte de un cubo a otro para alcanzar la parte superior de la valla)

  • A la hora de entrar la gata en las ventanas abiertas, hay fallo en la caja de colisiones. Si salta la gata en vertical por la parte izquierda de la ventana, no consigue entrar.

  • Ventanas negras abiertas. Mirar si cambiando los atributos del “INK” de los UGD, conseguimos que se vean los sprites cuando pasan por encima de ellos. (eso serviría para todas las ventanas abiertas de todas las pantallas.

  • Poner ropa en el tendedero superior. (no creo que el coste en memoria sea mucho, y queda muy vistoso)

  • Decorar el suelo con los UGD extra de las piedras

  • Decorar el suelo con los UGD de puntitos que se usa para dar textura al queso.

  • mirar posición de donde ubicarlos en la pantalla que adjunté de ejemplo

  • Decorar la pared del edificio con el UGD extra de los ladrillos. (mirar posición de donde ubicarlos en la pantalla que adjunté de ejemplo)

PANTALLA DEL QUESO:

  • Usar los nuevos UGD para decorar la silla y la mesa. Y revisar cuando salta sobre ella

  • Decorar el queso con el UGD extra,

  • Respetar colocaciones textura del queso (pasaré un captura para que sirva de guía de donde colocarlos)

  • Decorar la ventana con el UGD extra de la barra de cortina.

bookshelf spider room

En otra, debemos juntar 3 helechos que están en lo alto del librero, evitando una gran araña, que bajara para evitarlo.

  • define udgs
  • paint bookshelf
  • add broom
  • paint spider
  • move spider

score and loosing lives

En todas las habitaciones, al terminar con un objetivo aparece una escala donde sumamos puntos dependiendo del tiempo que nos tomó.

Empezamos con tres vidas en modo normal, perdemos una cuando el gato es tocado por los enemigos (como la araña, la anguila eléctrica, etc.), o si el gato es golpeado por uno de los objetos que salen fuera de las ventanas. Si no podemos cumplir con los objetivos, para evitar perder una vida hay que salir por la ventana de la habitación, aunque no siempre es posible.

Migrate to SP1

As it looks so complex to deal with backgrounds, it should be better to migrate to SP1 library.

Currently I'm not getting good results with it, as I get:
captura de pantalla 2018-09-02 a las 9 57 57

While I should get:
captura de pantalla 2018-09-02 a las 9 59 08

bird room

Hay una mesa con un pájaro dentro de una jaula, en el medio de la habitación. Aquí hay que empujar la jaula para que se caiga, se rompa, el pájaro salga y lo atrapemos.

  • birdcage
  • birdcage falls
  • bird flies and it's catched.

dogfood room

Hay una habitación con muchos perros durmiendo, todos tienen enfrente un plato con leche, con el gato debemos tomarnos toda la leche sin despertar a los perros.

Game end

Después de completar los objetivos, el jugador regresa al callejón y aparece una gata en una ventana llamándolo. Al entrar, estamos en una habitación especial con muchos niveles para escalar con forma de corazón de San Valentín, donde hay gatos en cada nivel y salen disparadas flechas por todos lados. El objetivo es llegar a la gata en la cima maniobrando para evitar a los otros gatos y flechas, las flechas al tocar un corazón lo hacen sólido y apto para permanecer y escalar, o hacen lo contrario. En la versión para PC, las áreas los cuales podemos permanecer están en color púrpura, y los que no en color negro. En la versión para Atari 800, los colores son más vibrantes, los corazones sólidos tienen colores vibrantes y los que no opacos. Cada flecha tiene su propio color de acuerdo al espectro de colores del Atari 800. Aparecen regalos para evitar a los gatos por un corto periodo de tiempo. Las flechas nos bajan un nivel, pero si caemos del primer nivel, regresamos al callejón.

Si el gato llega a besar a la gata en el cuarto especial, avanzamos un nivel de dificultad y ganamos una vida. Esto puede continuar indefinidamente, pero la partida terminará si se acaban nuestras vidas.

new issues

  • 'culo blanco' cuando está en la cuerda (al menos cuando no está la ropa debajo).
  • hacer que el salto sea más controlable, por ejemplo haciendo que mientras tengas la tecla pulsada siga con el salto, y que al soltarla caiga justo donde la sueltas
  • al realizar un salto vertical si dejas la tecla pulsada, sigue realizando saltos de forma infinita hasta que sueltas
  • revisar colisiones en fase de peces
  • Y la de detección con la araña
  • Frames del perro
  • La ropa salta en bloque al llegar al final, quizá hacerlo solo con bloques que se pasen (dejarla llegar más a la derecha).
  • redistribuir agujeros del queso.
  • Añadir lampara en habitación
  • Barra de cortina blanca en habitación pre-pecera.
  • UDG de la pecera.
  • Aparece una anguila nueva por cada dos peces comidos
  • Sonidos antes de pelea con perro.

Improve controls and stability

found it's a bit strange and unpredictable
Mainly because the main game loop depends from the amount of animations
For example in case the linen ropes are moving, everything going a bit slow
and controlling too

First situation is when nothing animated and everything is fast, then the controlling is also fast, and key presses should be short
Second one, when the ropes are moving and player have to press keys longer
To make this better, I would propose to make controls independend from the amount of animations
either make ropes moving as fast as 1 frame
OR make 2 or 3 frames delay fixed, whether ropes are moving or not

I would like to propose you to make control processing in the IM2 subroutine, to be completely independent from everything happen in the game
It could be like this
int1: checking the keyboards and implement control logic
int2: pause
int3: pause
int4: pause
—— looping to int1
In this case control loop will be STABLE forever

Well, I would propose you to read about IM2 how it's implemented on the hardware level
first
So you can understand how to use it correctly

Help alvin with documentation of z88dk

SP1 is something I want to come back to to improve, mainly because the zx next makes some of the removed display modes relevant again. At one time it supported the timex hi colour mode and timex hi res mode (actually I think the hi res mode is still there) and at the same time I'd like to improve on some functionality.

There is a big backlog in needed documentation so any help there is great. Derek Fountain started a beginner's guide including an introduction to sp1 that he updates from time to time. You can se

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.