the cutting room mirror

Brataccas (Mac OS Classic)

Brataccas was pieced together from the smoldering remains of the infamous "mega-game" Bandersnatch. While its atmosphere and graphics were praised, the control scheme was...less than good.

Diskette Labels#

The game disk's title is never visible while booted from it, which is just as well since it misspells the company's name:

PSYGNONIS presents....

The title at initialization, preserved in sector 798, belonged to the copy protection scheme.

Xelok 2 sig

Creator Code#

Brataccas save files have the creator code Phil, presumably in reference to dev team member Philip Blackburn.

Source Code#

Uncompiled source exists at two locations.

Sectors 42–43#

ro handle is bad... exit
    move.l  #26,d0      ;set launch error
    _Syserror       ;system error
    jmp ResetVector ;exit if control is returned
    
SaveResult
    DC.L    0
    
GoBabe  move.l  a0,a1       ;save handle value
    _HLock          ;freeze rat thar!
    move.l  (a0),-(sp)  ;dereference handle into a pointer,
    clr.b   (sp)        ; clear off the upper attributes byte,
    move.l  (sp)+,a0    ;address of code 0
    jsr (a0)
    lea SaveResult,a2
    move.l  d0,(a2)
    move.l  a1,-(sp)
    _ReleaseResource    ;dump the code
    lea SaveResult,a2
    move.l  (a2),d0     ;restore result
  #endasm
  }
  


/* Code */
  
  Init()
    { 
    InitDialogs(0);
    TEInit();
    InitMenus();
    
    /* Desk Accessory menu */
      DeskMenu = NewMenu(Desk_ID,CtoPstr("\024"));
      AddResMenu(DeskMenu, 'DRVR');
      InsertMenu(DeskMenu, 0);
    
    /* Edit menu */
      EditMenu = N

Sectors 48–49#

re);
              TEClick(&event.where,
            (event.modifiers & shiftKey)? True:False, hTE);
              break;
              }
            case inDrag:
              {
              DragWindow(mouseWindow, &event.where, &screenRect);
              break;
              }
            case inGrow:
              {
              long growResult;
              short vert, horiz;
              growResult =
            GrowWindow(mouseWindow, &event.where, &screenRect);
              horiz = growResult;
              vert = HiWord(growResult);
              SizeWindow(mouseWindow, horiz, vert, True);
              EraseRect(&mouseWindow->portRect);
              InvalRect(&mouseWindow->portRect);
              SizeTE(mouseWindow);
              DrawGrowIcon(mouseWindow);
              break;
              }
            case inGoAway:
              {
              if (TrackGoAway(window, &event.where)) 
            {
            TEDispose(hTE);
            hTE = 0;
            DisposeWindow(window);
            window = 0;
            }
              break;
              }
            }
          }
        }
          else
        {
        switch ( windowcode )
          {
          case inMenuBar

References#


  1. Brataccas manual↩︎
  2. Popular Computing Weekly, 16–22 January 1986, p. 14↩︎
  3. Computer Entertainer, March 1986, p. 14↩︎