home *** CD-ROM | disk | FTP | other *** search
/ VIPER Paradice / VIPER.ISO / pc / SCRIPTS / SYSTEM.VSC < prev    next >
Encoding:
Text File  |  2002-06-28  |  11.9 KB  |  444 lines

  1. ;;
  2. ;; system.vsc
  3. ;;
  4.  
  5. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  6. ;; commentì\ò╢
  7. (define-syntax comment
  8.   (syntax-rules ()
  9.                 ((comment body ...)
  10.                  #f))
  11.   )
  12. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  13. ;; whileì\ò╢
  14. (define-syntax while
  15.   (syntax-rules ()
  16.                 ((while cond body ...)
  17.                  ((lambda (x)
  18.                     (call/cc (lambda (y) (set! x y)))
  19.                     (if cond
  20.                         (begin
  21.                           body
  22.                           (x #t))))
  23.                   #f))))
  24.  
  25. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  26. ;; random
  27. (define (random max)
  28.   (vism:random max)
  29.   )
  30.  
  31. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  32. ;; currentâpâëâüü[â^âAâNâZâT
  33. (define (current-player session)
  34.   (session-order-get session
  35.                      (session-currentplayerindex-get session))
  36.   )
  37.  
  38. (define (current-character player)
  39.   (player-characters-get player 0)
  40.   )
  41.  
  42. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  43. ;; óÄ⌐ò¬ê╚èOé╠âvâîü[âäü[üv
  44. (define (other-players session)
  45.   (let* ((count        (session-order-length session))
  46.          (current    (session-currentplayerindex-get session))
  47.          (others    '()))
  48.     (do ((i 0 (+ 1 i)))
  49.         ((<= count i) #f)
  50.       (if (and
  51.            ;; Ä⌐ò¬é┼é╚é¡
  52.            (not (= i current))
  53.            ;; âSü[âïì╧é▌é┼é╚é»éΩé╬
  54.            (=
  55.             (character-ranking-get
  56.              (player-characters-get (session-order-get session i) 0))
  57.             -1))
  58.           (set! others (cons (session-order-get session i) others))))
  59.     others
  60.     )
  61.   )
  62.  
  63. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  64. ;; óÄ⌐ò¬ê╚èOé╠âvâîü[âäü[é╠éñé┐êΩÉlüv
  65. (define (another-player session)
  66.   (let* ((others    (other-players session))
  67.          (count        (length others)))
  68.     (list-ref others (random count))
  69.     )
  70.   )
  71.  
  72. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  73. ;; âÇü[ârü[é╠âèâXâg
  74. (define (movie-list character)
  75.   (let* ((movies    '())
  76.          (movie        #f))
  77.     (do ((i 0 (+ 1 i)))
  78.         ((<= 25 i) #f)
  79.       (set! movie
  80.             (movie-silver-get (character-moviecards-get character i)))
  81.       (while (< 0 movie)
  82.              (set! movies (cons i movies))
  83.              (set! movie (- movie 1)))
  84.       )
  85.     movies
  86.     )
  87.   )
  88.  
  89. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  90. ;; âÇü[ârü[é≡û│ì∞ê╫é╔1ûçê┌É╨
  91. (define (move-movie dst-character src-character)
  92.   (let* ((movies (movie-list src-character)))
  93.     (if (pair? movies)
  94.         (let* ((index    (list-ref movies (random (length movies))))
  95.                (movie    #f))
  96.           ;; src
  97.           (set! movie (character-moviecards-get src-character index))
  98.           (movie-silver-apply movie (lambda (x) (- x 1)))
  99.           ;; dst
  100.           (set! movie (character-moviecards-get dst-character index))
  101.           (movie-silver-apply movie (lambda (x) (+ x 1)))
  102.           index
  103.           )
  104.         #f)
  105.     )
  106.   )
  107.  
  108. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  109. ;; ü¢ü¢âJü[âhé═Ä¥é┴é─éΘüH
  110. (define (has-card? session character card-name)
  111.   (let* ((n (character-spellcards-length character))
  112.          (card            #f)
  113.          (spell-index    #f)
  114.          (spell            #f)
  115.          (r                '()))
  116.     (do ((i 0 (+ 1 i)))
  117.         ((>= i n) #f)
  118.       (set! card        (character-spellcards-get character i))
  119.       (set! spell-index (card-spell-get card))
  120.       (set! spell (session-spellpool-get session spell-index))
  121.       (if (string=? (spell-name-get spell) card-name)
  122.           (set! r (cons card r)))
  123.       )
  124.     (if (null? r) #f r)
  125.     )
  126.   )
  127.  
  128. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  129. ;; Ä╠é─éτéΩéΘâJü[âhé═Ä¥é┴é─éΘüH
  130. (define (has-discardable? session character)
  131.   (let* ((n (character-spellcards-length character))
  132.          (card            #f)
  133.          (spell            #f)
  134.          (r                #f))
  135.     (do ((i 0 (+ 1 i)))
  136.         ((>= i n) #f)
  137.       (set! card        (character-spellcards-get character i))
  138.       (set! spell        (call-pull-spell card))
  139.       (if (spell-candiscard-get spell)
  140.           (set! r #t))
  141.       )
  142.     r
  143.     )
  144.   )
  145.  
  146. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  147. ;; âWâââôâv
  148. (define (jump-aux session)
  149.   (let* ((player    (current-player session))
  150.          (character (current-character player))
  151.          (step        (+ 2 (random 4)))
  152.          (location    (character-location-get character)))
  153.     (while
  154.      (and
  155.       ;; stepé¬0é┼é╚é¡
  156.       (not (= step 0))
  157.       
  158.       ;; êΩû{ô╣é┼
  159.       (= 1 (node-links-length location))
  160.       
  161.       (or
  162.        ;; âWâââôâvèJÄnÆnô_é┼éáéΘé⌐
  163.        (eqv? (character-location-get character) location)
  164.        (and
  165.         ;; ï¡ÉºÆΓÄ~é┼é╚éó
  166.         (not (node-forcebreak-get location))
  167.         
  168.         ;; "âWâââôâv"é┼éαé╚éó
  169.         ;;(not (string=? (node-flowstop-get location) "âWâââôâv"))
  170.         )))
  171.      (set! step (- step 1))
  172.      (set! location (node-links-get location 0)))
  173.  
  174.     (if (not (eqv? (character-location-get character) location))
  175.         (begin
  176.           (call-play-se =jump= #f)
  177.           (call-react character "jump1")
  178.           (call-jump character location)
  179.           (call-react character "jump3")
  180.           (character-jumpcount-apply character (lambda (x) (+ x 1)))))
  181.     (character-walk-set character 0)
  182.     
  183.           
  184.     ;; û▀éΦÆlüiæ╜ÆiâWâââôâvë┬ö\é⌐é╟éñé⌐üj
  185.     (and
  186.      ;; êΩû{ô╣é┼
  187.      (= 1 (node-links-length location))
  188.      ;; ï¡ÉºÆΓÄ~é┼é╚éó
  189.      (not (node-forcebreak-get location))
  190.      )
  191.     )
  192.   )
  193.  
  194. (define (jump session times)
  195.   (let* ((player    (current-player session))
  196.          (character (current-character player))
  197.          (next-jump #t))
  198.     (while 
  199.      (and (< 0 times) next-jump)
  200.      (set! next-jump (jump-aux session))
  201.      (set! times (- times 1))
  202.      )
  203.     )
  204.   )
  205.  
  206. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  207. ;; âVü[âNâîâbâgâJü[âhé╠Ä»ò╩
  208. (define (identify-secret-cards session)
  209.   (let* ((player    (current-player session))
  210.          (character (current-character player))
  211.          (cards        (has-card? session character "âVü[âNâîâbâgâÇü[ârü[")))
  212.     (for-each
  213.      (lambda (card)
  214.        (call-show-spell-card card)
  215.        (call-prompt
  216.         "<p>Eine Secrert Card fur dich!<br/>"
  217.         "Was fur eine wuerde es sein....?</p>")
  218.        (call-hide-spell-card)
  219.        (call-remove-spell-card card)
  220.        (let* ((movie    (call-generate-movie-card #t)))
  221.          (if (pair? movie)
  222.              ;; silver
  223.              (begin
  224.                (call-show-movie-card (car movie) (cdr movie))
  225.                (call-prompt "<p>Es ist eine Silver Card!</p>")
  226.                (call-increment-bingo-item character (car movie) (cdr movie))
  227.                )
  228.              ;; gold
  229.              (begin
  230.                (call-show-movie-card movie -1)
  231.                (call-prompt
  232.                 "<p>Wow, es ist eine Golden Card! Du hast eine ganze Reihe vollendet!</p>")
  233.                (for-each
  234.                 (lambda (silver)
  235.                   (call-increment-bingo-item character movie silver))
  236.                 '(0 1 2 3 4))
  237.                )
  238.              )
  239.          )
  240.        )
  241.      cards)
  242.     (call-hide-movie-card)
  243.     )
  244.   )
  245.  
  246. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  247. ;; nodeé╠ö¡î⌐
  248. (define (find-node session node-name)
  249.   (let* ((n        (session-nodepool-length session))
  250.          (node    #f)
  251.          (r        #f))
  252.     (do ((i 0 (+ 1 i)))
  253.         ((>= i n) #f)
  254.       (set! node        (session-nodepool-get session i))
  255.       (if (string=? (node-name-get node) node-name)
  256.           (set! r node))
  257.       )
  258.     r)
  259.   )
  260.  
  261. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  262. ;; 1Äⁿâ{ü[âiâX
  263. (define (adjust-bonus bonus lap)
  264.   (/ (* bonus (+ 10 (* 2 (- lap 1)))) 10)
  265.   )
  266.  
  267. (define (earn-lap-bonus session character)
  268.   (let* ((lap        (character-lap-get character))
  269.          (cards        (has-card? session character "âVü[âNâîâbâg"))
  270.          (currency    (session-currencyunit-get session))
  271.          (silvers    #f)
  272.          (panics    #f)
  273.          (bingos    #f)
  274.          (mysteries    #f)
  275.          )
  276.     (call-play-se =goal= #f)
  277.     (call-wait-a-moment 120)
  278.     
  279.     ;; èeâJü[âhé╠ûçÉöé╠âJâEâôâg
  280.     (set! silvers    (call-count-silver-cards    character))
  281.     (set! panics    (call-count-panic-cards        character))
  282.     (set! bingos    (call-count-bingo-lines        character))
  283.     (set! mysteries    (call-count-mystery-cards    character))
  284.  
  285.     ;; Åçê╩â{ü[âiâX
  286.     (let* ((rank    (call-get-rank character #t))
  287.            (earn (adjust-bonus 
  288.                   (case rank
  289.                     ((0) 100000)
  290.                     ((1) 50000)
  291.                     ((2) 20000)
  292.                     ((3) 10000))
  293.                   lap)))
  294.       (if (< 0 earn)
  295.           (begin
  296.             (call-prompt "<p>"
  297.                          (number->string (+ 1 rank))
  298.                          "Du bist jetzt drann...<br/>"
  299.                          (number->string earn)
  300.                          currency
  301.                          " bonus!</p>")
  302.             (character-money-apply character (lambda (x) (+ x earn)))
  303.             (call-show-income earn)
  304.             ))
  305.       )
  306.              
  307.     ;; â~âXâeâèü[â{ü[âiâX ûçÉöü~20000ë~
  308.     (if (< 0 mysteries)
  309.         (let* ((earn (adjust-bonus (* 20000 mysteries) lap)))
  310.           (call-prompt "<p>Du besitztst "
  311.                        (number->string mysteries)
  312.                        " eine Mistery Card, also<br/>"
  313.                        (number->string earn)
  314.                        currency
  315.                        " bonus</p>")
  316.           (character-money-apply character (lambda (x) (+ x earn)))
  317.           (call-show-income earn)
  318.           )
  319.         )
  320.     
  321.     ;; âpâjâbâNâÇü[ârü[âJü[âhæ╡é┴é─éΘâ{ü[âiâX4û£ë~
  322.     (if (< 0 (call-check-bingo-row character 2))
  323.         (let* ((earn (* 40000 (call-check-bingo-row character 2))))
  324.           (call-prompt "<p>Du hast die Panic Movie gesammelt, also<br/>"
  325.                        (number->string earn)
  326.                        currency
  327.                        " bonus!</p>")
  328.           (character-money-apply character (lambda (x) (+ x earn)))
  329.           (call-show-income earn)
  330.           )
  331.         )
  332.     
  333.     ;; ïΓâÇü[ârü[â{ü[âiâX ûçÉöü~5000ë~
  334.     (if (< 0 silvers)
  335.         (let* ((earn (* 5000 silvers)))
  336.           (call-prompt "<p>Du besitzst"
  337.                        (number->string silvers)
  338.                        " die Silever Movie, also<br/>"
  339.                        (number->string earn)
  340.                        currency
  341.                        " bonus!</p>")
  342.           (character-money-apply character (lambda (x) (+ x earn)))
  343.           (call-show-income earn)
  344.           )
  345.         )
  346.     
  347.     ;; ârâôâSâ{ü[âiâX lineÉöü~25000ë~
  348.     (if (< 0 bingos)
  349.         (let* ((earn (* 25000 bingos)))
  350.           (call-prompt "<p>Du hast sogar das "
  351.                        (number->string bingos)
  352.                        " Bingo Panel gesammelt, also bekommst du auch  hiermit der<br/>"
  353.                        (number->string earn)
  354.                        currency
  355.                        " bonus!</p>")
  356.           (character-money-apply character (lambda (x) (+ x earn)))
  357.           (call-show-income earn)
  358.           )
  359.         )
  360.  
  361. ;    ;; âpü[âtâFâNâgârâôâSâ{ü[âiâX 500000
  362. ;    (if (< 0 (call-check-bingo-perfect character))
  363. ;        (let* ((earn 500000))
  364. ;          (call-prompt "<p>Du hast  Bingo gemacht. Das bedeutet: 50.000"
  365. ;                       currency
  366. ;                       " bonus!</p>")
  367. ;          (character-money-apply character (lambda (x) (+ x earn)))
  368. ;          (call-show-income earn)
  369. ;          )
  370. ;        )
  371.     )
  372.   )
  373.  
  374. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  375. ;; get-salary
  376. (define (get-salary character min max)
  377.   (* (+ 1 (character-lap-get character))
  378.      (+ (* (random (/ (- max min -1) 100)) 100) min))
  379.   )
  380.  
  381. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  382. ;; get-bonus
  383. (define (get-bonus lap)
  384.    (let* ((n 0))
  385.      (while (<= 0 lap)
  386.             (set! n (+ n (* (+ 5 (random 6)) 10000)))
  387.             (set! lap (- lap 1))
  388.             )
  389.      n
  390.      )
  391.   )
  392.  
  393. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  394. ;; exchange-movie
  395. (define (exchange-movie gold silver left right)
  396.   (let* ((index        (+ (* 5 gold) silver))
  397.          (lmovie    0)
  398.          (rmovie    0))
  399.     (set! lmovie (movie-silver-get (character-moviecards-get left index)))
  400.     (set! rmovie (movie-silver-get (character-moviecards-get right index)))
  401.     (movie-silver-set (character-moviecards-get left index) rmovie)
  402.     (movie-silver-set (character-moviecards-get right index) lmovie)
  403.     )
  404.   )
  405.  
  406. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  407. ;; exchange-backslash
  408. (define (exchange-backslash left right)
  409.   (exchange-movie 0 0 left right)
  410.   (exchange-movie 1 1 left right)
  411.   (exchange-movie 2 2 left right)
  412.   (exchange-movie 3 3 left right)
  413.   (exchange-movie 4 4 left right)
  414.   )
  415.  
  416. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  417. ;; exchange-slash
  418. (define (exchange-slash left right)
  419.   (exchange-movie 0 4 left right)
  420.   (exchange-movie 1 3 left right)
  421.   (exchange-movie 2 2 left right)
  422.   (exchange-movie 3 1 left right)
  423.   (exchange-movie 4 0 left right)
  424.   )
  425.  
  426. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  427. ;; exchange-row
  428. (define (exchange-row row left right)
  429.   (exchange-movie row 0 left right)
  430.   (exchange-movie row 1 left right)
  431.   (exchange-movie row 2 left right)
  432.   (exchange-movie row 3 left right)
  433.   (exchange-movie row 4 left right)
  434.   )
  435.  
  436. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  437. ;; exchange-col
  438. (define (exchange-col col left right)
  439.   (exchange-movie 0 col left right)
  440.   (exchange-movie 1 col left right)
  441.   (exchange-movie 2 col left right)
  442.   (exchange-movie 3 col left right)
  443.   (exchange-movie 4 col left right)
  444.   )