ECE 291
Computer Engineering II
Prof: John Lockwood: Spring 1999
 
Implementation:
 The technical specifications of "THE x86 MAZE" game are listed as follows.  Most of the action will be on a 2D map with a 3D background of a x86 microprocessor. All coding will be done in the INTEL x86 family assembly language.  We are coding in real mode with (13h) 320x200x256 graphics animation.  

There are many challenging aspects of our final project.  Firstly, none of our machine problems have dealt with Artificial Intelligence or Sound FX that will be key components of "THE x86 MAZE".  Our final project also involves (semi) large scale program integration.  These are the sorts of challenges and features that make our program different from other machine problems.  

A general description of "THE x86 MAZE" implementation is provided here. If you are looking for a more detailed/technical description please refer to the specific procedures listed in the procedures section of this write-up.  There you will find much more specific inputs, outputs, helper functions, assumptions, among other details of our project implementation.  
 

GAME ENGINE: 
- Real Mode x86 Assembly 
- VGA Graphics 
- Smooth-scrolling Screen (16 directions) 
- Mouse Pointer Interaction
MAZE AI: 
- AI computer players  
- Computer driven obstacles with AI 
- Map editor
NETWORKING: 
- Networking will be implemented by using the peer to peer  
  model via NETBIOS  
- 100 player network game capability 
 
 
 
 
PlayerType STRUC
 
BY: Mudassar Bashir
DESCRIPTION: The following structure defines what a player will be implemented like.
INPUT: (STRUC)
OUTPUT: (STRUC)
 
 PlayerType STRUC  
  game_status      db    PLAYERINACTIVE  ; Flag to describe if player  
  x_Posit          dw    2               ; game. 
  y_Posit          dw    2               ; The following variable  
  x_int_Posit      db    2               ; player's x and y  
  y_int_Posit      db    2               ; is implemented in terms of  
  x_Posit_old      dw    2               ; and column. 
  y_Posit_old      dw    2 
  x_int_Posit_old  db    2 
  y_int_Posit_old  db    2 
  direction        db    PLAYER_DOWN 
PlayerType ENDS 

Player PlayerType 64 dup(< >)            ; Player Array, to hold players.

 
DefaultMsg STRUC
 
BY: Mudassar Bashir
DESCRIPTION: The following data types define the types of messages that will be passed between players during the game.
INPUT: (STRUC)
OUTPUT: (STRUC)
 
REQUEST_ENTRY     EQU    59 
REFRESH_STATUS    EQU    60 
REQUEST_EXIT      EQU    61 

DefaultMsg STRUC                          ; Generic Message Structure 
  MsgType       db    ?                   ; 1-byte packet type identifier (See types below) 
  PlayerNum     db    63                  ; Player that transmitted the message 
DefaultMsg ENDS 

Request_EntryMsg STRUC                    ; Entry Message  
  MsgType       db    REQUEST_ENTRY 
  PlayerNum     db    63 
  Player_Color  db    0                   ; Player visual identifier on screen. 
Request_EntryMsg ENDS 

Refresh_StatusMsg STRUC                   ; Refresh Message 
  MsgType       db    REFRESH_STATUS 
  PlayerNum     db    63  
  incoming_Player PlayerType < > 
Refresh_StatusMsg ENDS 

Request_ExitMsg STRUC                     ; Exit Message 
  MsgType       db    REQUEST_EXIT 
  PlayerNum     db    63 
Request_ExitMsg ENDS

 
DefaultMsg STRUC
 
BY: Mudassar Bashir
DESCRIPTION: Uses library network call to initialize the network and  puts self player number in the MyNum variable.
INPUT: MyNum
OUTPUT: (STRUC)
CALLS:
NetINIT
 
SOUND FX: 
- MIDI sound FX  
- WAV sound FX 
 
 
 
WaveHdr STRUC
 
BY: Ajay Ladsaria
DESCRIPTION: Wave Header Struct
INPUT:
none
OUTPUT: none
CALLS:
None
 
 format db 'RIFF' 
 filelen dd ? 
 wavefmt db 'WAVEfmt_' 
 fmt_len dd ? 
 fmt_tag dw ? 
 channel dw ? 
 samples dd ? 
 bytesps dd ? 
 bkalign dw ? 
 bitsps dw ? 
 data db 'data' 
 datalen dd ? 
WaveHdr Ends 

sbuf_page0 db ? 
sbuf_offset0 dw ? 
sbuf_length0 dw 8192  ; 8 k - all that is guaranteed to not 
     ; cross a DMA Page. 
wavelength0 dw ? 
waveremaining0 dw ? 
wavInBuf0 dw ? 

sbuf_page1 db ? 
sbuf_offset1 dw ? 
sbuf_length1 dw 8192  ; 8 k - all that is guaranteed to not 
     ; cross a DMA Page. 
wavelength1 dw ? 
waveremaining1 dw ? 
wavInBuf1 dw ? 

;Pbuf  db 7 dup (?) 

mycounter dw -1 
needrefill dw 0 
wavhead WaveHdr < > format db 'RIFF' 
 filelen dd ? 
 wavefmt db 'WAVEfmt_' 
 fmt_len dd ? 
 fmt_tag dw ? 
 channel dw ? 
 samples dd ? 
 bytesps dd ? 
 bkalign dw ? 
 bitsps dw ? 
 data db 'data' 
 datalen dd ? 
WaveHdr Ends 

sbuf_page0 db ? 
sbuf_offset0 dw ? 
sbuf_length0 dw 8192  ; 8 k - all that is guaranteed to not 
     ; cross a DMA Page. 
wavelength0 dw ? 
waveremaining0 dw ? 
wavInBuf0 dw ? 

sbuf_page1 db ? 
sbuf_offset1 dw ? 
sbuf_length1 dw 8192  ; 8 k - all that is guaranteed to not 
     ; cross a DMA Page. 
wavelength1 dw ? 
waveremaining1 dw ? 
wavInBuf1 dw ? 

;Pbuf  db 7 dup (?) 

mycounter dw -1 
needrefill dw 0 
wavhead WaveHdr < >

(Back to Project Outline)
 

Autohor: Asher C. Martin 
Last updated: 4/30/1999