home *** CD-ROM | disk | FTP | other *** search
- rem Multiplayer Functionality
-
- gosub _findconnections : gosub _waitkey
- gosub _findsessions : gosub _waitkey
- gosub _createagame : gosub _waitkey
- gosub _findplayers : gosub _waitkey
- gosub _handlenetgame : gosub _waitkey
- gosub _handlesimplemessages : gosub _waitkey
- gosub _handlecomplexmessages : gosub _waitkey
- gosub _destroyagame
-
- rem End of Program
- end
-
- _findconnections:
-
- rem Set Network Connection
- perform checklist for net connections
- cls : print "CONNECTIONS (Can Occur In Any Order)"
- print
- for c=1 to checklist quantity()
- print c;". ";checklist string$(c)
- next c
-
- rem Have User Select a Connection
- SelectionIndex=0
- if checklist quantity()=0
- print "No Connections Found"
- else
- while SelectionIndex<1 or SelectionIndex>checklist quantity()
- print : input "Select A Number>";SelectionIndex
- input "Enter Additional Data ( IP Address or PhoneNumber )>";data$
- endwhile
- endif
-
- rem Set Connection
- if data$="" then set net connection SelectionIndex
- if data$<>"" then set net connection SelectionIndex,data$
-
- rem Prompt connection
- print : print "SELECTED ";checklist string$(SelectionIndex)
-
- return
-
- _findsessions:
-
- rem Set Network Session (Game On Selected Network Connection)
- perform checklist for net sessions
- cls : print "SESSIONS (Found on the Selected Connection)"
- print
- for c=1 to checklist quantity()
- print c;". ";checklist string$(c)
- next c
-
- rem Have User Select a Session
- SessionIndex=0
- if checklist quantity()=0
- print "No Sessions Found"
- else
- while SessionIndex<1 or SessionIndex>checklist quantity()
- print : input "Select A Number>";SessionIndex
- endwhile
- endif
-
- return
-
- _createagame:
-
- rem Create or Join a game
- if SessionIndex=0
- PlayerMax=4 : KindOfGame=1
- create net game "gamename", "playername", PlayerMax, KindOfGame
- else
- join net game SessionIndex, "playername"
- endif
-
- rem Was game created successfully
- if net game exists()=1
- print : print "GAME SESSION STARTED"
- else
- print "COULD NOT CREATE A SESSION"
- print "PRESS ANY KEY"
- wait key : end
- endif
-
- return
-
- _findplayers:
-
- rem Create an EXTRA Player (used rarely)
- cls : print : print "EXTRA PLAYER CREATION"
- PlayerNumber = create net player("NPC Player")
-
- rem Find all current players in game
- perform checklist for net players
- print : print "PLAYERS (At Time Of Call)"
- print
- for c=1 to checklist quantity()
- print c;". ";checklist string$(c);" ID:";checklist value a(c);" UNIQUE:";checklist value b(c);" ";
- if checklist value c(c)=1 then print "(me) ";
- if checklist value d(c)=1 then print "(host) ";
- print
- next c
-
- rem Delete the EXTRA Player (used rarely)
- print : print "EXTRA PLAYER DESTRUCTION"
- free net player PlayerNumber
-
- return
-
- _handlenetgame:
-
- rem Network game can change during session
- while mouseclick()<>2
- cls : print "HANDLE NET GAME (Right Mouse Button To Continue)" : print
- if net game now hosting()=1 then Hosting=1
- if Hosting=1 then PRINT "THIS PLAYER IS NOW HOSTING THE GAME"
- if net game lost()=1 then LostGame=1
- if LostGame=1 then PRINT "THE GAME SESSION WAS LOST"
- returnvalue=net player created()
- if returnvalue>0 then PlayerIn=returnvalue
- if PlayerIn>0 then PRINT "A NEW PLAYER HAS JOINED THE GAME (";PlayerIn; ")"
- returnvalue=net player destroyed()
- if returnvalue>0 then PlayerOut=returnvalue
- if PlayerOut>0 then PRINT "A PLAYER HAS LEFT THE GAME (";PlayerOut; ")"
- sync
- endwhile
-
- return
-
- _handlesimplemessages:
-
- rem Network game can communicate numbers and strings
- while inkey$()<>"x"
- cls : print "HANDLE NET MESSAGES (Press X To Continue)"
-
- rem Show Latest Return Values
- print
- print "TO: ";ReturnTo
- print "FROM: ";ReturnFrom
- print "INTEGER: ";ReturnInteger
- print "FLOAT: ";ReturnFloat#
- print "STRING: ";ReturnString$
- print
-
- rem Send Part
- if mouseclick()=1
- print "SENDING..."
- send net message integer 0,mousex()
- send net message float 0,mousey()*1.0
- send net message string 0,"hello world"
- endif
-
- rem Receive Part (from all other players)
- get net message
- if net message exists()=1 then print "RECEIVING..."
- while net message exists()=1
- ReturnTo=net message player to()
- ReturnFrom=net message player from()
- if net message type()=1 then ReturnInteger=net message integer()
- if net message type()=2 then ReturnFloat#=net message float()
- if net message type()=3 then ReturnString$=net message string$()
- get net message
- endwhile
-
- sync
-
- endwhile
-
- return
-
- _handlecomplexmessages:
-
- rem Network game can communicate sounds, images and 3D data
- while inkey$()<>"z"
-
- rem User Prompt
- cls : print "HANDLE ADVANCED NET MESSAGES (Press Z To Continue)"
- print "PRESS [1] through [5] to SEND RESOURCE"
-
- rem Show Latest Return Values
- print
- print "TO: ";ReturnTo
- print "FROM: ";ReturnFrom
- print "MEMBLOCK: ";ReturnMemblockIndex
- print "IMAGE: ";ReturnImageIndex
- print "BITMAP: ";ReturnBitmapIndex
- print "SOUND: ";ReturnSoundIndex
- print "MESH: ";ReturnMeshIndex
- print
-
- rem Send Part
- k$=inkey$()
- if k$>="1" and k$<="5"
- print "SENDING..."
- GuarenteePacket=1
- if k$="1"
- MemblockIndex=1
- make memblock MemblockIndex, 1024
- send net message memblock 0, MemblockIndex, GuarenteePacket
- delete memblock MemblockIndex
- endif
- if k$="2"
- ImageIndex=1
- get image ImageIndex, 0, 0, 64, 64
- send net message image 0, ImageIndex, GuarenteePacket
- delete image ImageIndex
- endif
- if k$="3"
- BitmapIndex=1
- load bitmap "face.bmp", BitmapIndex
- send net message bitmap 0, BitmapIndex, GuarenteePacket
- delete bitmap BitmapIndex
- endif
- if k$="4"
- SoundIndex=1
- load sound "gun.wav", SoundIndex
- send net message sound 0, SoundIndex, GuarenteePacket
- delete sound SoundIndex
- endif
- if k$="5"
- MeshIndex=1
- load mesh "mesh.x", MeshIndex
- send net message mesh 0, MeshIndex, GuarenteePacket
- delete mesh MeshIndex
- endif
- endif
-
- rem Receive Part (from all other players)
- get net message
- if net message exists()=1 then print "RECEIVING..."
- while net message exists()=1
- ReturnTo=net message player to()
- ReturnFrom=net message player from()
- if net message type()=4
- ReturnMemblockIndex=1
- net message memblock ReturnMemblockIndex
- print "MEMBLOCK SIZE:";get memblock size(ReturnMemblockIndex)
- sync
- delete memblock ReturnMemblockIndex
- endif
- if net message type()=5
- ReturnImageIndex=1
- net message image ReturnImageIndex
- paste image ReturnImageIndex,50,50
- sync
- delete image ReturnImageIndex
- endif
- if net message type()=6
- ReturnBitmapIndex=1
- net message bitmap ReturnBitmapIndex
- copy bitmap ReturnBitmapIndex,0
- sync
- delete bitmap ReturnBitmapIndex
- endif
- if net message type()=7
- ReturnSoundIndex=1
- net message sound ReturnSoundIndex
- play sound ReturnSoundIndex
- sync
- delete sound ReturnSoundIndex
- endif
- if net message type()=8
- ReturnMeshIndex=1
- net message mesh ReturnMeshIndex
- backdrop off
- make object 1,ReturnMeshIndex,0
- sync
- delete object 1
- delete mesh ReturnMeshIndex
- endif
- get net message
- endwhile
-
- rem Update screen
- sync
-
- endwhile
- return
-
- _destroyagame:
-
- rem Free the current game session
- free net game
-
- return
-
- _waitkey:
- print : print "Press Any Key"
- wait key
- return
-
-