CnC2UeqATNFAPMSASUMAGMI """)))UUUMMMBBB999|PP3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f333f3333f3ffffff3f̙3f3f3f333f3333f3ffffff3f̙3f3ffffffffff!___www V                p!  @ m!m n@h`EFF @ 3 `Z=   Y  Y Y Y Y Y  Y  <=              G@0DRY> uAmmmmmm*m:m:m:mmY/ I                                         e C ΁C@0DRYY  UAmmmmmmmmm U ,,, P: ΁΁΁AGMI{׻kϻ[ǻwwwcccSSSCCC333oSKC;{3k+Ww#G_7K'3 kWCw;k3_+S#C7g+K 3ssccSSGG;;33s++_##K7#ۧϏ{gWG7{+osccW WGK;;//ssKK##kS;#ۻÓoG#gc[WO;/s_K ;CϳÛscSwGg7W+K#ߧϏwwggSWCG3;w'/g#[K ; +ӃkgSK73# o_SC7'{cK7'o _##'#'#'#'##skkSS??ۧןϓLJsgߏ[ӃSsKgCW;K3?+{3#o+_OC3 '{k_OC3' wwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCJwC% CCCCCCC [[[[[[[D wCwCwCwCwCwCwCwCwCwC?wCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwC wCwC wC wCwC wC wC wC wC wCwCwC wCwCwCwCwCwCwCwCwCwCwCwCwCwC wC wCwC wC wC wC wCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwC}wCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwC wC wC wCwC9wCwCwC wCwCwCwCwCwCwCwCwCwCwCwCwCwCwC wCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwC wCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwC wCwC wC wC wC wC wCwCwCwC wCwCwCwC wCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwC wC wC wC wC wCwCZwCwCwC wC wCwC wCwC wCwC wCwC wCwC wCwC wCwCwCwCwCwCwCwCwCwCwCwCwCwC6wCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwC wCwCwCwCwCwCwCwCwCwCwC wC wCwCwCwCwCwCwCwC wCwCwCwCwCwCwCwCwCwCwCwCwCwC wC wC wC wCwCwC7wCwCwCwCwC wCwCwC wCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwC wCwC wCwC wCwC wCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCwCDwCgggwCwCwCv1.5 LApplicationWinS@WinOColo GEvt GloV   ,POneX,POneYʦ,PTwoX""")))UUUMMMBBB999|,PTwoY3f3,POneShootsff3fffff,PTwoShoots3f̙Menu 00H&File&New F2Pass&word&Pause Ctrl+PPla&yers Ctrl+Y&Quit Alt+F4&OptionsPlay &samples Ctrl+SPlay &musics Ctrl+M&Hide the menu F8&Full Screen Alt+Enter&Help&Contents F1&About...  P Y S MpqswScorLivePlas 88RFDGAZ&(%'&(%'&(%'RunOdAppI Abou Application1VIfoHlpf AppMLibTKeywPPROPWinSNIWPGEvtTVEaGloVLAVaMenuUNMPScorRCSPLiveVILPPlasYLPaRunOTPOPAppITBAPVIfoOFVaHlpfPLHaAppMEDMaLibTpBILKeywBILFrmLFramv1.5 LFrameTit Main GamePassPfSz@Colo PfOpPale {׻kϻ[ǻwwwcccSSSCCC333oSKC;{3k+Ww#G_7K'3 kWCw;k3_+S#C7g+K 3ssccSSGG;;33s++_##K7#ۧϏ{gWG7{+osccW WGK;;//ssKK##kS;#ۻÓoG#gc[WO;/s_K ;CϳÛscSwGg7W+K#ߧϏwwggSWCG3;w'/g#[K ; +ӃkgSK73# o_SC7'{cK7'o _##'#'#'#'##skkSS??ۧןϓLJsgߏ[ӃSsKgCW;K3?+{3#o+_OC3 '{k_OC3' wEvtFadI FadO NbOKeyw PPROPTitTITfPassDWPfPfSzFLPfPaleLAPfEvtEVEfFadINIFfFadOUOFfNbOBOBnKeywBILPltt{׻kϻ[ǻwwwcccSSSCCC333oSKC;{3k+Ww#G_7K'3 kWCw;k3_+S#C7g+K 3ssccSSGG;;33s++_##K7#ۧϏ{gWG7{+osccW WGK;;//ssKK##kS;#ۻÓoG#gc[WO;/s_K ;CϳÛscSwGg7W+K#ߧϏwwggSWCG3;w'/g#[K ; +ӃkgSK73# o_SC7'{cK7'o _##'#'#'#'##skkSS??ۧןϓLJsgߏ[ӃSsKgCW;K3?+{3#o+_OC3 '{k_OC3' w'class cHandleItemListCCAxv1.5LCCAItemKeywItNaSub-ApplicationItIc InkFAntAMFlaMNew Qual SFlgCFlgDFlgBFlgColo VisiSFFgLEvt PPROPKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiMNewWNMdMStaATSdMBalLABdMPlaALPdMMouUOMdMPatTAPdMGenNEGdMRacCARdLEvt Behavior #1TVEdQualAUQdSFlgRCSdCFlgLOCdDFlgPSDdSFFgLFFsicnI @CCAxv1.5LCCAItemKeywItNaSub-Application 2ItIc InkFAntAMFlaMNew Qual SFlgCFlgDFlgBFlgColo VisiSFFgLEvt PPROPKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiMNewWNMdMStaATSdMBalLABdMPlaALPdMMouUOMdMPatTAPdMGenNEGdMRacCARdLEvt Behavior #1TVEdQualAUQdSFlgRCSdCFlgLOCdDFlgPSDdSFFgLFFsicnI @/class cHandleItemListInstInstevpgEvtslnLxj%"ArialBold nxj%"Arial nxj%"Arial nxj%"Arial nxj%"Arial nxj%"Arial Remsclass CEvtRemarkListEvRk-Now you want to actually make the game. The principle of creating Split Screen Games with the Sub-Ap extension is that the 2 players are never actually in the same frame together. Instead Player 1 inhabits a frame where only he can be moved around and the screen follows this player. Player 2 inhabits a frame where only he can be moved and the screen follows him. Apart from this the frames must be identical. The interaction between players is therefore simulated between the two frames thanks to the Global Values being shared in both. This means, for example, Player 1's co-ordinates can be relayed from his frame to Player 2's, and in Player 2's frame an active object that looks like Player 1 will be positioned at these co-ordinates. This gives the impression that both players are in the same frame.EvRkTO PLAYTEST THE GAME YOU MUST "RUN APLLICATION" NOT "RUN FRAME" Player 1 Controls R, F, D, G and A to Shoot Player 2 Controls Arrow Keys and Shift to Shoot EvRkTutorial By Adam Butcher from Chemical X Games http://www.angelfire.com/games4/chemicalx Thanks to Circy for making me realise that this was possibleEvRkEINTRO When Circy made Mr Stump's Dentures the feature that struck me as being exciting was his 2-player split screen. The 2-player game in itself was rather dull, but it showed that split screen games could easily be achieved on MMF 1.5 What this tutorial aims to show is how to achieve a 2-Player Split Screen Game and improve upon Circy's example, namely: Adding a level of interaction between players Getting rid off that nasty screen stretching effect I admit that this tutorial is rather wordy, but I want people to understand it rather than just be able to copy itEvRkTo create a split screen game you need a frame that contains two Sub-Application extensions in it. Each Sub-Application must have the following boxes ticked: Customisable Size, the Global Values must be Shared (you'll see why later), and obviously Visible At Start If you want to avoid nasty Circy sreen stretching (which you do) make sure you dont have Stretch Frame To Objects Size ticked The only difference between the two Sub-Aps is that the first will be linked to Player 1's Frame (in this case Frame 2) and the other will be linked to Player 2's Frame (Frame 3). Obviously you'll need to toggle the Same Application button to be able to do this. EvRk9Lets now move over to Player 1 Frame to see the specificsEvOb class COIListEvOi Sub-ApplicationEvOi Sub-Application 2EvEd EvTeEvCs,!DNEnilnilFramv1.5 LFrameTitPlayer 1 FramePassPfSzColo PfOpPale {׻kϻ[ǻwwwcccSSSCCC333oSKC;{3k+Ww#G_7K'3 kWCw;k3_+S#C7g+K 3ssccSSGG;;33s++_##K7#ۧϏ{gWG7{+osccW WGK;;//ssKK##kS;#ۻÓoG#gc[WO;/s_K ;CϳÛscSwGg7W+K#ߧϏwwggSWCG3;w'/g#[K ; +ӃkgSK73# o_SC7'{cK7'o _##'#'#'#'##skkSS??ۧןϓLJsgߏ[ӃSsKgCW;K3?+{3#o+_OC3 '{k_OC3' wEvtFadI FadO NbOKeyw PPROPTitTITfPassDWPfPfSzFLPfPaleLAPfEvtEVEfFadINIFfFadOUOFfNbOBOBnKeywBILPltt{׻kϻ[ǻwwwcccSSSCCC333oSKC;{3k+Ww#G_7K'3 kWCw;k3_+S#C7g+K 3ssccSSGG;;33s++_##K7#ۧϏ{gWG7{+osccW WGK;;//ssKK##kS;#ۻÓoG#gc[WO;/s_K ;CϳÛscSwGg7W+K#ߧϏwwggSWCG3;w'/g#[K ; +ӃkgSK73# o_SC7'{cK7'o _##'#'#'#'##skkSS??ۧןϓLJsgߏ[ӃSsKgCW;K3?+{3#o+_OC3 '{k_OC3' w'class cHandleItemListDrBav1.5 LDrawBackItemKeywItNaQuick BackdropItIc InkFAntAMFlaObstPPROPKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiObstSBOsicnIGfll/BkDrv1.5 LBackdropItemKeywItNa BackdropItIc InkFAntAMFlaObstPPROPKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiObstSBOsicnI BkDrv1.5 LBackdropItemKeywItNa Backdrop 2ItIc InkFAntAMFlaObstPPROPKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiObstSBOsicnIActvv1.5 LActiveItemFadI FadO AltV KeywItNaPlayer1ItIc InkFAntAMFlaMNew Qual SFlgCFlgDFlgBFlgColo VisiSFFgLEvt MGen &&2222ess F1TPPROPFadINIFfFadOUOFfAltVLAVdKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiMNewWNMdMBalLABdMPlaALPdMMouUOMdMPatTAPdMRacCARdLEvt Behavior #1TVEdQualAUQdSFlgRCSdCFlgLOCdDFlgPSDdSFFgLFFsMGenNEGdicnIAnStAnixDirxImag22StoppedActvv1.5 LActiveItemFadI FadO AltV KeywItNa Player2simItIc InkFAntAMFlaMNew Qual SFlgCFlgDFlgBFlgColo VisiSFFgLEvt PPROPFadINIFfFadOUOFfAltVLAVdKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiMNewWNMdMStaATSdMPlaALPdMMouUOMdMPatTAPdMGenNEGdMRacCARdLEvt Behavior #1TVEdQualAUQdSFlgRCSdCFlgLOCdDFlgPSDdSFFgLFFsicnIAnStAnixDirxImag22StoppedActvv1.5 LActiveItemFadI FadO AltV KeywItNa Player1shotItIc InkFAntAMFlaMNew Qual TitSFlgCFlgDFlgBFlgColo VisiSFFgLEvt MBal &&nts<Tit;_;PPROPFadINIFfFadOUOFfAltVLAVdKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiMNewWNMdMStaATSdMBalLABdMPlaALPdMMouUOMdMPatTAPdMGenNEGdMRacCARdLEvt Behavior #1TVEdQualAUQdSFlgRCSdCFlgLOCdDFlgPSDdSFFgLFFsicnI AnStAnixDirxImag22StoppedActvv1.5 LActiveItemFadI FadO AltV KeywItNa Player2shotItIc InkFAntAMFlaMNew Qual SFlgCFlgDFlgBFlgColo VisiSFFgLEvt MBal &&<PPROPFadINIFfFadOUOFfAltVLAVdKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiMNewWNMdMStaATSdMBalLABdMPlaALPdMMouUOMdMPatTAPdMGenNEGdMRacCARdLEvt Behavior #1TVEdQualAUQdSFlgRCSdCFlgLOCdDFlgPSDdSFFgLFFsicnI AnStAnixDirxImag22Stopped/class cHandleItemList InstInstInstInstInstInstrInstFInstM InstL InstS?Inst4Inst InstevpgEvtsT: &P$1 $1  n xj%"Arial     nxj%"Arial  A."  $1z& 1." $1nxj%"Arial v &2#  v  &2#  n` xj%"Arial nxj%"Arial Remsclass CEvtRemarkListEvRkThe first event on the above line of code is to set two Global Values as following: POneX to Player 1's X Co-ordinate POneY to Player 1's Y Co-ordinate This basically means that as Player 1 moves his yellow circle about, its X and Y co-ordinates are constantly becoming Global Values which means they can be used in Player 2's frame The second event is that the screen is always scrolling 80 pixels to the right of Player 1's circle. This is because the actual screen sizes when split are 160, not 320. We need to offset the scrolling by 80 pixels so that the circle remains in the middle of the Player's screen. The level also needs to include a barrier blocking off the last 80 pixels of the level, so Players can't leave the screen. The last event is to set the Player2-Simulation Object to the co-ordinates as dicated by the Global Values: PTwoX and PTwoY. This means that the blue circle is following what the real Player 2 is doing in the other frame.EvRk>The above two lines are just movement programming for Player 1EvRkThe two lines above are how the Players shoot at eachother. When Player 1 presses his Shoot button (A) a shot is created in this frame and the Global Value POneShoots is set to 1. This Global Value means that Player 1 will also shoot in Player 2's frame. The second line is that when the Global Value PTwoShoots is set at 1, a shot is created at Player 2's Sim, and the Value is set back to 0. This means that when Player 2 shoots in his frame this Global Value is relayed to this frame and a shot is fired here as well.EvRkThe 4 lines above programs how the shots work. Remember that for collisions to work when they're outside the screen you need to tick the box: Handle Backround Collisions Even Out Of Window (Found in the frame properties)EvRk'Now lets move finally to Player 2 FrameEvOb class COIListEvOiPlayer1SpriteEvOi Player2simSpriteEvOi Player1shotSprite EvOi Player2shotSpriteEvEd EvTeEvCs,!DNE nilnilFramv1.5 LFrameTitPlayer 2 FramePassPfSzColo PfOpPale {׻kϻ[ǻwwwcccSSSCCC333oSKC;{3k+Ww#G_7K'3 kWCw;k3_+S#C7g+K 3ssccSSGG;;33s++_##K7#ۧϏ{gWG7{+osccW WGK;;//ssKK##kS;#ۻÓoG#gc[WO;/s_K ;CϳÛscSwGg7W+K#ߧϏwwggSWCG3;w'/g#[K ; +ӃkgSK73# o_SC7'{cK7'o _##'#'#'#'##skkSS??ۧןϓLJsgߏ[ӃSsKgCW;K3?+{3#o+_OC3 '{k_OC3' wEvtFadI FadO NbOKeyw PPROPTitTITfPassDWPfPfSzFLPfPaleLAPfEvtEVEfFadINIFfFadOUOFfNbOBOBnKeywBILPltt{׻kϻ[ǻwwwcccSSSCCC333oSKC;{3k+Ww#G_7K'3 kWCw;k3_+S#C7g+K 3ssccSSGG;;33s++_##K7#ۧϏ{gWG7{+osccW WGK;;//ssKK##kS;#ۻÓoG#gc[WO;/s_K ;CϳÛscSwGg7W+K#ߧϏwwggSWCG3;w'/g#[K ; +ӃkgSK73# o_SC7'{cK7'o _##'#'#'#'##skkSS??ۧןϓLJsgߏ[ӃSsKgCW;K3?+{3#o+_OC3 '{k_OC3' w'class cHandleItemListDrBav1.5 LDrawBackItemKeywItNaQuick BackdropItIc InkFAntAMFlaObstPPROPKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiObstSBOsicnIGfll/BkDrv1.5 LBackdropItemKeywItNa BackdropItIc InkFAntAMFlaObstPPROPKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiObstSBOsicnI BkDrv1.5 LBackdropItemKeywItNa Backdrop 2ItIc InkFAntAMFlaObstPPROPKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiObstSBOsicnIActvv1.5 LActiveItemFadI FadO AltV KeywItNa Player1simItIc InkFAntAMFlaMNew Qual SFlgCFlgDFlgBFlgColo VisiSFFgLEvt MSta Wizards::newimPPROPFadINIFfFadOUOFfAltVLAVdKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiMNewWNMdMStaATSdMBalLABdMPlaALPdMMouUOMdMPatTAPdMRacCARdLEvt Behavior #1TVEdQualAUQdSFlgRCSdCFlgLOCdDFlgPSDdSFFgLFFsicnIAnStAnixDirxImag22StoppedActvv1.5 LActiveItemFadI FadO AltV KeywItNaPlayer2ItIc InkFAntAMFlaMNew Qual SFlgCFlgDFlgBFlgColo VisiSFFgLEvt MGen &&ram2222PlayrPPROPFadINIFfFadOUOFfAltVLAVdKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiMNewWNMdMPlaALPdMMouUOMdMPatTAPdMRacCARdLEvt Behavior #1TVEdQualAUQdSFlgRCSdCFlgLOCdDFlgPSDdSFFgLFFsMGenNEGdicnIAnStAnixDirxImag22StoppedActvv1.5 LActiveItemFadI FadO AltV KeywItNa Player1shotItIc InkFAntAMFlaMNew Qual SFlgCFlgDFlgBFlgColo VisiSFFgLEvt MBal &&nts<Tit;_;PPROPFadINIFfFadOUOFfAltVLAVdKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiMNewWNMdMStaATSdMBalLABdMPlaALPdMMouUOMdMPatTAPdMGenNEGdMRacCARdLEvt Behavior #1TVEdQualAUQdSFlgRCSdCFlgLOCdDFlgPSDdSFFgLFFsicnI AnStAnixDirxImag22StoppedActvv1.5 LActiveItemFadI FadO AltV KeywItNa Player2shotItIc InkFAntAMFlaMNew Qual SFlgCFlgDFlgBFlgColo VisiSFFgLEvt MBal &&<PPROPFadINIFfFadOUOFfAltVLAVdKeywBILItNaTITiItIcNCIiInkFXFIiMFlaMEMiMNewWNMdMStaATSdMBalLABdMPlaALPdMMouUOMdMPatTAPdMGenNEGdMRacCARdLEvt Behavior #1TVEdQualAUQdSFlgRCSdCFlgLOCdDFlgPSDdSFFgLFFsicnI AnStAnixDirxImag22Stopped/class cHandleItemList InstInstInstInstInstInstrInstFInstM InstL InstS?Inst4Inst InstevpgEvtsnP xj%"Arial : &P$1 $1        $1." z& 1$1."  v &2# v &2#  n`xj%"Arial nxj%"Arial n&xj%"Arial Bold Remsclass CEvtRemarkListEvRkgTo make the 2 frames identical, the easiest option is to clone the first one once you've finished it. The only tweaks in the frame editor are that Player 2 becomes controllable and Player 1 gets a static movement. The programming is just the opposite of the frame we've just seen, with all Player 1's Global Values being recieved and Player 2's being sent.EvRk `I hope you found this tutorial informative and/or interesting. Good luck with your game making!EvRkFor the perfectionists however there is a slight, and as of yet unavoidable flaw in the system. If you move the players together on the main game and then move them in the same direction at the same time, you'll notice that the objects jostle a bit, and infact the player's positions are slightly different on each screen. As soon as the players stop moving however, the objects are in nice, identical positions on both screens. This flaw, I imagine, is caused by a slight lag between the two Sub-Aps. However, this is no tragic flaw, just a slight niggle for some people, including myself. I am hoping that this niggle is simply the result of my very slow computer, and everyone else is just wondering what I'm talking about. However, if someone does work out how to solve it (possibly by using something instead of Global Values), please contact me by my website or shout it out to the Click Community. EvRkAnd that concludes how to make a split screen game! This is obviously a very simple example, but I strongly believe that this opens up a largely unexplored area of Clickteam gaming. I'm sure that there are many good, original games that can be made from this system, especially as I have proved that the graphics don't need to be stretched and that the players can interact with eachother.EvOb class COIListEvOi Player1simSpriteEvOiPlayer2SpriteEvOi Player1shotSprite EvOi Player2shotSpriteEvEd EvTeEvCs,!DNE nilnilicnQImagImagImagImagC:\IMSI2\SplitScreen.cca