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

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

0 0 votes
Article Rating
Subscribe
Notify of
guest

2 Comments
Most Voted
Newest Oldest
Fifnmar
Fifnmar
3 years ago

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

Sebastiano Mandalà
Admin
Sebastiano Mandalà
2 years ago
Reply to  Fifnmar

tested and works fine