knowing how short my memory is, I saved all my professional life memories in a folder on my HD. Some of those memories are meaningful only to me, but why not sharing my first, completed game (yeahh it was 1997…I think) ?

The version I am linking is actually the second version of the really original one. Both are a remix of Puyo Puyo, game that I loved to play when I used to play with the arcade games in my city, Palermo.

This game had another very important feature, was not implementing any scrolling, a technique that I did not know how to implement at that time :).

The game presented some new features (like special bubbles, when played in special mode) and a nice AI. The language used, Pascal, was the language that I was learning at the high school. Turbo Pascal was the compiler and the source code was also featuring a lot of 16 bit inline assembly 🙂

The game was developed by me and a friend of mine with an astonishing 386DX 40mhz and a 286 16mhz with 20mb of hard disk :D.

Pascal source example:

PROCEDURE CADIPIETRE(PLAYER:GIOCATORI);
VAR
   INDX,I:BYTE;
   INDY,J:SHORTINT;
   X,Y:WORD;
BEGIN
     X:=STARTX[PLAYER]+1;
     FACENDOSTO[PLAYER]:=NORMALING;
     FOR I:=1 TO 6 DO
     BEGIN
     IF (PIETREBUFF[PLAYER][I]<>0) AND (HIGHNOW[PLAYER][I]>=0) THEN
     BEGIN
       IF HIGHNOW[PLAYER][I]-PIETREBUFF[PLAYER][I]=43 THEN TOSCREEN(X,Y-16,X+18,Y,FISSO);
                    COPYPUTSCR(X,Y,FRAME[PIETRA][0],0,FISSO);
                    TOPOINTER(X,Y,X+18,Y+16,FISSO);
                    INC(INDPIETRE[PLAYER]);
                    TABPIETRE[PLAYER][INDPIETRE[PLAYER]].INDX:=X-1;
                    TABPIETRE[PLAYER][INDPIETRE[PLAYER]].INDY:=((J-1) SHL 4)+27;
                    TABPIETRE[PLAYER][INDPIETRE[PLAYER]].TIPO:=0;
               END;
               DEC(HIGHNOW[PLAYER][I],PIETREBUFF[PLAYER][I]);
               PIETREBUFF[PLAYER][I]:=0;
             END
              ELSE
                  BEGIN
                    INC(COORDPBUFF[PLAYER][I],16);
                    Y:=COORDPBUFF[PLAYER][I];
                    IF Y>=43 THEN TOSCREEN(X,Y-16,X+18,Y,FISSO);
                    FOR J:=0 TO PIETREBUFF[PLAYER][I]-1 DO
                     BEGIN
                       IF Y>=27 THEN COPYPUTSCR(X,Y,FRAME[PIETRA][0],0,FISSO);
                       INC(Y,16)
                     END;
                    FACENDOSTO[PLAYER]:=CADETING;
                  END;
     END;
     INC(X,18);
     END;
END;

assembly source example:

PROCEDURE FASTPUTSCR(X1,Y1:WORD;VAR CAPT:ARRAY OF BYTE);ASSEMBLER;
     ASM
        MOV  DI,X1 {MUOVO IN DI X1}
        MOV  AX,Y1 {MUOVO IN AX Y1}
        XCHG AH,AL {MOLTIPLICO AX*256}
        ADD  DI,AX {SOMMO A X Y*256}
        SHR  AX,2  {DIVIDO AX 4 FA 64 E SI PUO' SOMMARE}
        ADD  DI,AX {A X}
        PUSH DS
        LDS SI,CAPT
        MOV AX,0A000H
        MOV ES,AX
        MOV DX,320
        INC SI
        MOV AL,[SI]
        XOR AH,AH
        SUB DX,AX
        INC SI
        MOV BL,[SI]
        INC SI
        @Ciclo2:
          MOV CX,AX
          SHR CX,1
          REP MOVSW
          ADC CX,CX
          REP MOVSB
          ADD DI,DX
          DEC BL
        JNZ @Ciclo2
        POP DS
     END;

one screen shot:

g2shot

Link to the game: https://docs.google.com/open?id=0B3zwSfMivwvBNmNxYVJGcmwtR0k

powered by dosbox and I can say..it is still fun 🙂

Edit: Unluckily it seems like dosbox does not support very well all the powerful code behind this game and it crashes while playing the second level. If you know other good DOS emulators, please let me know.

0 0 votes
Article Rating
Subscribe
Notify of
guest

2 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
Fifnmar
Fifnmar
9 months ago

Hey, just to remind you that the Google Doc link is forbidden.

Sebastiano Mandalà
Admin
Sebastiano Mandalà
6 months ago
Reply to  Fifnmar

tested and works fine