Downloads containing ab24ctf20.j2as

Downloads
Name Author Game Mode Rating
TSF with JJ2+ Only: Anniversary Bash 24 CTF PurpleJazz Capture the flag N/A Download file

File preview

  1. const bool MLLESetupSuccessful = MLLE::Setup(); ///@MLLE-Generated
  2. #include "MLLE-Include-1.5.asc" ///@MLLE-Generated
  3. #pragma require "ab24ctf20-MLLE-Data-2.j2l" ///@MLLE-Generated
  4. #pragma require "ab24ctf20-MLLE-Data-1.j2l" ///@MLLE-Generated
  5. #pragma require "ab24ctf20.j2l" ///@MLLE-Generated
  6.  
  7. void onLevelLoad() {
  8.         jjUseLayer8Speeds = true;
  9.        
  10.         generateCustomSpringSprites(jjAnimSets[ANIM::CUSTOM[9]], array<uint> = {40, 48, 16, 64});
  11.     turnIntoCustomSpring(jjObjectPresets[OBJECT::FROZENSPRING], 0, 19.75f, false);
  12.     turnIntoCustomSpring(jjObjectPresets[OBJECT::HORREDSPRING], 1, 17.75f, false);
  13.     turnIntoCustomSpring(jjObjectPresets[OBJECT::HORGREENSPRING], 2, 26.55f, false);
  14.     turnIntoCustomSpring(jjObjectPresets[OBJECT::HORBLUESPRING], 3, 28.8f, false);
  15.         for (int i = 73; i < 74; i++) {
  16.                 if (jjObjectPresets[i].playerHandling == HANDLING::PICKUP) {
  17.                         jjObjectPresets[i].behavior = CannotBeShotDown(jjObjectPresets[i].behavior);
  18.                 }
  19.         }
  20.        
  21.         jjObjectPresets[OBJECT::HORREDSPRING].causesRicochet = jjObjectPresets[OBJECT::HORBLUESPRING].causesRicochet = jjObjectPresets[OBJECT::HORGREENSPRING].causesRicochet = false;
  22.        
  23.         jjDelayGeneratedCrateOrigins = true;
  24.        
  25.         jjWeapons[WEAPON::GUN8].spread = SPREAD::NORMAL;
  26.         jjObjectPresets[OBJECT::FIREBALLBULLETPU].var[6] = 8 + 16;
  27. }
  28.  
  29. void onLevelBegin() {
  30.         for (int i = 1; i < jjObjectCount; i++) {
  31.                 if (jjObjects[i].eventID == OBJECT::CTFBASE || jjObjects[i].behavior == BEHAVIOR::FLAG) jjObjects[i].yOrg += 3;
  32.         }
  33. }
  34.  
  35. void onMain (){
  36.         jjWeapons[WEAPON::GUN8].comesFromGunCrates = true;
  37.     jjWeapons[WEAPON::GUN9].comesFromGunCrates = true;
  38.        
  39.         for (int i = 1; i < jjObjectCount; i++) {
  40.         jjOBJ@ obj = jjObjects[i];
  41.                
  42.                 if (obj.eventID == OBJECT::RFAMMO3 && obj.state == STATE::FLOAT){
  43.                         if (obj.xOrg > 70*32 && obj.xOrg < 80*32 && obj.yOrg > 115*32 && obj.yOrg < 116*32) {
  44.                                 obj.yPos = obj.yOrg + 8;
  45.                         }
  46.                         if (obj.xOrg > 58*32 && obj.xOrg < 59*32 && obj.yOrg > 53*32 && obj.yOrg < 54*32) {
  47.                                 obj.yPos = obj.yOrg + 8;
  48.                         }
  49.                         if (obj.xOrg > 60*32 && obj.xOrg < 61*32 && obj.yOrg > 53*32 && obj.yOrg < 54*32) {
  50.                                 obj.yPos = obj.yOrg + 15;
  51.                         }
  52.                         if (obj.xOrg > 62*32 && obj.xOrg < 63*32 && obj.yOrg > 53*32 && obj.yOrg < 54*32) {
  53.                                 obj.yPos = obj.yOrg + 22;
  54.                         }
  55.                         if (obj.xOrg > 59*32 && obj.xOrg < 61*32 && obj.yOrg > 54*32 && obj.yOrg < 56*32) {
  56.                                 obj.yPos = obj.yOrg + 8;
  57.                         }
  58.                         if (obj.xOrg > 61*32 && obj.xOrg < 63*32 && obj.yOrg > 54*32 && obj.yOrg < 56*32) {
  59.                                 obj.yPos = obj.yOrg + 15;
  60.                         }
  61.                         if (obj.xOrg > 63*32 && obj.xOrg < 65*32 && obj.yOrg > 54*32 && obj.yOrg < 56*32) {
  62.                                 obj.yPos = obj.yOrg + 22;
  63.                         }
  64.                         if (obj.xOrg > 12*32 && obj.xOrg < 13*32 && obj.yOrg > 63*32 && obj.yOrg < 64*32) {
  65.                                 obj.yPos = obj.yOrg + 14;
  66.                         }
  67.                         if (obj.xOrg > 14*32 && obj.xOrg < 15*32 && obj.yOrg > 63*32 && obj.yOrg < 64*32) {
  68.                                 obj.yPos = obj.yOrg + 7;
  69.                         }
  70.                         if (obj.xOrg > 10*32 && obj.xOrg < 12*32 && obj.yOrg > 64*32 && obj.yOrg < 66*32) {
  71.                                 obj.yPos = obj.yOrg + 14;
  72.                         }
  73.                         if (obj.xOrg > 12*32 && obj.xOrg < 14*32 && obj.yOrg > 64*32 && obj.yOrg < 66*32) {
  74.                                 obj.yPos = obj.yOrg + 7;
  75.                         }
  76.                         if (obj.xOrg > 72*32 && obj.xOrg < 74*32 && obj.yOrg > 75*32 && obj.yOrg < 77*32) {
  77.                                 obj.xPos = obj.xOrg - 14;
  78.                         }
  79.                         if (obj.xOrg > 74*32 && obj.xOrg < 75*32 && obj.yOrg > 77*32 && obj.yOrg < 78*32) {
  80.                                 obj.xPos = obj.xOrg - 14;
  81.                         }
  82.                         if (obj.xOrg > 72*32 && obj.xOrg < 74*32 && obj.yOrg > 77*32 && obj.yOrg < 79*32) {
  83.                                 obj.xPos = obj.xOrg - 7;
  84.                         }
  85.                         if (obj.xOrg > 74*32 && obj.xOrg < 75*32 && obj.yOrg > 79*32 && obj.yOrg < 80*32) {
  86.                                 obj.xPos = obj.xOrg - 7;
  87.                         }
  88.                         if (obj.xOrg > 126*32 && obj.xOrg < 131*32 && obj.yOrg > 78*32 && obj.yOrg < 80*32) {
  89.                                 obj.yPos = obj.yOrg - 16;
  90.                         }
  91.                         if (obj.xOrg > 121*32 && obj.xOrg < 125*32 && obj.yOrg > 36*32 && obj.yOrg < 38*32) {
  92.                                 obj.yPos = obj.yOrg - 16;
  93.                                 obj.xPos = obj.xOrg - 16;
  94.                         }
  95.                         if (obj.xOrg > 129*32 && obj.xOrg < 134*32 && obj.yOrg > 34*32 && obj.yOrg < 36*32) {
  96.                                 obj.yPos = obj.yOrg + 16;
  97.                                 obj.xPos = obj.xOrg + 16;
  98.                         }
  99.                        
  100.                 }
  101.                 if (obj.eventID == OBJECT::TOASTERAMMO3 && obj.state == STATE::FLOAT) {
  102.                         if (obj.xOrg > 32*32 && obj.xOrg < 39*32 && obj.yOrg > 92*32 && obj.yOrg < 95*32) {
  103.                                 obj.yPos = obj.yOrg - 16;
  104.                         }
  105.                         if (obj.xOrg > 109*32 && obj.xOrg < 111*32 && obj.yOrg > 85*32 && obj.yOrg < 87*32) {
  106.                                 obj.xPos = obj.xOrg - 14;
  107.                         }
  108.                         if (obj.xOrg > 109*32 && obj.xOrg < 111*32 && obj.yOrg > 83*32 && obj.yOrg < 85*32) {
  109.                                 obj.xPos = obj.xOrg - 7;
  110.                         }
  111.                         if (obj.xOrg > 111*32 && obj.xOrg < 112*32 && obj.yOrg > 84*32 && obj.yOrg < 85*32) {
  112.                                 obj.xPos = obj.xOrg - 14;
  113.                         }
  114.                         if (obj.xOrg > 111*32 && obj.xOrg < 112*32 && obj.yOrg > 82*32 && obj.yOrg < 83*32) {
  115.                                 obj.xPos = obj.xOrg - 7;
  116.                         }
  117.                         if (obj.xOrg > 167*32 && obj.xOrg < 169*32 && obj.yOrg > 40*32 && obj.yOrg < 42*32) {
  118.                                 obj.yPos = obj.yOrg + 14;
  119.                         }
  120.                         if (obj.xOrg > 165*32 && obj.xOrg < 167*32 && obj.yOrg > 40*32 && obj.yOrg < 42*32) {
  121.                                 obj.yPos = obj.yOrg + 7;
  122.                         }
  123.                         if (obj.xOrg > 166*32 && obj.xOrg < 167*32 && obj.yOrg > 39*32 && obj.yOrg < 40*32) {
  124.                                 obj.yPos = obj.yOrg + 14;
  125.                         }
  126.                         if (obj.xOrg > 164*32 && obj.xOrg < 165*32 && obj.yOrg > 39*32 && obj.yOrg < 40*32) {
  127.                                 obj.yPos = obj.yOrg + 7;
  128.                         }
  129.                         if (obj.xOrg > 107*32 && obj.xOrg < 109*32 && obj.yOrg > 52*32 && obj.yOrg < 54*32) {
  130.                                 obj.xPos = obj.xOrg - 14;
  131.                         }
  132.                         if (obj.xOrg > 109*32 && obj.xOrg < 110*32 && obj.yOrg > 54*32 && obj.yOrg < 55*32) {
  133.                                 obj.xPos = obj.xOrg - 14;
  134.                         }
  135.                         if (obj.xOrg > 107*32 && obj.xOrg < 109*32 && obj.yOrg > 54*32 && obj.yOrg < 56*32) {
  136.                                 obj.xPos = obj.xOrg - 7;
  137.                         }
  138.                         if (obj.xOrg > 109*32 && obj.xOrg < 110*32 && obj.yOrg > 56*32 && obj.yOrg < 57*32) {
  139.                                 obj.xPos = obj.xOrg - 7;
  140.                         }
  141.                         if (obj.xOrg > 64*32 && obj.xOrg < 67*32 && obj.yOrg > 65*32 && obj.yOrg < 67*32) {
  142.                                 obj.yPos = obj.yOrg - 16;
  143.                         }
  144.                 }
  145.                 if (obj.eventID == OBJECT::SEEKERAMMO3 && obj.state == STATE::FLOAT){
  146.                         if (obj.xOrg > 42*32 && obj.xOrg < 43*32 && obj.yOrg > 75*32 && obj.yOrg < 76*32) {
  147.                             obj.yPos = obj.yOrg + 14;
  148.                         }
  149.                 }
  150.                 if (obj.eventID == OBJECT::GUN9AMMO3 && obj.state == STATE::FLOAT){
  151.                         if (obj.xOrg > 50*32 && obj.xOrg < 51*32 && obj.yOrg > 105*32 && obj.yOrg < 106*32) {
  152.                             obj.xPos = obj.xOrg + 16;
  153.                         }
  154.                         if (obj.xOrg > 48*32 && obj.xOrg < 49*32 && obj.yOrg > 105*32 && obj.yOrg < 106*32) {
  155.                             obj.xPos = obj.xOrg - 16;
  156.                         }
  157.                         if (obj.xOrg > 54*32 && obj.xOrg < 55*32 && obj.yOrg > 106*32 && obj.yOrg < 107*32) {
  158.                             obj.xPos = obj.xOrg + 16;
  159.                         }
  160.                         if (obj.xOrg > 52*32 && obj.xOrg < 53*32 && obj.yOrg > 106*32 && obj.yOrg < 107*32) {
  161.                             obj.xPos = obj.xOrg - 16;
  162.                         }
  163.                         if (obj.xOrg > 58*32 && obj.xOrg < 59*32 && obj.yOrg > 107*32 && obj.yOrg < 108*32) {
  164.                             obj.xPos = obj.xOrg + 16;
  165.                         }
  166.                         if (obj.xOrg > 56*32 && obj.xOrg < 57*32 && obj.yOrg > 107*32 && obj.yOrg < 108*32) {
  167.                             obj.xPos = obj.xOrg - 16;
  168.                         }
  169.                         if (obj.xOrg > 108*32 && obj.xOrg < 112*32 && obj.yOrg > 21*32 && obj.yOrg < 23*32) {
  170.                             obj.yPos = obj.yOrg - 16;
  171.                         }
  172.                         if (obj.xOrg > 89*32 && obj.xOrg < 98*32 && obj.yOrg > 77*32 && obj.yOrg < 80*32) {
  173.                             obj.xPos = obj.xOrg - 16;
  174.                                 obj.yPos = obj.yOrg + 10;
  175.                         }
  176.                 }
  177.                 if (obj.eventID == OBJECT::BOUNCERAMMO3 && obj.state == STATE::FLOAT) {
  178.  
  179.                         if (obj.xOrg > 88*32 && obj.xOrg < 89*32 && obj.yOrg > 85*32 && obj.yOrg < 86*32) {
  180.                                 obj.yPos = obj.yOrg + 14;
  181.                         }
  182.                         if (obj.xOrg > 90*32 && obj.xOrg < 91*32 && obj.yOrg > 85*32 && obj.yOrg < 86*32) {
  183.                                 obj.yPos = obj.yOrg + 7;
  184.                         }
  185.                         if (obj.xOrg > 86*32 && obj.xOrg < 88*32 && obj.yOrg > 86*32 && obj.yOrg < 88*32) {
  186.                                 obj.yPos = obj.yOrg + 14;
  187.                         }
  188.                         if (obj.xOrg > 88*32 && obj.xOrg < 90*32 && obj.yOrg > 86*32 && obj.yOrg < 88*32) {
  189.                                 obj.yPos = obj.yOrg + 7;
  190.                         }
  191.                         if (obj.xOrg > 91*32 && obj.xOrg < 95*32 && obj.yOrg > 52*32 && obj.yOrg < 54*32) {
  192.                                 obj.yPos = obj.yOrg - 16;
  193.                         }
  194.                         if (obj.xOrg > 142*32 && obj.xOrg < 145*32 && obj.yOrg > 52*32 && obj.yOrg < 55*32) {
  195.                                 obj.xPos = obj.xOrg - 16;
  196.                         }
  197.                 }
  198.                 if (obj.eventID == OBJECT::GUN8AMMO3 && obj.state == STATE::FLOAT) {
  199.                         if (obj.xOrg > 84*32 && obj.xOrg < 86*32 && obj.yOrg > 43*32 && obj.yOrg < 45*32) {
  200.                                 obj.xPos = obj.xOrg + 14;
  201.                         }
  202.                         if (obj.xOrg > 83*32 && obj.xOrg < 84*32 && obj.yOrg > 42*32 && obj.yOrg < 43*32) {
  203.                                 obj.xPos = obj.xOrg + 14;
  204.                         }
  205.                         if (obj.xOrg > 84*32 && obj.xOrg < 86*32 && obj.yOrg > 41*32 && obj.yOrg < 43*32) {
  206.                                 obj.xPos = obj.xOrg + 7;
  207.                         }
  208.                         if (obj.xOrg > 83*32 && obj.xOrg < 84*32 && obj.yOrg > 40*32 && obj.yOrg < 41*32) {
  209.                                 obj.xPos = obj.xOrg + 7;
  210.                         }
  211.                         if (obj.xOrg > 38*32 && obj.xOrg < 39*32 && obj.yOrg > 69*32 && obj.yOrg < 70*32) {
  212.                 obj.xPos = obj.xOrg - 8;
  213.                         }
  214.                         if (obj.xOrg > 39*32 && obj.xOrg < 40*32 && obj.yOrg > 69*32 && obj.yOrg < 70*32) {
  215.                 obj.xPos = obj.xOrg + 8;
  216.                         }
  217.                         if (obj.xOrg > 112*32 && obj.xOrg < 113*32 && obj.yOrg > 72*32 && obj.yOrg < 73*32) {
  218.                 obj.yPos = obj.yOrg + 10;
  219.                         }
  220.                         if (obj.xOrg > 86*32 && obj.xOrg < 87*32 && obj.yOrg > 92*32 && obj.yOrg < 94*32) {
  221.                 obj.xPos = obj.xOrg - 16;
  222.                                 obj.yPos = obj.yOrg + 16;
  223.                         }
  224.                         if (obj.xOrg > 81*32 && obj.xOrg < 82*32 && obj.yOrg > 92*32 && obj.yOrg < 94*32) {
  225.                 obj.xPos = obj.xOrg - 16;
  226.                                 obj.yPos = obj.yOrg + 16;
  227.                         }
  228.                         if (obj.xOrg > 128*32 && obj.xOrg < 130*32 && obj.yOrg > 49*32 && obj.yOrg < 51*32) {
  229.                                 obj.yPos = obj.yOrg + 14;
  230.                         }
  231.                         if (obj.xOrg > 126*32 && obj.xOrg < 128*32 && obj.yOrg > 49*32 && obj.yOrg < 51*32) {
  232.                                 obj.yPos = obj.yOrg + 7;
  233.                         }
  234.                         if (obj.xOrg > 127*32 && obj.xOrg < 128*32 && obj.yOrg > 48*32 && obj.yOrg < 49*32) {
  235.                                 obj.yPos = obj.yOrg + 14;
  236.                         }
  237.                         if (obj.xOrg > 125*32 && obj.xOrg < 126*32 && obj.yOrg > 48*32 && obj.yOrg < 49*32) {
  238.                                 obj.yPos = obj.yOrg + 7;
  239.                         }
  240.                 }
  241.                 if (obj.eventID == OBJECT::TOASTERAMMO15){
  242.                         if (obj.xOrg > 118*32 && obj.xOrg < 120*32) {
  243.                                 obj.xPos = obj.xOrg - 16;
  244.                         }
  245.                 }
  246.                 if (obj.eventID == OBJECT::GUNCRATE){
  247.                         if (obj.xOrg > 136*32 && obj.xOrg < 137*32 && obj.yOrg > 78*32 && obj.yOrg < 80*32) {
  248.                                 obj.xPos = obj.xOrg + 24;
  249.                                 obj.yPos = 79.4*32;
  250.                                 obj.ySpeed = 0;
  251.                         }
  252.                 }
  253.                 if (obj.eventID == OBJECT::BOUNCERPOWERUP){
  254.                         if (obj.xOrg > 10*32 && obj.xOrg < 11*32) {
  255.                                 obj.direction = -1;
  256.                         }
  257.                 }
  258.                 if (obj.eventID == OBJECT::GUN8POWERUP){
  259.                         if (obj.xOrg > 169*32 && obj.xOrg < 170*32) {
  260.                                 obj.direction = 0;
  261.                         }
  262.                 }
  263.                 if (obj.eventID == OBJECT::RFPOWERUP){
  264.                         if (obj.xOrg > 57*32 && obj.xOrg < 58*32) {
  265.                             obj.xPos = obj.xOrg - 20;
  266.                                 obj.direction = -1;
  267.                                 obj.yPos = 55.7*32;
  268.                                 obj.ySpeed = 0;
  269.                         }
  270.                 }
  271.                 if (obj.eventID == OBJECT::TOASTERPOWERUP){
  272.                         if (obj.xOrg > 106*32 && obj.xOrg < 107*32) {
  273.                                 obj.direction = 0;
  274.                         }
  275.                 }
  276.                 if (obj.eventID == OBJECT::FULLENERGY){
  277.                         if (obj.xOrg > 90*32 && obj.xOrg < 91*32) {
  278.                                 obj.xPos = obj.xOrg - 16;
  279.                         }
  280.                 }
  281.                 if (obj.eventID == OBJECT::GREENSPRING){
  282.                         if (obj.xOrg > 110*32 && obj.xOrg < 111*32 && obj.yOrg > 37*32 && obj.yOrg < 38*32) {
  283.                                 obj.xPos = obj.xOrg - 16;
  284.                         }
  285.                 }
  286.         }
  287. }
  288.  
  289. jjANIMSET@ customSpringSprite;
  290. array<int> fastCustomSpringSpeeds(jjLocalPlayerCount);
  291. bool generateCustomSpringSprites(jjANIMSET@ anim, const array<uint> &in colors) {
  292.     int length = colors.length();
  293.     bool success = (@customSpringSprite = anim).allocate(array<uint>(length * 3, 5)) !is null;
  294.     if (success) {
  295.         uint srcSet = jjAnimSets[ANIM::SPRING];
  296.         for (int i = 0; i < length; i++) {
  297.             uint color = colors[i];
  298.             uint destAnimOffset = anim + i * 3;
  299.             for (int j = 0; j < 3; j++) {
  300.                 uint srcAnim = jjAnimations[srcSet + j];
  301.                 uint destAnim = jjAnimations[destAnimOffset + j];
  302.                 for (int k = 0; k < 5; k++) {
  303.                     jjPIXELMAP image(jjAnimFrames[destAnim + k] = jjAnimFrames[srcAnim + k]);
  304.                     int width = image.width;
  305.                     int height = image.height;
  306.                     for (int l = 0; l < height; l++) {
  307.                         for (int m = 0; m < width; m++) {
  308.                             int pixel = image[m, l];
  309.                             if (pixel >= 32 && pixel < 40)
  310.                                 image[m, l] = color + (pixel & 7);
  311.                         }
  312.                     }
  313.                     if (!image.save(jjAnimFrames[destAnim + k]))
  314.                         return false;
  315.                 }
  316.             }
  317.         }
  318.     }
  319.     return success;
  320. }
  321. void initializeCustomSpring(jjOBJ@ obj) {
  322.     int anim = obj.curAnim;
  323.     obj.behave(obj.behavior = BEHAVIOR::SPRING, false);
  324.     if (obj.curAnim != anim) {
  325.         obj.curAnim = anim + 2;
  326.         obj.determineCurFrame();
  327.     }
  328.     obj.draw();
  329. }
  330.  
  331. void turnIntoCustomSpring(jjOBJ@ obj, uint color, float power, bool horizontal) {
  332.     if (horizontal) {
  333.         obj.xSpeed = power;
  334.         obj.ySpeed = 0.f;
  335.     } else {
  336.         obj.xSpeed = 0.f;
  337.         obj.ySpeed = -power;
  338.         if (obj.state == STATE::START && obj.creatorType == CREATOR::LEVEL) {
  339.             int x = int(obj.xPos) >> 5;
  340.             int y = int(obj.yPos) >> 5;
  341.             if (jjParameterGet(x, y, 0, 1) != 0) {
  342.                 jjParameterSet(x, y, 0, 1, 0);
  343.                 obj.yPos -= 4.f;
  344.                 obj.ySpeed = power;
  345.             }
  346.         }
  347.     }
  348.     obj.behavior = initializeCustomSpring;
  349.     obj.curAnim = customSpringSprite + color * 3 + (horizontal ? 1 : 0);
  350.     obj.energy = obj.frameID = obj.freeze = obj.justHit = obj.light = obj.points = 0;
  351.     obj.isBlastable = obj.isTarget = obj.scriptedCollisions = obj.triggersTNT = false;
  352.     obj.deactivates = obj.isFreezable = true;
  353.     obj.bulletHandling = HANDLING::IGNOREBULLET;
  354.     obj.playerHandling = HANDLING::SPECIAL;
  355.     obj.lightType = LIGHT::NORMAL;
  356.     obj.determineCurFrame();
  357. }
  358.  
  359. void handleFastCustomSpringSpeeds(jjPLAYER@ play) {
  360.         if (play.ySpeed < -32.f) {
  361.                 fastCustomSpringSpeeds[play.localPlayerID] = int(ceil((play.ySpeed + 32.f) / -0.125f));
  362.         } else if (fastCustomSpringSpeeds[play.localPlayerID] != 0) {
  363.                 if (play.ySpeed < -31.f) {
  364.                         fastCustomSpringSpeeds[play.localPlayerID]--;
  365.                         play.ySpeed = -32.f;
  366.                 } else {
  367.                         fastCustomSpringSpeeds[play.localPlayerID] = 0;
  368.                 }
  369.         }
  370. }
  371.  
  372. void onPlayer(jjPLAYER@ play) {
  373.         play.lightType = LIGHT::NONE;
  374.        
  375.         handleFastCustomSpringSpeeds(play);
  376. }
  377.  
  378. class CannotBeShotDown : jjBEHAVIORINTERFACE {
  379.         jjBEHAVIOR originalBehavior;
  380.         CannotBeShotDown(jjBEHAVIOR behavior) {
  381.                 originalBehavior = behavior;
  382.         }
  383.         void onBehave(jjOBJ@ obj) override {
  384.                 obj.behave(originalBehavior);
  385.                 if (obj.state == STATE::FLOATFALL)
  386.                         obj.state = STATE::FLOAT;
  387.                 if (obj.eventID == OBJECT::FULLENERGY)
  388.                         obj.xPos = obj.xOrg - 16;
  389.         }
  390.         bool onObjectHit(jjOBJ@ obj, jjOBJ@ bullet, jjPLAYER@ player, int force) {
  391.                 obj.behavior = originalBehavior;
  392.                 if (bullet is null)
  393.                         player.objectHit(obj, force, obj.playerHandling);
  394.                 else
  395.                         bullet.objectHit(obj, obj.playerHandling);
  396.                 obj.behavior = CannotBeShotDown(obj.behavior);
  397.                 return true;
  398.         }
  399. }