; A:c@sdkZdkZdkZdkZdkZdkZdkZdkZdk Z dk Z dk Tdk ZdfdYZ dfdYZdfdYZdfd YZd fd YZd fd YZdfdYZdfdYZdfdYZdfdYZdfdYZdfdYZdfdYZdfdYZdfdYZd fd!YZd"fd#YZd$fd%YZd&fd'YZd(efd)YZ d*efd+YZ!d,fd-YZ"d.fd/YZ#d0fd1YZ$d2fd3YZ%d4e%fd5YZ&d6e%fd7YZ'd8e%fd9YZ(d:e%fd;YZ)d<e%fd=YZ*d>fd?YZ+d@e%fdAYZ,dBfdCYZ-dDe-fdEYZ.dFe-fdGYZ/dHe-fdIYZ0dJe-fdKYZ1dLe-fdMYZ2dNe-fdOYZ3dPe-fdQYZ4dRe-fdSYZ5dTfdUYZ6dVfdWYZ7dXe7fdYYZ8dZe7fd[YZ9d\e7fd]YZ:d^e7fd_YZ;d`e7fdaYZ<dbe<fdcYZ=dde<fdeYZ>dffdgYZ?dhfdiYZ@djfdkYZAdlZBdmZCdndndndnfZDdodododnfZEdndododnfZFdoaGdoaHdoaIdoaJdpZKdqZLdodrZMdoZNdsZOdtZPduZQdvZRdwZSdodxZTdyZUdzZVd{ZWd|ZXd}ZYd~ZZdZ[e\djodoa]da^eXtHoMtHo dGHntGo dGHntIei_jo dGHntJo dGHqny,ei`iaei`ibeBeCftIZ`WnecdnXeideBeCfZeeifdodoeBeCdZgt^o0yeihiada^WqdGHdoa^qXnyeiiiaWnecdnXeijikdeilimdoeAZntIei_joeilimdoneTddoe _oeTdde _peTdde _qeTdde _reTdde _seTddoe _teTddoe _ueTddoe _veTddoe _weTdde _xeTdde _yeTdde _zeTdde _{eTdde _|eTdde _}eTdde _~eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eTdde _eiiieiidddZeiiieiidddZeiiieiidddZeiddoeEeEZt^oeihieiidde_eihieiidde_eihieiidde_eihieiidde_eihieiidde_eihieiidde_eihieiidde_yeihieiidde_eihieiidde_eihieiidde_eihieiidde_eihieiidde_eihieiidde_eihieiidde_eihieiidde_rge_eiieihieiiddeiieihieiiddeiieihieiiddeihieiidde_eihieiidde_neKgZeZpeZeddZxe@Zx no gZgZgZgZgZgZgZgZgZgZgZgZgZt]d7a]t]djo t]djo(eTddoe _eTddoe _nt]djo t]djo(eTddoe _eTddoe _ngt]djo t]djo(eTddoe _eTddoe _n%eTddoe _eTddoe _e6t]Zeit]eieiei`ieijieieieix% no eigZepiexigiZeD]Zeeiq[giZeD]Zeeiq[giZeD]Zeeiq[giZeD]Zeeiq[giZeD]Zeeiq:[giZeD]Zeeiqe[giZeD]Zeeiq[giZeD]Zyeeyiq[giZeD]Zeeiq[giZeD]Zeeiq[giZeD]Zeeiq<[eieieUeili\ZZepiexigiZeD]Zeeiq[giZeD]Zeeiq[giZeD]Zeeiq[giZeD]*Zeidojoeeiq(q([giZeD]Zeeiqg[giZeD]Zeeiq[giZeD]Zeeiq[giZeD]Zeeiq[giZeD]Zeeiq[giZeD]Zyeeyiq>[giZeD]Zeeiqi[giZeD]Zeeiq[epiZexieeegiZeD]Zeeiq[giZeD]Zeeiq [giZeD]Zeeiq4[giZeD]Zeeiq_[giZeD]Zeeiq[epiexigiZeD]$Zeioeeiqq[giZeD]Zeeiq[giZeD]$Zeioeeiq-q-[giZeD]$Zeioeeiqfqf[giZeD]$Zeioeeiqq[giZeD]*Zeidojoeeiqq[giZeD]Zeeiq[giZeD]$ZeioeeiqBqB[giZeD]$Zeioeeiq{q{[giZeD]$Zeioeeiqq[giZeD]$Zeioeeiqq[giZeD]$Zeioeeiq&q&[giZeD]Zyeeyiq_[ei`iegiZeD]Zeioeeqq[ZgiZeD]Zeioeeqq[ZgiZeD]$Zeidojoeeqq[ZgiZeD]Zeioeeq?q?[ZgiZeD]Zeioeeqtqt[ZgiZeD]Zeioeeqq[ZgiZeD]$Zeidjoeeqq[ZgiZeD]Zeioeeqq[ZgiZeD]ZeioeeqNqN[ZgiZeD]Zyeyioeeyqq[ZgiZeD]Zeioeeqq[ZgiZeD]Zeioeeqq[Zeieidjo"epiieiioPqPnepidjoepie[qUq\Wq We[ndS(N(s*sImgcBstZRS(N(s__name__s __module__(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysImgssSndcBstZRS(N(s__name__s __module__(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysSndssPlayerc BsXtZdZeiddddeiddddfeiddddeiddddfeiddddeiddddfeiddddeiddddfeid dddeid dddffZd Zd Zd ZdZ dZ dZ dZ dZ dZdZdZRS(Nf60.0iii i0i@iPi`ipicCstidddd|_tidddd|_ddf|_d|_d|_d|_d|_ d|_ d|_ d|_ t i|_d|_d|_d|_d|_d|_t i|_d|_d|_tttttttg|_ dS( Niiiif0.0idiXi(!spygamesRectsselfsrects colliderectspositionsvel_xsvel_ysframesstatesdamagedshealthsscoresImgsplayerssurfacesweapon_switch_timesweapon_switch_durations animate_timesanimate_time_durationscurrent_weaponsdamagesdamage_surfaces pain_times pain_durationsPistols MachinegunsLasergunsRocketlaunchers FlamethrowersGrenadethrowers Bombdroppersweapons(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__,s(                cCs<|itijo!|iti|i|_ndSdS(N(sselfs animate_timestimers current_timesanimatesanimate_time_duration(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysthinkIs cCs|i|i_|iid|i_|iid|i_|idjoti |i |iinti |i |iit i |i|iti|i|id8_dSdS(Niii(sselfspositionsrectstopleftslefts colliderectstopsdamagedsdisplaysblitsdamage_surfacessurfacesPlayers frame_listsstatesframes dirtyrectssappend(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysdrawPs-cCs=tit|ii|ititi |idSdS(N( sdisplaysblits backgroundsselfsrectstoplefts dirtyrectssappendspygamesRect(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyserase\scCsI||_||i_|iid|i_|iid|i_dSdS(Nii(sdest_xysselfspositionsrectstopleftslefts colliderectstop(sselfsdest_xy((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysmovebs   cCs,|id|i}|id|i}ti||dd}ti|d|ddd}x/t D]'}|i |i oddfSqgqgW|i tidjo1||f|_|i|i_|i|i _n ddfSx/tD]'}|i |io|iqqW|i|ifSdS(Niiiiif0.0i(sselfspositionsvel_xsnew_xsvel_ysnew_yspygamesRectstmp_rectstmp_colliderects g_monsterssmonsters colliderects collidelistslevelsimpassable_rectssrectstopleftsg_itemssitemspickup(sselfsmonsterstmp_rectsnew_xsnew_ystmp_colliderectsitem((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyswalkls$  cCsH|it|i|idjo d|_n|id7_dSdS(Nii(sselfsframeslens frame_listsstate(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysanimates$ cCs|itijoxWnoO|id7_|idjo d|_n|i|iidjoPqqWtidddti|i |_t ot t i dqndSdS(Niiif0.5(sselfsweapon_switch_timestimers current_timescurrent_weaponsweaponssammos statusbarsdrawsweapon_switch_durationssounds play_soundsSnds weapon_switch(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyschoose_next_weapons  cCs|itijoxWnoO|id8_|idjo d|_n|i|iidjoPqqWtidddti|i |_t ot t i dqndSdS(Niiiif0.5(sselfsweapon_switch_timestimers current_timescurrent_weaponsweaponssammos statusbarsdrawsweapon_switch_durationssounds play_soundsSnds weapon_switch(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyschoose_prev_weapons  cCst o}|i|8_tidddd|_|iti jo;t ot t i tidnti |i|_qndSdS(Niiif1.0(sGODsselfshealthsdamages statusbarsdrawsdamageds pain_timestimers current_timessounds play_soundswhrandomschoicesSnds player_pains pain_duration(sselfsdamage((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys take_damages cCsrti|_tottidnx{dddddddd fD][}|it i |i|i i |dddft i i|i t iid qFWt iitiid d d }|idddddf}t iddddfddddft iddddfddddft i |ddft i it iiddSdS(Nf1.0iii i0i@iPi`ipisimagess younffp_.ttfis Game Over!iiiiiii(iiixiii (sImgs player_deathsselfssurfacessounds play_soundsSnds src_offsetserasesdisplaysblitsrectstopleftspygamesupdatestimesdelaysfontsFontsosspathsjoinsrendersgame_over_messagesfillsflip(sselfs src_offsetsgame_over_messagesfont((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys animate_deaths"  ($(( (s__name__s __module__sspeedspygamesRects frame_lists__init__sthinksdrawserasesmoveswalksanimateschoose_next_weaponschoose_prev_weapons take_damages animate_death(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysPlayer"s        s CrosshaircBsAtZdZdZdZdZdZdZdZRS(Nf0.97999999999999998f0.02cCsYt||_t||_d|_|_ti||dd|_t i |_ dS(Nf0.0i( sfloatspos_xsselfspos_ysmove_xsmove_yspygamesRectsrectsImgs crosshairssurface(sselfspos_xspos_y((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s cCsdS(N((sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysthinkscCs6ti|i|iititi |idS(N( sdisplaysblitsselfssurfacesrectstoplefts dirtyrectssappendspygamesRect(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysdrawscCs9tit|ii|ititi |idS(N( sdisplaysblits backgroundsselfsrectstoplefts dirtyrectssappendspygamesRect(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyserasescCs5|i|ti7_|i|ti7_|i|i7_|i|i7_|iti 9_|iti 9_t o*|i|d7_|i|d7_n|idjo d|_n|idjo d|_n|idjo d|_n|idjo d|_n|i|if|i _ dS(Niif0.0f624.0f448.0(sselfsmove_xs mouse_move_xs Crosshairs mousedragsmove_ys mouse_move_yspos_xspos_ys acceldrags ALT_MOUSEsplayer_movementsrectstopleft(sselfs mouse_move_xs mouse_move_ysplayer_movement((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysmoves$    ( s__name__s __module__s acceldrags mousedrags__init__sthinksdrawserasesmove(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys Crosshairs    s StatusbarcBs#tZdZdZdZRS(NcCsUtidddd|_tidddd|_tidddd|_dS(Niiipiiii,(spygamesRectsselfs weapon_rects health_rects ammo_rect(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__scCs|oxtddD]n}ti|jo.titi|ddfti |i qtiti |ddfti |i qWt i |in|optidjodSntiti|iititi|iiddtidft i |in|ohtitti tiidt}tit|iiti||iit i |indSdS(Niiiii(sweapons_need_updatingsranges weapon_indexsplayerscurrent_weaponsdisplaysblitsImgsweapons_selectedsweaponssrects dirtyrectssappendsselfs weapon_rectshealth_needs_updatingshealths health_emptys health_rectstoplefts health_fullsammo_needs_updatings ammo_fontsrendersstrsammosWHITEsammo_font_numberssammo_font_erases ammo_rect(sselfsweapons_need_updatingsammo_needs_updatingshealth_needs_updatings weapon_indexsammo_font_numbers((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysdraws,+ cCspxetdtiD]Q}titi|i i dd|dft ii |i t i idqWdSdS(Niii (srangesplayershealths temphealthsdisplaysblitsImgs health_fullsselfs health_rectstopleftspygamesupdatestimesdelay(sselfs temphealth((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysrampup#s ((s__name__s __module__s__init__sdrawsrampup(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys Statusbars  sPistolcBstZdZdZRS(NcCs:d|_d|_tidddd|_d|_dS(Niiii(sselfsreload_durations reload_timespygamesRectsrectsammo(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__-s  cCs|itijo|idjoxtddD]}|ti dd}t i t i |dti}t it i |dti}tit|d|d||dq3Wtottidnti|i|_qndS(Niiiiiif0.25(sselfs reload_timestimers current_timesammosrangesisangleswhrandomsrandintsmyanglesmathscosspisBulletsspeedsvel_xssinsvel_ysbulletssappends position_xyssounds play_soundsSndsshotgunsreload_duration(sselfs position_xysanglesvel_ysvel_xsismyangle((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysfire4s!!+(s__name__s __module__s__init__sfire(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysPistol,s s MachineguncBstZdZdZRS(NcCsNd|_d|_tidddd|_d|_to d|_ndS(Nidiii2i(sselfsreload_durations reload_timespygamesRectsrectsammosDEBUG(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__Cs    cCs|itijo|idjo|id8_titi|dt i }ti ti|dt i }tit t|dt|d||dti|i|_tottidntidddqndS(Niiif0.25(sselfs reload_timestimers current_timesammosmathscosspisanglesBulletsspeedsvel_xssinsvel_ysbulletssappendsints position_xysreload_durationssounds play_soundsSnds machineguns statusbarsdraw(sselfs position_xysanglesvel_ysvel_x((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysfireLs!!3(s__name__s __module__s__init__sfire(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys MachinegunBs sLaserguncBstZdZdZRS(NcCsNd|_d|_tidddd|_d|_to d|_ndS(Niii iii(sselfsreload_durations reload_timespygamesRectsrectsammosDEBUG(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__[s    cCs|itijo|idjo|id8_titi|d}ti ti|d}t i t|d|d||dti|i|_tottidntidddqndS(Niiif1.0(sselfs reload_timestimers current_timesammosmathssinspisanglesdelta_yscossdelta_xs laserbeamssappends Laserbeams position_xysreload_durationssounds play_soundsSndslasers statusbarsdraw(sselfs position_xysanglesdelta_ysdelta_x((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysfireds'(s__name__s __module__s__init__sfire(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysLasergunZs sRocketlaunchercBstZdZdZRS(NcCsNd|_d|_tidddd|_d|_to d|_ndS(Niii0iii(sselfsreload_durations reload_timespygamesRectsrectsammosDEBUG(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__ts    cCs|itijo|idjo|id8_titi|dt i }ti ti|dt i }tit |d|d|||dti|i|_tottidntidddqndS(Niiif0.25(sselfs reload_timestimers current_timesammosmathscosspisanglesRocketsspeedsvel_xssinsvel_ys g_rocketssappends position_xysreload_durationssounds play_soundsSndsrockets statusbarsdraw(sselfs position_xysanglesvel_ysvel_x((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysfire|s!!*(s__name__s __module__s__init__sfire(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysRocketlauncherss s FlamethrowercBstZdZdZRS(NcCsNd|_d|_tidddd|_d|_to d|_ndS(Niidi@ii(sselfs reload_timesreload_durationspygamesRectsrectsammosDEBUG(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s    cCs|itijo|idjo|id8_titi|dt i }ti ti|dt i }tit |d|d||ti|i|_tottidntidddqndS(Niiif0.25(sselfs reload_timestimers current_timesammosmathscosspisanglesFlamesspeedsvel_xssinsvel_ysg_flamessappends position_xysreload_durationssounds play_soundsSndsflames statusbarsdraw(sselfs position_xysanglesvel_ysvel_x((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysfires!!$(s__name__s __module__s__init__sfire(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys Flamethrowers sGrenadethrowercBstZdZdZRS(NcCsNd|_d|_tidddd|_d|_to d|_ndS(NiiiPii i(sselfs reload_timesreload_durationspygamesRectsrectsammosDEBUG(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s    cCs|itijo|idjo|id8_tit|d|d|d|dti|i |_t ot t idntidddqndS(Niif0.75(sselfs reload_timestimers current_timesammos g_grenadessappendsGrenades origin_xys target_xysreload_durationssounds play_soundsSndsgrenades statusbarsdraw(sselfs origin_xys target_xy((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysfires,(s__name__s __module__s__init__sfire(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysGrenadethrowers s BombdroppercBstZdZdZRS(NcCsNd|_d|_tidddd|_d|_to d|_ndS(Nii i`ii(sselfs reload_timesreload_durationspygamesRectsrectsammosDEBUG(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s    cCs|itijok|idjoW|id8_ti|i|_tit|d|dt i dddq~ndS(Nii( sselfs reload_timestimers current_timesammosreload_durationsg_bombssappendsBombs position_xys statusbarsdraw(sselfs position_xysangle((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysfires (s__name__s __module__s__init__sfire(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys Bombdroppers sBulletcBs;tZdZdZdZdZdZdZRS(Nf200.0cCs^ti||dd|_||_||_||_||_d|_||_ d|_ dS(Nii( spygamesRects position_xs position_ysselfsrectsvel_xsvel_ysdamagesfriendlysalive(sselfs position_xs position_ysvel_xsvel_ysfriendly((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s      cCs?titi|ii|itit i |idS(N( sdisplaysfills backgroundsget_atsselfsrectstoplefts dirtyrectssappendspygamesRect(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyserases"cCs'tit|iti|idS(N(sdisplaysfillsWHITEsselfsrects dirtyrectssappend(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysdrawscCss|i|iti7_|i|iti7_|i|if|i_|ii t  o d|_ n|ii t idjo&d|_ tit|iin|iodxtD]U}|ii |i o9d|_ tit|ii|i|idqqWnQ|ii ti o:d|_ tit|iiti|idndSdS(Niii(sselfs position_xsvel_xstimersframe_durations position_ysvel_ysrectstoplefts colliderects screenrectsalives collidelistslevelsimpassable_rectssg_decalssappends Bullet_Holesfriendlys g_monsterssmonstersBloods take_damagesdamagesplayer(sselfsmonster((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysmoves(     cCsdS(N((sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysthinks(s__name__s __module__sspeeds__init__serasesdrawsmovesthink(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysBullets    s LaserbeamcBs5tZdZdZdZdZdZRS(NcCsg|_d|_d|_d|_d|_d|_||_||_ ||_ ||_ ||_ ti||ddf|_ti||ddf|_|idS(Ni(iidii(sselfspixelssdamages colour_numbers fade_durations fade_times debug_times position_xsorigin_xs position_ysorigin_ysdelta_xsdelta_ysfriendlyspygamesRects origin_rects terminus_rectscalculate_pixels(sselfs position_xs position_ysdelta_xsdelta_ysfriendly((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s           cCsct|it|ijot|i}|i}x%no{||f|i _ t i |i  odSn|i i|i i |i itidjo!tit|i i dSn|io_xtD]P}|i i|io4tit|i i |i|iddSqqWnH|i itio1tit|i i ti|idSn|idjo|d7}n |d8}||itd|i7}qAWn|i}t|i}xno{||f|i _ t i |i  odSn|i i|i i |i itidjo!tit|i i dSn|io_xtD]P}|i i|io4tit|i i |i|iddSququWnH|i itio1tit|i i ti|idSn|idjo|d7}n |d8}||itd|i7}qWdS(Niii(sabssselfsdelta_xsdelta_ysintsorigin_xsxsorigin_ysys terminus_rectstoplefts screenrectscontainsspixelssappends collidelistslevelsimpassable_rectssg_decalss Bullet_Holesfriendlys g_monsterssmonsters colliderectsBloods take_damagesdamagesplayer(sselfsmonstersysx((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyscalculate_pixels sj   '   cCsHtiit|idddf|ii|ii}t i |dS(Nii( spygamesdrawslinesdisplaysselfs colour_numbers origin_rectstoplefts terminus_rectsrects dirtyrectssappend(sselfsrect((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysdrawGs7cCsax>|iD]3}titi||d|dddfq Wti|i i |i dS(Nii( sselfspixelsspixelsdisplaysfills backgroundsget_ats dirtyrectssappends origin_rectsunions terminus_rect(sselfspixel((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyseraseOs 1cCsA|itijodSn#|id8_ti|i|_dS(Ni(sselfs fade_timestimers current_times colour_numbers fade_duration(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysthinkVs(s__name__s __module__s__init__scalculate_pixelssdrawserasesthink(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys Laserbeams   =  sRocketcBsAtZdZdZdZdZdZdZdZRS(Nf100.0icCs|d|_|d|_d|_d|_||_||_ti|_t i |_ ||_ t i||dd|_t i|iid|iiddd|_|djo|d7}n|djp |djot idddd|_n|djo |d jot idddd|_nW|d jo |d jot id ddd|_n|d jo |d jot id ddd|_n|d jo |djot idddd|_n|djo |djot idddd|_ns|djo |djot idddd|_n:|djo |djot id ddd|_nd|_dS(NiiiiiihiQiiCipi ii0ii@iiPi$i`i(s position_xsselfs position_yssmoke_intervals smoke_timesvel_xsvel_ysRocketsdamagesImgsrocketssurfacesfriendlyspygamesRectsrectsleftstops colliderectsanglessrc_rectsalive(sselfs position_xs position_ysvel_xsvel_ysanglesfriendly((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__as<         / cCs9tit|ii|ititi |idS(N( sdisplaysblits backgroundsselfsrectstoplefts dirtyrectssappendspygamesRect(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyserasescCs3ti|i|ii|iti|idS(N( sdisplaysblitsselfssurfacesrectstopleftssrc_rects dirtyrectssappend(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysdrawscCs|i|iti7_|i|iti7_|i|if|i_|ii d|ii df|i _t i |i o d|_n|i itidjo,d|_tit|ii|in|iojxgtD][}|i i |i o?d|_tit|ii|i|i|idqqWn|i oV|i i ti o<d|_tit|ii|iti|iqndSdS(Niii(sselfs position_xsvel_xstimersframe_durations position_ysvel_ysrectstopleftsleftstops colliderects screenrectscontainssalives collidelistslevelsimpassable_rectss g_explosionssappends Explosionscentersfriendlys g_monsterssmonsters take_damagesdamagesplayer(sselfsmonster((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysmoves,&  #    cCsO|itijodSn1tit|iiti|i |_dSdS(N( sselfs smoke_timestimers current_timesg_smokessappendsSmokesrectscenterssmoke_interval(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysthinks ( s__name__s __module__sspeedsdamages__init__serasesdrawsmovesthink(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysRocket^s #   sFlamecBsJtZdZdZdZdZdZdZdZdZ RS( Nf150.0icCs|d|_|d|_||_||_ti|_ti|_ t i ||dd|_ t i |i i d|i iddd|_d|_d|_ti|i|_dS(Niiiii(s position_xsselfs position_ysvel_xsvel_ysFlamesdamagesImgsflamessurfacespygamesRectsrectsleftstops colliderectsalivestravel_durationstimers current_timesdie_time(sselfs position_xs position_ysvel_xsvel_y((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s      /  cCs9tit|ii|ititi |idS(N( sdisplaysblits backgroundsselfsrectstoplefts dirtyrectssappendspygamesRect(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyserasescCs-ti|i|iiti|idS(N(sdisplaysblitsselfssurfacesrectstoplefts dirtyrectssappend(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysdrawscCs)|i|iti7_|i|iti7_|i|if|i_|ii d|ii df|i _t i |i o d|_n|i itidjod|_|i|inxTtD]L}|i i |i o0d|_|i|id|i|iqqWdSdS(Niii(sselfs position_xsvel_xstimersframe_durations position_ysvel_ysrectstopleftsleftstops colliderects screenrectscontainssalives collidelistslevelsimpassable_rectsscheck_for_fires g_monsterssmonsters take_damagesdamage(sselfsmonster((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysmoves &   cCs8|itijodSn|i|id|_dS(Ni(sselfsdie_timestimers current_timescheck_for_firesrectsalive(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysthinkscCsZx9tD]1}|i|iotid|_dSqqWtit|i dSdS(Ni ( sg_firessfiresrects colliderectstimers current_times time_to_diesappendsFirescenter(sselfsrectsfire((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyscheck_for_fires ( s__name__s __module__sspeedsdamages__init__serasesdrawsmovesthinkscheck_for_fire(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysFlames    sGrenadecBs;tZdZdZdZdZdZdZRS(Nf200.0cCs|d|_|d|_||_||_ti|_ t i ddddf|_ t i |i|idd|_ d|_d|_||d|_|idjo d|_n||d|_|idjo d|_nd|_dS(Niiiiiii(sorigin_xsselfs position_xsorigin_ys position_ystarget_xstarget_ysImgsgrenadessurfacespygamesRectssrc_rectsrects frame_timesframe_intervalsvel_xsvel_ysalive(sselfsorigin_xsorigin_ystarget_xstarget_y((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s      !    cCs9tit|ii|ititi |idS(N( sdisplaysblits backgroundsselfsrectstoplefts dirtyrectssappendspygamesRect(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyserasescCs3ti|i|ii|iti|idS(N( sdisplaysblitsselfssurfacesrectstopleftssrc_rects dirtyrectssappend(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysdrawscCso|i|iti7_|i|iti7_|i|if|i_t i |i o d|_ ndS(Ni( sselfs position_xsvel_xstimersframe_durations position_ysvel_ysrectstoplefts screenrectscontainssalive(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysmove s cCs|itijodSno|iid7_|ii|iijo)d|_t i t |i i dnti|i|_dSdS(Niii(sselfs frame_timestimers current_timessrc_rectsleftssurfaces get_widthsalives g_explosionssappends Explosionsrectscentersframe_interval(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysthinks  (s__name__s __module__sspeeds__init__serasesdrawsmovesthink(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysGrenades     sBombcBs5tZdZdZdZdZdZRS(NcCs|d|_|d|_d|_ti|_tiddddf|_ ti||dd|_ d|_ d|_ d|_ dS(Niiiiii(s position_xsselfs position_ysdamagesImgsbombssurfacespygamesRectssrc_rectsrects frame_timesframe_intervalsalive(sselfs position_xs position_y((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s      cCs9tit|ii|ititi |idS(N( sdisplaysblits backgroundsselfsrectstoplefts dirtyrectssappendspygamesRect(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyserase*scCs3ti|i|ii|iti|idS(N( sdisplaysblitsselfssurfacesrectstopleftssrc_rects dirtyrectssappend(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysdraw/scCs{|itijodSn]|iid7_|ii|iijod|_|i nti|i |_dSdS(Nii( sselfs frame_timestimers current_timessrc_rectsleftssurfaces get_widthsalivesblastsframe_interval(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysthink4s cCswtottidntiddf}tiddf}|it ddf|it |i i |i |idddfx`tdddD]L}|i|t i|ddft i|ddfti iqWt i|ddfti ix]tD]U}t||o|i|idnt|toti|id qqWdS( Nf0.5iiiiiiii(ssounds play_soundsSnds bombblastspygamesSurfacestempsurfs tempdisplaysblitsdisplays backgroundsselfsrectstopleftsfillsrangesmyalphas set_alphasupdates g_monsterssmonsterscan_sees take_damagesdamagesplayer(sselfsmonstersmyalphas tempdisplaystempsurf((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysblast@s*  (s__name__s __module__s__init__serasesdrawsthinksblast(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysBombs    s Decal_PointcBs,tZdZdZdZdZRS(NcCsiti|d|dddf|_d|_d|_d|_dddg|_dddg|_ dS(Niii ii( spygamesRects position_xysselfsrects colour_numbers fade_times fade_durationscurrent_coloursstep(sselfs position_xy((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__Ys &   cCsSti|ii}x7tddD]&}|||i|d|i |tZdZdZdZdZdZdZdZRS(Ni(iPicCsti|||ti|_ti|_ t i |ii d|ii ddd|_t i ddddf|_d|_d|_d|_d|_d|_d|_d|_d|_d|_d|_d |_ti|_ti|_ti|_dS( Niiiiiiiidi(sMonsters__init__sselfsrects possessionsImgsspiderssurfaces spider_dyings dying_surfacespygamesRectsleftstops colliderectssrcrects turn_times turn_intervals shoot_timesshoot_intervalsstates frame_timesframe_intervals frame_numbers fade_times fade_intervalsalphasSpidersdamageshealthsspeed(sselfsrects possession((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__,s&  /             cCs|i o|idjoc|itijoLti|i|_|id8_|idjod|_d|_qzq~n|idjoc|itijoLti|i|_|id7_|idjod|_d|_qqn|itijo=ti|i |_|i djo d|_ qAd|_ n|i tijoti|i |_ t |to3t|t|_|idjo d|_qqtidd|_|idjo d|_qn|itijo |idjoti|i|_t|t}|tidd 7}titi|d }titi|d }tit|ii d|ii d||dt!ot"t#i$d qqn|i%dSdS( Nii iiiiihiiif1.0(&sselfsdyingsstates fade_timestimers current_times fade_intervalsalphas frame_timesframe_intervals frame_numbers turn_times turn_intervalscan_seesplayerscalculate_angles directionswhrandomsrandints shoot_timesshoot_intervalsanglesmathssinspisdelta_yscossdelta_xs laserbeamssappends Laserbeamsrectscenterssounds play_soundsSndslasersanimate(sselfsanglesdelta_ysdelta_x((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysthinkFsP     #3 cCsPtii|ititi|i |i i |i t i|i dSdS(N(sImgsspiders set_alphasselfsalphaspygamesRLEACCELsdisplaysblitssurfacesrectstopleftssrcrects dirtyrectssappend(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysdrawtscCs|i o|i}|djo|d7}n|djp |djod|i_n|djo |djod|i_nU|djo |djod|i_n+|djo |djod |i_n|id jo|iid 7_qnd |_ti |i jo|ti |i |_ |iid 7_|ii|i i jo7d|_|io ti|i|iiqqndSdS( Niihi;i-ii ii@i`iii(sselfsdyings directionsanglessrcrectslefts frame_numbersalphastimers current_times dying_timesdying_intervalssurfaces get_widthsalives possessionsg_itemssappendsrectstopleft(sselfsangle((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysanimate{s.      (( s__name__s __module__sspeedshealthsdamages__init__sthinksdrawsanimate(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysSpider's  . sRobotcBs5tZdZdZdZdZdZdZRS(NiiicCsti|||ti|_ti|_ t i |ii d|ii ddd|_t i ddddf|_d|_d|_d|_d|_d|_d|_d|_ti|_ti|_ti|_d|_dS(Niiiiiii(sMonsters__init__sselfsrects possessionsImgsrobotssurfaces robot_dyings dying_surfacespygamesRectsleftstops colliderectssrcrects turn_times turn_intervals shoot_timesshoot_intervals frame_timesframe_intervals frame_numbersRobotsdamageshealthsspeedsimmune_from_explosives(sselfsrects possession((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s   /          cCsZ|i o=|itijo=ti|i|_|idjo d|_q[d|_n|itijoRti|i|_t |t ot |t |_ qt idd|_ n|itijoqti|i|_t |t oJt |t }|t idd}titi|dti}titi|dti}tit|iid|iid|||d|t idd}titi|dti}titi|dti}tit|iid|iid|||dtot t!i"dq@qDqHn|i#dSdS(Niiihiiif0.25($sselfsdyings frame_timestimers current_timesframe_intervals frame_numbers turn_times turn_intervalscan_seesplayerscalculate_angles directionswhrandomsrandints shoot_timesshoot_intervalsangles rocketanglesmathscosspisRocketsspeedsvel_xssinsvel_ys g_rocketssappendsrectscenterssounds play_soundsSndsrocketsanimate(sselfsvel_ysvel_xsangles rocketangle((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysthinks6   !!6!!6  cCs|i o|i}|djo|d7}n|djp |djod|i_n|djo |djod|i_nU|djo |djod|i_n+|djo |djod |i_n|id jo|iid 7_qnti|i jo|ti|i |_ |iid 7_|ii|i i jo7d|_ |io ti|i|iiqqndSdS( Niihi;i-ii ii@i`ii(sselfsdyings directionsanglessrcrectslefts frame_numberstimers current_times dying_timesdying_intervalssurfaces get_widthsalives possessionsg_itemssappendsrectstopleft(sselfsangle((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysanimates,     ((s__name__s __module__sspeedshealthsdamages__init__sthinksanimate(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysRobots   #sGuncBstZdZRS(NcCs"tiddddf|_dS(Nii(spygamesRectsselfsrect(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s(s__name__s __module__s__init__(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysGunssBosscBs,tZdZdZdZdZRS(NcCsti|||ti|_ti|_ t i |ii d|ii dd|_t i ddddf|_d|_d|_d|_d|_d|_d|_d|_d|_d|_d |_d |_d |_t|_t|_d |_d |_ dS( Ni i$i@iii}i iii i i(!sMonsters__init__sselfsrects possessionsImgsbossssurfaces boss_dyings dying_surfacespygamesRectsleftstops colliderectssrcrects turn_times turn_intervalsguns_shoot_timesguns_shoot_intervalsrockets_shoot_timesrockets_shoot_intervals frame_timesframe_intervals frame_numbersdamageshealthsspeedsGunsgun1sgun2s death_countsimmune_from_explosives(sselfsrects possession((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s*  +               cCsU|i o|i}|djo|d7}n|djp |djotd|i_|iid|ii_|iid|ii_|iid|i i_|iid|i i_n|djo |djotd |i_|iid |ii_|iid |ii_|iid|i i_|iid |i i_n|djo |d jotd|i_|iid|ii_|iid|ii_|iid|i i_|iid|i i_n|d jo |djotd|i_|iid |ii_|iid |ii_|iid|i i_|iid |i i_n|i djo|iid|i 7_qMnt i |i jot i |i|_ |idjok|id8_ti|ii|ii}ti|ii|ii}tit||fdqMd|_tndSdS(Niihi;i-ii4iiiiiiiiii ii@i(sselfsdyings directionsanglessrcrectsleftsrectsgun1stopsgun2s frame_numberstimers current_times dying_timesdying_intervals death_countswhrandomsrandintsrightsmyxsbottomsmyys g_explosionssappends Explosionsalivesend_game_victory(sselfsmyysmyxsangle((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysanimatesP       !   cCs|i o|itijoCti|i|_|idjo d|_qa|id7_n|itijo)ti|i|_t |t |_ n|i tijoLti|i |_ t |it }t |it }titi|dti}titi|dti}tit|iiid|iiid||dtiti|dti}titi|dti}tit|iiid|iiid||dtott i!dqn|i"tijoti|i#|_"t |t }|}titi|dt&id}titi|dt&id}t'it&|iid|iid|||d|t(i)dd}titi|dt&id}titi|dt&id}t'it&|iid|iid|||d|d}titi|dt&id}titi|dt&id}t'it&|iid|iid|||d|d}titi|dt&id}titi|dt&id}t'it&|iid|iid|||d|d }titi|dt&id}titi|dt&id}t'it&|iid|iid|||d|d }titi|dt&id}titi|dt&id}t'it&|iid|iid|||dtott i*dqqn|i+dSdS( Niiiif0.25iii2iP(,sselfsdyings frame_timestimers current_timesframe_intervals frame_numbers turn_times turn_intervalscalculate_anglesplayers directionsguns_shoot_timesguns_shoot_intervalsgun1sangle1sgun2sangle2smathscosspisBulletsspeedsvel_xssinsvel_ysbulletssappendsrectscenterssounds play_soundsSnds machinegunsrockets_shoot_timesrockets_shoot_intervalsangles rocketanglesRockets g_rocketsswhrandomsrandintsrocketsanimate(sselfsvel_ysvel_xsanglesangle1sangle2s rocketangle((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysthinkAsh  !!9!!9%%6%%6 %%6 %%6 %%6 %%6 cCs|i otiti|id|iti}ti ti|id|iti}|i |}|i|}ti||ddf}ti|id|idddf}|itidjortiddf}|i|7_|idjo|id8_n$|id jo|id7_ndSn|itio-|ioti|itindSn||_ ||_|i |if|i _!|i id |i_|i id |i_ndSdS( Nii@ii8iiZiihii("sselfsdyingsmathscosspis directionsspeedstimersframe_durationsdelta_xssinsdelta_ys position_xsnew_position_xs position_ysnew_position_yspygamesRects test_rectsleftstopstest_colliderects collidelistslevelsimpassable_rectsswhrandomschoicesturns colliderectsplayersdamages take_damagesrectstopleft(sselfsdelta_xsdelta_ystest_colliderectsturns test_rectsnew_position_ysnew_position_x((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyswalk}s2 ++  )   (s__name__s __module__s__init__sanimatesthinkswalk(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysBosss  / | d!jot8} t-i9}n| d"jot } t }n| d} | d#j ot d$| n| d%jot;} t-i<}n| d&jot>} t-i?}n| d'jot@} t-iA}n| djotB} t-iC}n| d!jotD} t-iE}n~| djotF} t-iG}n^| d(jotH} t-iI}n>| d"jot } t }n!| d)jotJ} t-iK}n|iLiM|o$|iL|i| || |fq| || |fg|iL|nt i?i@}x'tBiCD]}||o t>qqWqWx8|i#D]-}|iD|i&t ii'|i(q Wdt)_0dt)_.dt)_1t)i8t)i3t)i&tEiFtEi&dddtotiiGdndS( Nif1.0isimagess younffp_.ttfisLevel: iiiiii`i(iiiiXi iii i i(i@i@iiiii(Hs backgroundsfillsBLACKsdisplaysblitssounds play_soundsSndslevel_intro_musicspygamesfontsFontsosspathsjoinsrendersstrscurrent_level_numberslevel_intro_messagesflipsDEBUGstimesdelaysselfsdraw_to_displaysnumbersRectshisrectsImgsbossstoplefts g_monsterssappendsBosssNonesentrance_gatess entrance_gatesupsdrawsupdatesrectsplayersmoves entry_tileslefts start_tilesvel_xstopsstatesvel_ys dirtyrectsseraseswalks animate_timestimers current_timesanimatesanimate_time_durationsset_current_timeseventspeeksQUITs end_game_quitskeys get_pressedskeysskeymapsKEY_ESCsdowns statusbarsrampupsfadeout(sselfskeys entrance_gatesfontshisrectslevel_intro_messageskeyss dirtyrects((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys introduces $(((  %                                cCs t}dS(N(sNonesself(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys unload_mapyscCst|idjodSn||ijodSn|id7_ti|i|_yl|i|i}t ot t i dnx:|D]2}tit|d|d|d|dqWWntj o dSnXdS(Niif1.0ii(slensselfs spawntiless current_times spawn_timesspawn_interval_numberstimersspawn_intervals monster_queuesmonstersssounds play_soundsSnds spawngatesmonsters g_spawngatessappends SpawngatesKeyError(sselfs current_timesmonstersmonsters((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyscheck_to_spawn}s4( s__name__s __module__s__init__s load_map_filescalculate_impassable_rectsscalculate_los_blocking_rectssdraw_to_displays introduces unload_mapscheck_to_spawn(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysLevelFs    i sTilecBstZdZdZRS(NcCsKti|d|ddd|_d|_d|_||_||_dS(Niii(spygamesRectscolumnsrowsselfsrectswalkablesvisible(sselfscolumnsrow((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s #   cCs6ti|i|iiti|i|iidS(N(sdisplaysblitsselfssurfacesrectstoplefts background(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysdraws(s__name__s __module__s__init__sdraw(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysTiles sBlockcBstZdZRS(NcCs,ti|||ti|_d|_dS(Ni( sTiles__init__sselfscolumnsrowsImgsblockssurfaceswalkable(sselfscolumnsrow((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s (s__name__s __module__s__init__(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysBlockssBlankcBstZdZRS(NcCs,ti|||d|_ti|_dS(Ni( sTiles__init__sselfscolumnsrowswalkablesImgsblankssurface(sselfscolumnsrow((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s (s__name__s __module__s__init__(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysBlankssEntrancecBstZdZRS(NcCs,ti|||ti|_d|_dS(Ni( sTiles__init__sselfscolumnsrowsImgsblankssurfaceswalkable(sselfscolumnsrow((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s (s__name__s __module__s__init__(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysEntrancessExitcBstZdZRS(NcCs,ti|||ti|_d|_dS(Ni( sTiles__init__sselfscolumnsrowsImgsblankssurfaceswalkable(sselfscolumnsrow((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s (s__name__s __module__s__init__(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysExitssGatecBs#tZdZdZdZRS(NcCs,ti|||ti|_d|_dS(Ni( sTiles__init__sselfscolumnsrowsImgsgatessurfaceswalkable(sselfscolumnsrow((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s cCsUto!tiittidnd|_ti|_ t i t i dS(Nf1.0i( ssoundsSndsgate_upsstops play_soundsselfswalkablesImgsblankssurfaceslevelscalculate_impassable_rectsscalculate_los_blocking_rects(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysups    cCsUto!tiittidnd|_ti|_ t i t i dS(Nf0.75i( ssoundsSnds gate_downsstops play_soundsselfswalkablesImgsgatessurfaceslevelscalculate_impassable_rectsscalculate_los_blocking_rects(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysdowns    (s__name__s __module__s__init__supsdown(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysGates  s Entrance_gatecBstZRS(N(s__name__s __module__(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys Entrance_gatess Exit_gatecBstZRS(N(s__name__s __module__(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys Exit_gatess SpawngatecBs>tZdZdZdZdZdZdZRS(NcCsg||_||_||_||_ti|_ t i ddddf|_ t i ddddf|_ d|_d|_d|_xnotitii i|i _d}|i iti o d}qnx.tD]&}|i i|i o d}qqWx?tD]7}||j o$|i i|i o d}qGqqW|oPqqqWdSdS(Niiiidi(s monster_typesselfsmonster_possessions monster_imagesmonster_surfacesmonster_possession_imagesmonster_possession_surfacesImgs spawngatessurfacespygamesRectsrectssrcrectsframe_durations frame_timesaliveswhrandomschoiceslevels spawntilesstoplefts good_positions colliderectsplayers g_monsterssmonsters g_spawngates(sselfs monster_types monster_imagesmonster_possessionsmonster_possession_images good_positions spawngatesmonster((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__s<         cCs|iidjom|itjo,ti|i|ii ddddfq|i tjoti|i |ii qnti|i |ii |it i|idSdS(Niii(sselfssrcrectslefts monster_typesNonesdisplaysblitsmonster_surfacesrectstopleftsmonster_possessionsmonster_possession_surfacessurfaces dirtyrectssappend(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysdraw s,!cCs$tit|ii|idSdS(N(sdisplaysblits backgroundsselfsrectstopleft(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyserase scCsS|iid7_|iidjod|_|inti|i|_dS(Niii( sselfssrcrectsleftsalives spawn_monsterstimers current_timesframe_durations frame_time(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysanimate s  cCs)ti|ijodSn |idS(N(stimers current_timesselfs frame_timesanimate(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysthink scCs[|io#ti|i|i|in+|io ti|i|iindS(N(sselfs monster_types g_monsterssappendsrectsmonster_possessionsg_itemsstopleft(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys spawn_monster! s # (s__name__s __module__s__init__sdrawserasesanimatesthinks spawn_monster(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys Spawngates  "  sTimercBs#tZdZdZdZRS(NcCs(d|_d|_d|_d|_dS(Nif0.0(sselfs last_frame_mss this_frame_mssframe_durations current_time(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__) s   cCs=tii|_|i|id|_|i|_dSdS(Nf1000.0(spygamestimes get_tickssselfs this_frame_mss last_frame_mssframe_duration(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyscalculate_frame_duration0 s cCstii|_dS(N(spygamestimes get_tickssselfs current_time(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysset_current_time7 s(s__name__s __module__s__init__scalculate_frame_durationsset_current_time(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysTimer( s  sKeymapcBstZdZRS(NcCstttf|_tttf|_t t t f|_ t ttf|_tf|_tttf|_tttf|_tf|_dS(N(sK_KP8sK_wsK_UPsselfsKEY_UPsK_KP2sK_ssK_DOWNsKEY_DOWNsK_KP4sK_asK_LEFTsKEY_LEFTsK_KP6sK_dsK_RIGHTs KEY_RIGHTsK_ESCAPEsKEY_ESCs K_KP_ENTERsK_esK_RSHIFTsKEY_NEXTWEAPONs K_KP_PLUSsK_qsK_RCTRLsKEY_PREVWEAPONsK_F5sKEY_SCREENSHOT(sself((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys__init__< s (s__name__s __module__s__init__(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysKeymap; siiiic Csto9tiiitiiddtiiidnt i t i ddfti ddfi}|idddft i |dd fti itid d d d f}ti d d fi}|ittidddddft} dddddd}tiddddf}ti ddfi}|itti|ddddft} d}xpnoht i |d d fdti dd} dti dd} t i | | | ft i ||i#t i | |i$|i%df|dddf|d7}|| i&jo d}nti i||fti'i(ti)i*}x't,i-D]}||o t.qqWti/i*do3totiii0d nti1i2d PqqWdSdS(!Nssounds schizo.xmiiii*iiviiiniiZsTwitchisI ....TWITCH.... sI.......Rescue the fair Penelope from the evil clutches of the cybernetic sJoverlord Hippopoticus and his army of bio-robotic monsters! Arrow keys or sGasdw keys to move, mouse to aim, and left mouse button to fire. ESC to sIquit. q and e or right shift and ctrl to change weapons. By David Clark: sRsilenus@telus.net. Props to ShredWheat, slouken, Tusker, Mark Baker and #sdl......ixiii"f0.0iiiirf0.5i(3ssoundspygamesmixersmusicsloadsosspathsjoinsplaysdisplaysblitsImgs titlescreensSurfacesconverts textbordersfillsupdatesRects titlerects titlebacksBLACKs title_fontsrenders titletexts intro_textstextrectstextbacks text_fonts text_surfaces text_offsetswhrandomsrandintsxsystopleftsleftstops get_widthseventspeekskeys get_pressedskeysskeymapsKEY_ESCs end_game_quitsmousesfadeoutstimesdelay( s textborders titlerects text_offsetstextbackstextrectskeyss titlebackskeys intro_textsysxs text_surfaces titletext((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysshow_title_screenU sT"  ! !/      cCsto9tiiitiiddtiiidnt i t ti i tiiddd}|iddd d d f}t i d d d d fd d ddft i d d dd fddddft i|ddfti it otiidnt itid dfdd ddft itiddfd d ddfti itiddf}|i t xtd ddD]}tii|t i|ddfd d ddft itiddfd d ddfti iddddftiidqWxRnoJtii ti!i"}x't$i%D]}||o t&qsqsWqMWdS( Nssoundsfealingnull.xmisimagess younffp_.ttfis Victory! iiiiiii`i(iiiiXi iii idi0ii`iii8i2('ssoundspygamesmixersmusicsloadsosspathsjoinsplaysdisplaysfillsBLACKsfontsFontsrenderslevel_intro_messagesblitsflipsDEBUGstimesdelaysImgsplayerspenelopesSurfaces blackbacksrangesalphashearts set_alphasupdateseventspeekskeys get_pressedskeysskeymapsKEY_ESCs end_game_quit(slevel_intro_messageskeyss blackbackskeysalphasfont((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysend_game_victory s@" $(( ((  %(   cCsC|o4y|i|i|Wq;tj oq;XndSdS(N(ssoundsplaysloops set_volumesvolumesAttributeError(ssoundsvolumesloop((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys play_sound s  icCs||AdjSdS(Ni(sasb(sasb((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyshave_same_signs scCs4|d}|d}|d}|d} |d} |d}|d}|d} | |}||}|||| }|| |||}|||| |}|djo|djo t||otSn| |}| |}||| | }|||||}|||| |}|djo|djo t||otSn||||} | djotSn*| djod| d}n | d}||||}|djo||| } n||| } ||||}|djo||| }n||| }| |fSdS(Niiii(s line1point1sx1sy1s line1point2sx2sy2s line2point1sx3sy3s line2point2sx4sy4sa1sb1sc1sr3sr4shave_same_signssDONT_INTERSECTsa2sb2sc2sr1sr2sdenomsCOLINEARsoffsetsnumsxsy(s line1point1s line1point2s line2point1s line2point2snumsb1sb2sy1sy3sy2sy4sxsdenomsx3sa1sa2soffsetsx2sc2sc1sx1sx4sr4sr1sr2sr3sy((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysline_seg_intersect sJ          *  *     cCs|ii}|ii}xqtiD]f}|i}|i }t ||||odSn|i }|i}t ||||odSq"q"WdSdS(Nii(ssourcesrectscenters los_line_p1stargets los_line_p2slevelslos_blocking_rectsstopleftsblock_p1s bottomrightsblock_p2sline_seg_intersectstoprights bottomleft(ssourcestargetsblock_p1s los_line_p1s los_line_p2sblock_p2srect((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyscan_see s        cCs tdS(N(s raw_input(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys debug_wait# scCstiid|}ytii|}Wn"tj ot ti nX|o,|i ddf}|i|tin|iSdS(Nsimagesi(sosspathsjoinsfilespygamesimagesloadssurfaces RuntimeErrors SystemExits get_errors transparentsget_atscorners set_colorkeysRLEACCELsconvert(sfiles transparentssurfacescorner((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys load_image( scCstiitio tntii}x'ti D]}||o tq:q:Wdt _ dt _ dt _ titi}x8tiD]-}||ot i |8_ dt _ qqWx8tiD]-}||ot i |7_ dt _ qqWx8tiD]-}||ot i |8_ dt _ qqWx8tiD]-}||ot i |7_ dt _ q@q@Wx*tiD]}||ot iq{q{Wx*tiD]}||ot iqqWtiidodt idjo't idit ii t!ii qCt it iit ii t"t t!nx'ti#D]}||o t$qMqMWtii%dSdS(Nf0.0iiiiii(&spygameseventspeeksQUITs end_game_quitskeys get_pressedskeystateskeymapsKEY_ESCsplayersvel_xsvel_ysstatestimersframe_durationsPlayersspeeds player_velsKEY_UPsKEY_DOWNsKEY_LEFTs KEY_RIGHTsKEY_NEXTWEAPONschoose_next_weaponsKEY_PREVWEAPONschoose_prev_weaponsmousescurrent_weaponsweaponssfiresrectscenters crosshairscalculate_anglesKEY_SCREENSHOTstake_screenshotspump(s player_velskeyskeystate((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys process_input7 sb                  '-   cCs|ii|iid}|ii|iid}|djo d}ntti ||dti }|djo|d7}n|djo|d7}n|SdS(Nf1.0if0.10000000000000001iih( s target_objsrectslefts source_objsdelta_xstopsdelta_ysintsmathsatanspisangle(s source_objs target_objsanglesdelta_ysdelta_x((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyscalculate_anglek s  $  cCsW|ii|iid}|ii|iid}ti|d|d}|SdS(Nf1.0i( s target_objsrectslefts source_objsdelta_xstopsdelta_ysmathssqrtsrange(s source_objs target_objsdelta_xsdelta_ysrange((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pyscalculate_rangex scCsRy#titidd\}}Wn*tij ottidnXx|D]\}}|ddfjottin|ddfjo da n|dd fjo da n|d d fjo t i an|d d fjo dan|ddfjot|dan|ddfjo daqWqWWdSdS(Nishgdfmsl:is-hs--helps-gs--gods-ds--debugs-fs --fullscreens-ms --altmouses-ls--levels-ss--silenti(sgetoptssyssargvsoptssargss GetoptErrorsusagesexitsosasGODsDEBUGspygames FULLSCREENs WINDOWSTYLEs ALT_MOUSEsintscurrent_level_numberssound(sargssosasopts((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysprocess_options~ s:#     cCsCdGHdGHdGHdGHdGHdGHdGHdGHd GHd GHtid dS( Ns@Twitch.py - A cross-platform topdown shooter for pygame and SDL.susage: twitch.py [options]s s4Option: -h or --help : Print this help text.s> -d or --debug : Debug mode (eliminates pauses).sA -g or --god : God mode (player takes no damage).s/ -f or --fullscreen : Fullscreen mode.s3 -m or --altmouse: Relative mouse mode.s( -s or --silent: No sound.sS -l levelnumber or --level levelnumber: Start at given level number (1-10)i(ssyssexit(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pysusage scCs3ytidWntij o dGHnXdS(Nsscreenshot.bmps:Error: couldn't write screenshot.bmp to current directory.(sdisplayssavespygameserror(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pystake_screenshot scCsdGHtidS(NsExit - quitting.(ssyssexit(((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys end_game_quit ss__main__isDebug mode ON.s God mode ON.sFullscreen mode ON.sAlt mouse mode activated.s1Unable to acquire 640 x 480 video surface. Sorry.is?Unable to initialize sound subsystem. Proceeding without sound.s/Twitch requires font support. Please see READMEs title.pngs player.pngs damage.pngsplayer_death.pngsgate.pngs weapons.pngs weaponsel.pngshealthfull.pngshealthempty.pngs crosshair.pngs spawngate.pngs hunter.pngshunter_dying.pngs shooter.pngsshooter_dying.pngs gunner.pngsgunner_dying.pngs spider.pngsspider_dying.pngs robot.pngsrobot_dying.pngsboss.pngsboss_dying.pngs rocket.pngs grenade.pngsbomb.pngs flame.pngsfire.pngs smoke.pngs explosion.pngskey.pngs healthkit.pngsbulletammo.pngs laserammo.pngsrocketammo.pngsflamerammo.pngsgrenadeammo.pngs bombammo.pngs heart.pngs penelope.pngsimagess younffp_.ttfi0is ssoundslevelintro.wavs rocket.wavs laser.wavs shotgun.wavsmg.wavs gchuck.wavs spawngate.wavs bombblast.wavs pickup.wavspickuphealth.wavshunterdeath.wavs explosion.wavs flame.wavsweaponswitch.wavsplayerdeath.wavs pain1.wavs pain2.wavs pain3.wavs gatedown.wavs gateup.wavi@iis blank1.pngs block1.pngis blank2.pngs block2.pngi s blank3.pngs block3.pngs blank4.pngs block4.png(spygames pygame.images pygame.mixers pygame.fontssyssmathsos.pathsossstringswhrandomsgetopts pygame.localss pygame.drawsImgsSndsPlayers Crosshairs StatusbarsPistols MachinegunsLasergunsRocketlaunchers FlamethrowersGrenadethrowers BombdroppersBullets LaserbeamsRocketsFlamesGrenadesBombs Decal_Points Bullet_HolesBloodsFiresSmokes ExplosionsMonstersShootersHuntersGunnersSpidersRobotsGunsBosssItems BulletAmmos LaserAmmos FlamerAmmos GrenadeAmmosBombAmmos RocketAmmos HealthKitsKeysLevelsTilesBlocksBlanksEntrancesExitsGates Entrance_gates Exit_gates SpawngatesTimersKeymaps SCREEN_WIDTHs SCREEN_HEIGHTsWHITEsBLACKs LASER_REDsGODsDEBUGs WINDOWSTYLEs ALT_MOUSEsshow_title_screensend_game_victorys play_soundsDONT_INTERSECTsCOLINEARshave_same_signssline_seg_intersectscan_sees debug_waits load_images process_inputscalculate_anglescalculate_rangesprocess_optionssusagestake_screenshots end_game_quits__name__scurrent_level_numberssounds FULLSCREENsdisplaysinitsset_modes SystemExitsSurfaces backgroundsRects screenrectsmixersfontseventsset_grabsmouses set_visibleskeymaps titlescreensplayersdamages player_deathsgatesweaponssweapons_selecteds health_fulls health_emptys crosshairs spawngateshunters hunter_dyingsshooters shooter_dyingsgunners gunner_dyingsspiders spider_dyingsrobots robot_dyingsbosss boss_dyingsrocketsgrenadesbombsflamesfiressmokes explosionskeys healthkits bulletammos laserammos rocketammos flamerammos grenadeammosbombammosheartspenelopesFontspathsjoins title_fonts text_fonts ammo_fontsrendersammo_font_erasesSoundslevel_intro_musicslasersshotguns machineguns bombblastspickups pickup_healths hunterdeaths weapon_switchs player_painsappends gate_downsgate_ups dirtyrectss statusbarstimersbulletss laserbeamss g_rocketss g_grenadessg_bombssg_itemssg_decalssg_smokess g_explosionss g_monsterss g_spawngatessg_flamessg_firessblanksblockslevels load_map_filescalculate_impassable_rectss introducesflipspumpsset_current_timescalculate_frame_durationsthinks_[1]smonstersdecals laserbeamscheck_to_spawns current_timesget_rels mouse_delta_xs mouse_delta_yserasesitemsbullets colour_numberswalksmovementsmovesdrawsalivesupdatesnumbers colliderects exit_tilesrectshealths animate_death(~sbombsrockets ammo_fontshave_same_signsscan_sees SCREEN_WIDTHsBosss Spawngatesdecalsusages Bullet_HolesBloodsstringsLevels backgrounds text_fontsBombs dirtyrectsslevels g_explosionss RocketAmmositems crosshairsmovements LASER_REDsBlanksg_decalssshow_title_screensGates mouse_delta_xs mouse_delta_ys Flamethrowersmonsters play_soundsEntrancesFires g_monsterss Entrance_gatesKeysmathstake_screenshots explosionsDONT_INTERSECTsend_game_victorysRobotsTimersSmokescalculate_angles MachinegunsBlocks FlamerAmmosSpidersammo_font_erasesgrenadeskeymapsg_firessprocess_optionssCOLINEARsossGrenadethrowersImgsGunners BulletAmmosExitsTilesg_itemssPistols laserbeams load_images GrenadeAmmosLaserguns process_inputs SCREEN_HEIGHTsBulletsfiresg_flamess end_game_quitsGuns spawngatesKeymapsFlames Crosshairs Decal_PointsGrenadesRockets BombdroppersBombAmmosflames screenrectsdisplaysplayersBLACKstimers debug_waits title_fonts laserbeamssSnds ExplosionsMonstersg_smokessHunterspygamesgetoptssmokes StatusbarsShooters g_rocketssRocketlauncherssyssItemsbulletss g_spawngatessg_bombss Exit_gateswhrandomsWHITEsline_seg_intersects g_grenadess LaserAmmoscalculate_rangesbullets HealthKits statusbars_[1]sPlayers Laserbeam((s9/mnt/gmirror/ports/games/twitch/work/twitch-1.0/twitch.pys?s`$6 1,.gO<4;#*%3ZH5DrYJ J  C 0   5    4              $$$$$$$$$$$$$$$$$$ +++$(                +++++++++++  +++?++++++++ +++++  9+999?+99999+55;555;55555