Winter Festival

So You Wanna Do Some Racing?

Below, you will find an explanation and DS lines to make a ridable object using the effects layer for your ridable object. For the purposes of explanation, here is the code for the Magic Carpets in the new FurN! Naturally, you can substitute any ridable you like. As the ridable is an effect layer object, it can go overtop item layer objects so they can be used for special effects or power-ups. You can, of course, make your own type of race instead! Good luck!

This DS uses crazy animation tricks to create the visual illusion that a carpet (as an effect, though this trick works with items too with some DS adaptation) is moving underneath a furre whenever they move. The following shapes are used:

  • Item 80 is a lamp, which a furre must hold for a carpet to appear underneath them - dropping it gets rid of the carpet
  • Effects 288-292 are identical animated carpets, moving north-east
  • Effects 293-297 are identical animated carpets, moving south-east
  • Effects 298-302 are identical animated carpets, moving south-west
  • Effects 303-307 are identical animated carpets, moving north-west
  • Effect 308 is a non-moving carpet, used when the rider is facing south-west or north-east
  • Effect 309 is a non-moving carpet, used when the rider is facing north-west or south-east
  • Effect 310 is an invisible placeholder with the same furre position as the carpets, used to make the furre animate correctly when moving to another tile

  • There are 100 timers reserved for carpets - numbers 700 to 799 - and whenever a furre obtains a carpet, one is assigned to them. When the timer goes off, the carpet is deleted. This allows furres to reclaim their carpets if they leave the dream, as long as the time hasn't run out.

    Carpets will follow the player through DS teleports, as long as the carpet DS is placed at the end of the file. They'll also be cleared/recreated correctly if a furre is moved through idle DS, though it may take up to a second for the carpet to move.


    Return to the Winter Festival page.



    Kitterspeak

    For the effect to work properly, the moving carpets need to be set up just right-- if they don't animate at the same rate and speed as the moving furre, the effect will be ruined.

    In Normal animation mode, furres move over 4 steps, taking 80 ms between each step.

    The carpet shape needs to animate so that it appears that it's moving into the final position. 8 pixels on the X axis and 4 pixels on the Y axis are added/subtracted (depending on direction) on each step - for instance, here's the KitterSpeak used on the carpets moving north-east:

  • Set frame position to -23, 32
  • Delay 80 ms
  • Set frame position to -15, 28
  • Delay 80 ms
  • Set frame position to -7, 24
  • Delay 80 ms
  • Set frame position to 1, 20 (the final position of the carpet when it's done moving)

    If you're wondering why there are five identical copies of each carpet animation, this is a workaround for KitterSpeak animations not being individually controllable. If only one was used, multiple people moving around on carpets at the same time would make choppy animations very likely as each movement resets that shape's animation. The DS cycles through these shape copies to try and avoid resetting an animation that's already being used.


    Caveats

    The biggest issue with this code is that to avoid people possibly cloning carpets or ending up with never-expiring carpets, you need to clear all furre-specific PhoenixSpeak data when the dream starts up. Otherwise, people who have a carpet "checked out" when the dream is re-uploaded or the server restarts could end up getting it restored unintentionally afterwards.

    Additionally, setting the furre position on effects requires the v30 client update, which you need to make the player appear as if they're riding the carpet and not just sitting on the ground below it.


    Code

  • All Teleport DS should go *before* this block!
  • Preferably, this DS should always be kept at the very end of the file.

  • Variable Setup
  •    (0:0) When everything is starting up,

  • The last position of each individual carpet effect
  • This is used when we clear
  •    (5:300) set variable %carpetLastPos[20] to the value 0.
  • The last index used within each carpet bank
  •    (5:300) set variable %carpetLastIndices[4] to the value 0.

  • Available timers
  •    (5:250) set message ~carpetTimers to {700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721    722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752    753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783     784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 x}.

  • Get rid of the carpet placeholder furre position effects
  •    (0:29) When somebody moves into any space with effect overlay 310,
          (3:6) where the triggering furre moved into,
             (5:153) change effect 310 to effect 0.


    (0:50) When countdown timer 15 goes off,
       (1:98) and position (%carpetPlaceholderLastPos) has effect 310,
    (0:1) Whenever somebody moves,
       (1:98) and position (%carpetPlaceholderLastPos) has effect 310,
          (5:151) set location (%carpetPlaceholderLastPos) to overlay effect 0.

  • Fetch variables for general use later
  • (0:1) Whenever somebody moves,
       (1:1002) and the triggering furre is holding item 80 in their paws,
    (0:4) When a furre turns,
       (1:1002) and the triggering furre is holding item 80 in their paws,
    (0:30) When a furre says anything,
       (1:1002) and the triggering furre is holding item 80 in their paws,
    (0:16) When a furre uses any object,
       (1:1002) and the triggering furre is holding item 80 in their paws,
          (5:350) set variable %movedFrom to the X,Y position the triggering furre (moved from/is standing at).
          (5:351) set variable %movedTo to the X,Y position the triggering furre moved to.
          (5:330) set variable %whichEff to the effect overlay value at (%movedFrom).

  • Assign a carpet
  •    (0:31) When a furre says {@carpet},
          (1:606) and the PhoenixSpeak info {carpetID} about the triggering furre does not exist,
          (1:606) and the PhoenixSpeak info {carpetSavedLamp} about the triggering furre does not exist,
          (1:76) and the length of message ~carpetTimers is greater than 3,

  • Assign a timer ID
  •          (5:277) remove the first word from message ~carpetTimers and put it in message ~carpetIDStr.
             (5:603) memorize that the PhoenixSpeak info {carpetID} about the triggering furre will now be ~carpetIDStr.
             (5:610) remember the PhoenixSpeak info {carpetID} about the triggering furre, and put it in variable %carpetID.
             (5:50) set countdown timer %carpetID to go off in 14400 seconds.

  • Store this info
  •          (5:605) memorize that the PhoenixSpeak info {carpetOwner%carpetID} about this dream will now be {[furre]}.
             (5:76) place object type 80 in the triggering furre's paws.

  • Retrigger to spawn the carpet underneath the player
  •       (3:5) where the triggering furre is at, not moving,
             (5:19) move any furre present 0 step(s) forward (in the direction they're facing) if there's nobody already there.

  • Retire a carpet
  •    (0:49) When any countdown timer goes off,
          (5:327) set variable %whichTimer to the number of the countdown timer that just went off.

  • Fetch the carpet owner
  •    (0:49) When any countdown timer goes off,
          (1:201) and variable %whichTimer is more than 699,
          (1:202) and variable %whichTimer is less than 800,
             (5:615) remember the PhoenixSpeak info {carpetOwner%whichTimer} about this dream, and put it in message ~carpetOwner.

  • Are they holding an item?
  •    (0:49) When any countdown timer goes off,
          (1:201) and variable %whichTimer is more than 699,
          (1:202) and variable %whichTimer is less than 800,
          (1:78) and the furre named ~carpetOwner is in the dream right now,
             (5:56) make the furre named ~carpetOwner the new triggering furre, if they're in the dream right now.
             (5:300) set variable %checkIfCarpetItemHeld to the value 1.

       (0:49) When any countdown timer goes off,
          (1:200) and variable %checkIfCarpetItemHeld is equal to 1,
          (1:1002) and the triggering furre is holding item 80 in their paws
             (5:200) emit message {The genie in your lamp chuckles and slips away, taking the carpet with him!} to the triggering furre.
             (5:76) place object type 0 in the triggering furre's paws.
             (5:70) make the triggering furre stand up.

       (0:49) When any countdown timer goes off,
          (1:200) and variable %checkIfCarpetItemHeld is equal to 1,

  • clear this flag no matter what
  •          (5:300) set variable %checkIfCarpetItemHeld to the value 0.

  • Is this particular carpet spawned?
  • Set %tryRemoveCarpetPos and %whichEff to trigger the carpet removal logic later in this script.
  •    (0:49) When any countdown timer goes off,
          (1:201) and variable %whichTimer is more than 699,
          (1:202) and variable %whichTimer is less than 800,
          (1:615) and the PhoenixSpeak info {carpetX} about the furre named ~carpetOwner exists,
             (5:611) remember the PhoenixSpeak info {carpetX} about the furre named {~carpetOwner}, and put it in variable    
             %tryRemoveCarpetPos.x.
             (5:611) remember the PhoenixSpeak info {carpetY} about the furre named {~carpetOwner}, and put it in variable
             %tryRemoveCarpetPos.y.
             (5:330) set variable %whichEff to the effect overlay value at (%tryRemoveCarpetPos).

  • Clear ALL info for this carpet. Yep. All of it.
  •    (0:49) When any countdown timer goes off,
          (1:201) and variable %whichTimer is more than 699,
          (1:202) and variable %whichTimer is less than 800,
             (5:632) forget the PhoenixSpeak info {carpetOwner%whichTimer} about this dream.
             (5:635) forget the PhoenixSpeak info {carpetID} about the furre named ~carpetOwner.
             (5:635) forget the PhoenixSpeak info {carpetX} about the furre named ~carpetOwner.
             (5:635) forget the PhoenixSpeak info {carpetY} about the furre named ~carpetOwner.
             (5:635) forget the PhoenixSpeak info {carpetSavedLamp} about the furre named ~carpetOwner.

  • and return the carpet to the pool
  •          (5:250) set message ~carpetTimers to {%whichTimer ~carpetTimers}.

  • Drop lamp or leave dream, lose it
  •    (0:10) When a furre leaves the dream,
          (1:1002) and the triggering furre is holding item 80 in their paws,
       (0:18) When somebody drops object type 80,
             (5:600) memorize that the PhoenixSpeak info {carpetSavedLamp} about the triggering furre will now be 1.

  • Activate old carpet removal logic
  •          (5:610) remember the PhoenixSpeak info {carpetX} about the triggering furre, and put it in variable %tryRemoveCarpetPos.x.
             (5:610) remember the PhoenixSpeak info {carpetY} about the triggering furre, and put it in variable %tryRemoveCarpetPos.y.
             (5:330) set variable %whichEff to the effect overlay value at (%tryRemoveCarpetPos).

  • Clear carpet's position from PS
  •          (5:634) forget the PhoenixSpeak info {carpetX} about the triggering furre.
             (5:634) forget the PhoenixSpeak info {carpetY} about the triggering furre.

       (0:10) When a furre leaves the dream,
          (1:1002) and the triggering furre is holding item 80 in their paws,
          (5:76) place object type 0 in the triggering furre's paws.

       (0:18) When somebody drops object type 80,
          (3:5) where the triggering furre is at, not moving,
             (5:5) change object type 80 to type 0.
             (5:70) make the triggering furre stand up.

  • Spawn carpet under you when you idle
  • North east and south west
  •    (0:71) When a furre stays in the same square for 1 seconds,
          (1:1002) and the triggering furre is holding item 80 in their paws,
             (1:97) and the triggering furre (moved from/is standing in) effect 0,
             (1:114) and the triggering furre is not facing southeast (down and right),
             (1:116) and the triggering furre is not facing northwest (up and left),
                (5:152) place overlay effect 308 where the triggering furre is.
                (5:71) make the triggering furre sit down.

  • Activate old carpet removal logic
  •          (5:610) remember the PhoenixSpeak info {carpetX} about the triggering furre, and put it in variable %tryRemoveCarpetPos.x.
             (5:610) remember the PhoenixSpeak info {carpetY} about the triggering furre, and put it in variable %tryRemoveCarpetPos.y.
             (5:330) set variable %whichEff to the effect overlay value at (%tryRemoveCarpetPos).

  • Store the new position into PS
  •          (5:350) set variable %movedFrom to the X,Y position the triggering furre (moved from/is standing at).
             (5:600) memorize that the PhoenixSpeak info {carpetX} about the triggering furre will now be %movedFrom.x.
             (5:600) memorize that the PhoenixSpeak info {carpetY} about the triggering furre will now be %movedFrom.y.

  • South east and north west
  •    (0:71) When a furre stays in the same square for 1 seconds,
          (1:1002) and the triggering furre is holding item 80 in their paws,
          (1:97) and the triggering furre (moved from/is standing in) effect 0,
          (1:113) and the triggering furre is not facing northeast (up and right),
          (1:115) and the triggering furre is not facing southwest (down and left),
             (5:152) place overlay effect 309 where the triggering furre is.
             (5:71) make the triggering furre sit down.

  • Activate old carpet removal logic
  •          (5:610) remember the PhoenixSpeak info {carpetX} about the triggering furre, and put it in variable %tryRemoveCarpetPos.x.
             (5:610) remember the PhoenixSpeak info {carpetY} about the triggering furre, and put it in variable %tryRemoveCarpetPos.y.
             (5:330) set variable %whichEff to the effect overlay value at (%tryRemoveCarpetPos).

  • Store the new position into PS
  •          (5:350) set variable %movedFrom to the X,Y position the triggering furre (moved from/is standing at).
             (5:600) memorize that the PhoenixSpeak info {carpetX} about the triggering furre will now be %movedFrom.x.
             (5:600) memorize that the PhoenixSpeak info {carpetY} about the triggering furre will now be %movedFrom.y.

  • Turn, carpet turns with you
  • Requires %whichEff (set earlier based on some triggers)

  • North east and south west
  •    (0:4) When a furre turns,
          (1:1002) and the triggering furre is holding item 80 in their paws,
          (1:201) and variable %whichEff is more than 287,
          (1:202) and variable %whichEff is less than 310,
          (1:114) and the triggering furre is not facing southeast (down and right),
          (1:116) and the triggering furre is not facing northwest (up and left),
             (5:152) place overlay effect 308 where the triggering furre is.

  • South east and north west
  •    (0:4) When a furre turns,
          (1:1002) and the triggering furre is holding item 80 in their paws,
          (1:201) and variable %whichEff is more than 287,
          (1:202) and variable %whichEff is less than 310,
          (1:113) and the triggering furre is not facing northeast (up and right),
          (1:115) and the triggering furre is not facing southwest (down and left),
             (5:152) place overlay effect 309 where the triggering furre is.

  • Walk into a wall while on the carpet, get forced to sit
  •    (0:1) Whenever somebody moves,
          (1:1002) and the triggering furre is holding item 80 in their paws,
          (1:201) and variable %whichEff is more than 287,
          (1:202) and variable %whichEff is less than 310,
          (1:105) and they were blocked from moving (or stood still),

  • check that they didn't DS teleport
  •       (1:1100) and there's a furre at (%movedFrom),
             (5:71) make the triggering furre sit down.

  • Get rid of a carpet...
  • ...if we moved, at all
  •    (0:1) Whenever somebody moves,
          (1:1002) and the triggering furre is holding item 80 in their paws,
             (1:5) and they successfully moved,
             (1:1100) and there's a furre at (%movedTo),

  • ...if we teleported from one using a spoken command
  •    (0:30) When a furre says anything,
          (1:1002) and the triggering furre is holding item 80 in their paws,
          (1:1101) and there's no furre at (%movedFrom),

  • ...if we teleported from one using F3
  •    (0:16) When a furre uses any object,
          (1:1002) and the triggering furre is holding item 80 in their paws,
          (1:1101) and there's no furre at (%movedFrom),

  • Activate old carpet removal logic
  •          (5:610) remember the PhoenixSpeak info {carpetX} about the triggering furre, and put it in variable %tryRemoveCarpetPos.x.
             (5:610) remember the PhoenixSpeak info {carpetY} about the triggering furre, and put it in variable %tryRemoveCarpetPos.y.
             (5:330) set variable %whichEff to the effect overlay value at (%tryRemoveCarpetPos).

  • Remove the old positions from PS
  •          (5:634) forget the PhoenixSpeak info {carpetX} about the triggering furre.
             (5:634) forget the PhoenixSpeak info {carpetY} about the triggering furre.

  • Carpet goes through teleports
  •    (0:1) Whenever somebody moves,
          (1:1002) and the triggering furre is holding item 80 in their paws,
          (1:5) and they successfully moved,
          (1:1101) and there's no furre at (%movedTo),
       (0:1) Whenever somebody moves,
          (1:1002) and the triggering furre is holding item 80 in their paws,
          (1:105) and they were blocked from moving (or stood still),
          (1:1101) and there's no furre at (%movedFrom),

  • Get the position of the teleport
  • [furre_pos] outputs something like (20,100)
  •          (5:250) set message ~parsePosition to {[furre_pos]}.

  • Remove the opening parenthesis
  •          (5:274) chop off the beginning of message ~parsePosition, removing the first 1 characters of it.

  • Store the value into PS and remember it into a numeric variable to get the X
  •          (5:603) memorize that the PhoenixSpeak info {convertNum} about the triggering furre will now be ~parsePosition.
             (5:610) remember the PhoenixSpeak info {convertNum} about the triggering furre, and put it in variable %teleportCandidatePos.x.

  • Remove the X and comma from the string
  •          (5:278) remove the first 1 copies of {%teleportCandidatePos.x,} from message ~parsePosition.

  • Pass it through PS again to get the Y
  •          (5:603) memorize that the PhoenixSpeak info {convertNum} about the triggering furre will now be ~parsePosition.
             (5:610) remember the PhoenixSpeak info {convertNum} about the triggering furre, and put it in variable %teleportCandidatePos.y.

  • Clean up our mess
  •       (5:634) forget the PhoenixSpeak info {convertNum} about the triggering furre.

  • Activate old carpet removal logic
  •          (5:610) remember the PhoenixSpeak info {carpetX} about the triggering furre, and put it in variable %tryRemoveCarpetPos.x.
             (5:610) remember the PhoenixSpeak info {carpetY} about the triggering furre, and put it in variable %tryRemoveCarpetPos.y.
             (5:330) set variable %whichEff to the effect overlay value at (%tryRemoveCarpetPos).

  • Can we use this position - read: does it have no effect?
  • North east and south west
  •    (0:1) Whenever somebody moves,
          (1:201) and variable %teleportCandidatePos.x is more than 0,
          (1:98) and position (%teleportCandidatePos) has effect 0,
          (1:114) and the triggering furre is not facing southeast (down and right),
          (1:116) and the triggering furre is not facing northwest (up and left),
             (5:151) set location (%teleportCandidatePos) to overlay effect 308.
             (5:71) make the triggering furre sit down.

  • Store the new position into PS
  •          (5:600) memorize that the PhoenixSpeak info {carpetX} about the triggering furre will now be %teleportCandidatePos.x.
             (5:600) memorize that the PhoenixSpeak info {carpetY} about the triggering furre will now be %teleportCandidatePos.y.

  • South east and north west
  •    (0:1) Whenever somebody moves,
          (1:201) and variable %teleportCandidatePos.x is more than 0,
          (1:98) and position (%teleportCandidatePos) has effect 0,
          (1:113) and the triggering furre is not facing northeast (up and right),
          (1:115) and the triggering furre is not facing southwest (down and left),
             (5:151) set location (%teleportCandidatePos) to overlay effect 309.
             (5:71) make the triggering furre sit down.

  • Store the new position into PS
  •          (5:600) memorize that the PhoenixSpeak info {carpetX} about the triggering furre will now be %teleportCandidatePos.x.
             (5:600) memorize that the PhoenixSpeak info {carpetY} about the triggering furre will now be %teleportCandidatePos.y.

  • No matter what we decided there, clear the teleport candidate variable
  •    (0:1) Whenever somebody moves,
          (1:201) and variable %teleportCandidatePos.x is more than 0,
             (5:384) set variable %teleportCandidatePos to the x,y position (0,0).

  • Carpet WALKS WITH YOU!
  • Do some checks...
  •    (0:1) Whenever somebody moves,

  • ... make sure they're entitled to have a carpet
  •    (1:1002) and the triggering furre is holding item 80 in their paws,

  • ... make sure they weren't blocked by a wall
  •    (1:5) and they successfully moved,

  • ... make sure they weren't teleported by DS
  •    (1:1100) and there's a furre at (%movedTo),

  • ... make sure we won't overwrite an effect
  •    (1:96) and the spot they moved to has effect 0,
             (5:300) set variable %carpetDestFlag to the value 1.
             (5:351) set variable %carpetDestPos to the X,Y position the triggering furre moved to.

  • Choose which effect bank we'll use
  •    (0:60) When a furre moves northeast,
          (1:200) and variable %carpetDestFlag is equal to 1,
             (5:300) set variable %carpetBank to the value 0.
             (5:300) set variable %carpetBankMult to the value 0.
             (5:300) set variable %carpetNonMovingItem to the value 308.
       (0:61) When a furre moves southeast,
          (1:200) and variable %carpetDestFlag is equal to 1,
             (5:300) set variable %carpetBank to the value 1.
             (5:300) set variable %carpetBankMult to the value 5.
             (5:300) set variable %carpetNonMovingItem to the value 309.
       (0:62) When a furre moves southwest,
          (1:200) and variable %carpetDestFlag is equal to 1,
             (5:300) set variable %carpetBank to the value 2.
             (5:300) set variable %carpetBankMult to the value 10.
             (5:300) set variable %carpetNonMovingItem to the value 308.
       (0:63) When a furre moves northwest,
          (1:200) and variable %carpetDestFlag is equal to 1,
             (5:300) set variable %carpetBank to the value 3.
             (5:300) set variable %carpetBankMult to the value 15.
             (5:300) set variable %carpetNonMovingItem to the value 309.

  • Fetch and increment the index, and roll over to 0 if it's reached 5
  •    (0:1) Whenever somebody moves,
          (1:200) and variable %carpetDestFlag is equal to 1,
             (5:310) use variable %carpetLastIndices as an array, and copy entry %carpetBank of it into variable %carpetIndex.
             (5:302) take variable %carpetIndex and add 1 to it.
       (0:1) Whenever somebody moves,
          (1:200) and variable %carpetDestFlag is equal to 1,
          (1:200) and variable %carpetIndex is equal to 5,
             (5:300) set variable %carpetIndex to the value 0.
       (0:1) Whenever somebody moves,
          (1:200) and variable %carpetDestFlag is equal to 1,

  • Store the new index...
  •          (5:311) use variable %carpetLastIndices as an array, and set entry %carpetBank of it to %carpetIndex.

  • Calculate the effect number we're using, and the global index of it within %carpetLastPos
  •          (5:301) copy the value of variable %carpetBankMult into variable %carpetIndexGlobal.
             (5:303) take variable %carpetIndexGlobal and add variable %carpetIndex to it.
             (5:301) copy the value of variable %carpetIndexGlobal into variable %carpetItem.
             (5:302) take variable %carpetItem and add 288 to it.

  • Reset the previous position where this item was used to a regular carpet
  •          (5:310) use variable %carpetLastPos as an array, and copy entry %carpetIndexGlobal of it into variable %carpetPrevPos.
          (3:2) at position (%carpetPrevPos) on the map,
             (5:153) change effect %carpetItem to effect %carpetNonMovingItem.

  • Store the new position into the animation frame tracking array
  •          (5:311) use variable %carpetLastPos as an array, and set entry %carpetIndexGlobal of it to %carpetDestPos.

  • Do all our movement and item replacement hijinx
  •          (5:18) move the triggering furre back where they came from.
             (5:71) make the triggering furre sit down.
             (5:446) reset the animation of all copies of effect %carpetItem in the dream.
             (5:151) set location (%carpetDestPos) to overlay effect %carpetItem.
             (5:714) move and animate the triggering furre to (%carpetDestPos) if there's nobody already there.
             (5:300) set variable %carpetDestFlag to the value 0.
             (5:300) set variable %carpetAddPlaceholder to the value 1.

  • Store the new position into PS
  •          (5:600) memorize that the PhoenixSpeak info {carpetX} about the triggering furre will now be %carpetDestPos.x.
             (5:600) memorize that the PhoenixSpeak info {carpetY} about the triggering furre will now be %carpetDestPos.y.

  • Remove carpets. Always.
  •    (0:10) When a furre leaves the dream,
          (1:201) and variable %tryRemoveCarpetPos.x is more than 0,
          (1:201) and variable %whichEff is more than 287,
          (1:202) and variable %whichEff is less than 310,
       (0:49) When any countdown timer goes off,
          (1:201) and variable %tryRemoveCarpetPos.x is more than 0,
          (1:201) and variable %whichEff is more than 287,
          (1:202) and variable %whichEff is less than 310,
       (0:71) When a furre stays in the same square for 1 seconds,
          (1:201) and variable %tryRemoveCarpetPos.x is more than 0,
          (1:201) and variable %whichEff is more than 287,
          (1:202) and variable %whichEff is less than 310,
       (0:1) Whenever somebody moves,
          (1:201) and variable %tryRemoveCarpetPos.x is more than 0,
          (1:201) and variable %whichEff is more than 287,
          (1:202) and variable %whichEff is less than 310,
       (0:18) When somebody drops object type 80,
          (1:201) and variable %tryRemoveCarpetPos.x is more than 0,
          (1:201) and variable %whichEff is more than 287,
          (1:202) and variable %whichEff is less than 310,
       (0:30) When a furre says anything,
          (1:201) and variable %tryRemoveCarpetPos.x is more than 0,
          (1:201) and variable %whichEff is more than 287,
          (1:202) and variable %whichEff is less than 310,
       (0:16) When a furre uses any object,
          (1:201) and variable %tryRemoveCarpetPos.x is more than 0,
          (1:201) and variable %whichEff is more than 287,
          (1:202) and variable %whichEff is less than 310,
             (5:151) set location (%tryRemoveCarpetPos) to overlay effect %carpetReplacementEffect.
             (5:300) set variable %carpetReplacementEffect to the value 0.
       (0:1) Whenever somebody moves,
          (1:201) and variable %carpetAddPlaceholder is more than 0,

  • Remove our placeholder effect from the last position it was at - if there was one!
  •       (3:2) at position (%carpetPlaceholderLastPos) on the map,
             (5:153) change effect 310 to effect 0.

  • ...and place a new one
  •          (5:301) copy the value of variable %tryRemoveCarpetPos into variable %carpetPlaceholderLastPos.
             (5:151) set location (%tryRemoveCarpetPos) to overlay effect 310.

  • Fire a timer to clear it as soon as possible
  •          (5:50) set countdown timer 15 to go off in 1 seconds.

  • Clear this, just in case
  •    (0:1) Whenever somebody moves,
          (1:201) and variable %carpetAddPlaceholder is more than 0,
             (5:300) set variable %carpetAddPlaceholder to the value 0.

  • clear this flag no matter what
  •    (0:10) When a furre leaves the dream,
          (1:201) and variable %tryRemoveCarpetPos.x is more than 0,
       (0:49) When any countdown timer goes off,
          (1:201) and variable %tryRemoveCarpetPos.x is more than 0,
       (0:71) When a furre stays in the same square for 1 seconds,
          (1:201) and variable %tryRemoveCarpetPos.x is more than 0,
       (0:1) Whenever somebody moves,
          (1:201) and variable %tryRemoveCarpetPos.x is more than 0,
       (0:18) When somebody drops object type 80,
          (1:201) and variable %tryRemoveCarpetPos.x is more than 0,
       (0:30) When a furre says anything,
          (1:201) and variable %tryRemoveCarpetPos.x is more than 0,
       (0:16) When a furre uses any object,
          (1:201) and variable %tryRemoveCarpetPos.x is more than 0,
             (5:384) set variable %tryRemoveCarpetPos to the x,y position (0,0).



     

     

    Return to the Winter Festival page.

    ROLEPLAY   FORUMS   COMMUNITY   COME PLAY!   DIGO MARKET   HELP BEEKINS   CREATIONS


    This page, subsequent pages and all content therein, unless otherwise stated is copyright © Dragon's Eye Productions. Site maintained by The Beekin Scribes.