home *** CD-ROM | disk | FTP | other *** search
/ Superpower (Alt) / SUPERPOWER.iso / q / patch / mbq067 / capture.qc next >
Encoding:
Text File  |  1996-08-16  |  13.3 KB  |  362 lines

  1. /*
  2. Capture the flag routines
  3.  
  4. Written by W.Harris
  5. */
  6.  
  7. void() ActivateFlag;
  8. void() PlaceBase;
  9.  
  10. void() CheckFlag =
  11. {
  12.         local entity newflag;
  13.         local entity oldbase;
  14.         local float flag_color;
  15.  
  16.         self.think = CheckFlag;
  17.         self.nextthink = time + 1;
  18.         if (self.watertype < -3)
  19.                 {
  20.                 flag_color = self.items;
  21.                 if (flag_color == FLAG_1)
  22.                         bprint ("Silver ");
  23.                 if (flag_color == FLAG_2)
  24.                         bprint ("Gold ");
  25.                 bprint("flag unreachable. Respawning."); 
  26.                 remove(self);
  27.                 
  28.                 oldbase = world;
  29.                 while (oldbase.items != flag_color)
  30.                 oldbase = find(oldbase,classname,"base");
  31.                                 
  32.                 newflag = spawn();
  33.                 newflag.owner = oldbase;
  34.                 newflag.movetype = MOVETYPE_NONE;
  35.                 newflag.solid = SOLID_NOT;
  36.                 newflag.items = flag_color;
  37.                 newflag.classname = "flag";
  38.                 newflag.think = ActivateFlag;
  39.                 newflag.nextthink = time + 0.5;
  40.                 setsize (newflag, VEC_ORIGIN, VEC_ORIGIN);               
  41.                 setorigin (newflag, oldbase.origin);
  42.                 newflag.pos1 = newflag.origin;
  43.                 newflag.velocity = VEC_ORIGIN;
  44.                 if (flag_color == FLAG_1)
  45.                         setmodel(newflag,"progs/m_s_key.mdl");
  46.                 else
  47.                         setmodel(newflag,"progs/m_g_key.mdl");
  48.                 return;
  49.                 }
  50. };
  51.  
  52. void() PickupFlag =
  53. {
  54.         local float team_color;
  55.         local float flag_color;
  56.         local entity newflag;
  57.         local entity oldbase;
  58.  
  59.         if (world_flag) return;
  60.         if (other == world) return;
  61.         if (other.classname != "player") return;
  62.         flag_color = self.items;
  63.         team_color = other.team;
  64.         if (team_color > 2)
  65.         {
  66.                 sprint(other,"You must be either Silver or Yellow\n");
  67.                 sprint(other,"Type COLOR 0 or COLOR 1\n");
  68.                 return;
  69.         }
  70.         if ((flag_color == team_color) && (self.origin_x == self.pos1_x) && (self.origin_y == self.pos1_y))
  71.         {
  72.                 // You cannot take your flag from your base
  73.                 return;
  74.         }
  75.         if (flag_color != team_color)
  76.         {                
  77.                 bprint(other.netname);
  78.                 bprint(" picked up the ");
  79.                 if (flag_color == FLAG_1) bprint("silver flag.\n");
  80.                 if (flag_color == FLAG_2) bprint("gold flag.\n");
  81.                 sound (self, CHAN_WEAPON, "misc/secret.wav", 1, ATTN_NORM);        
  82.         }
  83.         else
  84.         {        
  85.                 sprint(other,"You recovered your flag!\n");
  86.                 sound (self, CHAN_WEAPON, "misc/secret.wav", 1, ATTN_NORM);        
  87.                 // respawn at flag base
  88.                 
  89.                 oldbase = world;
  90.                 while (oldbase.items != team_color)
  91.                 oldbase = find(oldbase,classname,"base");
  92.                 
  93.                 newflag = spawn();
  94.                 newflag.owner = self;
  95.                 newflag.movetype = MOVETYPE_NONE;
  96.                 newflag.solid = SOLID_NOT;
  97.                 newflag.items = team_color;
  98.                 newflag.classname = "flag";
  99.                 newflag.think = ActivateFlag;
  100.                 newflag.nextthink = time + 0.1;
  101.                 setsize (newflag, VEC_ORIGIN, VEC_ORIGIN);               
  102.                 setorigin (newflag, oldbase.origin);
  103.                 newflag.pos1 = newflag.origin;
  104.                 newflag.velocity = VEC_ORIGIN;
  105.                 if (team_color == FLAG_1)
  106.                         setmodel(newflag,"progs/m_s_key.mdl");
  107.                 else
  108.                         setmodel(newflag,"progs/m_g_key.mdl");
  109.                 remove(self);
  110.                 return;
  111.         }                
  112.         other.have_flag = other.have_flag + flag_color;
  113.         remove(self);
  114. };
  115.  
  116. void() ActivateFlag =
  117. {
  118.         local entity newflag;        
  119.         local entity oldbase;
  120.         local float flag_color;
  121.         
  122.         self.owner = self;
  123.         self.movetype = MOVETYPE_TOSS;
  124.         self.velocity_x = self.velocity_x + (50 * (random() - 0.5));
  125.         self.velocity_y = self.velocity_y + (50 * (random() - 0.5));
  126.         self.solid = SOLID_TRIGGER;
  127.         self.touch = PickupFlag;
  128.         self.think = CheckFlag;
  129.         self.effects = self.effects | EF_DIMLIGHT;
  130.         self.nextthink = time + 5;
  131.         if (world_flag)
  132.                 {
  133.                 self.pos1 = self.origin;                
  134.                 PlaceBase();
  135.                 }
  136. };
  137.  
  138. void() TouchBase =
  139. {
  140.         local float team_color;
  141.         local float base_color;
  142.         local entity newflag;        
  143.         local entity oldbase;
  144.  
  145.         if (other == world) return;
  146.         if (other.classname != "player") return;
  147.         if (other.have_flag == 0) return;
  148.         base_color = self.items;
  149.         team_color = other.team;
  150.         if (team_color > 2)
  151.                 {
  152.                 sprint(self,"You must be either Silver or Yellow\n");
  153.                 sprint(self,"Type COLOR 0 or COLOR 1\n");
  154.                 return;
  155.                 }
  156.         if (team_color == base_color)
  157.                 {
  158.                 if (other.have_flag == 0) return;
  159.                 if (other.have_flag & team_color)
  160.                         {                       
  161.                                 // return your flag to base
  162.                                 sprint(other,"You return your flag to your base\n");
  163.                                 sound (other, CHAN_WEAPON, "misc/secret.wav", 1, ATTN_NORM);        
  164.                                 newflag = spawn();
  165.                                 newflag.owner = self;
  166.                                 newflag.movetype = MOVETYPE_NONE;
  167.                                 newflag.solid = SOLID_NOT;
  168.                                 newflag.items = team_color;
  169.                                 newflag.classname = "flag";
  170.                                 newflag.think = ActivateFlag;
  171.                                 newflag.nextthink = time + 0.1;
  172.                                 setsize (newflag, VEC_ORIGIN, VEC_ORIGIN);               
  173.                                 setorigin (newflag, self.origin);
  174.                                 newflag.pos1 = newflag.origin;
  175.                                 newflag.velocity = VEC_ORIGIN;
  176.                                 if (team_color == FLAG_1)
  177.                                         setmodel(newflag,"progs/m_s_key.mdl");
  178.                                 else
  179.                                         setmodel(newflag,"progs/m_g_key.mdl");
  180.  
  181.                                 other.have_flag = other.have_flag - team_color;
  182.                                 
  183.                         }       
  184.                         if (other.have_flag & (3 - team_color))
  185.                         {                
  186.                                 // secure enemy flag
  187.                                 bprint(other.netname);
  188.                                 bprint(" secures ");
  189.                                 if (team_color == FLAG_1)
  190.                                         bprint("yellow flag.\n");
  191.                                 if (team_color == FLAG_2)
  192.                                         bprint("silver flag.\n");
  193.                                 sound (other, CHAN_WEAPON, "misc/secret.wav", 1, ATTN_NORM);        
  194.                                 other.frags = other.frags + 3 + numplayers;
  195.                                 
  196.                                 oldbase = world;
  197.                                 while (oldbase.items != (3 - team_color))
  198.                                 oldbase = find(oldbase,classname,"base");
  199.                                 
  200.                                 newflag = spawn();
  201.                                 newflag.owner = oldbase;
  202.                                 newflag.movetype = MOVETYPE_NONE;
  203.                                 newflag.solid = SOLID_NOT;
  204.                                 newflag.items = (3 - team_color);
  205.                                 newflag.classname = "flag";
  206.                                 newflag.think = ActivateFlag;
  207.                                 newflag.nextthink = time + 0.1;
  208.                                 setsize (newflag, VEC_ORIGIN, VEC_ORIGIN);               
  209.                                 setorigin (newflag, oldbase.origin);
  210.                                 newflag.pos1 = newflag.origin;
  211.                                 newflag.velocity = VEC_ORIGIN;
  212.                                 if ((3 - team_color) == FLAG_1)
  213.                                         setmodel(newflag,"progs/m_s_key.mdl");
  214.                                 else
  215.                                         setmodel(newflag,"progs/m_g_key.mdl");
  216.                              
  217.                                 other.have_flag = other.have_flag - (3 - team_color);
  218.                         }
  219.                 }
  220. };
  221.  
  222. void() ActivateBase =
  223. {
  224.         local entity found;
  225.  
  226.         self.owner = self;
  227.         self.movetype = MOVETYPE_TOSS;
  228.         self.solid = SOLID_TRIGGER;
  229.         self.touch = TouchBase;
  230.         world_flag = world_flag - self.items;
  231.         if (world_flag == 0)
  232.         {
  233.                 bprint("Both flags placed. GO!\n");
  234.                 return;
  235.         }
  236. };
  237.  
  238. void () PlaceBase =        
  239. {
  240.         local entity newbase;
  241.  
  242.         newbase = spawn();
  243.         newbase.owner = self;
  244.         newbase.movetype = MOVETYPE_NONE;
  245.         newbase.solid = SOLID_NOT;
  246.         newbase.items = self.items;
  247.         newbase.classname = "base";
  248.         newbase.think = ActivateBase;
  249.         newbase.nextthink = time;
  250.         newbase.effects = newbase.effects | EF_DIMLIGHT;
  251.         setsize (newbase, VEC_ORIGIN, VEC_ORIGIN);               
  252.         setorigin (newbase, self.origin + '0 0 3');
  253.         newbase.velocity = VEC_ORIGIN;
  254.         if (self.items == FLAG_1)
  255.                 setmodel(newbase,"progs/w_s_key.mdl");
  256.         else
  257.                 setmodel(newbase,"progs/w_g_key.mdl");
  258. };
  259.  
  260. void(float checkflag) DropFlag = 
  261. {
  262.         local float flag_color;
  263.         local entity newflag;
  264.         if (teamplay != 7)
  265.         {
  266.                 sprint(self,"Not Capture the Flag\n");
  267.                 return;
  268.         }
  269.         if (self.team == 1)
  270.                 flag_color = FLAG_1;
  271.         if (self.team == 2)
  272.                 flag_color = FLAG_2;
  273.         if (world_flag == 0)
  274.                 flag_color = self.have_flag;
  275.         if (flag_color == 3)
  276.         {
  277.                 // you have both flags
  278.                 self.have_flag = FLAG_1;
  279.                 DropFlag(TRUE);
  280.                 self.have_flag = FLAG_2;
  281.                 DropFlag(TRUE);
  282.                 return;
  283.         }
  284.         if (self.team > 2)
  285.         {
  286.                 sprint(self,"You must be either Silver or Yellow\n");
  287.                 sprint(self,"Type COLOR 0 or COLOR 1\n");
  288.                 return;
  289.         }
  290.         if ((checkflag == TRUE) && !(self.have_flag & flag_color))
  291.         {
  292.                 sprint(self,"You don't carry a flag\n");
  293.                 return;                
  294.         }
  295.         if (world_flag == 0)
  296.                 self.have_flag = self.have_flag - flag_color;
  297.         
  298.         newflag = spawn();
  299.         newflag.owner = self;
  300.         newflag.movetype = MOVETYPE_NONE;
  301.         newflag.solid = SOLID_NOT;
  302.         newflag.items = flag_color;
  303.         newflag.classname = "flag";
  304.         newflag.think = ActivateFlag;
  305.         newflag.nextthink = time + 1;
  306.         setsize (newflag, VEC_ORIGIN, VEC_ORIGIN);               
  307.         setorigin (newflag, self.origin);
  308.         newflag.velocity = VEC_ORIGIN;
  309.         if (flag_color == FLAG_1)
  310.                 setmodel(newflag,"progs/m_s_key.mdl");
  311.         else
  312.                 setmodel(newflag,"progs/m_g_key.mdl");
  313.         self.attack_finished = time + 1.1;
  314. };
  315.  
  316. void() W_PlaceFlag =
  317. {
  318.         if (world_flag == 0)
  319.         {
  320.                 bprint("Both Flags already placed.\n");
  321.                 return;
  322.         }
  323.         if (self.team == 1) 
  324.         {
  325.                 if (world_flag & FLAG_1)
  326.                 {
  327.                         bprint("Silver Flag Placed by ");
  328.                         bprint(self.netname);
  329.                         bprint("\n");
  330.                         DropFlag(FALSE);
  331.                         return;
  332.                 }
  333.                 else
  334.                 {
  335.                         sprint(self,"Silver flag already dropped\n");
  336.                         return;
  337.                 }
  338.         }
  339.         if (self.team == 2)
  340.         {
  341.                 if (world_flag & FLAG_2)
  342.                 {
  343.                         bprint("Gold Flag Placed by ");
  344.                         bprint(self.netname);
  345.                         bprint("\n");
  346.                         DropFlag(FALSE);
  347.                         return;
  348.                 }
  349.                 else
  350.                 {               
  351.                         sprint(self,"Yellow flag already dropped\n");
  352.                         return;
  353.                 }
  354.         }
  355.         if (self.team > 2)
  356.         {
  357.                 sprint(self,"You must be either Silver or Yellow\n");
  358.                 sprint(self,"Type COLOR 0 or COLOR 1\n");
  359.                 return;
  360.         }
  361. };
  362.