1# 2# Copyright <=2011 by Simon Huggenberger 3# Maintenance modifications 2011,2014 by the cuyo developers 4# 5# This program is free software; you can redistribute it and/or modify 6# it under the terms of the GNU General Public License as published by 7# the Free Software Foundation; either version 2 of the License, or 8# (at your option) any later version. 9# 10# This program is distributed in the hope that it will be useful, 11# but WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13# GNU General Public License for more details. 14# 15# You should have received a copy of the GNU General Public License 16# along with this program; if not, write to the Free Software 17# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18# 19# The above notices apply to this file and to: 20# spBlinky.xpm[.gz], spClyde.xpm[.gz], spEyes.xpm[.gz], spGhost.xpm[.gz], 21# spInkey.xpm[.gz], spLabyrinth.xpm[.gz], spPacman10.xpm[.gz], 22# spPacman11.xpm[.gz], spPacman2.xpm[.gz], spPacman3.xpm[.gz], 23# spPacman4.xpm[.gz], spPacman5.xpm[.gz], spPacman6.xpm[.gz], 24# spPacman7.xpm[.gz], spPacman8.xpm[.gz], spPacman9.xpm[.gz], 25# spPacman.xpm[.gz], spPfeil.xpm[.gz], spPinky.xpm[.gz] 26# 27 28 29Pacman={ 30 name="Pacman" 31 author="Simon" 32 numexplode=3 33 numexplode1=3 34 chaingrass=1 35 pics=spUp,spRight,spDown,spLeft,spLife 36 bgcolor=0,0,0 37 topcolor=0,0,191 38 toptime=50 39 startpic=spLabyrinth 40 startdist="GMGKMGKMGM","FFDOJDOJFF","DNGPKKPMHJ","KPJFQIFDPK", 41 "GLKNGMHKLM","DKKLJDLKKJ" 42 greypic=ilTuer.xpm 43 textcolor=127,255,255 44 topoverlap=0 45 description="Wanna play Pacman?" 46 47# schnellere 180er-Wende 48# halbe Kekse entfernen 49# gefangener Geist/ ausbrechender Geist 50# version "andert Labyrinth 51# individuelle Verfolgung 52# schnellere Animation 53# Wiederauferstehung Pacmans 54 55 << 56 var pacman,ghost,blinky,clyde,inkey,pinky; 57 var keks,move,chmove,pac_x,pac_y; 58 var wayo,wayr,wayu,wayl,ways; 59 60 global = { 61 switch {pacman<10 -> 0,0,0,0,0,0,1,0,0,0,0,0,0,2; 62 => {0; pacman = 11},{0; pacman = 0},0,0,0,0,0,0,0,0,0,0,0,0,0;}; 63 move = file; 64 switch {1:200 -> keks = 1;}; 65 switch {move==2 -> { 66 switch {blinky==1..32 -> blinky -= 1;}; 67 switch {pinky==1..32 -> pinky -= 1;}; 68 switch {inkey==1..32 -> inkey -= 1;}; 69 switch {clyde==1..32 -> clyde -= 1;}; 70 switch {keks==1..16 -> keks -= 1;}; 71 };}; 72 switch {move>=1 && pacman==1..9 -> pacman += 1;} 73 }; 74 75 spLabyrinth.init = { 76 pacman@ = 11; 77 switch {version!=16 -> {keks = 1; ways = version}; 78 -> {ways = 2; wayr = 1; keks = 16; keks@(1,0) = 0}; 79 }; 80 switch {version%2==1 -> wayo = 1;}; 81 switch {version%4>=2 -> {wayr = 1; keks += 2};}; 82 switch {version%8>=4 -> {wayu = 1; keks += 4};}; 83 switch {version%16>=8 -> wayl = 1;}; 84 switch {(loc_x==0 || loc_x==9)&&(loc_y==16 || loc_y==19) -> keks+=7;}; 85 }; 86 87 spLife.init = kind = rnd(5); 88 89 spUp.turn = kind = spRight; 90 spRight.turn = kind = spDown; 91 spDown.turn = kind = spLeft; 92 spLeft.turn = kind = spUp; 93 94 labstart = 95 switch { 96 keks@(0,0)==16 -> {pinky = 10; inkey = 12}; 97 keks@(-1,0)==16 -> {pinky = 14; clyde = 12}; 98 keks@(0,-1)==16 -> pacman = 10; 99 keks@(-1,-1)==16 -> pacman = 14; 100 keks@(0,1)==16 -> blinky = 10; 101 keks@(-1,1)==16 -> blinky = 14; 102 } 103 ; 104 105 labmove = { 106 switch { 107 move%2==0 -> A; 108 move%8>=4 -> B; 109 -> C; 110 }; 111 switch { 112 move==9..16 -> pos += 3; 113 move==17..24 -> pos += 6; 114 move>=25 -> pos += 9; 115 }; 116 switch { 117 move%8==3..5 -> *; 118 move==6..7 || move==9..10 -> {qu = Q_TL_TR; *; qu = Q_BL_BR; *}; 119 move==1..2 || move==14..15 -> {qu = Q_TR_TL; *; qu = Q_BR_BL; *}; 120 move==22..23 || move==25..26 -> {qu = Q_BL_TL; *; qu = Q_BR_TR; *}; 121 move==17..18 || move==30..31 -> {qu = Q_TL_BL; *; qu = Q_TR_BR; *}; 122 }; 123 switch {move@>=1 -> move += 1;}; 124 qu = Q_ALL 125 }; 126 127 labmov = {labmove; switch {move@==1 -> move -= 1;}}; 128 129 labvom = { 130 switch { 131 move<=16 -> {move = 16-move; labmove; move = 16-move}; 132 -> {move = 48-move; labmove; move = 48-move}; 133 }; 134 switch {move@>=1 -> move += move@;} 135 }; 136 137 wandmove = { 138 switch { 139 ways==0 -> move@(0,0) = move; 140 ways==1 -> move = 20; 141 ways==2 -> move = 4; 142 ways==3 -> switch {1:2 -> move = 20; -> move = 4;}; 143 ways==4 -> move = 28; 144 ways==5 -> switch {1:2 -> move = 20; -> move = 28;}; 145 ways==6 -> switch {1:2 -> move = 4; -> move = 28;}; 146 ways==7 -> switch {1:3 -> move = 20; 1:2 -> move = 4; -> move = 28;}; 147 ways==8 -> move = 12; 148 ways==9 -> switch {1:2 -> move = 20; -> move = 12;}; 149 ways==10 -> switch {1:2 -> move = 4; -> move = 12;}; 150 ways==11 -> switch {1:3 -> move = 20; 1:2 -> move = 4; -> move = 12;}; 151 ways==12 -> switch {1:2 -> move = 28; -> move = 12;}; 152 ways==13 -> switch {1:3 -> move = 20; 1:2 -> move = 28; -> move = 12;}; 153 ways==14 -> switch {1:3 -> move = 4; 1:2 -> move = 28; -> move = 12;}; 154 ways==15 -> switch {1:4 -> move = 20; 1:3 -> move = 4; 155 1:2 -> move = 28; -> move = 12;}; 156 }; 157 }; 158 159 labwand = { 160 switch { 161 move@>=1 && move==4 && wayr==0 -> wandmove; 162 move@>=1 && move==12 && wayl==0 -> wandmove; 163 move@>=1 && move==20 && wayo==0 -> wandmove; 164 move@>=1 && move==28 && wayu==0 -> wandmove; 165 }; 166 }; 167 168 fressen = { 169 keks -= 8; 170 switch {blinky@!=33 -> blinky@ = 32;}; 171 switch {pinky@!=33 -> pinky@ = 32;}; 172 switch {inkey@!=33 -> inkey@ = 32;}; 173 switch {clyde@!=33 -> clyde@ = 32;}; 174 }; 175 176 labkoll = { 177 switch {pacman>=move -> chmove=pacman; -> {chmove=move; move=pacman};}; 178 switch {move==9..23 -> move = 32-move;}; 179 switch {chmove==9..23 -> chmove = 32-chmove;}; 180 switch {move>16 -> move -= 16;}; 181 switch {chmove>16 -> chmove -= 16;}; 182 switch {(chmove-move<=2 && move-chmove<=2) || 183 (chmove==10..14 && move==3..5) || 184 (chmove==11..13 && move==2..6) -> 185 switch {ghost==0 && blinky@==1..32 -> blinky@ = 33; 186 ghost==0 && blinky@==0 -> pacman@ = 1;}; 187 } 188 }; 189 190 labpacman = { 191 switch {pacman@>=1 -> file = pacman@+7; -> 1;}; 192 move = pacman; labmove; pacman = move; 193 switch {move@>=1 -> { 194 switch { 195 pacman==6 -> 196 switch {loc_x==9 -> pacman@(-9,0) = 2; -> pacman@(1,0) = 2;}; 197 pacman==14 -> 198 switch {loc_x==0 -> pacman@(9,0) = 10; -> pacman@(-1,0) = 10;}; 199 pacman==22 -> pacman@(0,-1) = 18; 200 pacman==30 -> pacman@(0,1) = 26; 201 }; 202 switch { 203 wayr==0 && pacman==5 -> pacman -= 1; 204 wayl==0 && pacman==13 -> pacman -= 1; 205 wayo==0 && pacman==21 -> pacman -= 1; 206 wayu==0 && pacman==29 -> pacman -= 1; 207 pacman@>=1 -> pacman -= 1; 208 }; 209 switch {pacman%8==4 => { 210 switch { 211 chmove@==1 && wayo==1 -> {pacman = 20; chmove@ = 0}; 212 chmove@==2 && wayr==1 -> {pacman = 4; chmove@ = 0}; 213 chmove@==3 && wayu==1 -> {pacman = 28; chmove@ = 0}; 214 chmove@==4 && wayl==1 -> {pacman = 12; chmove@ = 0}; 215 }; 216 switch {keks%2==1 -> keks -= 1; keks==8..14 => fressen;} 217 };}; 218 switch {keks%4>=2 && (pacman==7 || pacman==11) -> keks -= 2;}; 219 switch {keks%8>=4 && (pacman==19 || pacman==31) -> keks -= 4;}; 220 switch {pacman%8==2..5 -> { 221 pac_x@ = loc_x; pac_y@ = loc_y; 222 switch {pacman@==0 -> { 223 switch {blinky%8!=0 -> {ghost = 0; move = blinky; labkoll};}; 224 switch {clyde%8!=0 -> {ghost = 3; move = clyde; labkoll};} 225 };} 226 };} 227 };} 228 }; 229 230 labfollow = { 231 switch { 232 move<=16 -> { 233 switch { 234 1:2 && move==4 && loc_x<=pac_x@ -> ; 235 1:2 && move==12 && loc_x>=pac_x@ -> ; 236 wayo==1 && loc_y>=pac_y@ -> move = 20; 237 wayu==1 && loc_y<=pac_y@ -> move = 28; 238 }; 239 }; 240 -> { 241 switch { 242 1:2 && move==20 && loc_y>=pac_y@ -> ; 243 1:2 && move==28 && loc_y<=pac_y@ -> ; 244 wayr==1 && loc_x<=pac_x@ -> move = 4; 245 wayl==1 && loc_x>=pac_x@ -> move = 12; 246 }; 247 }; 248 }; 249 }; 250 251 labturn = { 252 switch { 253 move==4 && wayl==1 -> {ways -= 8; wandmove; ways += 8}; 254 move==12 && wayr==1 -> {ways -= 2; wandmove; ways += 2}; 255 move==20 && wayu==1 -> {ways -= 4; wandmove; ways += 4}; 256 move==28 && wayo==1 -> {ways -= 1; wandmove; ways += 1}; 257 }; 258 }; 259 260 labghost = { 261 switch { 262 move%8==4 && (move@==2 || (move@==1 && file>=3)) -> { 263 switch { 264 2:3 -> labfollow; 265 -> labturn; 266 }; 267 labwand; 268 }; 269 }; 270 switch { 271 file==2 -> switch {move%16>=9 -> labvom; -> labmov;}; 272 file==1 -> {2; switch {move%16<=8 -> labvom; -> labmov;};}; 273 -> labmove; 274 } 275 }; 276 277 labblinky = { 278 switch { 279 blinky@==2..10 && blinky@%2==0 -> 1; 280 blinky@==1..32 -> 2; 281 blinky@==33 -> 3; 282 -> 4; 283 }; 284 move = blinky; labghost; blinky = move; 285 switch {move@>=1 -> switch { 286 blinky==5 -> 287 switch {loc_x==9 -> blinky@(-9,0) = 1; -> blinky@(1,0) = 1;}; 288 blinky==13 -> 289 switch {loc_x==0 -> blinky@(9,0) = 9; -> blinky@(-1,0) = 9;}; 290 blinky==21 -> blinky@(0,-1) = 17; 291 blinky==29 -> blinky@(0,1) = 25; 292 };} 293 }; 294 295 labpinky = { 296 5; 297 switch {pinky%8!=0 -> {move = pinky; labghost; pinky = move};}; 298 switch {move@>=1 -> switch { 299 pinky==5 -> 300 switch {loc_x==9 -> pinky@(-9,0) = 1; -> pinky@(1,0) = 1;}; 301 pinky==13 -> 302 switch {loc_x==0 -> pinky@(9,0) = 9; -> pinky@(-1,0) = 9;}; 303 pinky==21 -> pinky@(0,-1) = 17; 304 pinky==29 -> pinky@(0,1) = 25; 305 };} 306 }; 307 308 labinkey = { 309 6; 310 switch {inkey%8!=0 -> {move = inkey; labghost; inkey = move};}; 311 switch {move@>=1 -> switch { 312 inkey==5 -> 313 switch {loc_x==9 -> inkey@(-9,0) = 1; -> inkey@(1,0) = 1;}; 314 inkey==13 -> 315 switch {loc_x==0 -> inkey@(9,0) = 9; -> inkey@(-1,0) = 9;}; 316 inkey==21 -> inkey@(0,-1) = 17; 317 inkey==29 -> inkey@(0,1) = 25; 318 };} 319 }; 320 321 labclyde = { 322 7; 323 switch {clyde%8!=0 -> {move = clyde; labghost; clyde = move};}; 324 switch {move@>=1 -> switch { 325 clyde==5 -> 326 switch {loc_x==9 -> clyde@(-9,0) = 1; -> clyde@(1,0) = 1;}; 327 clyde==13 -> 328 switch {loc_x==0 -> clyde@(9,0) = 9; -> clyde@(-1,0) = 9;}; 329 clyde==21 -> clyde@(0,-1) = 17; 330 clyde==29 -> clyde@(0,1) = 25; 331 };} 332 }; 333 334 pfeil = { 335 schema4; 336 switch { 337 move==1 -> E; 338 move==2 -> F; 339 move==3 -> G; 340 move==4 -> H; 341 }; 342 switch { 343 move==5 -> switch {1:50 => R,R,R,R,R,R,R; -> Q;}; 344 turn==1 -> pos += 4; 345 turn==2 -> pos += 8; 346 }; 347 switch { 348 size>=3 => {1;{chmove@ = move; A},B,C,D,E,F,G,{H; kind@(0,0) = nothing}}; 349 }; 350 * 351 }; 352 353 >> 354 355 spPacman = { 356 pics = spPacman.xpm 357 << 358 spPacman = { 359 A; 360 switch {??1????? -> {qu = Q_TL_TR; *; qu = Q_BL_BR; *};}; 361 switch {??????1? -> {qu = Q_TR_TL; *; qu = Q_BR_BL; *};}; 362 qu = Q_ALL; * 363 }; 364 >> 365 } 366 367 spLabyrinth = { 368 pics = spLabyrinth.xpm, spPacman.xpm, spGhost.xpm, spEyes.xpm, 369 spBlinky.xpm, spPinky.xpm, spInkey.xpm, spClyde.xpm, 370 spPacman2.xpm, spPacman3.xpm, spPacman4.xpm, spPacman5.xpm, 371 spPacman6.xpm, spPacman7.xpm, spPacman8.xpm, spPacman9.xpm, 372 spPacman10.xpm, spPacman11.xpm 373 << 374 spLabyrinth = { 375 if informational 376 -> A* 377 else { 378 switch { 379 wayo==1 -> { 380 switch {0??????? -> {wayo = 0; ways -= 1};}; 381 switch {wayl==1 -> D; -> C;}; 382 qu = Q_TL;*; 383 switch {wayr==1 -> D; -> C;}; 384 qu = Q_TR;*; 385 }; 386 -> { 387 switch {wayu@(0,-1)==1 && 1??????? -> {wayo = 1; ways += 1};}; 388 switch {wayl==1 -> B; -> A;}; 389 qu = Q_TL;*; 390 switch {wayr==1 -> B; -> A;}; 391 qu = Q_TR;*; 392 }; 393 }; 394 switch { 395 wayu==1 -> { 396 switch {????0??? -> {wayu = 0; ways -= 4};}; 397 switch {wayl==1 -> D; -> C;}; 398 qu = Q_BL;*; 399 switch {wayr==1 -> D; -> C;}; 400 qu = Q_BR;*; 401 }; 402 -> { 403 switch {wayo@(0,1)==1 && ????1??? -> {wayu = 1; ways += 4};}; 404 switch {wayl==1 -> B; -> A;}; 405 qu = Q_BL;*; 406 switch {wayr==1 -> B; -> A;}; 407 qu = Q_BR;*; 408 }; 409 }; 410 switch {wayr==0 -> 411 switch {wayl@(1,0)==1 || wayl@(-9,0)==1 -> {wayr = 1; ways += 2};};}; 412 switch {wayl==0 -> 413 switch {wayr@(-1,0)==1 || wayr@(9,0)==1 -> {wayl = 1; ways += 8};};}; 414 switch {wayr==1 && ??0????? && kind@(-9,0)!=spLabyrinth -> 415 {wayr = 0; ways -= 2};}; 416 switch {wayl==1 && ??????0? && kind@(9,0)!=spLabyrinth -> 417 {wayl = 0; ways -= 8};}; 418 qu = Q_ALL; 419 switch {keks@(0,0)%2==1 -> {keks@=1; E*};}; 420 switch {keks@(0,0)%4>=2 -> {keks@=1; qu=Q_TL_TR;E*; qu=Q_BL_BR;E*};}; 421 switch {keks@(-1,0)%4>=2 -> {keks@=1; qu=Q_TR_TL;E*; qu=Q_BR_BL;E*};}; 422 switch {keks@(0,0)%8>=4 -> {keks@=1; qu=Q_TL_BL;E*; qu=Q_TR_BR;E*};}; 423 switch {keks@(0,-1)%8>=4 -> {keks@=1; qu=Q_BL_TL;E*; qu=Q_BR_TR;E*};}; 424 switch {keks@(0,0)==16 -> {qu=Q_TR_TR;F*};}; 425 switch {keks@(-1,0)==16 -> {qu=Q_TL_TL;F*};}; 426 switch {keks@(0,1)==16 -> {qu=Q_BR_BR;F*};}; 427 switch {keks@(-1,1)==16 -> {qu=Q_BL_BL;F*};}; 428 qu = Q_ALL; 429 switch {keks==8..14 => {keks@=1;I,I,J,K,K,J;*};}; 430 switch { 431 pacman@<=10 -> { 432 switch {blinky%8!=0 -> labblinky;}; 433 switch {pinky%8!=0 -> labpinky;}; 434 switch {inkey%8!=0 -> labinkey;}; 435 switch {clyde%8!=0 -> labclyde;}; 436 switch {pacman%8!=0 -> labpacman;}}; 437 -> {pacman=0; blinky=0; pinky=0; inkey=0; clyde=0; labstart}; 438 } 439 } 440 }; 441 >> 442 } 443 444 spUp = { 445 pics = spPfeil.xpm, explosion.xpm 446 << 447 spUp = {move = 1; pfeil}; 448 >> 449 } 450 451 spRight = { 452 pics = spPfeil.xpm, explosion.xpm 453 << 454 spRight = {move = 2; pfeil}; 455 >> 456 } 457 458 spDown = { 459 pics = spPfeil.xpm, explosion.xpm 460 << 461 spDown = {move = 3; pfeil}; 462 >> 463 } 464 465 spLeft = { 466 pics = spPfeil.xpm, explosion.xpm 467 << 468 spLeft = {move = 4; pfeil}; 469 >> 470 } 471 472 spLife = { 473 pics = spPfeil.xpm, explosion.xpm 474 << 475 spLife = {move = 5; pfeil; 476 #switch {loc_x==9 -> Z*;} 477 # Ich verstehe nicht, was die vorige Zeile machen sollte... 478 # ausser einen Fehler bewirken. Hab sie mal auskommentiert. -Immi 479 }; 480 >> 481 } 482 483 484} 485