Jump to content

shezan74

Member
  • Content Count

    436
  • Joined

  • Last visited

  • Medals

Everything posted by shezan74

  1. New Fallujah 1.2 is on its way to Armaholic servers. Major changes in this release: - Fixed support for ArmA2 Vanilla (no OA) - Fixed (hopefully) the problem with Fallujah double bridge (bridge hopping) (about this issue: i've made several passes with ATV's and other light vehicles and seems ok. It's an issue related to bridges and seems to be an old well-known problem. I hope this is fixed now) - Changed the format of map grid (now with 4 digits) for better ACE DAGR and GPS support - Added support for ambient civilians (Takistan) (ALICE MODULE) - Fixed runway headings textures that was inverted - Updated config to provide better coordinates with GPS and ACE DAGR - Some other small enhancements (a lot of small things...)
  2. Hi, as requested by Old Bear i'm writing there a small tutorial on how to build forests with world tools. First of all, obtain your latest copy of World Tools software. This can be achieved by visiting Armaholic.com http://www.armaholic.com/page.php?id=10508. Start World Tools and click on File->New Project menu, or the first top left icon. World tools can start with or without an background picture. This picture is for FENCE placement tool, so you can easily skip the load of a picture in the first screen, if you want to place forests. We suppose your map is 10240x10240 meters in this example, so select a "preview bitmap size" of 5120 (Note that only multiples of 512 can be used on background pictures, if used, with a 5120 limit). At this point check the multiplier. With a 2x multiplier we have a 5120x2 = 10240 final world size. That is what we need. For a 20480x20480 the multiplier is... yes, true. 4 Click on Apply to start. The red button on bottom right becomes green and in the status bar on bottom left you can read your world size. Click on the green tree on the icon menu. At this point we need a mask image. Mask image is a background image in false colours that will drive world tools through the placement of the objects. For maskMapper2 users: In MM2 user must use a 3 colors map (red, green, blue) and can select only one object type per color. In world tools you can use images with 256 colors max, and assign MULTIPLE objects to each color, following some rules. Well, proceed loading your mask image. Download this one for tutorial purposes: On forest generator click on LOAD FOREST MASK button and load the above image. Now click on ANALYZE IMAGE to let world tools understand you gave it a Jackson Pollock paint. World tools will show you all the colors used by Pollock to draw this mask image. We focus on green color, for this example: you can read, on green row: Color[A=255, R=20, G=213, B=20]: this is the green color identification. If you have some green color variations you can easily identify those colors by their A-RGB color, or by clicking on a spot on the map. [0%]: this is the probability for AN OBJECT to be placed in this color. 0% means NO WAY to have something placed on the green color (and the row color is grayed) (10,29% of total): this is the amount of THIS color on the map. Sometimes you can have 2 gradations of color on the mask, very similar, made by paint software approximations and painting tools. This indicator show you what is the color that you can ignore due his lower presence in the mask. Well... click on the green color row, if not already did, and you can notice a "placement probability" slider on top center of the window. This is the PROBABILITY that one object could appear on a GREEN pixel. 10% means you have 10% probability on each green pixel of the map to have something place on it. BEWARE: Don't play so high with this slider... a 3-4% probability is a lot, even it seems too low. Now, set the slider to 2% (you can finetune with right-left arrows on your keyboard). If done the row turn to black. But... what will appear on this color? actually nothing... Click on SIMULATION button and you can see... nothing. And this is correct, we didn't assigned any object there. Right click on the green row, and set "ADD OBJECT TYPE" I've pre-loaded a big amount of default arma2 objects and some objects from Berghoff tree's project. If objects are not in this list you can easily ADD THEM by clicking on the 3-box icon on the top menu bar. Follow instructions to do this, as it is outside of our tutorial needs. If you can't find your needed objects on this list (OA plants aren't mapped, but if you plan to add them export your object configuration file and send it to me, to be added in the next release, this will save me a lot of work, to be used on other more useful project parts) or if you have renamed objects in your Visitor 3 artificial/natural object list you can add them by writing their name into "custom object" tab. Assuming you're standard, select "TREES" on the first drop down menu, and select the t_salix2s tree type. At this point give it a placement probability moving the slider to the right. 0-100 probability could be used and will explained below. Set 20% (+-) Now repeat the above operations selecting a t_pinuss2f object, with 80% probability Now we have 2 objects below the green color, with some percentages (can be changed by click on the object and moving the slider in the top center of the screen: Now the final explanation. READ ACCURATELY: There is a probability for a COLOR to have an object on it. This is defined by the COLOR percentage, set on the color itself. This percentage tells the program how to determine if an OBJECT will be placed. If the roll dice is successfully catching the color percentage AN OBJECT will be placed there. WHAT OBJECT? the percentages of the 2 objects defined in the color definition tells the mix of objects that will be (randomly) placed on the color, IF the color percentage is match. So world tools, if decides to place an object, will try to determine what kind of object based on the required object distribution. if object percentages sum is > 100% or less than 100% those percentages will be RESCALED to 100% In this example, on 2% of green pixel there will be an object placed, that will be a salix in the 20% of attempts, and a pinus in the 80%. If you have a very small mask image, compared with the world size each pixel represent a very large square on the map. square size is shown on the bottom of the forest window: in this case 20x20 meters each pixel. If you increase percentages you will cover MORE green pixels, but you can have, for each 20x20 square, only ONE object. If pixel size is 40x40 (for a 512 mask on a 20km map) one object every 40 meters is too sparse, even if you raise color probability to 100% (each square will have an object, but squares are too big). In this case, select the green color row and you can notice, on top of the forest window, a MAXIMUM OBJ PER PIXEL. Increasing this number you can place MORE THAN 1 object on each green pixel of the mask. those objects are still subject to the 2% appearance probability. The randomixe obj number flag tells the program that, before attempt to placing the 5 object you select on the box as maximum, it will randomize the pixel under evaluation and attempts to place a variable number from 1 to 5 on this pixel, instead of 5 objects attempts (still with 2% placement probability set on green color). All those parameters will help you creating a very realistic and randomly sparsed forest on your map. If you click on SIMULATION button you can obtain an evaluation of the objects that will be created, without waiting for the CREATE! function that will creates objects for you on the final istance. Right of the green tree on the top menu bar you can see a green card. This is the export function to Visitor 3 importable format (how this works is covered on World Tools online help on About->Help menu) Finally: If you use world tools on your map a small note on your readme map file will be a nice satisfaction for me :) Hope this helps
  3. Hi, i'm interested in knowing how much peoples are actually working on a map project, and what stage the map is currently on. This can help understanding who is facing the same situation and maybe have more awareness of how all questions placed on this forum will actually becomes solid islands: Shezan74: Fallujah beta released, actually at final refinements / bugfixing Spritz island released, small enhancements and fixes, working on a new release New island, currently on terrain stage
  4. World tools 1.0 has been released on ArmaHolic (see link below) Major features: 1) include a complete Fence Generator system for placing fences, walls and a lot of other kind of object. 2) new scripting language for creating macros. Macros can be used to automatically generate farms, houses with gardens, compounds, castles and every other thing you will need. 3) new forest generator tool, with support up to 256 mask colors, multiple different object placement on the same color with user customizable probabilty of placement (useful for bush, rocks, different tree types on the same area). 4) a complete manual (available on about-help menu) with scripting samples, complete program logic and usage explanations and a full help for scripting language. Comments are well accepted to make program even better. Please promptly report any bug found there or via PM, due my plans are to release it on armaholic (if they agreed) on monday if no bug reports are received (or solved). Special thanks goes to my clan -[TdC]-, to -[TdC]-Socrate.it for for supporting me and to Marco -[TdC]-Solo.it for initial idea. Enjoy another small contribute to ArmA2 world.
  5. As say in private post: YEAH! Go ahead mate! :) you've full rights to make the best power grid ever seen on ArmA2 world :) Thanks
  6. True But if you overfly the city the civs spawns. If many teams are wandering around the city the civ spawns a lot and stay alive, in any case. You can create a custom object that allows the civilian spawn and place several of those in the city with the editor, then check by yourself :)
  7. shezan74

    Fallujah 1.2

    If i collect a number of requests i can take the map out of the box again. Actually i don't have so much time for working on and no issues to fix (as far as i know) or improvements requested. Some things could include naming several objects like road barriers to allow interactions with script and something like, but nothing that could effectively justify a 100mb release :)
  8. number of civilian spawn points is very limited in Fallujah due the size of the city. Having a spawn ratio like chernarus will create massive locks on your server due the huge amount of wandering citizens on the map.
  9. shezan74

    World Tools forest tutorial

    And to the best sponsor in the ArmA2 world, Mr. B ;)
  10. Hi friends. Thanks to your help and your suggestions on this forum i've finally released my first work. Spritz Island is now available on Armaholic . world tools has been deeply used there. All plants, rocks, bushes, woods and deerstands has been automatically placed by the tool without any "human" work except road cleaning and some fine tunings over some scenic places. All powerlines has been made in a bunch of minutes by using the world tools scripting. This script has been placed as standard object. I suggest limit angles between each segment to 10 degrees maximum due cable detach visual effect on towers. Here the script used: begin InsertObject(fc190ff6-ef2a-4a98-b925-743d3080e43e;0;0;0;White) //ca\misc\sloup_vn InsertObject(ae44b324-4ade-40c4-bb7d-e2f0c4355c6c;0;0;99,6;Fuchsia) //ca\misc\sloup_vn_drat end Some features - Based on real DEM data from real Aegean sea island - Mixed environment with forests and desert areas - Vegetation and bush type changes from sea level to mountain level - 4 villages - 2 lakes (natural and artificial) - 1 big airport over am artificial peninsula - complete powerline system across the island and along main roads - more than 250.000 objects - featured and created for patrol missions and infantry movements - Comes with a multiplayer patrol mission made by -[TdC]-Solo.it Thanks to Icebreakr for hints (Nutella is a good way to obtain informations ;) ), some of you for opening my eyes on my issues, my clan for beta testing and all peoples that contributes on this forum with comments, tutorials and their works. If you think the island is suitable for playing, a comment/rating on Armaholic is appreciated.
  11. by talkink with Kju today, he told me a good (for me) idea. What about creating a skype group with peoples that are actually involved in map making? I've created a skype group. Users that have skype can send me a skype message (shezan74) to be included. Best
  12. shezan74

    M109A6 Paladin v1.1 (UPDATED)

    Yep, when i've some time i'll probably release an update to fix this on Spritz Island. In the meanwhile i'm searching for some time to dedicate to CWR2. Best
  13. shezan74

    Fallujah 1.2

    No ideas about... the hotel building is in the same pbo of other houses from A1.
  14. shezan74

    Fallujah 1.2

    Did you have a screenshot of what you mean for looks terrible? Ok for coordinates, i'll give an eye if you send them to me.
  15. shezan74

    Fallujah 1.2

    bisign is 1.1
  16. shezan74

    Fallujah 1.2

    digits are a "big" headache :) everyone needs them made in a different way for specific addons. I've tried to understand what is the most common request, but if i've failed something i can update it.
  17. shezan74

    -[TdC]- Convoy Script

    Great release! Nice work Solo & Socrate!
  18. shezan74

    problem importing wordltools SQM

    this happens when you click on Get Script for V3? probably the script extension is mapped with Visitor 3 and the application tries to open the V3.exe... Here the script, it's also saved in your personal settings folder (where WT saves settings and other infos): // ************************************************************************************************************* // Copyright (C) 2007 Bohemia Interactive // ************************************************************************************************************* // This script is free software for any non commercial use; you can redistribute it and/or modify as long as you // include this licensing notice. This script is distributed in the hope that it will be useful, but without any // warranty; without even the implied warranty of merchantability or fitness for a particular purpose. // ************************************************************************************************************* // // ImportObjectsAbsHeight.vis // // ************************************************************************************************************* // This script allows to load objects from file using absolute height. // ************************************************************************************************************* // This script expects to read an ascii file (no matter what extension) with the following format of records // (colon separated data): // "templatename";X;Y;Z;orientation; // example: // "misc\water_tank";12064.1;17650.2;-0.841085;0; // ************************************************************************************************************* // This script reads the file and inserts in the current document all the object whose template is already in the // document. All the other objects are rejected. // The number of inserted and rejected objects is shown when the script ends running. // ************************************************************************************************************* // In the current implementation the script doesn't do any validation of the numerical values expected from the // file (X, Y, Z and orientation). // ************************************************************************************************************* // In the current implementation the script uses the current setDir function, which works with opposite // orientation than the getDir function [for this reason orientations are considered with the minus (-) sign.] // ************************************************************************************************************* // --------------------- // functions definitions // --------------------- // ********************************************************************************************************** // GetNaturalTemplateNamesInDoc // ********************************************************************************************************** GetNaturalTemplateNamesInDoc = { private["_doc", "_templates", "_templateNames"]; // gets the document _doc = _this; // gets 'natural' templates in the document _templates = _doc getObjectTemplates "natural"; _templates sortBy {getName(_x) strCmp getName(_y)}; // core - gets template names _templateNames = []; { _templateNames = _templateNames + [getName _x]; } forEach _templates; // return value _templateNames }; // ********************************************************************************************************** // GetArtificialTemplateNamesInDoc // ********************************************************************************************************** GetArtificialTemplateNamesInDoc = { private["_doc", "_templates", "_templateNames"]; // gets the document _doc = _this; // gets 'artificial' templates in the document _templates = (_doc getObjectTemplates "artificial"); _templates sortBy {getName(_x) strCmp getName(_y)}; // core - gets template names _templateNames = []; { _templateNames = _templateNames + [getName _x]; } forEach _templates; // return value _templateNames }; // ********************************************************************************************************** // WarningDialog // ********************************************************************************************************** WarningDialog = { private["_type", "_title", "_messageRow1", "_messageRow2", "_dlgWarning", "_result"]; // gets the type of warning _type = _this; // sets title and message _title = ""; _messageRow1 = ""; _messageRow2 = ""; switch(_type) do { case 1: { _title = "Warning - No area selected."; _messageRow1 = "This script requires that you select an area before you run it."; _messageRow2 = "Please select an area and then rerun the script."; }; case 2: { _title = "Warning - No templates in document."; _messageRow1 = "This script requires that templates are already in the document."; _messageRow2 = "Please define the needed templates and then rerun the script."; }; default { _title = "Warning - Error in dialog setting"; _messageRow1 = "Error in WarningDialog function."; }; }; // sets dialog _dlgWarning = [220, 55, _title, ["label", 200, 13, _messageRow1, 0], ["break"], ["label", 200, 13, _messageRow2, 0], ["break"], ["ok-button", 50, 13]]; // shows the dialog _result = dialogBox _dlgWarning; // return value _result }; // ********************************************************************************************************** // ErrorDialog // ********************************************************************************************************** ErrorDialog = { private["_type", "_title", "_messageRow1", "_messageRow2", "_dlgError", "_result"]; // gets the type of warning _type = _this; // sets title and message _title = ""; _messageRow1 = ""; _messageRow2 = ""; switch(_type) do { case 1: { _title = "Error in script execution"; _messageRow1 = "Error in opening the specified file."; }; case 2: { _title = "Error in script execution"; _messageRow1 = "Bad data format in the specified file."; }; default { _title = "Warning - Error in dialog setting"; _messageRow1 = "Error in ErrorDialog function."; }; }; // sets dialog _dlgError = [220, 55, _title, ["label", 200, 13, _messageRow1, 0], ["break"], ["label", 200, 13, _messageRow2, 0], ["break"], ["ok-button", 50, 13]]; // shows the dialog _result = dialogBox _dlgError; // return value _result }; // ********************************************************************************************************** // SetTemplatesList // ********************************************************************************************************** SetTemplatesList = { private["_params", "_naturalTemplsInDoc", "_artificialTemplsInDoc", "_templateNames"]; // gets the params _params = _this; _naturalTemplsInDoc = _params select 0; _artificialTemplsInDoc = _params select 1; // core - gets template names _templateNames = []; _templateNames = _naturalTemplsInDoc; _templateNames = _templateNames + _artificialTemplsInDoc; // return value _templateNames }; // ********************************************************************************************************** // ParseLine // ********************************************************************************************************** ParseLine = { private["_line", "_pos", "_name", "_XX", "_YY", "_ZZ", "_orient", "_result"]; // gets the line to parse _line = _this; _name = ""; _XX = ""; _YY = ""; _ZZ = ""; _orient = ""; // core - parse the line // first gets object template name _pos = _line find ";"; if (!isnil "_pos") then { _name = _line @ [0, _pos]; // then gets object X coord _line = _line @ [_pos + 1]; _pos = _line find ";"; if (!isnil "_pos") then { _XX = _line @ [0, _pos]; // then gets object Y coord _line = _line @ [_pos + 1]; _pos = _line find ";"; if (!isnil "_pos") then { _YY = _line @ [0, _pos]; // then gets object Z coord _line = _line @ [_pos + 1]; _pos = _line find ";"; if (!isnil "_pos") then { _ZZ = _line @ [0, _pos]; // finally gets object orientation _line = _line @ [_pos + 1]; _pos = _line find ";"; if (!isnil "_pos") then { _orient = _line @ [0, _pos]; } else // bad data format orientation { // shows error dialog _errorNum = 2; _errorNum call ErrorDialog; }; } else // bad data format Z { // shows error dialog _errorNum = 2; _errorNum call ErrorDialog; }; } else // bad data format Y { // shows error dialog _errorNum = 2; _errorNum call ErrorDialog; }; } else // bad data format X { // shows error dialog _errorNum = 2; _errorNum call ErrorDialog; }; } else // bad data format name { // shows error dialog _errorNum = 2; _errorNum call ErrorDialog; }; // sets the result _result = []; _result = _result + [_name]; _result = _result + [_XX]; _result = _result + [_YY]; _result = _result + [_ZZ]; _result = _result + [_orient]; // return value _result }; // --------------------------------- // internal variables default values // --------------------------------- _scriptName = "Import Objects using absolute height 1.0.0"; _naturalTemplateNamesInDoc = []; _artificialTemplateNamesInDoc = []; _nNaturalTemplateNamesInDoc = 0; _nArtificialTemplateNamesInDoc = 0; _fileName = ""; _insCounter = 0; // counter for inserted objects _rejCounter = 0; // counter for rejected objects echo "-----------------"; echo "ImportObjects.vis"; echo "-----------------"; // ------------------------ // gets the active document // ------------------------ _doc = getActiveDoc; // ------------------------------ // gets the templates in document // ------------------------------ _naturalTemplateNamesInDoc = _doc call GetNaturalTemplateNamesInDoc; _artificialTemplateNamesInDoc = _doc call GetArtificialTemplateNamesInDoc; _nNaturalTemplateNamesInDoc = count _naturalTemplateNamesInDoc; _nArtificialTemplateNamesInDoc = count _artificialTemplateNamesInDoc; // -------------------- // verify the templates // -------------------- _thereAreNaturalTemplateNames = false; if(_nNaturalTemplateNamesInDoc > 0) then { _thereAreNaturalTemplateNames = true; }; _thereAreArtificialTemplateNames = false; if(_nArtificialTemplateNamesInDoc > 0) then { _thereAreArtificialTemplateNames = true; }; // ----------------------- // sets the templates list // ----------------------- _templatesList = [_naturalTemplateNamesInDoc, _artificialTemplateNamesInDoc] call SetTemplatesList; // ------------------- // dialogs definitions // ------------------- _dlgInput = [330, 60, _scriptName, ["init", { _id = 1; _id dlgEnableControl false; }], ["begin-subframe", 320, 30, " Source file "], ["label", 40, 13, "File name:", 0], ["textline", 220, 13, "_fileName", 4], ["onchange", { if((count _fileName) != 0) then { _id = 1; _id dlgEnableControl true; } else { _id = 1; _id dlgEnableControl false; }; }], ["browse-button", 40, 13, "All files|*.*|", false, "Open file"], ["break"], ["end-subframe"], ["break"], ["ok-button", 50, 13], ["cancel-button", 50, 13]]; _dlgOutput = [220, 80, _scriptName, ["dynlabel", 200, 13, "_insCounter", 2], ["break"], ["label", 200, 13, "objects imported", 2], ["break"], ["dynlabel", 200, 13, "_rejCounter", 2], ["break"], ["label", 200, 13, "objects rejected", 2], ["break"], ["ok-button", 50, 13]]; // ----------- // script core // ----------- if(_thereAreNaturalTemplateNames || _thereAreArtificialTemplateNames) then // there are templates in document { // shows the input dialog _res = dialogBox _dlgInput; if(_res == 1) then { // open the input file _file = openFile [_fileName, 1]; if (!isnil "_file") then // file has been found { // gets data from file while{!eof(_file)} do { //get next record from file _line = getLine _file; if((count _line) > 0) then // not empty line { _data = _line call ParseLine; _name = _data select 0; _coordX = _data select 1; _coordY = _data select 2; _coordZ = _data select 3; _orient = _data select 4; // // data conversion // // template name _len = count _name; _name = _name @ [1, _len - 1]; // converts to numbers coordinates _xP = val (_coordX); // MISSING _yP = val (_coordY); // ERROR CHECKING _zP = val (_coordZ); // // object orientation // converts to number // WARNING // uses the minus sign because there is a bug in the visitor // scripting language _orP = -val (_orient); // MISSING ERROR CHECKING // finally creates the imported object if(_name in _templatesList) then // template recognized { // cretes new object _obj = _doc createPosEdObject _name; // sets object position _insPos = [_xP, _yP]; _obj setPos _insPos; // sets object relative height //_obj setRelHeight _zP; _pos = getZeroPos _obj; _landHeight = (_doc getLandHeight _pos) select 0; _offset = _zP - _landHeight; _obj setRelHeight _offset; // sets object orientation _obj setDir _orP; _insCounter = _insCounter + 1; } else // template not recognized { _rejCounter = _rejCounter + 1; }; }; }; // shows the output dialog _result = dialogBox _dlgOutput; } else { // shows error dialog _errorNum = 1; _errorNum call ErrorDialog; }; }; } else // no templates in document { // shows warning dialog _warningNum = 2; _warningNum call WarningDialog; };
  19. shezan74

    problem importing wordltools SQM

    it's strange... i'll check for this issue and i'll add the script here.
  20. shezan74

    Fallujah 1.2

    Friends, this was Bushlurker in "I HAVE A DREAM" mode. It's a pleasure to work with him... a lot of work raises everyday. Is this the reason for waiting his fantastic Scotland territory for ages? :) C'mon Bushlurker, let us have your fantastic work on our desktops :D
  21. shezan74

    Fallujah 1.2

    Nice :) Maybe could be easier to change light models instead of hand placing runway lights on 10.000+ street lights :) +1 for next release ;)
  22. shezan74

    Fallujah 1.2

    it's a characteristic of the Arma2 city streets. I think it's related to performances. the light shows up only when you're close to the lamp. I wondered how fallujah could be with the lightning system correctly working, when viewed from the air :)
  23. shezan74

    Fallujah 1.2

    Well... i must say that Bushlurker is the real creator of civilians on Fallujah... i simply packed his p3d's, so every credit is to him. I personally have a good bottle of scotch whiskey to be mailed to him... we have nice scotch here in Italy ;) Thank you Marko for providing mirror and space :)
  24. shezan74

    Fallujah 1.2

    I wasn't aware about the renaming the file would create this kind of trouble... the renaming was made to allow peoples to be "sure" about map version on their PC's (i have this problem, sometimes, so i've applied this "for dummies" approach to the problem :) ). I'm sorry, i'll pay more attention next time to this issue. About V2 signatures: i don't have created a V2 signature for the whole map, since i don't know if this signature will be compatible with A2 vanilla. I can release a new signature file as soon i've cleared my doubts :) @FoxHound: Thanks as usual for hosting :)
×