/* -------------------------------------------------------------------------------- Duke Nukem 3D SplitScreen mod Beta 1 By Bloodclaw Modified from original for use with EDuke32 SVN. Usage: eduke32 splitscr.con -q2 -------------------------------------------------------------------------------- */ include GAME.CON // Those are inventory parts definequote 160 ON definequote 161 OFF definequote 162 % definequote 163 AUTO // Key name definitions definegamefuncname 11 P2_Move_Forward definegamefuncname 12 P2_Move_Backward definegamefuncname 13 P2_Turn_Left definegamefuncname 14 P2_Turn_Right definegamefuncname 17 P2_Aim_Up definegamefuncname 18 P2_Aim_Down definegamefuncname 19 P2_Fire definegamefuncname 20 P2_Open definegamefuncname 21 P2_Jump definegamefuncname 22 P2_Crouch definegamefuncname 23 P2_Inventory definegamefuncname 24 P2_Inventory_Left definegamefuncname 25 P2_Inventory_Right definegamefuncname 26 P2_Quick_Kick definegamefuncname 27 P2_Previous_Weapon definegamefuncname 28 P2_Next_Weapon gamevar pid 1 0 // This hold player 2 id gamevar pnum 0 0 // This is set to player 2 sprite number // Temp variables gamevar px 0 0 // Player (both 1 and 2) X coordinate gamevar py 0 0 // Player Y coordinate gamevar pz 0 0 // Player Z coordinate gamevar psect 0 0 // Player sector number gamevar pang 0 0 // Player angle gamevar phoriz 0 0 // Player vertical angle gamevar phorizoff 0 0 // Something similar gamevar pangcos 0 0 // Cosinus of player angle (used for player 2 movements) gamevar pangsin 0 0 // Sinus of player angle gamevar pinput 0 0 // Set to input, used in the PROCESSINPUT event gamevar pcrosshair 0 0 // Do you like crosshairs? Game options will tell. gamevar phealth 0 0 // Player health gamevar pweapon 0 0 // Player weapon gamevar pammo 0 0 // Player ammo gamevar pinv 0 0 // Player inventory gamevar pinvv 0 0 // Item amount gamevar pinva 0 0 // Item activated? gamevar pinvvx 0 0 // Sometimes, item icons must be realigned gamevar pfta 0 0 // Both used for quotes gamevar pftq 0 0 gamevar pcolor 0 0 // Used to display quotes with player color gamevar p1heat 0 0 // Common night vision googles gamevar p2heat 0 0 gamevar pcard 0 0 // Access cards // Following states are used in the hud state dispinvamount ifvare pinvv 100 setvar pinvvx 98 else ifvarg pinvv 9 setvar pinvvx 100 else ifvarl pinvv 10 setvar pinvvx 102 minitext 104 190 162 0 6 digitalnumber THREEBYFIVE pinvvx 190 pinvv 0 0 26 0 0 xdim ydim ends state dispinvonoff ifvarg pinva 0 minitext 100 180 160 0 0 // ON else minitext 96 180 161 0 21 // OFF ends state dispinvamount2 ifvare pinvv 100 setvar pinvvx 258 else ifvarg pinvv 9 setvar pinvvx 260 else ifvarl pinvv 10 setvar pinvvx 262 minitext 264 190 162 0 6 digitalnumber THREEBYFIVE pinvvx 190 pinvv 0 0 26 0 0 xdim ydim ends state dispinvonoff2 ifvarg pinva 0 minitext 260 180 160 0 0 // ON else minitext 256 180 161 0 21 // OFF ends // Crosshair need to be redone for two players onevent EVENT_DISPLAYCROSSHAIR setvar RETURN -1 endevent // For some reasons, next and previous weapon actions will never pick expander or foot onevent EVENT_NEXTWEAPON getplayer[THISACTOR].curr_weapon pweapon ifvare pweapon 11 { setplayer[THISACTOR].curr_weapon 7 setvar RETURN -1 } else ifvare pweapon 9 { setplayer[THISACTOR].curr_weapon 0 setvar RETURN -1 } else ifvare pweapon 6 { setplayer[THISACTOR].curr_weapon 11 setvar RETURN -1 } endevent onevent EVENT_PREVIOUSWEAPON getplayer[THISACTOR].curr_weapon pweapon ifvare pweapon 11 { setplayer[THISACTOR].curr_weapon 6 setvar RETURN -1 } else ifvare pweapon 1 { setplayer[THISACTOR].curr_weapon 0 setvar RETURN -1 } else ifvare pweapon 7 { setplayer[THISACTOR].curr_weapon 11 setvar RETURN -1 } endevent // Disable all the following keys, need room for player 2 onevent EVENT_LOOKUP // Move Forward setvar RETURN -1 endevent onevent EVENT_LOOKDOWN // Move Backward setvar RETURN -1 endevent onevent EVENT_LOOKLEFT // Turn Left setvar RETURN -1 endevent onevent EVENT_LOOKRIGHT // Turn Right setvar RETURN -1 endevent onevent EVENT_AIMUP // Aim Up setvar RETURN -1 endevent onevent EVENT_AIMDOWN // Aim Down setvar RETURN -1 endevent onevent EVENT_WEAPKEY1 // Fire setvar RETURN -1 endevent onevent EVENT_WEAPKEY2 // Open setvar RETURN -1 endevent onevent EVENT_WEAPKEY3 // Jump setvar RETURN -1 endevent onevent EVENT_WEAPKEY4 // Crouch setvar RETURN -1 endevent onevent EVENT_WEAPKEY5 // Inventory setvar RETURN -1 endevent onevent EVENT_WEAPKEY6 // Inventory Left setvar RETURN -1 endevent onevent EVENT_WEAPKEY7 // Inventory Right setvar RETURN -1 endevent onevent EVENT_WEAPKEY8 // Quick Kick setvar RETURN -1 endevent onevent EVENT_WEAPKEY9 // Previous Weapon setvar RETURN -1 endevent onevent EVENT_WEAPKEY10 // Next Weapon setvar RETURN -1 endevent // Controls for player 2 onevent EVENT_PROCESSINPUT // I had to use this event in case player 1 die getinput[THISACTOR].bits pinput ifvarand pinput 8 { setinput[pid].bits 8 ifvarl phoriz 199 addvar phoriz 14 setplayer[pid].horiz phoriz // For some reasons, only setting the bits won't work } ifvarand pinput 16 { setinput[pid].bits 16 ifvarg phoriz 1 subvar phoriz 14 setplayer[pid].horiz phoriz } ifvarand pinput 64 { setinput[pid].avel -20 } ifvarand pinput 128 { setinput[pid].avel 20 } ifvarand pinput 8192 // This block and the following one are for moving forward and backward, with X and Y speeds set with help of sinus and cosinus { setvar RETURN -1 getplayer[pid].i pnum getactor[pnum].ang pang cos pangcos pang mulvar pangcos 10 divvar pangcos 64 sin pangsin pang mulvar pangsin 10 divvar pangsin 64 setinput[pid].fvel pangcos setinput[pid].svel pangsin } ifvarand pinput 16384 { setvar RETURN -1 getplayer[pid].i pnum getactor[pnum].ang pang cos pangcos pang mulvar pangcos -10 divvar pangcos 64 sin pangsin pang mulvar pangsin -10 divvar pangsin 64 setinput[pid].fvel pangcos setinput[pid].svel pangsin } // Following code come from Eduke32 wiki shiftvarr pinput 8 andvar pinput 0xF switch pinput case 1: setinput[pid].bits 4 break case 2: setinput[pid].bits 536870912 break case 3: setinput[pid].bits 1 break case 4: setinput[pid].bits 2 break case 5: setinput[pid].bits 1073741824 break case 6: setinput[pid].bits 1048576 break case 7: setinput[pid].bits 134217728 break case 8: setinput[pid].bits 4194304 break case 9: setinput[pid].bits 2816 break case 10: setinput[pid].bits 3072 break endswitch endevent onevent EVENT_DISPLAYSBAR setvar RETURN 1 // don't display status bar endevent onevent EVENT_DISPLAYROOMS setvar RETURN 1 // don't display them... endevent // orientation bits for the crosshairs define ORIENT 1024 // 26 // gametext args define P1X 4 define P2X 164 onevent EVENT_DISPLAYREST setplayer[THISACTOR].rotscrnang 0 // (almost) Prevent the screen rotation when player 1 die // Took this code from the wiki // It show player 1 view getplayer[THISACTOR].posx px getplayer[THISACTOR].posy py getplayer[THISACTOR].posz pz getplayer[THISACTOR].ang pang getplayer[THISACTOR].horiz phoriz getplayer[THISACTOR].horizoff phorizoff addvarvar phoriz phorizoff updatesectorz px py pz psect ifvarg psect -1 showviewunbiased px py pz pang phoriz psect 0 0 160 199 // ------------------------------------- // Player 2 view getplayer[pid].posx px getplayer[pid].posy py getplayer[pid].posz pz getplayer[pid].ang pang getplayer[pid].horiz phoriz getplayer[pid].horizoff phorizoff addvarvar phoriz phorizoff updatesectorz px py pz psect ifvarg psect -1 showviewunbiased px py pz pang phoriz psect 160 0 319 199 // ------------------------------------- // Draw crosshairs if they are enabled getuserdef[THISACTOR].crosshair pcrosshair ifvare pcrosshair 1 { rotatesprite 80 100 32768 0 CROSSHAIR 0 0 ORIENT 0 0 xdim ydim rotatesprite 240 100 32768 0 CROSSHAIR 0 0 ORIENT 0 0 xdim ydim } // Draw weapon icons getplayer[THISACTOR].curr_weapon pweapon ifvare pweapon 1 rotatesprite 80 165 32768 0 FIRSTGUNSPRITE 0 0 10 0 0 xdim ydim // Pistol ifvare pweapon 2 rotatesprite 80 165 32768 0 SHOTGUNSPRITE 0 0 10 0 0 xdim ydim ifvare pweapon 3 rotatesprite 80 165 32768 0 CHAINGUNSPRITE 0 0 10 0 0 xdim ydim ifvare pweapon 4 rotatesprite 80 165 32768 0 RPGSPRITE 0 0 10 0 0 xdim ydim ifvare pweapon 5 rotatesprite 80 165 16384 0 HEAVYHBOMB 0 0 10 0 0 xdim ydim ifvare pweapon 6 rotatesprite 80 165 32768 0 SHRINKERSPRITE 0 0 10 0 0 xdim ydim ifvare pweapon 7 rotatesprite 80 165 32768 0 DEVISTATORSPRITE 0 0 10 0 0 xdim ydim ifvare pweapon 8 rotatesprite 80 165 32768 0 TRIPBOMBSPRITE 0 0 10 0 0 xdim ydim ifvare pweapon 9 rotatesprite 80 165 32768 0 FREEZESPRITE 0 0 10 0 0 xdim ydim ifvare pweapon 10 rotatesprite 80 165 16384 0 HEAVYHBOMB 0 0 10 0 0 xdim ydim // Pipebomb detonator ifvare pweapon 11 rotatesprite 80 165 32768 0 GROWSPRITEICON 0 0 10 0 0 xdim ydim getplayer[pid].curr_weapon pweapon ifvare pweapon 1 rotatesprite 240 165 32768 0 FIRSTGUNSPRITE 0 0 10 0 0 xdim ydim // Pistol ifvare pweapon 2 rotatesprite 240 165 32768 0 SHOTGUNSPRITE 0 0 10 0 0 xdim ydim ifvare pweapon 3 rotatesprite 240 165 32768 0 CHAINGUNSPRITE 0 0 10 0 0 xdim ydim ifvare pweapon 4 rotatesprite 240 165 32768 0 RPGSPRITE 0 0 10 0 0 xdim ydim ifvare pweapon 5 rotatesprite 240 165 16384 0 HEAVYHBOMB 0 0 10 0 0 xdim ydim ifvare pweapon 6 rotatesprite 240 165 32768 0 SHRINKERSPRITE 0 0 10 0 0 xdim ydim ifvare pweapon 7 rotatesprite 240 165 32768 0 DEVISTATORSPRITE 0 0 10 0 0 xdim ydim ifvare pweapon 8 rotatesprite 240 165 32768 0 TRIPBOMBSPRITE 0 0 10 0 0 xdim ydim ifvare pweapon 9 rotatesprite 240 165 32768 0 FREEZESPRITE 0 0 10 0 0 xdim ydim ifvare pweapon 10 rotatesprite 240 165 16384 0 HEAVYHBOMB 0 0 10 0 0 xdim ydim // Pipebomb detonator ifvare pweapon 11 rotatesprite 240 165 32768 0 GROWSPRITEICON 0 0 10 0 0 xdim ydim // Draw hud boxes getactor[THISACTOR].extra phealth getplayer[THISACTOR].curr_weapon pweapon ifvare pweapon 10 setvar pweapon 5 // for pipebombs getplayer[THISACTOR].ammo_amount pweapon pammo rotatesprite 20 185 65536 0 HEALTHBOX 0 0 10 0 0 xdim ydim digitalnumber DIGITALNUM 20 183 phealth 0 0 26 0 0 xdim ydim rotatesprite 52 185 65536 0 AMMOBOX 0 0 10 0 0 xdim ydim digitalnumber DIGITALNUM 53 183 pammo 0 0 26 0 0 xdim ydim rotatesprite 90 184 65536 0 33 0 0 10 0 0 xdim ydim // Inventory box getplayer[pid].i pnum getactor[pnum].extra phealth getplayer[pid].curr_weapon pweapon ifvare pweapon 10 setvar pweapon 5 getplayer[pid].ammo_amount pweapon pammo rotatesprite 180 185 65536 0 HEALTHBOX 0 0 10 0 0 xdim ydim digitalnumber DIGITALNUM 180 183 phealth 0 0 26 0 0 xdim ydim rotatesprite 212 185 65536 0 AMMOBOX 0 0 10 0 0 xdim ydim digitalnumber DIGITALNUM 213 183 pammo 0 0 26 0 0 xdim ydim rotatesprite 250 184 65536 0 33 0 0 10 0 0 xdim ydim // Draw inventory icons getplayer[THISACTOR].inven_icon pinv ifvare pinv 1 { rotatesprite 81 185 65536 0 FIRSTAID_ICON 0 0 10 0 0 xdim ydim // Medkit getplayer[THISACTOR].firstaid_amount pinvv state dispinvamount } ifvare pinv 2 { rotatesprite 79 186 65536 0 STEROIDS_ICON 0 0 10 0 0 xdim ydim // Steroids getplayer[THISACTOR].steroids_amount pinvv divvar pinvv 4 // Each item amount need to be divided, to have 100% instead of 6400% state dispinvamount } ifvare pinv 3 { rotatesprite 78 188 65536 0 HOLODUKE_ICON 0 0 10 0 0 xdim ydim // HoloDuke getplayer[THISACTOR].holoduke_amount pinvv getplayer[THISACTOR].holoduke_on pinva divvar pinvv 24 state dispinvamount state dispinvonoff } ifvare pinv 4 { rotatesprite 80 186 65536 0 JETPACK_ICON 0 0 10 0 0 xdim ydim // Jetpack getplayer[THISACTOR].jetpack_amount pinvv getplayer[THISACTOR].jetpack_on pinva divvar pinvv 16 state dispinvamount state dispinvonoff } ifvare pinv 5 { rotatesprite 81 185 65536 0 HEAT_ICON 0 0 10 0 0 xdim ydim // Night Vision Googles getplayer[THISACTOR].heat_amount pinvv getplayer[THISACTOR].heat_on pinva divvar pinvv 12 state dispinvamount state dispinvonoff } ifvare pinv 6 { rotatesprite 81 187 65536 0 AIRTANK_ICON 0 0 10 0 0 xdim ydim // Scuba Gear getplayer[THISACTOR].scuba_amount pinvv divvar pinvv 64 state dispinvamount minitext 91 180 163 0 21 // AUTO } ifvare pinv 7 { rotatesprite 81 186 65536 0 BOOT_ICON 0 0 10 0 0 xdim ydim // Boots getplayer[THISACTOR].boot_amount pinvv divvar pinvv 2 state dispinvamount minitext 91 180 163 0 21 // AUTO } getplayer[pid].inven_icon pinv ifvare pinv 1 { rotatesprite 241 185 65536 0 FIRSTAID_ICON 0 0 10 0 0 xdim ydim // Medkit getplayer[pid].firstaid_amount pinvv state dispinvamount2 } ifvare pinv 2 { rotatesprite 239 186 65536 0 STEROIDS_ICON 0 0 10 0 0 xdim ydim // Steroids getplayer[pid].steroids_amount pinvv divvar pinvv 4 state dispinvamount2 } ifvare pinv 3 { rotatesprite 238 188 65536 0 HOLODUKE_ICON 0 0 10 0 0 xdim ydim // HoloDuke getplayer[pid].holoduke_amount pinvv getplayer[pid].holoduke_on pinva divvar pinvv 24 state dispinvamount2 state dispinvonoff2 } ifvare pinv 4 { rotatesprite 240 186 65536 0 JETPACK_ICON 0 0 10 0 0 xdim ydim // Jetpack getplayer[pid].jetpack_amount pinvv getplayer[pid].jetpack_on pinva divvar pinvv 16 state dispinvamount2 state dispinvonoff2 } ifvare pinv 5 { rotatesprite 241 185 65536 0 HEAT_ICON 0 0 10 0 0 xdim ydim // Night Vision Googles getplayer[pid].heat_amount pinvv getplayer[pid].heat_on pinva divvar pinvv 12 state dispinvamount2 state dispinvonoff2 } ifvare pinv 6 { rotatesprite 241 187 65536 0 AIRTANK_ICON 0 0 10 0 0 xdim ydim // Scuba Gear getplayer[pid].scuba_amount pinvv divvar pinvv 64 state dispinvamount2 minitext 251 180 163 0 21 // AUTO } ifvare pinv 7 { rotatesprite 241 186 65536 0 BOOT_ICON 0 0 10 0 0 xdim ydim // Boots getplayer[pid].boot_amount pinvv divvar pinvv 2 state dispinvamount2 minitext 251 180 163 0 21 // AUTO } // Common night vision googles getplayer[THISACTOR].heat_on p1heat getplayer[pid].heat_on p2heat ifvarn p1heat 1 ifvarn p2heat 1 setgamepalette 0 else setgamepalette 2 // This part was for showing keycards, but I don't know how to check if player has a keycard /* getplayer[THISACTOR].got_access pcard ifvare pcard 1 rotatesprite 150 178 65536 0 ACCESS_ICON 0 0 10 0 0 xdim ydim ifvare pcard 2 rotatesprite 150 185 65536 0 ACCESS_ICON 0 0 10 0 0 xdim ydim ifvare pcard 3 rotatesprite 150 192 65536 0 ACCESS_ICON 0 0 10 0 0 xdim ydim */ getactor[THISACTOR].pal pcolor getplayer[THISACTOR].ftq pftq getplayer[THISACTOR].fta pfta ifvarn pfta 0 gametext STARTALPHANUM P1X 2 pftq 0 pcolor 26 0 0 xdim ydim getactor[pnum].pal pcolor getplayer[pid].ftq pftq getplayer[pid].fta pfta ifvarn pfta 0 gametext STARTALPHANUM P2X 2 pftq 0 pcolor 26 0 0 xdim ydim endevent