Jump to content

bn880

Member
  • Content Count

    7023
  • Joined

  • Last visited

  • Medals

  • Medals

Posts posted by bn880


  1. Job Title: Software Designer - Prague

    Position Description:

    Bohemia Interactive Simulations (BISim) is looking for a full-time software Designer to join the team in Prague to work on the Virtual Battlespace (VBS) flagship product. A Designer uses the mission editor, BISim’s VBS scripting, configuration files and other resources to plan, add, or modify features and content to VBS. It should be noted that--although occasional scenario development in the mission editor is required--the majority of the Designer's job will involve working with "code" (scripting and configuration files). In other words, a Designer's job includes much more in scripting and project analysis than it includes in mission editor usage.

    Key Areas of Responsibility:

    • Focus on the end-user-experience, while working towards paid customer deliverables.
    • Create and review project analyses and plans based on customer requirements.
    • Develop scripted components using VBS/ArmA scripting language.
    • Develop graphical user interfaces (dialogs).
    • Repair and maintain existing scripted systems.
    • Liaise with artists, programmers, content creators, QA, and sound engineers to effect necessary changes or fixes outside of Designer’s role or qualification.
    • Document all work from beginning to end, including analyses, in-line code comments, and final implementation.
    • Occasionally represent BISim to customers at events such as Government Acceptance Tests, military training sessions, or industry trade shows (typically as part of a team).

    Reporting to:

    Design Department Lead and Prague Team Lead.

    Desired Skills and Attributes:

    • Be self-motivated.
    • Be a team player; willing to work in a fast-paced environment while respecting the chain of command and established standards.
    • Be requirement-focused; work to achieve customer or company requirements.
    • Enjoy problem solving.
    • Be comfortable with the Arma/VBS scripting language and configuration files.
    • Have a professional or modding background in the ArmA/VBS community.
    • Have some experience with other game engines and their pipeline.
    • Experience using a number of collaborative and communication tools (eg: Skype, Google Docs, Confluence, JIRA, SVN).
    • Capable of working within an Agile and Modified Waterfall development team/methodology.

    Education & Experience:

    • 2+ Years developing modules or complex scenarios in ArmA or VBS, OR
    • 2+ Years experience at military training center utilizing VBS1/2.
    • High School graduate minimum, higher education a definite plus.

    Applicants must:

    • Work out of our Prague office.
    • Be capable of working in the English language (read, write, speak).
    • Not have a criminal record.
    • Treat every colleague with equality and respect.
    • Comply with strict Non-Disclosure Agreement.
    • Non-EU nationals who did not complete post-secondary education must pass Czech Visa entry test.

    What we can offer you:

    • Full-time employment.
    • A fantastic and fun working environment.
    • An opportunity to be part of a fast growing and exciting company that is at the leading edge of gaming and simulation technology.
    • 5 weeks paid holiday.
    • The possibility of a year-end bonus based on performance.

    To Apply:

    Please send us your CV/portfolio with your community nickname, and a copy of your transcripts if any here, or email jobs@bisimulations.com.


  2. I have no OC.

    On steam forums some guy wrote some tips for ppl having same problem "uninstall zonealarm"

    I have zonealarm but it is ridiculous that I would need to uninstall it. Game should not be racist to antivir programs :/

    I didnt have almost no issue with my pc and games. Only Euro Truck Simulator 2 one time caused BSOD. But other games no problems till now with arma 3:/

    my video drivers are 306.23

    CPU: i7 3820

    GPU: GTX 660Ti

    MOBO:MSI X79A-GD65 (8D)

    RAM: Corsair vengeance 16GB

    It was mentioned a few times in this forum that Zonealarm does not need to be uninstalled, see this as an example http://forums.bistudio.com/showthread.php?148945-Arma3-not-starting-due-ZoneAlarm-no-need-to-uninstall&highlight=zonealarm


  3. You can try editing your cfg file; In Win7 at C:\Users\<yourWindowsUsername>\Documents\Arma 3 Alpha\Arma3Alpha.cfg back it up first

    Find the line that reads

    refresh=##;
    and replace it with
    refresh=60;

    Then try also starting Arma3 with -nobenchmark after the edit.

    Edit: Otherwise make sure in windows that your card does not allow the 75Hz modes at all, you might need to go into some advanced driver properties/control panel to remove unwanted resolutions/refresh rates.


  4. Right, the 7900GS is under the minimum system requirements for A3. (8800GT is minimum in NVIDIA Desktop cards) Specifically you have 256MB of VRAM when 512MB is required.

    You can try however to see if you can get it to start by editing the config file by setting everything to minimum (search the forum for config setting editing), including resolution of 800x600. Use startup paramebers of -nobenchmark -winxp

    The real solution however is indeed to buy some new graphics card, I wouldn't buy with less than 1GB no matter how tight the budget.


  5. This is not meant as a developer solution but just as a troubleshooting step and possible temporary aid; In other titles that had this DXGI error it has helped some users when they underclocked their NVIDIA GPU's by some frequency, like 75Mhz. You can both try this by installing NVIDIA inspector, "show overclocking" window, and in there *reducing* the frequency (Base clock offset) of Performance level 2 by about 75Mhz. (If you choose to overclock remember that I nor BIS take responsibility for any HW damage)

    Additionally in your NVIDIA control panel, under "Manage 3D Settings", you can try forcing VSYNC on for Arma3 to limit FPS and check if that improves stability at all.


  6. Bit of an old thread, but uiSleep is a sleep method to delay script execution where script time/simulation time is stopped. uiSleep is basically using the system time and not simulation time. So in the cases where sleep command would get stuck indefinitely, uiSleep can still be used to effectively delay script execution. For example in a mission briefing or an editor or when simulation is paused in general.


  7. I think I found them all, that is if you didn't put any obfuscated ones in. I've just grepped for every VBS1-scripting command in the coc_arty.pbo and removed the offending lines if they were doing something malicious or were simply useless.

    I would be a bit apprehensive about assuming that is all. I think I'll be slightly disappointed with Dinger if it is. :D

    Problem with releasing updated PBO's on a whim is versioning. Same filename etc. And if there is another update, or two... I'll leave that decision up to Dinger/Walker.


  8. Heh, but do two fakes make it a a real? That is the question. :yay:

    As far as I understand the namespaces, they will do just that, separate the variable space. I am just not certain how much easier this will make OOP. What, are we going to create a separate namespace for each object? You still need to keep track of the name of the namespace if you will.


  9. Yes, we both acknowledge it would be faked, this is why I say the issue at hand is not closures at all, it is OOP. :)

    In terms of closures you can get there in terms of integers by hiding them in command strings, or otherwise any other variable which can be expressed as a clear text string can be saved within a function at runtime. I think VB was trying to simplify or expand scripting in ArmA.


  10. Well, very interesting topic.

    For Clavicula and others who are skeptical I would tend to agree with Kimmeh. VR is a tool and a part of a psychological treatment and healing process.

    You need to have a very well qualified and experienced professional go over your trauma after getting to know your situation extensively, and if necessary he/she could potentially use a VR tool. I do not believe that the visual differences between VR and RL will make a difference if you are willing to go over a specific situation. It does not need to be indistinguishable, just like dreams are often not. Sometimes the less detail you have the better as your brain will fill in the rest with memory and imagination. For you it could be a decision making tool which can put in perspective the reality of the situation(s) you were in, and can help to make sound decisions about how to perceive them for the future. Sometimes VR is believed to be an assistance tool to retrieve repressed and disassociated traumatic memories. It can also be used to introduce alternate or false memory for these repressed traumatic experiences. It all depends on the practitioner, go to the best if you can, and remember that this is all as much of an art as a science. Professionals who take the PTSD model to heart and never question it may never be able to help you. It is a psychiatric model which is questioned in part or its entirety all the time. Maybe you don't actually have a disorder at all and are diagnosed with one, maybe everything is in order according to your new gained experiences and understanding, it may have changed who you are, but is that a DISorder? It is at times culturally subjective. Obviously it is not subjective if you are completely unable to function in life or are experiencing even worse issues.

    In psychology perception is everything, and everything is relative. Once your perception of trauma changes, or even your memory of it, you may be able to work it into your life... kind of massage the scarring away and begin a healing process. To me it seems like not everyone will be able to process and accept all of their traumatic experiences, it depends on who you are and what your life has included before and after the trauma.

    If you are focused on healing yourself, you won't be thinking about the detail of the VR. Although I can imagine how horribly difficult this may be for dedicated mod makers or game developers once they start to analyze the VR. :D

    Hmmm... interesting.

    I've got PTSD myself and must admit after so many treatments I'm a tad sceptical about this solving the entire problem. 'Healthy' people may see it as 'being negative in advance which will make it not work anyway' but you cannot judge that until you've been there.

    However, it may be a tool that'll assist towards healing in the future. I think this method, or stuff like Virtual Reality stuff, may help to re-confront a person with the situations and re-wire the brains reactions to certain stimuli. A bit like EMDR(a rather famous anti-PTSD method).

    Maybe as virtual reality grows more advanced it'll be more immersive and thus more confronting, and perhaps more effective? However, people with PTSD are sometimes very trigger-sensitive and even a scent or sound can make the past events flare back up again, so I dunno. And not everyone is suited to the 'confrontation' treatment method.

    I do wonder if it actually can be fully removed. I mean, 'trauma', means wound. PTSD is the result of a psychological wound. Maybe you can heal the wound, but the scar or damage to underlying 'tissue' will still remain?

    Food for pyschologists. (I hope to be one, someday icon_rolleyes.gif )

    Kimmy

    Edit: spelling.


  11. Yes well it goes right back around to the whole concept of OFP/ArmA scripting. When creating variable names or self modifying code, storing it in a variable, then calling it, you are already working with closures. It has really been used heavily.

    In your example:

    The function makePoint2D

    creates and returns a string called _closure

    while maintaining one index variable

    and inserting it into the string as a string.

    This string can then be called as a function

    and the index will be retrieved from this string.

    Additionally you work with a global array point2D to stack the data for this possible function.

    It is faked as you say; globally accessible.

    Therefore;

    A) you store the index in a string called _closure, to which you later give other names like _pontA

    B) you store the data originally associated with this index in a global array point2D

    C) you call the string _closure which translates the index back to an integer and also passes along new parameters to another function which than works with the data and point2D

    Since we are in this realm of almost all advanced scripts using closures, it may be best to avoid using that terminology to come up with a document to describe this particular hack.

    As I referred to the tracers... and would like to prove to you that this really is in use around many complex projects that I have personally seen and/or worked on I will present two functions from them and highlight the relevant lines that I can still see:

    addTracerUnit2.sqf

    Quote[/b] ]_u=_this select 0;

    _in=_this select 1;

    _cc=_this select 2;

    _d=true;

    _veh="man"counttype[_u]<1;

    if(_veh&&count crew _u==0)then{

    _i=-1;

    _i2=-1;

    while{_i2!=_i+1}do{

    _u removeEventHandler["getin",_i2];

    _u removeEventHandler["getin",_i];

    _i=_u addEventHandler["getin",{}];

    _i2=_u addEventHandler["getin",format[{[_this select 0,_this select 2,%1,%2,%3]call loadfile{\bn_tracer\getInVeh.sqf};},_in,_cc,_i+1]];

    };

    }else{

    if(count bn_trunits==count bn_trunits)then{_d=false;};

    _i=0;

    _ci=_In;

    _wep=primaryweapon _u;

    _weps=weapons _u;

    if _veh then{

    if(count _weps>0)then{

    _wep=_weps select 0;

    };

    };

    if _d then{

    if _cc then{

    call loadfile{tracerSettings.cfg};

    }else{

    call loadfile{\BN_tracer\tracerSettings.cfg};

    };

    bn_trunits=[_ci];

    bn_trunitswep=[_wep];

    }else{

    _i=count bn_trunits;

    bn_trunits=bn_trunits+[_ci];

    bn_trunitswep=bn_trunitswep+[_wep];

    };

    _c=call format["%2%1",side _u,{bn_trcolor}];

    _d=true;

    if(count bn_trweapons==count bn_trweapons)then{_d=false;};

    if(_wep!=""&&!_veh)then{

    _d=true;

    if(count call("bn_tr_"+_wep)==count call("bn_tr_"+_wep))then{_d=false;};

    if _d then{

    call format[{bn_tr_%1=[_in,_c];},_wep];

    };

    }else{

    if _veh then{

    {

    _d=true;

    if(count call("bn_tr_"+_x)==count call("bn_tr_"+_x))then{_d=false;};

    if _d then{

    call format[{bn_tr_%1=[_in,_c];},_x];

    };

    }foreach _weps;

    };

    };

    _u addEventHandler["fired",format[{_this+%1 call loadFile{\bn_tracer\tracereh.sqf}},[_c,_in,_i]]];

    };

    tracerEH.sqf

    Quote[/b] ]_u=_this select 0;

    _w1=_this select 1;

    if(_w1==primaryweapon _u||"man"counttype[_u]<1)then{

    _a=_this select 4;_c=_this select 5;_in=_this select 6;_i=_this select 7;

    _w2=bn_trunitswep select _i;

    _trace=false;

    if(_w1==_w2)then{

    _cnt=bn_trunits select _i;

    if(_in<=_cnt)then{

    _trace=true;

    bn_trunits set[_i,1];

    }else{

    bn_trunits set[_i,_cnt+1];

    };

    }else{

    _d=false;

    if(count call("bn_tr_"+_w1)==count call("bn_tr_"+_w1))then{

    _wd=call("bn_tr_"+_w1);

    _c=_wd select 1;

    _in=_wd select 0;

    bn_trunits set[_i,2];

    bn_trunitswep set[_i,_w1];

    if(_in<=1)then{_trace=true;};

    };

    };

    if _trace then{

    _b=nearestObject[_u,_a];

    _n=objnull;

    if!(isnull _b)then{

    _v=velocity _b;

    _s=sqrt((_v select 0)^2+(_v select 1)^2+(_v select 2)^2);

    if(_s>150)then{

    _p=getpos _b;

    _r=acos((_v select 2)/_s);

    if!bn_trdedi then{

    _n="BN_Tracer"camcreate _p;_n setdir getdir _b;_n animate["tracer_swing",_r/180];_n setvelocity _v;_n setObjectTexture[0,format["\bn_tracer\%1b.paa",_c]];

    };

    _r1=(_r mod .01)*100;

    _r2=(_r mod .0001)*10000;

    [_n,_b,_c,_p,local _u,_r1,_r2]exec{\bn_tracer\tracerkill.sqs};

    };

    };

    };

    };

    In this example local data is stored in an attached event handler, while the rest is stored in other arrays such as bn_trunits or "bn_tr_%1". All data is accessible upon calling the event handler, same thing as saving this to a string _pointA and then calling it later.

    Anyway, no matter how you cut it, it's very neat stuff that we can do in this scripting language and engine. If you wish to document or rather even make a tutorial on OOP encapsulation/simulation in ArmA I certainly will not stand in your way and am all for it.

    However; what I am trying to express to you is that YES I have read this thread and its quite cool but I would like to say is CoC is well aware of this technique and has used it extensively in various areas without making a tutorial on it. smile_o.gif From my perspective I always thought someone would go in and for example examine the tracer code to see how it manages to do all that without complex array searches and thus instant response and no lag. goodnight.gif


  12. I've been away a while, so lets see if I understand this correctly...

    Nothing wrong with the idea VB, however essentially the term "closures" is a term that would encompass most advanced scripts in OFP/ARMA, such as most "self modifying" scripts in use at COC. ArmA scripts in general are capable of what most programming languages are not, self modification.

    Look even at one of our basic utility scripts; SortBubble.sqf

    A very simple example of a "closure" where you see _numArray set [_j,call _eval];

    Quote[/b] ]/*

    PURPOSE: Sort given array according to given evaluator.

    HISTORY: bn880 24/02/2003

    INPUTS: _array: Array, objects to sort

    _eval: String, Evaluator to sort by

    _element becomes each element from _array

    -(_eval) sorts in descending order

    RETURNS: BOOL, true on success

    false on error

    ALGORITHM:

    END ALGORITHM

    CALL EXAMPLES:

    SIMPLE ASCENDING NUMERIC SORT

    myArray = [2,6,3,7,8,4];

    _ok = [myArray,"_element"] call SortBubble.sqf

    myArray becomes [2,3,4,6,7,8]

    SIMPLE DESCENDING NUMERIC SORT

    myArray = [2,6,3,7,8,4];

    _ok = [myArray,"-(_element)"] call SortBubble.sqf

    myArray becomes [8,7,6,4,3,2]

    DISTANCE SORT TO PLAYER (DESCENDING)

    _ok = [ myArray , "-(_element distance Player)"] call SortBubble.sqf

    DISTANCE SORT TO TEAM MEMBER 2 IN PLAYERS GROUP (ASCENDING)

    _ok = [ myArray , "_element distance ((units (group Player)) select 1)"] call SortBubble.sqf

    */

    private ["_array","_eval","_numArray","_j","_k",

    "_tempVal","_tempNum","_element","_ok"];

    _array = _this select 0;

    _eval = _this select 1;

    // CHECK FOR PASSED IN PARAMETERS

    if (count _array == count _array && _eval == _eval) then {

    _ok = true;

    _count = count _array;

    _numArray = [];

    _numArray resize _count;

    // ACQUIRE NUMERIC VALUES FROM EVALUATION

    _j = 0;

    while "_j < _count" do

    {

    _element = _array select _j;

    _numArray set [_j,call _eval];

    _j = _j + 1;

    };

    _j = 0;

    // SORT

    while "_j < _count -1" do

    {

    _k = _j + 1;

    while "_k < _count" do

    {

    if (_numArray select _j > _numArray select _k) then

    {

    _tempNum = _numArray select _j;

    _numArray set [_j,(_numArray select _k)];

    _numArray set [_k,_tempNum];

    _tempVal = _array select _j;

    _array set [_j,(_array select _k)];

    _array set [_k,_tempVal];

    };

    _k = _k + 1;

    };

    _j = _j + 1;

    };

    } else

    {

    // ERROR

    _ok = false;

    };

    _ok;

    Now that we have the semantics out of the way;

    Much more advanced encapsulation to emulate OOP has been used throughout OFP projects. Basically what is occurring in your example is one array is being used as a function stack, while self modifying code a.k.a. "closures" are being used to access the specific sub-arrays on the fly. A fairly neat version of this was implemented in my tracers (bn880's tracers) to eliminate array searches and global variables when assigning tracer per side/weapon/man properties with the need for instant low resource access with each fired shot.

    Now maybe I am missing something ground breaking here,i have been away, if I am please let me know. smile_o.gif Don't get me wrong, the concept is extremely useful and can be viewed to act as an OOP tool, but, it has been used extensively, though perhaps not documented as OOP.


  13. Further to that I would encourage BIS developers to review some of UNIX's (SUN Solaris QNX) interprocess messaging schemes (IPC). Adopting something similar would kill any further frustration users may have with message/data passing in "OFP", it also is a good insight to concurrent processing.


  14. In two decades quite possibly. It would have been achievable today if we developed parallel/concurrent processing (especially analog systems) instead of branching off into higher sequential digital only performance.

    Those will be the days, we may re-discover everything. smile_o.gif

×