Advertisement
Guest User

Untitled

a guest
Jan 16th, 2014
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ParaSail 16.91 KB | None | 0 0
  1.  
  2. // Types of used games
  3. // 1 - Coop
  4.  
  5. EXPORT
  6.   def_amount_of_siberit,   // (15)
  7.   def_public_score;        // (16)
  8.  
  9. EXPORT
  10.   is_depot,
  11.   number_of_breastworks,
  12.   number_of_people,
  13.   skill_level,
  14.   starting_crates,
  15.   starting_resources,
  16.   shipments_density,
  17.   morale_decreasing_time,
  18.   amount_of_apemen,
  19.   amount_of_siberit,
  20.   respawning_time_min,
  21.   respawning_time_max;
  22.  
  23. export  Side_Teams, Teams;
  24. export  Side_Positions, Side_Nations, Team_Game;
  25.  
  26. export  Position_Sides;
  27.  
  28. export  depot_def, breastworks_def, start_def,
  29.         normal_oil_deposits_locations,
  30.         extra_oil_deposits_locations,
  31.         normal_sib_deposits_locations,
  32.         extra_sib_deposits_locations,
  33.         battle_flags_id,def_ai_omikron,def_ai_beria,def_ai_kirov,def_diffi_skill,
  34.         ai_omikron,ai_beria,ai_kirov,skill_diff;
  35.  
  36. var commander;
  37.  
  38. var global_units,
  39.     global_defined,
  40.     soldiers_created;
  41.  
  42. var neng,
  43.     nsci,
  44.     nmech,
  45.     nsol;
  46.  
  47. function read_multiplayer_and_game_parameters;
  48. var i;
  49. begin
  50.   if Multiplayer then
  51.     begin
  52.       Game_Type:=      mp_game_type;
  53.  
  54.       Your_Side:=      mp_player_side;
  55.  
  56.       Side_Positions:= mp_sides_positions;
  57.       Side_Teams:=     mp_sides_teams;
  58.       Side_Nations:=   mp_sides_nations;
  59.  
  60.       Teams:=          mp_teams;
  61.     end
  62.   else
  63.     begin
  64.       Game_Type:=      1;
  65.  
  66.       Your_Side:=      3;
  67.  
  68.       Side_Positions:= [1,2,3,4,5,6,0,0];
  69.       Side_Teams:=     [1,2,3,4,5,6,0,0];
  70.       Side_Nations:=   [1,2,3,1,2,3,0,0];
  71.  
  72.       Teams:=          [[1],[2],[3],[4],[5],[6]];
  73.     end;
  74.  
  75.   for i:= 1 to 8 do
  76.     if Multiplayer_GetPlayerIsSpec(i) then
  77.     begin
  78.       Side_Positions:= Replace(Side_Positions, i, 0);
  79.       Teams:= Replace(Teams, Side_Teams[i], Teams[Side_Teams[i]] diff i);
  80.     end;
  81.  
  82.   Position_Sides:= [0,0,0,0,0,0];
  83.  
  84.   for i:= 1 to 8 do
  85.     if Side_Positions[i] then
  86.       Position_Sides:= Replace(Position_Sides, Side_Positions[i], i);
  87.  
  88.   Team_Game:= Side_Teams[your_side];
  89.  
  90.   if Multiplayer then
  91.     begin
  92.       def_base_level:=         GetMultiplayerSetting(0);
  93.       def_amount_of_people:=   GetMultiplayerSetting(1);
  94.       def_skill_level:=        GetMultiplayerSetting(2);
  95.       def_starting_resources:= GetMultiplayerSetting(3);
  96.       def_shipments_density:=  GetMultiplayerSetting(4);
  97.       def_ai_omikron = GetMultiplayerSetting(5);
  98.       def_ai_beria = GetMultiplayerSetting(6);
  99.       def_ai_kirov = GetMultiplayerSetting(7);
  100.       def_diffi_skill = GetMultiplayerSetting(8);
  101.     end
  102.   else
  103.     begin
  104.       Randomize;
  105.  
  106.       def_base_level:=         2;
  107.       def_amount_of_people:=   0;
  108.       def_skill_level:=        1;
  109.       def_starting_resources:= 2;
  110.       def_shipments_density:=  1;
  111.       def_extra_oil_deposits:= 0;
  112.       def_extra_sib_deposits:= 1;
  113.       def_shared_vision:=      1;
  114.       def_morale_flags:=       1;
  115.       def_siberite_detection:= 1;
  116.       def_people_respawning:=  2;
  117.       def_amount_of_apemen:=   3;
  118.       def_amount_of_siberit:=  0;
  119.       def_public_score:=       0;
  120.       def_siberite_bomb:=      0;
  121.       def_builduptime:=        0;
  122.       def_game_rules:=         1;
  123.     end;
  124.  
  125.   InitGameRules;
  126.  
  127.   if (Game_Type = 5) then
  128.     begin
  129.       def_base_level:=         1;
  130.       def_extra_oil_deposits:= 0;
  131.       def_extra_sib_deposits:= 0;
  132.       disable(10);
  133.     end;
  134.  
  135.   is_depot                    := [0,1,1,1] [def_base_level+1];
  136.   number_of_breastworks       := [0,0,2,2] [def_base_level+1];
  137.   number_of_people            := [9,12,15,24] [def_amount_of_people+1];
  138.   skill_level                 := [3,5,6,7] [def_skill_level+1];
  139.   ai_omikron                  = [0,1] [def_ai_omikron+1];
  140.   ai_beria                    = [0,1] [def_ai_beria+1];
  141.   ai_kirov                    = [0,1] [def_ai_kirov+1];
  142.   skill_diff  = [3,5,8,10] [def_diffi_skill];
  143.   if (Game_Type = 5) then
  144.     begin
  145.       starting_resources          := [[1000,100,100], [2000,200,200], [5000,500,500], [10000,1000,1000], [25000,2500,2500], [50000,5000,5000]] [def_starting_resources+1];
  146.       starting_crates             := [];
  147.     end
  148.   else
  149.     begin
  150.       starting_resources          := [[0,0,0], [30,0,0], [50,20,0], [80,40,20]] [def_starting_resources+1];
  151.       starting_crates             := [[10], [7,14], [6,12,18], [5,10,15,20]] [def_starting_resources+1];
  152.     end;
  153.   shipments_density           := [150, 125, 100, 50] [def_shipments_density+1];
  154.   respawning_time_min         := [0$0, 5$00, 3$0] [def_people_respawning+1];
  155.   respawning_time_max         := [0$0, 15$00, 5$0] [def_people_respawning+1];
  156.   amount_of_apemen            := [0, 3, 6, 9] [def_amount_of_apemen+1];
  157.   morale_decreasing_time      := [ -1, 0$10, 0$20, 0$40, 0$0 ] [def_morale_flags+1];
  158.   battle_flags_id             := [];
  159.  
  160.   BuildUpAreas:= [BuildUp1, BuildUp2, BuildUp3];
  161. end;
  162.  
  163. function init_map;
  164. var i,j;
  165. begin
  166.   normal_oil_deposits_locations:=[ [19,4], [93,75], [139,84] ];
  167.  
  168.  
  169.   depot_def:=[ [11,8,3], [98,76,0], [142,75,3] ];
  170.  
  171.   for i in depot_def do
  172.     start_def:=start_def^[[ShiftX(i[1], i[3], 10), ShiftY(i[2], i[3], 10)]];
  173.  
  174.    breastworks_def:=[ [ [29,9,4],   [29,29,5]   ],
  175.                      [ [86,58,2],   [88,68,1]   ],
  176.                      [ [128,73,1],  [131,79,1]  ],
  177.                    ];
  178.  
  179.   for i in (Side_Positions diff [0]) do
  180.     if def_extra_oil_deposits then
  181.       for j in extra_oil_deposits_locations[i] do
  182.         CreateDepositXY(j[1],j[2],mat_oil)
  183.     else
  184.       CreateDepositXY(normal_oil_deposits_locations[i][1],normal_oil_deposits_locations[i][2],mat_oil);
  185.  
  186.   if def_extra_sib_deposits then
  187.     for i in (Side_Positions diff [0]) do
  188.       if def_extra_sib_deposits=2 then
  189.         for j in extra_sib_deposits_locations[i] do
  190.           CreateDepositXY(j[1],j[2],mat_siberit)
  191.       else
  192.         CreateDepositXY(normal_sib_deposits_locations[i][1],normal_sib_deposits_locations[i][2],mat_siberit);
  193. end;
  194.  
  195. function set_shared_visions_and_alliances;
  196. var i, j;
  197. begin
  198.   if not Team_Game then
  199.     begin
  200.       for i=1 to 8 do
  201.         for j=1 to 8 do
  202.           if i<>j then
  203.             SetAttitude(i,j,att_neutral,true)
  204.           else
  205.             SetAttitude(i,j,att_friend,true);
  206.     end
  207.   else
  208.     begin
  209.       if def_shared_vision then
  210.         begin
  211.           for i in Teams do
  212.             for j=2 to i do
  213.               ChangeSideFog( i[j], i[1] );
  214.         end;
  215.  
  216.       for i=1 to 8 do
  217.         for j=1 to 8 do
  218.           if Side_Teams[i]=Side_Teams[j] then
  219.             SetAttitude(i,j,att_friend,true)
  220.           else
  221.             SetAttitude(i,j,att_enemy,true);
  222.     end;
  223. end;
  224.  
  225. function prepare_people(count,cl,x,y,r);
  226. var i,j,un;
  227. begin
  228.   result:=[];
  229.   for i:=1 to count do
  230.     begin
  231.       uc_direction:=Rand(0,5);
  232.       if commander then
  233.         begin
  234.           hc_name := mp_sides_players_names[uc_side];
  235.           PrepareHuman(Rand(1,2),cl,skill_level+2);
  236.           hc_importance:=105;
  237.           commander:=false;
  238.           If Multiplayer then
  239.             begin
  240.               hc_gallery:= 'MULTIAVATARS';
  241.               hc_face_number:=Multiplayer_GetPlayerSideNum(uc_side);
  242.               hc_sex := Multiplayer_GetPlayerSex(uc_side);
  243.             end;
  244.         end
  245.       else
  246.         begin
  247.           hc_name := '';
  248.           PrepareHuman(rand(1,2),cl,skill_level);
  249.           hc_importance:=0;
  250.           If Multiplayer then
  251.             begin
  252.               hc_gallery:= '';
  253.               hc_face_number:=0;
  254.             end;
  255.         end;
  256.  
  257.       un:=CreateHuman;
  258.  
  259.       if global_defined then
  260.         begin
  261.           if (cl = class_soldier) then
  262.             j:= i + soldiers_created
  263.           else
  264.             j:= i;
  265.           CopySkills(global_units[cl][j],un);
  266.           SetAttr(un, attr_speed,   GetAttr( global_units[cl][j], attr_speed)   );
  267.           SetAttr(un, attr_stamina, GetAttr( global_units[cl][j], attr_stamina) );
  268.         end;
  269.  
  270.       PlaceUnitXYR(un,x,y,r,false);
  271.       result:=result ^ [un];
  272.     end;
  273.  
  274.   if not global_defined then
  275.     if (global_units >= cl) then
  276.       global_units:= Replace(global_units, cl, global_units[cl] ^ result)
  277.     else
  278.       global_units:= Replace(global_units, cl, result);
  279. end;
  280.  
  281. function prepare_side(side);
  282. var pos,x,y,dir,i,r,sol,br,dep;
  283. begin
  284.   pos:=Side_Positions[side];
  285.  
  286.   uc_nation:=Side_Nations[side];
  287.   uc_side:=side;
  288.  
  289.   x:=depot_def[pos][1];
  290.   y:=depot_def[pos][2];
  291.   dir:=depot_def[pos][3];
  292.  
  293.   if is_depot then
  294.     begin
  295.       bc_type=b_depot;
  296.       dep:=CreateAndPlaceBuildingXYD(x,y,dir);
  297.       SetBName(dep,'@' & side);
  298.  
  299.       SetResourceType(GetBase(dep),mat_cans,starting_resources[mat_cans]);
  300.       SetResourceType(GetBase(dep),mat_oil,starting_resources[mat_oil]);
  301.       SetResourceType(GetBase(dep),mat_siberit,starting_resources[mat_siberit]);
  302.     end
  303.   else
  304.     begin
  305.       for i:=1 to 3 do
  306.         begin
  307.           r:=starting_resources[i];
  308.           while r>=10 do
  309.             if r>50 then
  310.               begin
  311.                 CreateResourcesXYR(i,5,x,y,4,false);
  312.                 r:=r-50;
  313.               end
  314.             else
  315.               begin
  316.                 CreateResourcesXYR(i,r div 10,x,y,4,false);
  317.                 r:=0;
  318.               end;
  319.          end;
  320.     end;
  321.  
  322.   for r in starting_crates do
  323.     CreateResourcesXYR(mat_cans,5,x,y,r,false);
  324.  
  325.   if def_morale_flags then
  326.     begin
  327.       x:=start_def[pos][1];
  328.       y:=start_def[pos][2];
  329.       PlaceEnvironment(x,y,12,2);
  330.       battle_flags_id:=battle_flags_id ^ SetBattleFlag(side,x,y,
  331.                                                        [ [bfo_defend_bonus_human,100],
  332.                                                          [bfo_defend_bonus_vehicle,50],
  333.                                                          [bfo_defend_bonus_building,20],
  334.                                                          [bfo_height,100] ]);
  335.     end;
  336.  
  337.   commander:=true;
  338.  
  339.   soldiers_created:=0;
  340.   for i:=1 to number_of_breastworks do
  341.     begin
  342.       x:=breastworks_def[pos][i][1];
  343.       y:=breastworks_def[pos][i][2];
  344.       dir:=breastworks_def[pos][i][3];
  345.  
  346.       bc_type:=b_breastwork;
  347.       br:=CreateAndPlaceBuildingXYD(x,y,dir);
  348.  
  349.       x:=ShiftX(x,dir,2);
  350.       y:=ShiftY(y,dir,2);
  351.  
  352.       sol:=prepare_people(1,class_soldier,x,y,0)[1];
  353.       soldiers_created:=soldiers_created+1;
  354.  
  355.       ComEnterUnit(sol,br);
  356.     end;
  357.  
  358.   x:=start_def[pos][1];
  359.   y:=start_def[pos][2];
  360.  
  361.   prepare_people(nsol-number_of_breastworks,class_soldier,x,y,5);
  362.   prepare_people(neng,class_engineer,x,y,5);
  363.   prepare_people(nmech,class_mechanic,x,y,5);
  364.   prepare_people(nsci,class_scientistic,x,y,5);
  365.  
  366.   if def_siberite_detection then
  367.     SetTech(tech_SibDet,side,state_researched);
  368.  
  369.   if def_siberite_bomb <> 1 then
  370.     SetTech(tech_SibFiss,side,state_disabled);
  371.  
  372.   global_defined:= true;
  373. end;
  374.  
  375. function EnableSibFiss;
  376. var i;
  377. begin
  378.   for i:=1 to 8 do
  379.     if Side_Positions[i] then
  380.       SetTech(tech_SibFiss,i,state_enabled);
  381. end;
  382.  
  383. every 30$0 do
  384.   if (def_siberite_bomb = 2) then
  385.     EnableSibFiss;
  386.  
  387. every 60$0 do
  388.   if (def_siberite_bomb = 3) then
  389.     EnableSibFiss;
  390.  
  391. every 90$0 do
  392.   if (def_siberite_bomb = 4) then
  393.     EnableSibFiss;
  394.  
  395. every 120$0 do
  396.   if (def_siberite_bomb = 5) then
  397.     EnableSibFiss;
  398.  
  399. function prepare_sides;
  400. var i;
  401. begin
  402.   global_units:=   [];
  403.   global_defined:= False;
  404.  
  405.   CountClassMembers;
  406.  
  407.   for i:=1 to 8 do
  408.     if Side_Positions[i] then
  409.       prepare_side(i);
  410. end;
  411.  
  412. function CountClassMembers;
  413. var Mode;
  414. begin
  415.   if (def_game_rules = 3) then // SW
  416.     Mode:= 2
  417.   else
  418.     Mode:= 1;
  419.  
  420.   neng:= number_of_people;
  421.   nsol:= neng div [4, 3] [Mode];
  422.  
  423.   if (nsol < number_of_breastworks) then
  424.     nsol:= number_of_breastworks;
  425.  
  426.   neng:= neng - nsol;
  427.  
  428.   nsci:= neng div [3, 2] [Mode];
  429.  
  430.   if (nsci < 1) then
  431.     nsci:= 1;
  432.  
  433.   neng:= neng - nsci;
  434.  
  435.   nmech:= [neng div 2, 0] [Mode];
  436.  
  437.   neng:= neng - nmech;
  438.  
  439.   if (neng < 1) then
  440.     neng:= 1;
  441. end;
  442.  
  443. function Init_Win_Condition;
  444. begin
  445.   if Team_Game then
  446.     Enable(98)
  447.   else
  448.     Enable(99);
  449.   case Game_Type of
  450.     3: Enable(100);
  451.   end;
  452. end;
  453.  
  454. starting
  455. begin
  456.   Disable(98);  // YouWin (Team war)
  457.   Disable(99);  // YouWin (Kill 'em all)
  458.   Disable(100); // YouWin (Mine the siberit)
  459.  
  460.   Disable(200); // BloodGods
  461.  
  462.   Disable(400); // SuddenLost
  463.   Disable(401); // SuddenWin
  464.  
  465.   Disable(600); // Build-up
  466.  
  467.   mp_selectmsg := true;
  468.  
  469.   read_multiplayer_and_game_parameters;
  470.   init_map;
  471.   init_respawning;
  472.   set_shared_visions_and_alliances;
  473.   prepare_sides;
  474.  
  475.   InitLimits;
  476.   ShowTimer;
  477.  
  478.   if (Game_Type = 4) then
  479.     InitBloodGods;
  480.  
  481.   music_nat:=Side_Nations[your_side];
  482.  
  483.   if IAmSpec then
  484.     begin
  485.       FogOff(true);
  486.       CenterNowOnXY(104, 69);
  487.       Enable(400);
  488.     end
  489.   else
  490.     begin
  491.       ResetFog;
  492.       CenterNowOnXY(start_def[Side_Positions[your_side]][1],start_def[Side_Positions[your_side]][2]);
  493.       Init_Win_Condition;
  494.     end;
  495.  
  496.   if def_builduptime then
  497.     BeginBuildUp;
  498. end;
  499.  
  500.  
  501.  
  502. xport function PrepareOmikronPerson;
  503. var l,i,un,AmTurr,Enginer,Mechanic,AmMech,Soldier,AmSol1,AmSol2,AmSci,Scientis;
  504. begin
  505.        AmTurr := FilterAllUnits([[f_side, 1], [f_btype, b_bunker]]);
  506.        AmEng = [];
  507.        AmSci = [];
  508.        AmMech = [];
  509.        AmSol1 = [];
  510.        AmSol2 = [];
  511.  
  512.      for i in AmTurr do
  513.      begin
  514.         If IsInUnit(i) = 0 then
  515.            begin
  516.            uc_side = 1;
  517.            uc_nation = 1;
  518.            hc_gallery = '';
  519.            hc_name = '';
  520.            hc_attr = [Rand(9,11), Rand(10, 12)];
  521.            hc_skills = [Rand(0,skill_diff),Rand(0,skill_diff),Rand(0,skill_diff),Rand(0,skill_diff)];
  522.            hc_sex = Rand(sex_male, sex_female);
  523.            hc_class = 1;
  524.            un := CreateHuman;
  525.            PlaceHumanInUnit(un, i);
  526.         end;
  527.  
  528.  
  529.          for i in ambarack1 do
  530.         begin
  531.  
  532.         l = 0;
  533.  
  534.         If IsInUnit(i) = 0 then
  535.            repeat begin
  536.            uc_side = 1;
  537.            uc_nation = 1;
  538.            hc_gallery = '';
  539.            hc_name = '';
  540.            hc_attr = [Rand(9,11), Rand(10, 12)];
  541.            hc_skills = [Rand(0,difficulty),Rand(0,difficulty),Rand(0,difficulty),Rand(0,difficulty)];
  542.            hc_sex = Rand(sex_male, sex_female);
  543.            hc_class = 1;
  544.  
  545.            Soldier = CreateHuman;
  546.            PlaceHumanInUnit(Soldier,ambarack1);
  547.            AmSol1 = AmSol1 ^ Soldier;
  548.            l = l + 1;
  549.            end until l = 3;
  550.         end;
  551.  
  552.            for i in ambarack2 do
  553.         begin
  554.  
  555.         l = 0;
  556.  
  557.         If IsInUnit(i) = 0 then
  558.            repeat begin
  559.            uc_side = 1;
  560.            uc_nation = 1;
  561.            hc_gallery = '';
  562.            hc_name = '';
  563.            hc_attr = [Rand(9,11), Rand(10, 12)];
  564.            hc_skills = [Rand(0,difficulty),Rand(0,difficulty),Rand(0,difficulty),Rand(0,difficulty)];
  565.            hc_sex = Rand(sex_male, sex_female);
  566.            hc_class = 1;
  567.  
  568.            Soldier = CreateHuman;
  569.            PlaceHumanInUnit(Soldier,ambarack2);
  570.            AmSol2 = AmSol2 ^ Soldier;
  571.            l = l + 1;
  572.            end until l = 3;
  573.         end;
  574.  
  575.         for i in amdepo do
  576.         begin
  577.  
  578.         l = 0;
  579.  
  580.         If IsInUnit(i) = 0 then
  581.            repeat begin
  582.            wait(0$01);
  583.            uc_side = 1;
  584.            uc_nation = 1;
  585.            hc_gallery = '';
  586.            hc_name = '';
  587.            hc_attr = [Rand(9,11), Rand(10, 12)];
  588.            hc_skills = [Rand(0,difficulty),Rand(0,difficulty),Rand(0,difficulty),Rand(0,difficulty)];
  589.            hc_sex = Rand(sex_male, sex_female);
  590.            hc_class = 2;
  591.  
  592.            Enginer = CreateHuman;
  593.            PlaceHumanInUnit(Enginer,amdepo);
  594.            AmEng = AmEng ^ Enginer;
  595.            l = l + 1;
  596.            end until l = 3;
  597.            end;
  598.     end;
  599.  
  600.     for i in amfactory1 do
  601.         begin
  602.  
  603.         l = 0;
  604.  
  605.         If IsInUnit(i) = 0 then
  606.            repeat begin
  607.            wait(0$01);
  608.            uc_side = 1;
  609.            uc_nation = 1;
  610.            hc_gallery = '';
  611.            hc_name = '';
  612.            hc_attr = [Rand(9,11), Rand(10, 12)];
  613.            hc_skills = [Rand(0,difficulty),Rand(0,difficulty),Rand(0,difficulty),Rand(0,difficulty)];
  614.            hc_sex = Rand(sex_male, sex_female);
  615.            hc_class = 3;
  616.  
  617.            Mechanic = CreateHuman;
  618.            PlaceHumanInUnit(Mechanic,amfactory1);
  619.            AmMech = AmMech ^ Mechanic;
  620.            l = l + 1;
  621.            end until l = 4;
  622.            end;
  623.  
  624.                for i in amlab1 do
  625.                begin
  626.  
  627.                l = 0;
  628.  
  629.                If IsInUnit(i) = 0 then
  630.                repeat begin
  631.                wait(0$01);
  632.                uc_side = 1;
  633.                uc_nation = 1;
  634.                hc_gallery = '';
  635.                hc_name = '';
  636.                hc_attr = [Rand(9,11), Rand(10, 12)];
  637.                hc_skills = [Rand(0,difficulty),Rand(0,difficulty),Rand(0,difficulty),Rand(0,difficulty)];
  638.                hc_sex = Rand(sex_male, sex_female);
  639.                hc_class = 4;
  640.                Scientis := CreateHuman;
  641.                PlaceHumanInUnit(Scientis, i);
  642.                AmSci = AmSci ^ Scientis;
  643.                l = l + 1;
  644.                end until i = 3;
  645.         end;
  646. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement