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