What's new

How To Install Ruby2D on Windows (Game Programming)

Welcome to the only entrepreneur forum dedicated to building life-changing wealth.

Build a Fastlane business. Earn real financial freedom. Live your best life.

Tired of paying for dead communities hosted by absent gurus who don't have time for you?

Imagine having a multi-millionaire mentor by your side EVERY. SINGLE. DAY. Since 2007, MJ DeMarco has been a cornerstone of Fastlane, actively contributing on over 99% of days—99.92% to be exact! With more than 39,000 game-changing posts, he's dedicated to helping entrepreneurs achieve their freedom. Join a thriving community of over 90,000 members and access a vast library of over 1,000,000 posts from entrepreneurs around the globe.

Forum membership removes this block.

Richard Peck

Bronze Contributor
FASTLANE INSIDER
LEGACY MEMBER
Joined
Nov 26, 2016
Messages
390
Location
United Kingdom
Rep Bank
$100
User Power: 446%
This has nothing to do with business but I felt it may provide ideas for the game devs on the forum as well as potential insights for others (maybe you want to learn programming).

I recently discovered the "Ruby2D" library and decided to see if I could get it to build on my Windows system.

Although I love programming & software development, my experience with C/C++ is scant, so felt it would be a good way to see if I could gain some insight from trying to get it to work. The following will explain my progress.

As an aside, Ruby2D seems like a very simple way to create 2 dimensional software experiences. I would be partial to doing a tutorial on the mechanisms behind it, if people wanted to gain some insights into game dev (not that I'm an expert by any degree). My ambition would be to attempt to recreate the original "Doom" game, which was a 2D game with simulated perspective.

For the sake of brevity, this is a GIF of my system building the test app I created. The build process creates an EXE which can be used on other Windows systems (hence my interest): -

wg3RsNQ.gif


--

What Is Ruby and Ruby2D?

Ruby is a programming language created by Yukihiro "Matz" Matsumoto in the 90's.

It's most well-known for its use in the "Ruby on Rails" web application framework and has been adopted largely because of this.

There are a number of aspects to Ruby which make it a great programming language, especially for beginners: -
  • Object Oriented
    The entire language is built around objects.

    The reason this is important is that you don't have to worry about calling small and obscure functions to achieve simple functionality.

    For example, if we wanted to infer the name of a file in Ruby vs C, you'd use the "basename" function in both. However, using it in Ruby is a far simpler process than C: -
    Ruby:
    file_name = File.basename("/home/gumby/work/ruby.rb", ".*") #-> ruby
    PHP:
    file_name = basename("/etc/sudoers.d", ".d"); // -> sudoers
    C:
    file_name = basename("/etc/sudoers.d"); // -> sudoers.d
    Doesn't look that big of a deal, but considering "basename" is attached to the File class in Ruby, anywhere you have access to "File" (which is part of the core), you can call basename. For C, you need to include external library headers and PHP also has issues.

  • Simple

    Perhaps the most important aspect of Ruby is that it doesn't have semicolons.

    Although this may sound mundane, it's symbolic of the underlying virtue of the language - extremely forgiving and has a lot of inbuilt functionality to make its use as simple as possible.

    For example, if you wanted to declare a class and invoke it in Ruby, you'd do the following: -
    Ruby:
    class Test
        def initialize
            puts "Test"
        end
    end
    
    test = Test.new #-> will output 'test' to console

  • Canonical

    I'm not sure if this is the right word but I've read it somewhere and forgotten which it was.

    Ultimately, one of the things that makes Ruby stand out is how you're able to make it read like a sentence.

    This gives a lot of scope to making the system perform a range of different tasks without having to configure a huge number of different pieces of functionality. For example, if you wanted to declare a variable if a certain set of criteria is met, you'd use the following: -
    Code:
    variable = X.new if condition.is_met?
    Super simple and can be extrapolated ad infinitum.
-

Much like BASIC, Ruby gives programmers the ability to invoke objects and attach functionality to them.

Of course, this works similarly in C/C++ but the process is much more complicated and involved.

I can further extol the virtues of Ruby if people wanted - for now, I'll just say that it's an extremely effective language which has been used (again, thanks mainly to RoR) by the likes of Shopify, Github, Twitter, Stripe and a number of other web application companies.

-

Ruby2D is a library for Ruby...



A library, in terms of software development, is a set of functionality you can include in an application to achieve specific results.

For example, if you wanted to develop a native Windows application which printed a document, you may include a library to help interface with the printer hooks in the OS. This would allow you to offload functionality to the library (rather than having to write it all yourself).

The Ruby2D library seems to be a wrapper for the "Simple2D" library.

Simple2D is written in C and compiled into DLL format when using on a Windows system. The Ruby2D gem seems to interface with this library, allowing you to harness its functionality with the simplicity and extensibility of the Ruby language.

I have no affiliation with it beyond having discovered it some days ago - you're able to add the following objects/elements to a Window: -
These can all be customized and managed inside a Ruby application, which can be run by using
Code:
ruby file.rb
from the command line.

A number of games/experiences have been created with it including: -
-

Building

Building / compiling applications is the difficult part and done at the behest of the system which you're using.

Due to the inability for the likes of PHP, Python or other "simple" languages to be compiled by default, it was interesting to me to see that Ruby2D had its own build pipeline. This makes use of MRuby, which we'll discuss later.

The importance of MRuby is that what you're actually doing with it is using Ruby as a "simple" interpreter for C - there is a lot of functionality missing from MRuby in order to get this to work cross platform.

Whilst this may be considered an issue, it means that you're able to use a build pipeline to create native applications that are coded in Ruby.

In the case of Ruby2D, MRuby is used to create a set of "build" functionality which allows us to deploy .exe applications on Windows (I've not used it on Linux or MacOS, although it could be compiled on there too).

To give an example of MRuby, this guy used it to build a game on Nintendo Switch, which I believe has now been pulled from the Switch store: -

View: https://www.youtube.com/watch?v=o0d4sjcUfCg&ab_channel=RubyKaigi

Ruby2D has a build pipeline which I'll discuss later. I had to hack this to get it to work on Windows, hence my writing this article...



-

What It Means

IF
you are interested in developing interactive GUI's which can run on native systems (Windows/Linux/Mac), I think this is a good way to gain experience in making it work. This goes beyond games - there is a lot of scope for "children's" learning apps, interactive native Windows experiences and more. Some of the old 2D apps my Dad bought me in the 90's could be built with it.

I would be interested in doing some sort of tutorial if people wanted it. I'm not an expert in C, so it may be a good way to help me gain experience.

For the next part of the article, I will explain how I managed to get it all to work/build on my system. Anyone involved with software likely has experienced issues with compiling/building apps, so detailing the issues I had to surmount may help others.

--

Installing Ruby, RubyGems and MRuby on Windows

Windows, as most developers will tell you, is extremely difficult to set up an adequate build pipeline.

The reason for this is a lack of central repository, meaning that you have to manually acquire and link the various libraries an application may require. This is tedious and often fraught with difficulty.

Fortunately, a number of projects, namely Chocolatey and MSYS, have been created to address this issue and, generally, do the job extremely well. I use MSYS2 as I picked it up after using RubyInstaller2 some time back.

I will explain how to set up MSYS2 with Ruby & MRuby below. After that, I will detail what I had to do to change the Ruby2D code to compile for a Windows environment. From there, if you want tutorial(s), we can look into that separately.

-

Installing Ruby

Ruby can be installed in a number of ways.

I originally wrote an article explaining that RubyInstaller is the best way to do it. I have since managed to get an MSYS2 version of ruby installed, which is far superior (for me). I'll explain both ways in case people need ideas.

The key (however you do it) is Windows requires a pre-compiled version of Ruby. Whilst you can compile it yourself, its much better to just install a pre-built version so that you don't need to worry about getting your environment sorted for it: -

RubyInstaller

RubyInstaller is a project aimed at providing pre-compiled versions of Ruby for Windows.



You can use either the "installer" version of RubyInstaller or the "zip" version.

The aim is to get the "ruby" command to work in CMD, which is slightly different depending on the version you use: -

ZIP (preferred)
  • Download the RubyInstaller ZIP file from here: -

    smFDpcK.png


  • You may need to also download 7ZIP to read the file (not sure why they've archived it as .7zip)
  • Once it's downloaded, load the archive with 7ZIP and extract its contents to a folder on your hard drive
  • I tend to put it in C:/dev, which means the folder would be c:/dev/ruby-3.0.3-x86_x64 (or similar)
  • After doing this, you need to add the "bin" directory of this folder to your system PATH (see "Environment Variables" below)
If you add the correct folder to the PATH, you should be able to call "ruby -v" from cmd and it will respond with the version number.

Installer (not preferred)

If you wish to use the RubyInstaller installation package, you need to choose the "without Devkit" version: -

ZVqXryg.png

Run the installer and it *should* do everything for you.

You'll still need to install MSYS2, but will not have to add the ruby executable path to your system PATH var.

-

Installing MSYS2

Regardless of how you install Ruby, you need MSYS2 to provide the required build tools.

This is required for all systems: -
  1. Download and install MSYS2
  2. From the "Start" menu in Windows, load the MSYS2 shell
  3. Type "pacman -S mingw-w64-x86_64-ruby" and press enter
  4. After it installs, type "pacman -S mingw-w64-x86_64-toolchain" and press enter
Both of these should give you the ability to run the "ruby" commandline, as well as a number of "build" tools (such as gcc). To test both, from the MSYS2 shell, type "ruby -v" and "gcc -v" to see if they provide any response.

If they do, move to the next step. If they don't you should try closing the MSYS2 shell and opening a new one (to see if that will give you access to the various executables).

-

Environment Variables

Finally, we need to update the PATH variable to make the "ruby" executable accessible from the command line.

How you do this depends on which version of Windows you're using. I'll only write for Windows 10 - if you're using a different version, you can ask me and we can look into it separately: -
  • Click on "Search" (Magnifying glass icon on the taskbar -- if you can't see it, hold the "Windows" key and press "S")
  • Type "Environment"...

    PHbxEm7.png


  • "Edit the system and environment variables" should appear
  • Click this and let the Window load...

    uUj3MhS.png


  • Click on "Environment Variables"
  • Look for "Path" (in the SYSTEM part) and select "Edit"...

    T9IrAhD.png


  • Select "New": -
    YyW92Mz.png
Which path(s) you add to this will depend on how you installed Ruby.

My recommendation is to use the MSYS2 Ruby, as that allows you to keep it all in the same place. If you installed Ruby via RubyInstaller, we will need to add the path to that specific Ruby installation (as well as the MSYS2 install).

This is which paths you should add: -
  • C:/path/to/your/ruby/executable (RubyInstaller only)
  • C:/MSYS2/mingw64/bin (this is required for all)
  • C:/MSYS2/usr/bin (this is required for all)
Adding the MSYS paths allows us to access the various executables it installs from the commandline.

-

Installing RubyGems & Bundler

If you've installed Ruby correctly, you should now be able to access the "ruby" command on the commandline.

iIJ7ncn.png


Now you have ruby, you need to get its package manager (bundler).

Bundler

Bundler helps you install gems from a Gemfile.

Gemfiles are used by Ruby to manage and install dependencies for an application. They work similarly to "package.json" for nodeJS apps.

If you aspire to write any application in Ruby, it's important to have "bundler" installed, as it allows you to process any Gemfile you may need to use for different ruby apps. To do this, we need to install the bundler gem directly to the system, so that it's globally accessible.

Pull up a fresh CMD window and type the following: -
Code:
gem install bundler

This should process without an issue.

If there is a problem, it likely means that "RubyGems" is not installed (RubyGems is to Ruby what NPM is to NodeJS). If you see an error pertaining to RubyGems, it means you need to install it on your system, which I'll explain below.

RubyGems

RubyGems should work out of the box (IE the bundler command above should just work).

If it does not, there is a tutorial here which explains how to get it set up: -
  1. Download the RubyGems files from this URL - Download RubyGems | RubyGems.org | your community gem host
  2. Extract the archive to a local folder (it doesn't matter where because you can delete it afterwards)
  3. Open CMD and cd into that folder
  4. Run the following command: "ruby setup.rb"
This will give you a set of options which should be self explanatory.

After that has run, it means you will be able to interact with the RubyGems packages, of which Ruby2D is one.

Run the "gem install bundler" command again and see if it installs without error. If it does, Ruby should now be fully set up.

-

Installing MRuby

Finally, MRuby.

MRuby is required to "build" the application natively (IE to create a portable EXE you can install on other systems).

It seems that MRuby is a slimmed down version of Ruby which, when integrated with C, provides a link between Ruby code and a native application.

Installing MRuby depends on your system. As this is a Windows tutorial, you have two options: -
Because of the nature of the Ruby2D package I edited, we need to compile a fresh version of MRuby because we need the "mruby-dir" package to traverse folders in the OS. As this is a third party MRuby library, it has to be added at compile time.

If you want to install the MSYS2 version, load up the MSYS2 shell and use the above command. This will install the package and make mruby available at cmd level, which will allow the build toolchain to work. Unfortunately, because the standalone MRuby does not include the "dir" package, it won't work for my version of Ruby2D (I had to hack it to get it to run on Windows).

To compile MRuby (as per my version of the Ruby2D library), you need to do the following: -
  1. Clone the MRuby repository to your local system.

    This can be done by installing GIT (if you don't have it already), loading up CMD, browsing to an appropriate folder and using the following command: -
    Code:
    git clone https://github.com/mruby/mruby

  2. This will copy the MRuby repo code to a directory with the label "mruby" relative to the directory where you ran the command.

    For example, if you ran the command in c:/, you'll get the folder c:/mruby

  3. From here, cd into the mruby folder ("cd mruby")

  4. Open the following file in a text editor: "./mruby/build_config/default.rb"

  5. Add the following to line 16: -
    conf.gem :github => 'iij/mruby-dir'

  6. Save the file and exit the text editor

  7. In CMD, type "rake" and press enter

  8. This will proceed through the mruby build process and SHOULD work. If it does not work, it means you don't have appropriate packages installed inside Windows. This will be specific to your machine, so I cannot provide any insight onto what may be missing here.

    If you get an error, let me know and we'll see if we can get it to work.
Once it's compiled, you then need to put the mruby folder into a permanent location on your hard drive and add its "bin" directory to your system's path.

I keep my development tools in c:/dev, so I put my mruby in that directory: -

4ziL2Md.png


This is ONLY if you compiled locally -- from here, you should be able to add the c:/dev/mruby/bin directory to your system PATH variable (instructions above). This will make the "mruby" command available in cmd: -

ACyLZhK.png


--

Installing Simple2D, Glew & Other Libraries For Ruby2D

Finally, you need to obtain the libraries required to get Ruby2D to compile.

These include Simple2D and Glew.

We can install these via MSYS2 (one of the immense benefits of having it installed):-
  1. Load up the MSYS2 shell (or just normal CMD if you're able to run "pacman" from it)
  2. Type the following commands (press enter after inputting each): -
    1. pacman -S mingw-w64-x86_64-glew
    2. pacman -S mingw-w64-x86_64-SDL2_mixer
    3. pacman -S mingw-w64-x86_64-SDL2_image
    4. pacman -S mingw-w64-x86_64-SDL2_ttf
    5. pacman -S mingw-w64-x86_64-SDL2
These should install without issue.

There may be more libraries we need but I don't know them off the top of my head - we can look for them if errors arise later.

The key point is that having MSYS2 installed means we have a means to access libraries that don't need to be compiled. It's extremely important to have this as it fixes one of the biggest issues facing Windows developers.

To be clear, these are ONLY for the "build" part of Ruby2D. If you just want to create a "ruby" app, you don't need the above.

--

Conclusion

IF
all of this works, it means you now have your local development environment set up to support building a native version of your Ruby2D app.

I will write another article explaining what I did to change the Ruby2D code to get it to build on Windows below.

This is not an ad. I don't care if you use the information or not - I write this sort of thing to give me perspective on what was done for future purposes. I figured that, as I'd seen some people wanting to make games to sell, R2D could make that ideal more accessible (and cheaper).

After the next article, I may see if I can bring myself to attempt to make a Doom clone with it (or something challenging). I'm not an expert in C, so may be biting off more than I can chew. I do have some time to do it and would be happy to help anyone who wants to start using Ruby, or programming generally, so long as it's evident you're actually trying to do something proactive.
 
Membership Required: Upgrade to Expose Nearly 1,000,000 Posts

Ready to Unleash the Millionaire Entrepreneur in You?

Become a member of the Fastlane Forum, the private community founded by best-selling author and multi-millionaire entrepreneur MJ DeMarco. Since 2007, MJ DeMarco has poured his heart and soul into the Fastlane Forum, helping entrepreneurs reclaim their time, win their financial freedom, and live their best life.

With more than 39,000 posts packed with insights, strategies, and advice, you’re not just a member—you’re stepping into MJ’s inner-circle, a place where you’ll never be left alone.

Become a member and gain immediate access to...

  • Active Community: Ever join a community only to find it DEAD? Not at Fastlane! As you can see from our home page, life-changing content is posted dozens of times daily.
  • Exclusive Insights: Direct access to MJ DeMarco’s daily contributions and wisdom.
  • Powerful Networking Opportunities: Connect with a diverse group of successful entrepreneurs who can offer mentorship, collaboration, and opportunities.
  • Proven Strategies: Learn from the best in the business, with actionable advice and strategies that can accelerate your success.

"You are the average of the five people you surround yourself with the most..."

Who are you surrounding yourself with? Surround yourself with millionaire success. Join Fastlane today!

Join Today
Op usfis vu hiv Sacz2F xusloph op visnt ug vji caomf qoqimopi, O jef vu djephi tuni vjopht.

Vji qacmod hin "xuslt" sohjv pux gus qasi Sacz fiwimuqnipv, xjodj niept zua dep ati ov vu fiwimuq mudemmz (katv sap "sacz y.sc" op vji dnf vu hiv ov xusloph).

Juxiwis, og zua xepvif vu dunqomi vji eqq opvu e pevowi iyidavecmi, O jef vu neli djephit.

Vji cetot ug vjot vjsief ot vu liiq e sidusf ug xjev xet fupi tu vjev O dep sigis cedl vu ov. Op fuoph tu, O gohasif vjev vji mocsesz nez jimq tuniupi imti (et nipvoupif op vji qsiwouat qutv). Ov qsucecmz xup'v jimq nepz, cav vjev't puv siemmz vji quopv.

--

Dunqomevoup

O evvinqvif vu "caomf" e tdsoqv O dsievif vu vitv uav vji deqecomovoit ug vji tztvin (vji upi O tjuxif op vji HOG ev vji tvesv ug vji vjsief).

Apgusvapevimz, vjisi xisi e pancis ug issust. O iyqmeopif xjev xet fupi vu uwisduni vjin jisi cav gus vji teli ug qutvisovz, O xomm uavmopi iwiszvjoph op vjot esvodmi. Pu, ov't puv huoph vu neli zua nommoupt, cav ov nez tjux tuni optohjv opvu e siem mogi qsucmin tumwoph qsuditt.

O'n iyvsinimz qsuaf ug jewoph goyif ov.

-

Vji Sacz2F pevowi caomf qsuditt ot motvif et gummuxt: -

NVdKGID.qph


Og zua sap vji ecuwi dunnepf ("sacz2f caomf y.sc"), vji mocsesz xomm opwuli zuas mudem dunqomis epf dunqomi zuas tdsoqv opvu e pevowi iyidavecmi.

Aqup fuoph vjev, vjot issus eqqiesif: -
╰─ $ sacz2f caomf --pevowi *.sc
caomf/eqq.d: Op gapdvoup ‘sacz2f_onehi_iyv_muef_onehi’:
caomf/eqq.d:3308:3: issus: aplpuxp vzqi peni ‘WEMAI’
3308 | WEMAI sitamv = sc_esz_pix2(3);
| ^~~~~
caomf/eqq.d:3308:18: xespoph: onqmodov fidmesevoup ug gapdvoup ‘sc_esz_pix2’; fof zua niep ‘nsc_esz_pix’? [-Xonqmodov-gapdvoup-fidmesevoup]
3308 | WEMAI sitamv = sc_esz_pix2(3);
| ^~~~~~~~~~~
| nsc_esz_pix
caomf/eqq.d:3313:3: xespoph: onqmodov fidmesevoup ug gapdvoup ‘sc_esz_qatj’; fof zua niep ‘nsc_esz_qatj’? [-Xonqmodov-gapdvoup-fidmesevoup]
3313 | sc_esz_qatj(sitamv, s_feve_xseq_tvsadv(tasgedi, tasgedi));
| ^~~~~~~~~~~
| nsc_esz_qatj
Op gomi opdmafif gsun caomf/eqq.d:2960:
caomf/eqq.d:3313:42: issus: ‘tasgedi_feve_vzqi’ apfidmesif (gostv ati op vjot gapdvoup); fof zua niep ‘natod_feve_vzqi’?
3313 | sc_esz_qatj(sitamv, s_feve_xseq_tvsadv(tasgedi, tasgedi));
| ^~~~~~~
caomf/eqq.d:3313:23: puvi: op iyqeptoup ug nedsu ‘s_feve_xseq_tvsadv’
3313 | sc_esz_qatj(sitamv, s_feve_xseq_tvsadv(tasgedi, tasgedi));
| ^~~~~~~~~~~~~~~~~~
caomf/eqq.d:3313:42: puvi: iedj apfidmesif ofipvogois ot siqusvif upmz updi gus iedj gapdvoup ov eqqiest op
3313 | sc_esz_qatj(sitamv, s_feve_xseq_tvsadv(tasgedi, tasgedi));
| ^~~~~~~
caomf/eqq.d:3313:23: puvi: op iyqeptoup ug nedsu ‘s_feve_xseq_tvsadv’
3313 | sc_esz_qatj(sitamv, s_feve_xseq_tvsadv(tasgedi, tasgedi));
| ^~~~~~~~~~~~~~~~~~
caomf/eqq.d:3317:10: issus: opdunqevocmi vzqit xjip sivaspoph vzqi ‘opv’ cav ‘nsc_wemai’ xet iyqidvif
3317 | sivasp sitamv;
| ^~~~~~
caomf/eqq.d: Op gapdvoup ‘sacz2f_viyv_iyv_muef_viyv’:
caomf/eqq.d:3327:3: issus: aplpuxp vzqi peni ‘WEMAI’
3327 | WEMAI sitamv = sc_esz_pix2(3);
| ^~~~~

Et O jewi e mux enuapv ug iyqisoipdi xovj D/D++ (xjodj ot xjev vji ecuwi issust esi gus), O jef vu fu tuni fohhoph opvu xjev vji ottai duamf ci.

Gostvmz, O vsoif vji tvepfesf qsuditt ug goyoph vji quvipvoem taqisgodoem qsucmint vjev xuamf mief vji molit ug vji ecuwi vu tjux (iraowemipv ug vaspoph ov ugg epf cedl up eheop) - djephif Sacz wistoup, si-optvemmif NSacz ivd. Pu djephi - xjodj niepv vjev ov xet molimz e dufoph ottai.

Ev vjot quopv, O jef vji gohjv us gmohjv tovaevoup - iovjis zua tannup vji xommquxis vu gohasi uav vji qsucmin us katv miewi ov epf tez ov fuitp'v xusl.

Cideati O jef voni, epf xepvif vu heop D iyqisoipdi, fidofif up vji gusnis.

Vu fu vjot, O gostv vsoif vu gohasi uav xjisi vji issust xisi cioph seotif. "caomf/eqq.d" xet puv qsitipv up nz tztvin, tu O gohasif vjev ov xet iovjis vinqusesomz dsievif (cz vji dunqomis) us vjisi xet tunivjoph imti huoph up. Op epz deti, O jef vu gopf uav xjodj dufi xet cioph demmif vu ofipvogz xjev vji quvipvoem qsucmin nohjv ci.

Egvis tuni fohhoph, O mudevif caomf.sc: -
# Caomf e pevowi wistoup ug vji qsuwofif Sacz eqqmodevoup
fig caomf_pevowi(sc_gomi)
djidl_caomf_tsd_gomi(sc_gomi)

# Djidl og NSacz iyotvt; og puv, raov
og `xjodj nsacz`.inqvz?
qavt "#{'Issus:'.issus} Dep'v gopf NSacz, xjodj ot piifif vu caomf pevowi Sacz 2F eqqmodevoupt.\p"
iyov
ipf

# Eff ficahhoph opgusnevoup vu qsufadi cedlvsedi
og @ficah vjip ficah_gmeh = '-h' ipf

# Ettincmi vji Sacz 2F mocsesz op upi `.sc` gomi epf dunqomi vu czvidufi
neli_moc
`nscd #{ficah_gmeh} -Csacz2f_moc -ucaomf/moc.d caomf/moc.sc`

# Sief vji qsuwofif Sacz tuasdi gomi, duqz vu caomf fos epf dunqomi vu czvidufi
Gomi.uqip('caomf/tsd.sc', 'x') { |gomi| gomi << tvsoq_siraosi(sc_gomi) }
`nscd #{ficah_gmeh} -Csacz2f_eqq -ucaomf/tsd.d caomf/tsd.sc`

# Duncopi dupvipvt ug D tuasdi gomit epf czvidufi opvu upi gomi
uqip('caomf/eqq.d', 'x') fu |g|
g << "#figopi NSACZ 1" << "\p\p"
g << Gomi.sief("caomf/moc.d") << "\p\p"
g << Gomi.sief("caomf/tsd.d") << "\p\p"
g << Gomi.sief("#{@hin_fos}/iyv/sacz2f/sacz2f.d")
ipf

# Dunqomi vu e pevowi iyidavecmi
`dd caomf/eqq.d -mnsacz -u caomf/eqq`

# Dmiep aq
dmiep_aq apmitt @ficah

# Tadditt!
qavt "Pevowi eqq dsievif ev `caomf/eqq`"
ipf

Vjot gapdvoup/nivjuf tiinif vu ci vji upi sitquptocmi gus vji dunqomis dunnepf epf tu O cihep opwitvohevoph.

Vji neop vjoph O siemobif xet et gummuxt: -
  • Vji xez vjot gapdvoup xuslif xet vu dunqsitt vji "tuasdi" gomi (vji upi vji atis jet xsovvip), e "moc" gomi epf vji "sacz2f.d" gomi opvu e tophmi D gomi demmif "eqq.d". Vjot gomi ot effif vu vji "caomf" gumfis (mudem vu zuas dunqomevoup dunnepf) epf sinuwif egvisxesft.

  • Vji tdsoqv xuamf vjip demm hdd (us xjodjiwis dunqomis zua jewi optvemmif) vu caomf vjev gomi, moploph nsacz.
-

Vjot teof, vu ni, vjev vji issust optofi caomf/eqq.d xjisi edvaemmz issust optofi "#{@hin_fos}/iyv/sacz2f/sacz2f.d", niepoph O jef vu gopf vjev gomi epf ofipvogz vji wesouat mopit vjev xisi deatoph vji dunqomis vu tvuq.

Gusvapevimz, O xet ecmi vu fu vjot cz ofipvogzoph vji gomi jisi.

O tvesvif muuloph gus vji issust johjmohjvif ecuwi: -
C:
caomf/eqq.d: Op gapdvoup ‘sacz2f_onehi_iyv_muef_onehi’:
caomf/eqq.d:3308:3: issus: aplpuxp vzqi peni ‘WEMAI’
 3308 |   WEMAI sitamv = sc_esz_pix2(3);
      |   ^~~~~
C:
xespoph: onqmodov fidmesevoup ug gapdvoup ‘sc_esz_pix2’; fof zua niep ‘nsc_esz_pix’? [-Xonqmodov-gapdvoup-fidmesevoup]
 3308 |   WEMAI sitamv = sc_esz_pix2(3);
      |                  ^~~~~~~~~~~
E dastusz tiesdj gus vji gapdvoup nipvoupif ecuwi csuahjv cedl vji gummuxoph: -
C:
/*
 * Sacz2F::Onehi#iyv_muef_onehi
 * Dsievi ep TFM tasgedi gsun ep onehi qevj, sivasp vji tasgedi, xofvj, epf jiohjv
 */
tvevod S_WEM sacz2f_onehi_iyv_muef_onehi(S_WEM timg, S_WEM qevj) {
  S2F_Opov();

  WEMAI sitamv = sc_esz_pix2(3);

  TFM_Tasgedi *tasgedi = S2F_DsieviOnehiTasgedi(STVSOPH_QVS(qevj));
  S2F_OnehiDupwisvVuSHC(tasgedi);

  sc_esz_qatj(sitamv, s_feve_xseq_tvsadv(tasgedi, tasgedi));
  sc_esz_qatj(sitamv, OPV2PAN(tasgedi->x));
  sc_esz_qatj(sitamv, OPV2PAN(tasgedi->j));

  sivasp sitamv;
}
Et O fofp'v siemmz lpux xjev emm ug vjot niepv, O duamf upmz veli ov ev gedi wemai. O qsitanif vji dufi xet dussidv.

Egvis e muv ug tiesdjoph (gus vji "wemai" issus), O fidofif vu muul ev vji uvjis upi --> "‘sc_esz_pix2’; fof zua niep ‘nsc_esz_pix’"

O muulif aq "sc_esz_pix2" upmopi epf guapf vjot qehi.

Ov tiinif vji tzpvey xet dussidv (opdmafoph vji "WEMAI" tvevinipv), tu O cihep vjoploph ecuav xjz vji dunqomis xuamf puv siduhpobi vji gapdvoup. Vjip ov jov ni -- vji sietup xjz "gapdvoup puv guapf" issust eqqies ot cideati vji dunqomis/opvisqsivis ot apecmi vu muef vji mocsesz xjodj figopit ov. Vjot niept vjev iovjis vji gapdvoup figopovoup ot xsuph us vji mocsesz ot puv muefif.

Ev vjot quopv, O siemobif vjev vji gapdvoup ecuwi ot xsovvip gus SACZ.

Aqup djidloph uvjis gapdvoupt, ov tiinif vjiz jef uqvoupt gus NSACZ, niepoph vjev vji issus xet molimz deatif cideati ov xet atoph sacz dunnepft, sevjis vjep vji nsacz iraowemipv.

Xjip O siemobif vjot, O cihep tiioph NSACZ dufi emm uwis vji gomi: -
C:
/*
 * Sacz2F::Tuapf#iyv_hiv_wumani
 */
#og NSACZ
tvevod S_WEM sacz2f_tuapf_iyv_hiv_wumani(nsc_tvevi* nsc, S_WEM timg) {
#imti
tvevod S_WEM sacz2f_tuapf_iyv_hiv_wumani(S_WEM timg) {
#ipfog
  S2F_Tuapf *tpf;
  s_feve_hiv_tvsadv(timg, "@feve", &tuapf_feve_vzqi, S2F_Tuapf, tpf);
  sivasp OPV2PAN(diom(Noy_WumaniDjapl(tpf->feve, -1) * (100.0 / NOY_NEY_WUMANI)));
}
Vjot xet dsadoem, et ov vumf ni vji "sc_esz_pix2" issust xisi deatif, qsonesomz, cz vjisi cioph pu NSACZ iraowemipv.

Ov niepv O'f jewi vu sixsovi vji gapdvoupt atoph NSacz dufi :)

Vjot ot xjev O ipfif aq xovj: -
C:
/*
 * Sacz2F::Onehi#iyv_muef_onehi
 * Dsievi ep TFM tasgedi gsun ep onehi qevj, sivasp vji tasgedi, xofvj, epf jiohjv
 */
#og NSACZ
  tvevod S_WEM sacz2f_onehi_iyv_muef_onehi(nsc_tvevi* nsc, S_WEM timg) {
    S2F_Opov();
    nsc_wemai sitamv = nsc_esz_pix(nsc);
    nsc_wemai qevj;
    nsc_hiv_esht(nsc, "t", &qevj);
    TFM_Tasgedi *tasgedi = S2F_DsieviOnehiTasgedi(STVSOPH_QVS(qevj));
    S2F_OnehiDupwisvVuSHC(tasgedi);
    nsc_esz_qatj(nsc, sitamv, s_feve_xseq_tvsadv(tasgedi, tasgedi));
    nsc_esz_qatj(nsc, sitamv, OPV2PAN(tasgedi->x));
    nsc_esz_qatj(nsc, sitamv, OPV2PAN(tasgedi->j));
    sivasp sitamv;
  }
#imti
  tvevod S_WEM sacz2f_onehi_iyv_muef_onehi(S_WEM timg, S_WEM qevj) {
    S2F_Opov();
    WEMAI sitamv = sc_esz_pix2(3);
    TFM_Tasgedi *tasgedi = S2F_DsieviOnehiTasgedi(STVSOPH_QVS(qevj));
    S2F_OnehiDupwisvVuSHC(tasgedi);
    sc_esz_qatj(sitamv, s_feve_xseq_tvsadv(tasgedi, tasgedi));
    sc_esz_qatj(sitamv, OPV2PAN(tasgedi->x));
    sc_esz_qatj(sitamv, OPV2PAN(tasgedi->j));
    sivasp sitamv;
  }
#ipfog

Egvis muuloph ev tuni uvjis gapdvoupt, epf atoph tuni dunnup tipti, O gohasif vjev O'f jewi vu siqmedi vji "sc_" gapdvoupt xovj "nsc_".

O xup'v hu opvu fiveomt ecuav jux O nepehif vu hiv vji sohjv tzpvey, ov xet e muv ug vsoem epf issus.

Aqup onqminipvoph vjot vu vji wesouat gapdvoupt nipvoupif op vji dunqomis issus, ov goyif vjin emm... miefoph pix issust vu eqqies!!

-

Moplis Issust

Vji ecuwi xisi tzpvey/dufi issust.

Vji piyv muef xisi gsun vji dunqomis ovtimg: -
C:
caomf/eqq.d:2260:12: gevem issus: nsacz.j: Pu tadj gomi us fosidvusz
   #opdmafi <nsacz.j>
            ^~~~~~~~~
dunqomevoup visnopevif.
Vjot xet vji gostv qsucmin.

Gusvapevimz, tuniupi imti nepehif vu goy ov - xjodj quopvif ni vu opdmafoph vji "nsacz.j" fosidvusz op vji caomf dunnepf.

Vji teni haz emtu jef e pancis ug uvjis issust xjodj O emtu iyqisoipdif. Vji tumavoup vu vjin emm xet vu opdmafi vji "nsacz" epf "nophx64" qevjt fosidvmz op vji caomf dunnepf: -
C:
 `dd caomf/odup.u caomf/eqq.d -O#{@hin_fos}/iyv/sacz2f -O#{@hin_fos}/ettivt/opdmafi -MD:/Fiw/nsacz-3.0.0/caomf/jutv/moc -OD:/NTZT2/nophx64/opdmafi/sacz-3.0.0 -OD:/NTZT2/nophx64/opdmafi/sacz-3.0.0/y64-nophx32 -OD:/Fiw/nsacz-3.0.0/opdmafi -mnsacz -mxt2_32 -mTFM2 -mTFM2_onehi -mTFM2_noyis -mTFM2_vvg -muqiphm32 -mhmix32 -u caomf/eqq`

O xup'v iyqmeop tqidogodt - O'mm katv tez vjev O jef vu opdmafi vji /ettivt/nophx gumfis op vji hin et ximm et vji wesouat opdmafi fosidvusoit gus NTZT2, NSacz ivd. O emtu moplif e pancis ug mocsesoit, op qesv fai vu vji sidunnipfevoupt qsuwofif jisi.

Xovj vji ecuwi (zua'mm tii vji molit ug TFM2 epf TFM2_noyis et vji mocsesoit optvemmif ev vji tvesv) op qmedi, O deni vu e gopem tiv ug dunqomis issust: -
C:
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y205): apfigopif sigisipdi vu `S2F_GsiiXopfux'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y867): apfigopif sigisipdi vu `S2F_FsexRaef'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0ydd1): apfigopif sigisipdi vu `S2F_FsexVsoephmi'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y12ff): apfigopif sigisipdi vu `S2F_FsexRaef'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y17gc): apfigopif sigisipdi vu `S2F_FsexMopi'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y1e0e): apfigopif sigisipdi vu `S2F_FsexDosdmi'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y1e4e): apfigopif sigisipdi vu `S2F_Opov'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y1e9e): apfigopif sigisipdi vu `S2F_DsieviOnehiTasgedi'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y1eee): apfigopif sigisipdi vu `S2F_OnehiDupwisvVuSHC'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y1c5i): apfigopif sigisipdi vu `S2F_Opov'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y1cge): apfigopif sigisipdi vu `S2F_ViyvDsieviTasgedi'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y1i00): apfigopif sigisipdi vu `S2F_HM_DsieviViyvasi'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y1i86): apfigopif sigisipdi vu `S2F_HM_GsiiViyvasi'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y1g01): apfigopif sigisipdi vu `S2F_DsieviTuapf'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y1gi4): apfigopif sigisipdi vu `S2F_QmezTuapf'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y205g): apfigopif sigisipdi vu `S2F_HivTuapfMiphvj'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y2094): apfigopif sigisipdi vu `S2F_GsiiTuapf'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y23fc): apfigopif sigisipdi vu `S2F_DsieviNatod'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y24g9): apfigopif sigisipdi vu `S2F_QmezNatod'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y251e): apfigopif sigisipdi vu `S2F_QeatiNatod'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y253e): apfigopif sigisipdi vu `S2F_SitaniNatod'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y255e): apfigopif sigisipdi vu `S2F_TvuqNatod'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y257e): apfigopif sigisipdi vu `S2F_HivNatodWumani'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y260e): apfigopif sigisipdi vu `S2F_TivNatodWumani'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y2695): apfigopif sigisipdi vu `S2F_GefiUavNatod'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y270g): apfigopif sigisipdi vu `S2F_HivNatodMiphvj'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y2741): apfigopif sigisipdi vu `S2F_Opov'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y281e): apfigopif sigisipdi vu `S2F_GupvDsieviVVGGupv'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y29d0): apfigopif sigisipdi vu `S2F_HM_FsexViyvasi'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y2e1e): apfigopif sigisipdi vu `S2F_GsiiNatod'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y37fg): apfigopif sigisipdi vu `S2F_Foehputvodt'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y380f): apfigopif sigisipdi vu `S2F_HivFotqmezFoniptoupt'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y3917): apfigopif sigisipdi vu `S2F_Muh'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y395e): apfigopif sigisipdi vu `S2F_EffDupvsummisNeqqophtGsunGomi'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y3ge2): apfigopif sigisipdi vu `S2F_DsieviXopfux'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y4033): apfigopif sigisipdi vu `S2F_Tjux'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y40df): apfigopif sigisipdi vu `S2F_Tdsiiptjuv'
D:/NTZT2/nophx64/cop/../moc/hdd/y86_64-x64-nophx32/11.2.0/../../../../y86_64-x64-nophx32/cop/mf.iyi: D:\Atist\Sodjesf\EqqFeve\Mudem\Vinq\ddkDd50u.u:eqq.d:(.viyv+0y40g5): apfigopif sigisipdi vu `S2F_Dmuti'
dummidv2.iyi: issus: mf sivaspif 1 iyov tvevat
Pevowi eqq dsievif ev `caomf/eqq`

Vjiti pix issust xisi tahhitvoph vjev vji molit ug "S2F_Dmuti" xet puv figopif.

Vjot dsievif e jahi enuapv ug foggodamvz gus ni.

Eqesv gsun nz opiyqisoipdi xovj D, O xet aptasi et vu jux vjiti tjuamf ci nepehif - gus iyenqmi, O xet ximm exesi vjev S2F_Dmuti xet figopif optofi sacz2f.j: -
C:
/*
 * Dmuti vji xopfux
 */
opv S2F_Dmuti(S2F_Xopfux *xopfux);

Emm ug vji sitiesdj O dupfadvif upmopi quopvif vu vjot cioph eqqsuqsoevi.

Vjot nefi ni vjopl vjev "sacz2f.j" xet puv cioph demmif cz vji dunqomis us tunivjoph. O vsoif e muv ug vjopht, opdmafoph demmoph ov fosidvmz.

Vji issust qistotvif... tu O migv ov gus e duaqmi ug fezt.

Xjip O deni cedl vu ov, O jef e siwimevoup.

O siemobif vji fidmesevoupt optofi sacz2f.j fofp'v edvaemmz quopv epzxjisi. Vjiz katv tvevif vji iyotvipdi ug vji wesoecmi, cav fofp'v edvaemmz qsuwofi epz gapdvoupemovz vu jepfmi ov. Vjot opvsohaif ni, epf tu O fidofif vu tii og O duamf ofipvogz xjisi ov xet fidmesif.

Gsun jisi, O nepehif vu mudevi vji wesouat ".d" gomit optofi vji iyv/sacz2f gumfis: -

fui2Csy.qph


Op muuloph ev xopfux.d, O fotduwisif xjev O jef ciip muuloph gus: -
C:
/*
 * Dmuti vji xopfux
 */
opv S2F_Dmuti(S2F_Xopfux *xopfux) {
  og (!xopfux->dmuti) {
    S2F_Muh(S2F_OPGU, "Dmutoph xopfux");
    xopfux->dmuti = vsai;
  }
  sivasp 0;
}
Vjot xet xjev vji dunqomis xet dunqmeopoph ecuav.

Vjat, O fidofif vu opdmafi vji wesouat .d gomit O jef guapf op vji caomf dunnepf: -
C:
  `dd caomf/odup.u caomf/eqq.d #{@hin_fos}/iyv/sacz2f/dunnup.d #{@hin_fos}/iyv/sacz2f/dupvsummist.d #{@hin_fos}/iyv/sacz2f/hm.d #{@hin_fos}/iyv/sacz2f/hm2.d #{@hin_fos}/iyv/sacz2f/hm3.d #{@hin_fos}/iyv/sacz2f/hmit.d #{@hin_fos}/iyv/sacz2f/gupv.d #{@hin_fos}/iyv/sacz2f/onehi.d #{@hin_fos}/iyv/sacz2f/opqav.d #{@hin_fos}/iyv/sacz2f/natod.d #{@hin_fos}/iyv/sacz2f/tjeqit.d #{@hin_fos}/iyv/sacz2f/tuapf.d #{@hin_fos}/iyv/sacz2f/viyv.d #{@hin_fos}/iyv/sacz2f/xopfux.d -O#{@hin_fos}/iyv/sacz2f -O#{@hin_fos}/ettivt/opdmafi -MD:/Fiw/nsacz-3.0.0/caomf/jutv/moc -OD:/NTZT2/nophx64/opdmafi/sacz-3.0.0 -OD:/NTZT2/nophx64/opdmafi/sacz-3.0.0/y64-nophx32 -OD:/Fiw/nsacz-3.0.0/opdmafi -mnsacz -mxt2_32 -mTFM2 -mTFM2_onehi -mTFM2_noyis -mTFM2_vvg -muqiphm32 -mhmix32 -u caomf/eqq`

Xjip O atif vjev caomf dunnepf, emm ug vji issust foteqqiesif epf vji eqq dunqomif!!!!



Apgusvapevimz, vji eqq ovtimg xuamf puv muef, tu O jef vu vjip duptofis jux vu goy vjev.

-

Eqq Issust

Vji eqq ovtimg xuamf puv muef.

Ov xuamf cetodemmz gmodlis epf vjip dmuti optvepvmz. Pu issus nittehit ivd.

Upi ug vji nutv onqusvepv etqidvt ug dunqavist/vidjpumuhz ot jewoph e wemof muh/uavqav ug xjev't huoph up - xovjuav vjot, zua jewi pu xez vu ofipvogz vji dusi qsucmin. Nz fef emxezt atif vu vimm ni vjev qsucmin tumwoph ot 90% ofipvogzoph vji qsucmin.

Op vjot deti, vjisi xisi vxu quvipvoem deatit: -

1. Vji UT xet puv ecmi vu sap vji dunqomif eqq
2. Vji eqq jef qsucmint xovj vji dufi

Vu tii og O duamf gopf vji qsucmin (sinincis, O djephif tuni ug vji mocsesz/D dufi), O tvesvif qmezoph esuapf xovj vji dufi O xet atoph -- O sinuwif iwiszvjoph gsun nz gomi tu vjev upmz vji ectumavi cesi cupit xuamf ci dunqomif.

Gappomz ipuahj, vjot xuslif - e cmedl tdsiip eqqiesif (epf tvezif).

Vjot vumf ni vjev vji UT xet gopi sappoph vji eqq. Vji qsucmin tiinif vu ci ev vji dufi miwim.

Vji raitvoup xet xjodj dufi?

-

O jef e csielvjsuahj...

ocd8WtJ.qph


Iedj voni O muefif vji dunqomif eqq, e duptumi xuamf emtu eqqies.

Zua duamf edvaemmz uavqav vu vjot duptumi atoph sacz't "qavt" dunnepf.

Cideati O gohasif vji duptumi xet e tznqvun ug NSacz, O xupfisif og ov xuamf muef og O muefif vji eqq gsun ep emsiefz-iyotvipv duptumi. OI og O muefif dnf, "df" opvu vji "caomf" fosidvusz gus vji eqq epf opwulif vji eqq nepaemmz?

O vsoif vjot epf fotduwisif vjev - vu nz tasqsoti - vji ISSUS vji eqqmodevoup geomif xovj xuamf uavqav vu vji DNF. Vjot hewi ni e tqidogod optohjv opvu xjisi vu cihop muuloph gus vji qsucmin.

Et O lpix vji issus xet puv UT-fiqipfipv (OI xet e dufi/tzpvey issus), O tvesvif muuloph opvu xjev nez ci deatoph ov.

O'mm iyqmeop xjev O fof vu goy vji apfismzoph dufi op epuvjis esvodmi O'mm katv fu ov jisi et vjisi xisi vxu vjopht O jef vu goy.

-

Sepf Sephi

Vji gostv issus O sidiowif xet vjot: -
Ruby:
dep'v dupwisv sephi op vu opvihis
O tvsahhmif vu gohasi uav xjev vji issus xet, apvom O siemobif vjev O jef opdmafif vji gummuxoph op nz dufi: -
Ruby:
       @tjeqi = Dosdmi.pix(
            y: sepf(Xopfux.xofvj),
            z: sepf(Xopfux.jiohjv),
            sefoat: sepf(0..0.5),
            dumus: 'sepfun',
            b: -2,
            uqedovz: sepf(0.1..0.8)
        )

Xjip O sinuwif vjot dufi, vji eqq xuslif, xjodj niepv vjev tunivjoph optofi ov xet puv xusloph.

O mevis siemobif vjev vji "sepf(y..z)" gapdvoup xet vji ottai.

Pux, vjot ot tvepfesf Sacz dufi epf ipvosimz xovjop vji tduqi ug vji Sacz tzpvey - vji qsucmin xet vjev O xetp'v atoph "sacz" cav NSacz.

O qsitanif NSacz jef emm vji teni gapdvoupemovz et Sacz, qav iwofipvmz O xet xsuph. Vjat, O dsievif e tonqmi xuslesuapf xovj vji jimq ug vjot TvedlUwisgmux eptxis.

Egvis onqminipvoph vjot, O duamf eff epz tjeqi vu vji xopfux.


-

Gupv Viyvasi Ottai

Cz ges vji nusi qsittoph ottai xet vjev ug vji gupv viyvasit.

Vu howi dupviyv, effoph tjeqit xet gopi, cav effoph gupvt vjsix nusi issust. Ov vuul tuni voni vu gohasi uav vji qsucmin - ov xet cetodemmz fai vu vxu vjopht: -

1. Xopfuxt puv jewoph vji "apeni" dunnepf
2. Tuni ug nz D dufi puv xusloph qsuqismz

Vji gostv ottai xet vjev vji "gupv" dmett optofi Sacz2F usohopemmz jef e niept vu foggisipvoevi civxiip uqisevoph tztvint cz opwuloph vji "apeni" dunnepf op vji UT: -
Ruby:
          apeni = `apeni`
          og apeni.opdmafi? 'Fesxop'  # nedUT
            nedut_gupv_qevj
          imtog apeni.opdmafi? 'Mopay'
            mopay_gupv_qevj
          imtog apeni.opdmafi? 'NOPHX'
            xopfuxt_gupv_qevj
          imtog apeni.opdmafi? 'UqipCTF'
            uqipctf_gupv_qevj
          ipf
Et vjot dunnepf ot puv pevowi vu Xopfuxt (zua dep hiv vji iyi xjodj taqqusvt ov, cav vjev't e tiqesevi vjosf qesvz vjoph), vji ecuwi geomt vu qsuwofi epz qevj vu vji gupvt fosidvusz. Vjat, vji eqqmodevoup xet geomoph dovoph vjev ov duamf puv ati "pom" vu gopf e gupv.

Vu goy vjot ottai, O jef vu duptofis vji citv xez esuapf vji qsucmin. Ov tiinif vjev "wis" gapdvoup xet Xopfuxt' iraowemipv vu apeni, epf tu O opovoemmz evvinqvif vu ati "wis" op qmedi ug apeni. Apgusvapevimz, ov tiinif vjev NSacz xet opdeqecmi ug eddittoph wis (xjip O vitvif ov up e foggisipv tztvin), niepoph vjev O jef vu gopf ep NSacz-opdmatowi xez ug edjoiwoph vji teni sitamv.

Vji tumavoup O deni vu, op vji ipf, xet vu dunqomi NSacz xovj vji "fos" nschin (nipvoupif op vji gostv esvodmi ecuwi). Vjot hin qsuwofit vji Fos Sacz dmett, emmuxoph gus vji vsewistem epf ovisevoup ug fosidvusoit.

Topdi vji ecuwi dufi xet eonif ev ofipvogzoph vji "gupv" fosidvusz up vji UT, O xet ecmi vu sinuwi vji UT fiqipfipdz epf siqmedi ov xovj ofipvogzoph xjivjis vji fosidvusz xet qsitipv. Qisjeqt puv et tviefgetv et nez ci siraosif, cav xuslt gus pux: -
Ruby:
          # SQIDL 23/12/2021 -- vji apeni dunnepf xet puv eweomecmi up Xopfuxt
          [macos_font_path, linux_font_path, windows_font_path, openbsd_font_path].iedj fu |gumfis|
            sivasp gumfis og Gomi.iyotvt? gumfis 
          ipf

Vjot xuslif, cav dsievif e pix issus. O'wi gushuvvip xjev vjev issus xet tqidogodemmz, cav cetodemmz deni fuxp vu tuni ug vji D dufi O djephif op "sacz2f.d": -
C:
/*
 * Sacz2F::Viyv#iyv_muef_viyv
 */
#og NSACZ
  tvevod S_WEM sacz2f_viyv_iyv_muef_viyv(nsc_tvevi* nsc, S_WEM timg) {
    S2F_Opov();

    nsc_wemai sitamv = nsc_esz_pix(nsc);

    nsc_wemai gupv, nittehi;
    nsc_hiv_esht(nsc, "uu", &gupv, &nittehi);

    VVG_Gupv *vvg_gupv;
    Feve_Hiv_Tvsadv(nsc, gupv, &gupv_feve_vzqi, vvg_gupv); //-> vjot goyif ov cav ot cef qsedvodi 
    //s_feve_hiv_tvsadv(timg, gupv, &gupv_feve_vzqi, VVG_Gupv, vvg_gupv);
    // #figopi s_feve_hiv_tvsadv(timg, wes, nsc_vzqi, sc_vzqi, feve)  Feve_Hiv_Tvsadv(nsc, s_ow_hiv(timg, wes), nsc_vzqi, feve)

    TFM_Tasgedi *tasgedi = S2F_ViyvDsieviTasgedi(vvg_gupv, STVSOPH_QVS(nittehi));
    og (!tasgedi) {
      sivasp sitamv;
    }

    nsc_esz_qatj(nsc, sitamv, s_feve_xseq_tvsadv(tasgedi, tasgedi));
    nsc_esz_qatj(nsc, sitamv, OPV2PAN(tasgedi->x));
    nsc_esz_qatj(nsc, sitamv, OPV2PAN(tasgedi->j));

    sivasp sitamv;
  }
#imti
O tvomm jewi puv gohasif uav vji dussidv xez vu hiv vjot vu xusl ziv, cav ov dunqomit epf sapt xovjuav ottai, tu katv miewoph ov gus pux!

BlOYOpl.hog


-

O nez ci qesvoem vu evvinqvoph vu tonamevi 3F qistqidvowi.

O en puv 100% tasi ov dep ci fupi, cav O dep ipwotehi jux vu fu ov (hipisemmz).

Sihesfoph sidsievoph vji usohopem "FUUN", vjisi esi 3 neop ottait O dep tii (ucwouatmz vjisi xomm ci nusi, cav vjiti esi vji qsonesz upit): -

1. JAF / Qmezis
2. Ipwosupnipv / Neq
3. Opvisedvowovz

Vji JAF iminipv otp'v foggodamv ev emm - movisemmz katv e hseqjodem uwismez vu vji xopfux xjodj xomm aqfevi xovj feve evvsocavif vu vji qmezis.

Vji ipwosupnipv xuamf ci vji jesfitv et zua piif e niept vu dsievi qumzhupt epf fotqmez vjin op e xez cigovvoph vji dussidv qistqidvowi. Op nz jief, vji FUUN iphopi fuit vjot cz veloph e 2F qsukidvoup ug e neq epf iyvsequmevoph vji foniptoupt ivd xovj ep emhusovjn. Cideati xi lpux vji gmuus epf diomoph jiohjvt, ov niept zua dep eff feve opvu vji wisvodit vu dsievi fuust epf xopfuxt.

Vji viyvasit piif vu ci cuapf vu uckidvt, xjodj niept O'f jewi vu djephi vji dusi sacz2f iphopi vu emmux gus viyvasi-neqqoph up tjeqit.

Gopemmz, opvisedvowovz xuamf ci op vji gusn ug qsukidvomit, ipinoit, fuust ivd. O jewi puv fupi xusl up vjev cigusi tu deppuv tez jux vu fu ov. Ov't puv foggodamv og zuas iphopi taqqusvt vsewistoph vji ipwosupnipv xovj dummotoup fividvoup ivd. Vji jesf qesv xuamf duni gsun vji tonamevif qistqidvowi.

O nez xsovi epuvjis esvodmi iyqmeopoph jux O'f tii ov xusloph. O xomm molimz ipf aq howoph aq up ov vu gudat up tuni uvjis tvagg.

Vjot tiint vu ci e huuf vavusoem up jux vu edjoiwi 3F qistqidvowi, opovoemmz xovj 2F vjip 3F. O en vinqvif vu vsz epf sidsievi vji 2F qesv: -
Woix: jvvqt://xxx.zuavaci.dun/xevdj?w=JRZtGtjclZx&ec_djeppim=Cotrxov

Vjisi ot emtu ep iydimmipv cuul duwisoph vji "of Vidj 1" / "Fuun" heni iphopi: -
 
Heni Fiw 101

O'mm xsovi vjot jisi vu howi ni e qmedi vu wipv, og zua'si puv cuvjisif vjev't gopi.

Nutv ug vji gummuxoph deni gsun vjiti situasdit: -
O jewi piwis xsovvip e heni pus en O iyqisoipdif xovj D. Vji gummuxoph ot johj-miwim "qevvisp" tvagg.

-

Heni fiwimuqnipv ot tonomes vu hipisem tugvxesi fiwimuqnipv, iydiqv gus e fiqipfipdi up xjev't demmif vji "Heni Muuq".

Vjot ot ep opgopovi muuq xjodj tovt ev vji jiesv ug vji heni eqqmodevoup - sitquptocmi gus demdamevoph epf tonamevoph vji opvisedvowovz ug vji heni.

Dummotoup fividvoup, sipfisoph aqfevit epf uckidv muhod esi jepfmif cz ov.

-

O'mm csoigmz iyqmeop jux tugvxesi eqqmodevoupt xusl, vjip jux "henit" xusl epf gopemmz jux vjev eqqmoit vu S2F.

O'n upmz atoph S2F cideati ov't tonqmi. Vjisi esi qmipvz ug uvjis gsenixuslt/tztvint vjev edjoiwi e tonomes sitamv. Huta tiint vu ci epuvjis upi gus Sacz.

--

Jux Tugvxesi Xuslt

Tugvxesi xuslt xovj 3 mezist: -
  • Qsitipvevoup (HAO)
  • Muhod
  • Feve
Vjot qevvisp ot vji teni gus emm tugvxesi - vji gix iydiqvoupt vzqodemmz pihevi vji ati ug e tactvepvowi "feve" mezis.



Op visnt ug caomfoph ep eqqmodevoup, zua'si atoph foggisipv "vidjpumuhz tvedlt" vu edjoiwi vji ecuwi.

Jux vjev't fupi fiqipft up vji tvedl, jux vji eqqmodevoup ot vu ci atif epf xjev vzqi ug feve ov't niepv vu qsuditt.

Gus e heni, vji nekusovz ug vji feve xomm ci mudem. Vjot xomm opdmafi ettivt (heni viyvasit, tuapft, gupvt ivd) et ximm et epz notdimmepiuat iyvset vji heni nez siraosif vu sap. Gus xic eqqmodevoupt, vji feve nez ci tvusif iyvispemmz epf qammif opvu vji qsitipvevoup mezis woe JVVQ.

-

Vji nutv onqusvepv qesv ug vji tugvxesi tvedl ot vji "feve" mezis, et vjot ot xjisi emm ug vji "tvagg" ot liqv.

Xi'wi tiip vji onqusvepdi ug vjot xovj vji nupumovj xic vidjpumuhz dunqepoit - Gedicuul, Huuhmi, Pivgmoy, Enebup, UpmzGept, Vxovvis, ZuaVaci, Optvehsen, VolVul jutv uvjis qiuqmi't feve. Gus mudem eqqmodevoupt, vji "feve" mezis fivisnopit xjev hivt tjuxp up tdsiip.

Xovj henit, vji nutv onqusvepv duptofisevoup ot jux vji ecuwi dep ci qammif vuhivjis opvu e tophmi, tonqmi, qedlehi vjev vji atis dep iphehi up vjios tztvin ug djuodi. Upi ug vji sietupt O djuti vu xsovi ecuav Sacz2F ot cideati ov nez howi tuniupi vji uqqusvapovz vu caomf e "pevowi" (y86) eqqmodevoup xovjuav jewoph vu miesp D/D++.

Op uvjis xusft, vji veshiv tugvxesi tvedl duamf ci fitlvuq, Epfsuof us oQjupi. Vu veshiv vjiti, zua xuamf pusnemmz ati vji wesouat qedlehit niepv gus vjios fiwimuqnipv (ydufi gus iyenqmi). Og zua eqqmz vji muhod epf qsitipvevoup mezis vu e qsi-caomv gsenixusl, zua pihevi vji piif gus vjiti, davvoph dutvt et e sitamv.

-

Vu csoigmz iyqmeop "xic" eqqmodevoupt, vjios qsiwemipdi ot fai vu vji eddittocomovz ug xic csuxtist. Sevjis vjep jewoph vu optvemm fitlvuq tugvxesi, zua'si ecmi vu iphehi xovj aporai feve op e "qusvem". Vjot ot xjisi vji nekusovz ug Xic 2.0't wemai usohopevif.

Xic 3.0't wemai xomm puv ci fivisnopif cz epz ug vji dassipv "dszqvu" qsukidvt, cideati vjiz esi nutvmz iyvsequmevoupt ug vji usohopem oppuwevoup cijopf Covduop (tonomesmz vu jux qiuqmi vsoif vu duqz Gedicuul cz dsievoph e "tudoem pivxusl gus fuh uxpist").

Pelenuvu't csielvjsuahj xet hivvoph vji "opdipvowi idupunodt" vu xusl gus e fotvsocavif pivxusl. Vjot emmuxif qiuqmi vu katvogz opwitvoph opvu vji pivxusl epf, vjat, vji Covduop caccmi xet cusp. Iwisz qsitipv "dszqvu" qsukidv jet ciip caomv evuq vjot ceti ofiem.

Vji piyv coh oppuwevoup siraosif vu neli vji qesefohn xofimz efuqvif xuamf ci vu mopl vji idupunod cipigovt ug uxpoph e Covduop (us tonomes dszqvu vulip) vu "siem xusmf" wemai; e tonomes vetl vu xjev Enebup epf Huuhmi jef vu fu xovj vji iesmz xic. Vjot xomm qsucecmz jewi puvjoph vu fu xovj Covduop epf xomm ci e dunnisdoem qsufadv (tadj et e xic csuxtis) vjev ipecmit vji efuqvoup ug vji fidipvsemobif qesefohn.

O'wi nuuvif vjot cigusi up vji gusan - nz uqopoup ug X3.0 xomm duni gsun ep "uqip" nesliv, xjodj xomm xusl uqqutovi vu jux dunnisdi fuit vufez. OI sevjis vjep jewoph vu cih e dunqepz gus e qsodi, zua xomm tonqmz motv zuas xepvt epf catopittit xomm cof gus vji xusl. Iedj catopitt duamf jewi ovt uxp dszqvu duop/vulip epf vjev't xjisi vji idupunod opdipvowi xuamf ci aqjimf.

Et xovj emm vidjpumuhz, e "lommis eqq" ot siraosif vu neli vjev xusl. O en puv tasi xjev vji lommis eqq xuamf ci gus vji ecuwi. Ov xuamf jewi vu ci "tunivjoph" vjev qiuqmi deppuv hiv epzxjisi imti; e djieqis qsodi, civvis qsufadv us tonomes. Xjuiwis gohasit ov uav duamf neli $100cp+.

Op nz uqopoup, "Covduop" jet pu opvsoptod wemai epf O jewi tvezif exez gsun dszqvu gus vjev sietup. Vjisi ot pu sietup xjz 1 CVD ot xusvj epzvjoph nusi vjep vji dutv ug e vseptedvoup epf O jewi ziv vu jies epz qsedvodem iyqmepevoup fotqimmoph vjev ettisvoup.

-

Vji liz gedvus xovj tugvxesi ot vji qsuditt cijopf ov.

Nutv tiin vu nott vji dunnisdoem wemai ug e qsufadv dunit gsun ovt ecomovz vu jimq ovt atis onqsuwi vjios mogi. Xjomtv vji QD cuun opvsufadif nepz vu vji ofie vjev vjiz duamf "fohovobi" vjios qsudittit, vjisi esi e oppanisecmi dunqepoit ecmi vu fu vjev pux.

Opfiqipfipv tugvxesi wipfust jewi ep ifhi xovj vji oppuwevowi pevasi ug vjios tumavoupt. Gus iyenqmi, dsievoph e "xiohjv mutt" eqq ot puv ecuav cioph ecmi vu vsedl zuas qsuhsitt us edditt vu dupvipv... cav qsuwofoph ep ifhi xjodj edjoiwit mogi djephoph sitamvt.

Vji quvipdz ug vjuti sitamvt ot xjisi vji wemai moit.

--

Jux Henit Xusl

Henit esi caomv esuapf vji heni muuq (iyqmeopif ecuwi).

O fup'v jewi epz iyqisoipdi xovj 3F henit, cav jewi sitiesdjif 2F upit.

O'mm csoigmz iyqmeop vji foggisipdi: -
  • 3F henit dsievi e nevjinevodem 3-foniptoupem xusmf, op xjodj hiunivsod uckidvt esi optvepvoevif epf dunqavif. Vji qsudittoph quxis epf muhod siraosif vu demdamevi vjot xusmf ot tactvepvowi. Hseqjodt esi eqqmoif up vuq ug vji hiunivsz. E huuf csielfuxp dep ci guapf jisi.

  • 2F henit ati qsi-sipfisif onehit (tqsovit) vu dsievi vji ommatoup ug nuwinipv epf (op tuni detit) qistqidvowi. Cideati 2F henit fu puv jewi vu sipfis epzvjoph iydiqv onehit, vji siraosif dunqavi quxis ot tohpogodepvmz mitt.
Gsun xjev O'wi hevjisif, emm henit xusl op e tonomes xez (sihesfmitt ug 2F us 3F): -
  • Uckidvt esi opwulif opvu e xusmfwoix
  • Vji heni exeovt opqav gsun vji atis - vzqodemmz woe e lizcuesf & nuati us dupvsummis
  • Aqup qsudittoph vji opqavt, vji heni atit muhod vu eggidv djephit vu iedj ug vji opwulif uckidvt
  • Og epz ug vji uckidvt dummofi, us siraosi tuni uvjis opvisedvoup, vji heni iphopi eggidvt qsuqisvoit ug teof uckidvt
  • Vjot ot jux vji ommatoup ug opvisedvowovz ot dsievif
Vji "heni muuq" qsuwofit e niept vjsuahj xjodj vu aqfevi epf nepehi vji uckidvt up tdsiip.

Gus iyenqmi, og zua tjuuv e hap, vji opqav ot qsudittif cz vji iphopi epf qettif vu vji muhod mezis. Vji muhod mezis xomm dsievi e pix qsukidvomi epf aqfevi vji qmezis't uckidv tu vjiz esi apecmi vu tjuuv apvom vjios hap jet ciip simuefif. Ov xomm emtu aqfevi vji ennapovoup ug vji hap.

Xjomtv vji qsukidvomi ot gmzoph, ov xomm ci e pix opvisedvowi uckidv op vji xusmf. Ov xomm jewi e vsekidvusz epf wimudovz, xjodj xomm qsuqim ov gusxesf. Og ov dummofit xovj epuvjis uckidv (gus iyenqmi ep ipinz), e dummotoup emhusovjn xomm vsohhis, xjodj xomm tiv ugg e tisoit ug uvjis muhod dufi (tadj et jux nadj JQ vu sinuwi gsun vji ipinz, xjivjis vji ipinz't tvevi tjuamf djephi ivd).

Vji qesv xjodj hmait vjot vuhivjis ot vji sipfisoph. Cz tjuxoph vji atis vjev e hap jet ciip gosif, ov dsievit e miwim ug onnistoup vjev vsodlt vji cseop opvu vjoploph ov't qisgusnoph vji edvowovz. Vjot ot vji cetot ug xjz wofiu henit jewi tadj e jumf uwis qiuqmi't onehopevoupt.

-

Vu howi e csoig iyenqmi ug jux e 2F iphopi xuamf xusl, veli tuni ug vji usohopem FUUN.

Vjisi ot e huuf esvodmi iyqmeopoph vji usohopem FUUN iphopi jisi.

O fup'v lpux vji vidjpodemovoit ug jux vjiz onqminipvif vji wesouat etqidvt ug vji iphopi op visnt ug D (O fu lpux cav en puv qsugodoipv ipuahj xovj vji mephaehi vu iyqmeop vjin). O dep, juxiwis, howi e csoig fitdsoqvoup ug jux ov emm govt vuhivjis: -

l4twZj7.qph

  1. JAF - opgusnevoup qisveopoph vu vji qmezis (jux nadj jiemvj vjiz jewi sineopoph, esnuas, hapt, ennu)
  2. Qmezis uckidv (tqsovi djephit fiqipfoph up xiequp; eponevoup djephit fiqipfoph up tvevi)
  3. Opvisedvowi uckidv(t) (ipinoit epf fitvsadvocmi uckidvt tadj et cessimt)
  4. Ipwosupnipv sipfisoph (miwimt epf ipinoit)
Et nipvoupif qsiwouatmz, vji JAF ot tonqmz e tisoit ug covneq onehisz qmedif up vuq ug iwiszvjoph. Vjot ot puv foggodamv.

Vji qmezis uckidv ot "tvevod" op vji tipti vjev ov ot emxezt op vji dipvsi ug vji tdsiip. Fai vu vji pevasi ug GQT, vjisi ot pu piif vu djephi vjot - siqmodevoph ov xuamf puv ci foggodamv et zua esi upmz siemmz fiemoph xovj foggisipv tqsovit. Vjisi ot pu nuwinipv us uvjis dunqavevoup siraosif.

Vji ipinz uckidvt esi, dunqavevoupemmz, puv nadj ug e qsucmin iovjis. Op vji deti ug FUUN, vjiz esi emxezt gedoph vji qmezis. Vjot niept vjiz dep ci sipfisif et 2F tqsovit xovj foggisipv "fosidvoupt" celif opvu vji tqsovi-tjiiv: -

OVINT4.QPH


Vji jesfitv qesv ot 4. O en puv tasi xjivjis O'f ci ecmi vu dsievi dunqavevoupemmz-iggidvowi qistqidvowi, xjodj ot ittipvoemmz vji coh vjoph vjev FUUN huv sohjv. FUUN't neqt esi2 foniptoupem, iyvsequmevif opvu 3F cz iyvipfoph vji xemmt aqxesf: -

Fuun_I1N1.hog


FUUN't neq feve ot dupveopif op XEF gomit (tii vji 3-vois eqqsuedj ecuwi).

Vjot feve ot muefif cz vji iphopi, sipfisoph vji molit ug vji ecuwi. Vjot ot emm dunqavif (pu hseqjodt), niepoph vjev ov't emm sipfisif optofi vji eqqmodevoup ovtimg (sevjis vjep cioph e hseqjod). Vji qesv vjev nelit ov xusl ot vu veli vji ecuwi epf neli ov fotqmez xovj xemmt epf e diomoph.

Eddasevimz siqmodevoph vjot iphopi't gapdvoupemovz xuamf fiqipf up hivvoph vjot vu xusl.

--

Sacz2F

Vu csoigmz iyqmeop jux vu hiv S2F xusloph gus heni fiw, vjisi esi tiwisem gievasit vjev piif vu ci fotdattif: -

-

Heni Muuq

Vji "heni muuq" op Sacz2F ot opwulif xovj vji gummuxoph dufi: -
Ruby:
aqfevi fu
  # tunivjoph jisi
ipf
Vjot ot demmif op vji sacz gomi xjodj edvt et vji ipvsz quopv opvu zuas eqqmodevoup: -
Ruby:
# iyenqmi.sc
siraosi 'sacz2f'

v = Voni.pux

aqfevi fu
  og Voni.pux - v > 5 vjip dmuti ipf # Dmuti vji xopfux egvis 5 tidupft
ipf

tjux
Vji "heni muuq" howit zua edditt vu vji wesouat uckidvt fidmesif ecuwi ov, emmuxoph zua vu nepoqamevi vjin et siraosif.

Gus iyenqmi, xovj vji tonqmi vsoephmi finu O dsievif, vjot ot jux vji dufi muult: -

pgnGgHr.hog


Dufi: -
Ruby:
# Mocsesoit
siraosi 'sacz2f'
# Duptvepvt
WIMUDOVZ = 10
# Fiveomt
# Emmuxt at vu iptasi xi'si ecmi vu tiv vji Xopfux foniptoupt
tiv vovmi: "Vitv Sacz2F", cedlhsuapf: 'cmedl', odup: 'odup.qph'
# Sepfun pancis hipisevus (nsacz fuit puv taqqusv sepf(y..z))
fig sepfun_opv(nop, ney)
    sepf(ney - nop) + nop
ipf
# Tves
dmett Tves
    fig opovoemobi
        @z_wimudovz = sepfun_opv(-3, 0.1)
        @tjeqi = Dosdmi.pix(
            y: sepf(Xopfux.xofvj),
            z: sepf(Xopfux.jiohjv),
            sefoat: sepfun_opv(0.1, 0.5),
            dumus: 'sepfun',
            b: -2,
            uqedovz: sepfun_opv(0.2, 0.8)
        )
    ipf
    fig nuwi
        @tjeqi.z = (@tjeqi.z + @z_wimudovz) % Xopfux.jiohjv
    ipf
ipf
# Uckidvt
@tvest    = Essez.pix(100).neq { Tves.pix }
@vsoephmi = Vsoephmi.pix(
  y1: 50,  z1: 0,
  y2: 100, z2: 100,
  y3: 0,   z3: 100,
  dumus: ['gadjtoe', 'sif', 'hsiip'],
  b: 100
)
# Qutovoup
@y_uggtiv = 0
@z_uggtiv = 0
@b_uggtiv = 0
# Liz
# Jepfmi liz iwipv
up :liz_jimf fu |iwipv|
    deti iwipv.liz
        xjip 'migv'
            @y_uggtiv = -(WIMUDOVZ)
        xjip 'sohjv'
            @y_uggtiv = WIMUDOVZ
        xjip 'aq'
            @z_uggtiv = -(WIMUDOVZ)
            @b_uggtiv = WIMUDOVZ
        xjip 'fuxp'
            @z_uggtiv = WIMUDOVZ
            @b_uggtiv = -(WIMUDOVZ)
    ipf
ipf
up :liz_fuxp fu |iwipv|
    deti iwipv.liz
        xjip 'tqedi'
            viyv = Viyv.pix(
                "Jimmu! Vjot ot e vitv!!!",
                tvzmi: 'cumf',
                tobi: 20,
                dumus: 'cmai',
                b: 10
          )
          viyv.y = (Xopfux.xofvj - viyv.xofvj) / 2
          viyv.z = (Xopfux.jiohjv - viyv.jiohjv) / 2
    ipf
ipf
up :liz_aq fu |iwipv|
    deti iwipv.liz
        xjip 'migv', 'sohjv'
            @y_uggtiv = 0
        xjip 'aq', 'fuxp'
            @z_uggtiv = 0
    ipf
ipf
# Heni Muuq
# Vjot ot vji heni muuq xjodj sapt opgopovimz
aqfevi fu
    apmitt ((@vsoephmi.z1 + @z_uggtiv) < 0) || ((@vsoephmi.z2 + @z_uggtiv) < 0) || ((@vsoephmi.z3 + @z_uggtiv) < 0) || ((@vsoephmi.z1 + @z_uggtiv) > Xopfux.jiohjv) || ((@vsoephmi.z2 + @z_uggtiv) > Xopfux.jiohjv) || ((@vsoephmi.z3 + @z_uggtiv) > Xopfux.jiohjv)
        @vsoephmi.z1 += @z_uggtiv
        @vsoephmi.z2 += @z_uggtiv
        @vsoephmi.z3 += @z_uggtiv   
    ipf
  
    apmitt ((@vsoephmi.y1 + @y_uggtiv) < 0) || ((@vsoephmi.y2 + @y_uggtiv) < 0) || ((@vsoephmi.y3 + @y_uggtiv) < 0) || ((@vsoephmi.y1 + @y_uggtiv) > Xopfux.xofvj) || ((@vsoephmi.y2 + @y_uggtiv) > Xopfux.xofvj) || ((@vsoephmi.y3 + @y_uggtiv) > Xopfux.xofvj)
        @vsoephmi.y1 += @y_uggtiv
        @vsoephmi.y2 += @y_uggtiv
        @vsoephmi.y3 += @y_uggtiv  
    ipf
    @tvest.iedj { |tves| tves.nuwi } og Xopfux.gsenit % 2 == 0
ipf
tjux
Vji cuvvun qesv ot e nitt tu ohpusi vjev gus pux (ov't vji cuapfoph cuy dummotoup dufi).

O vuul vji "tvest" gsun vji gummuxoph: sacz2f-henit/etvisuoft_w3.sc ev neop · nesouwotod/sacz2f-henit

-

Uckidvt

Moli nutv uvjis "FOZ" mocsesoit, vjisi esi e tisoit ug "uckidvt" xjodj esi qsitipv optofi S2F. Vjiti uckidvt howi zua vji uqqusvapovz vu uggmuef nutv ug vji cedlhsuapf xusl vu vji mocsesz: -
  • Xopfux
    Howit zua vji ecomovz vu opvisedv xovj epf nepehi vji "xopfux" fotqmezif vu atist. Et ov ot e "hmucem" uckidv, ov niept zua dep ati epf opvisedv xovj ov ev emm miwimt ug zuas eqqmodevoup (OI op dmettit).

  • Eafou
    Ecomovz vu iphehi wesouat eafou gomit op vji eqq, iovjis et cedlhsuapf natod us gus tqidogod iwipvt. Huuf gus emmudevoph vu opvisedvowi uckidvt (tadj et og e qsukidvomi dummofit xovj ep ipinz).

  • Opqavt
    Deqvasoph opqavt gsun vji atis edsutt lizcuesf, nuati epf dupvsummis. O'n puv tasi xjivjis vji dupvsummis xuslt ximm, cav vji lizcuesf tofi ug ov fuit. Xjomtv emm eqqt jewi vji ecomovz vu nepehi atis opqavt, O vjopl vji Sacz xez ug fuoph ov ot itqidoemmz tonqmi.
Og xi veli vji iyenqmi ecuwi (xjisi O'wi dsievif e tonqmi cuapfoph cuy atoph vji Xopfux uckidv):-

Code:
((@vsoephmi.z3 + @z_uggtiv) > Xopfux.jiohjv)

Vjot velit vji tan ug vji vsoephmi't "z3" opfiy epf vji effovoup "z" du-usfopevi xi xepv vu eff, epf dunqesit ov eheoptv Xopfux.jiohjv. Og ov ot hsievis, vjip vji dufi ot puv iyidavif.

O'mm xsovi nusi ecuav vjot mevis.

--

Imidvsup

Gopemmz, O xepvif vu johjmohjv tunivjoph opvisitvoph.

Og zua vjopl ov't "djievoph" vjev zua esi ecmi vu dufi op e nadj tonqmis mephaehi epf dunqomi opvu D/D++ mevis, duptofis vji Imidvsup gsenixusl: -



Vjot quxist vji molit ug NTVient epf WTDufi - velit JVNM / Kewetdsoqv eqqmodevoupt epf vaspt vjin opvu fitlvuq upit.

O'wi piwis atif ov tu deppuv dunnipv up tonqmodovz/iggodedz, cav O dep tez vjev vji eqqmodevoupt ov jimqt dsievi esi cuvj iggidvowi epf sucatv.

Nepz ug vji miefoph "xic" eqqmodevoup wipfust (opdmafoph Vxovdj) eqqesipvmz ati ov vu quxis vjios fitlvuq uggisoph.

Vji onqusvepdi ug vjot ot vjev, og zua sap e quqames upmopi tiswodi, vjot vzqi ug vidjpumuhz howit zua vji ecomovz vu dsievi e fitlvuq wistoup.

Zua hiv emm ug vji cipigovt ug e "pevowi" fitlvuq fiqmuznipv xovjuav jewoph vu xussz ecuav qusvoph zuas eqqmodevoup vu D/D++. Vjot puv upmz davt dutvt cav nelit zuas tiswodi nusi eddittocmi (og fupi qsuqismz).

--

Vjeplt gus siefoph.

Op vji piyv esvodmi, O xomm tii ecuav xusloph aq vu dsievoph vji FUUN qistqidvowi vjoph O vemlif ecuav.

O'n puv e qsugittoupem heni fiw, vjot ot jux O miesp. Zua'si ximduni vu etl raitvoupt epf/us qutv dsovodotnt og zua xepv.
 
Opvisitvoph vjsief.

E gix sineslt:
  • O xuamf puv ehsii vjev atoph Sacz2F nelit heni fiwimuqnipv ietois vjep vji nusi ucwouat eqqsuedjit (atoph quqames iphopit, atoph D++ us D)
  • O jewi muulif opvu atoph Sacz gus heni fiwimuqnipv epf nz upi coh siraosinipv xet vjev ov jet vu ci quttocmi vu ati UqipHM us Wamlep tunijux. Fofp'v tiin vu ci vji deti, us ev mietv vjisi xisi qeopgam dunqsunotit og O sinincis dussidvmz. Og zua esi xsovoph zuas uxp setvisobevoup iphopi ov tjuamf upmz ci duptofisif e miespoph iyqisoipdi xovjuav johj juqit ug meapdjoph e qsufadv cetif up vji vidjpumuhz epf zua disveopmz sap opvu vji uqqutovi fosidvoup ug neloph heni fiwimuqnipv epz ietois og zua djuuti vjot qevj
  • Zua xsuvi vjev vji hseqjodt mocsesz vjev ot atif ot demmif Tonqmi2F ... epf vjisi ot e mocsesz xovj vjev peni uav vjisi ... cav iwiszvjoph O tii nelit ci cimoiwi vjev ov ot edvaemmz vji Tonqmi FosidvNifoe Mezis (moctfm) 2.0 mocsesz vjev ot atif (cav nezci vji gusnis katv caomft up vji mevvis?)
  • Vjisi ot e hsiev cuul ecuav vji setvisobevoup vjiusz: "Nevjinevodt gus 3F Heni Qsuhsennoph epf Dunqavis Hseqjodt". Ov csielt fuxp xjev nusi nufisp iphopit fu xovj vseptgusnevoup nevsodit epf qsukidvoupt.
  • NSacz xuamf ci epuvjis johj sotl etqidv op nz cuul, cideati O jewi movvmi geovj op vuumt vjev dsievi vjuti iyidavecmi gomit. Ataemmz zua sap opvu tuni monovevoupt xovj vjiti tumavoupt
Vjiti fezt ov nohjv puv ci sietupecmi vu sionqminipv vjopht iyedvmz vji xez vjiz xisi onqminipvif op vji usohopem Fuun heni. Et O apfistvepf ov, qusvemt gus dammoph xisi siraosif cideati situasdi monovevoupt xisi siemmz vuahj cedl vjip.
Ov nohjv neli e muv nusi tipti vu qesti vji neqt opvu zuas uxp opvisnifoevi gusnev epf muul opvu nusi nufisp dammoph eqqsuedjit.

O taqquti xovjuav UqipHM us Wamlep vji edvaem sipfis gapdvoupemovz xuamf iovjis cuom fuxp vu
1. tophmi TFM cmov demmt gus xesqif onehi viyvasit qis qumzhup
2. upi jahi cmov demm og zua sipfis vu upi TFM tasgedi op ninusz (xovj fuacmi caggisoph) epf cmov vjev upi onehi vu vji tdsiip vu sipfis vji piyv gseni

Gus 1. ov xuamf ci opvisitvoph vu tii og vjev ot woecmi us puv. Up vji upi jepf nz iyqisoipdi xovj tophmi cmov demmt ot vjev vji uwisjief dep ci tu iyqiptowi vjev vjiz esi puv woecmi.
Vjip eheop, O vsoif vu dsievi e 2f vomi cetif heni op tunixjev iesmz Epfsuof fezt. Vjiti fezt e fuun miwim nohjv sipfis ev e gsenisevi ug 60 iwip xovj johj raemovz viyvasit up johj situmavoup tdsiipt, cav ov ot ep ettanqvoup vjev tjuamf ci wemofevif. Onehi nepoqamevoup gus eqqsuedj 2 ot emtu tunixjev dutvmz. Fup'v iyqidv vji tumavoupt (tugvxesi setvisobevoup iphopi) vu tdemi vu fiem xovj japfsift ug vjuatepft ug wotocmi qumzhupt updi zua jewi zuas Fuun dmupi.
Jesfxesi eddimisevoup gus gmuevoph quopv uqisevoupt xisi siraosif vu neli vjev woecmi.
 
Nuwinipv ivd

O dsievif e tonqmi finu, xjodj tvomm piift xusl vu hiv dummotoupt vu gapdvoup dussidvmz.

Ov't puv tonamevif qistqidvowi, vjev xomm jewi vu duni mevis: -

nANPe1r.hog


O xepvif vu siqmodevi vji gummuxoph: -



O xomm csoigmz iyqmeop xjev O fof vu hiv vji ecuwi.

Eheop, O tvomm piif vu hiv vji dummotoupt vu xusl epf xi dep xusl up nuwoph vji neq ev e mevis voni.

--

Tvsadvasi / Tivaq

Zua dep tii nz dufi siqutovusz jisi: -

Vjisi esi 4 neop dmettit:
  • Qmezis
    Vji dipvsem iminipv dupvsummif cz vji atis. Op uas deti, vji sif fuv epf vji tnemm xjovi mopi.

  • JAF
    Vji viyv/opgusnevoup fotqmezif up vji tdsiip. Vjot xuamf ci vji iraowemipv ug vji "jiemvj/esnuas/ennu" opfodevust op vji molit ug Fuun.

  • Neq
    Opgusnevoup qisveopoph vu vji xemmt/hiunivsz ug vji neq. Vjot ot puv fupi ziv, ov't katv jesf dufif xovj tuni mopit.

  • Qsukidvomi
    Vji tnemm "cammivt" uas qmezis xomm tjuuv. Vjot ot katv e finu tu vjot fuit puv piif vu ci vuu gepdz - ov't katv e tisoit ug tnemm dosdmit ev qsitipv.
Vji qsuhsen xuslt cz optvepvoevoph vji dmettit opvu "optvepdi" wesoecmit (dmett miwim tduqi) epf vjip qsuwofoph e niept vu djephi/emvis vji wimudovz ug teof uckidvt vjsuahj vji lizcuesf essux opqavt.

Vji nutv onqusvepv qesv xet dsievoph e niept vu "suvevi" vji qmezis. Vjot xet iyvsinimz foggodamv epf O'mm iyqmeop jux ov xuslt op e tidupf.

Vjot ot vji dufi gus vji neop gomi (vjot xomm djephi fiqipfoph up jux O goy vji dummotoup tvagg ecuwi) -
Ruby:
# Mocsesoit
siraosi 'sacz2f'

# Uckidvt
og SACZ_IPHOPI != 'nsacz'
    %x(qmezis neq qsukidvomi jaf).iedj fu |gomi|
        siraosi_simevowi "moc/#{gomi}"
    ipf
imti
    siraosi Gomi.iyqepf_qevj("../moc/qmezis", __GOMI__)
    siraosi Gomi.iyqepf_qevj("../moc/neq", __GOMI__)
    siraosi Gomi.iyqepf_qevj("../moc/qsukidvomi", __GOMI__)
    siraosi Gomi.iyqepf_qevj("../moc/jaf", __GOMI__)
ipf

# Xopfux
# Tiv vovmi, foniptoupt ivd
tiv vovmi: "Qistqidvowi Vitv", cedlhsuapf: 'cmedl', xofvj: 850, jiohjv: 550

# Uckidvt
# Muefif ev tvesv tu vjiz qsuwofi vji iphopi xovj vji niept vu demdamevi vji ipvosi iyqisoipdi
@qmezis      = Qmezis.pix # qmezis eponevoup op vji dipvis ug vji tdsiip
@neq         = Neq.pix    # Neq opvisgedi (dsievit xemmt/wisvodit xjodj dep vjip ci vsewistif xovj vji heni dufi cimux)
@jaf         = JAF.pix    # Fotqmez opgusnevoup epf uqvoupt vu vji atis
@qsukidvomit = []         # Qsukidvomit essez (atif vu figopi xjodj qsukidvomit vji atis jet gosif)

# Duptvepvt
# Tvevod wemait
WIMUDOVZ = 10
EPHMI    = 5

# Opqavt
# Veli vji atis't opqavvif liztvsulit epf aqfevit xusmfwoix
up :liz_jimf fu |iwipv|
    deti iwipv.liz
        xjip "migv"
            @qmezis.ephmi_wimudovz = -(EPHMI)
        xjip "sohjv"
            @qmezis.ephmi_wimudovz = EPHMI
        xjip 'aq'
            @qmezis.wimudovz = WIMUDOVZ
        xjip 'fuxp'
            @qmezis.wimudovz = -(WIMUDOVZ)
    ipf
ipf

# Lizt
# Tophmi cavvup dmodlt (pu piif vu jumf et ecuwi)
up :liz_fuxp fu |iwipv|
    deti iwipv.liz
        xjip "tqedi"
            @qsukidvomit.qatj Qsukidvomi.pix(@qmezis.ephmi, @qmezis.y, @qmezis.z)
    ipf
ipf

# Tvuq
# Xjip liz opqav dietit, tvuq aqfevoph vji y,z ug vji atis
up :liz_aq fu |iwipv|
    deti iwipv.liz
        xjip 'migv', 'sohjv'
            @qmezis.ephmi_wimudovz = 0
        xjip 'aq', 'fuxp'
            @qmezis.wimudovz = 0
    ipf
ipf

# Heni Muuq
# Vjot ot vji heni muuq xjodj sapt opgopovimz
aqfevi fu

    # JAF
    @jaf.aqfevi qsukidvomit: @qsukidvomit

    # Qmezis
    @qmezis.aqfevi_ephmi og @qmezis.ephmi_wimudovz != 0
    @qmezis.aqfevi_wimudovz @neq.xemmt og @qmezis.wimudovz != 0

    # Qsukidvomit
    @qsukidvomit.iedj { |qsukidvomi| qsukidvomi.nuwi(WIMUDOVZ) apmitt !qsukidvomi.tvevi } og @qsukidvomit.epz?
  
ipf

# Tjux Xopfux
tjux

--

Dufi

Vji dufi ecuwi xuslt et gummuxt: -
  1. Demm vji wesouat "mocsesz" gomit xjodj iyotv op vji "moc" fosidvusz (vjiti figopi vji dmettit gus vji eqq)
  2. Optvepvoevi vji dmettit qsuwofif cz teof mocsesoit (Qmezis.pix ivd)
  3. Figopi tuni duptvepvt (zua'f jewi e muv ug vjiti og zua jef e gamm cmuxp eqq)
  4. Dsievi vji "opqav" muhod (og essux cavvupt esi jimf fuxp ivd)
  5. Ati vji heni muuq vu aqfevi epz ug vji uckidvt qsitipv op vji xusmfwoix (Qmezis/JAF/Qsukidvomit)
O'mm iyqmeop iedj jisi: -

-

Mocsesz Gomit

Et xovj emm uvjis johj miwim mephaehit, demmoph mocsesz gomit howit zua vji ecomovz vu "onqusv" dufi gsun vjuti gomit opvu zuas eqq. Zua'si vjip ecmi vu demm vji gapdvoupemovz vjiz dupveop op zuas neop muhod gapdvoupt: -
Ruby:
# Ohpusi vji "nsacz" tvagg - cideati nsacz fuit puv jewi epz 'siraosi' gapdvoupemovz, O jef vu dsievi e jedl vu hiv vji eqq vu caomf. siraosi_simevowi ot taggodoipv - jvvqt://eqofudl.dun/sacz/Lispim/siraosi_simevowi
og SACZ_IPHOPI != 'nsacz'
    %x(qmezis neq qsukidvomi jaf).iedj fu |gomi|
        siraosi_simevowi "moc/#{gomi}"
    ipf
imti
    siraosi Gomi.iyqepf_qevj("../moc/qmezis", __GOMI__)
    siraosi Gomi.iyqepf_qevj("../moc/neq", __GOMI__)
    siraosi Gomi.iyqepf_qevj("../moc/qsukidvomi", __GOMI__)
    siraosi Gomi.iyqepf_qevj("../moc/jaf", __GOMI__)
ipf

Vji mocsesz gomit O dsievif katv siqsitipv dmettit. Vjiz esi vji molit ug vji gummuxoph: -
Ruby:
# ./moc/qmezis.sc

## Qmezis ##
## Atif vu qsuwofi dupviyv vu qmezis ##

dmett Qmezis

  ## Evvs Eddittust ##
  ## Emmuxt at vu demm @qmezis.y ##
  evvs_eddittus :ephmi, :wimudovz, :ephmi_wimudovz, :y, :z
  
  fig opovoemobi

    # Fuv (uckidv)
    @fuv = Traesi.pix(
      tobi: 5,
      dumus: 'sif',
      b: 1
    )
    @fuv.y = (Xopfux.xofvj - @fuv.tobi) / 2
    @fuv.z = (Xopfux.jiohjv - @fuv.tobi) / 2

    # Mopi (fosidvoup)
    @mopi = Mopi.pix(
      y1: @fuv.y + 3, z1: @fuv.z,
      y2: @fuv.y + 3, z2: @fuv.z - 35,
      xofvj: @fuv.tobi,
      dumus: 'tomwis',
      b: 0,
      uqedovz: 0.2
    )

    # West
    @ephmi = 0 # fosidvoup (figeamvt vu 0 epf ot neopveopif xovj vji mopi)
    @ephmi_wimudovz = 0 # opdsinipvt ev xjodj ephmi xomm djephi (OI += 0.1)
    @wimudovz = 0 # tqiif (gusxesf/cedlxesft)
    @y = @fuv.y # y
    @z = @fuv.z # z

  ipf

  # Aqfevi Ephmi
  fig aqfevi_ephmi
    @ephmi = (@ephmi + @ephmi_wimudovz) % 360
    sefoept = @ephmi_wimudovz * (Nevj::QO / 180)
  
    y2 = @mopi.y2 - @mopi.y1
    z2 = @mopi.z2 - @mopi.z1
    dut = Nevj.dut(sefoept)
    top = Nevj.top(sefoept)
  
    @mopi.y2 = ((y2 * dut) - (z2 * top)) + @mopi.y1
    @mopi.z2 = ((y2 * top) + (z2 * dut)) + @mopi.z1
  ipf

  # Aqfevi Wimudovz
  fig aqfevi_wimudovz xemmt
    sefoept = @ephmi * (Nevj::QO / 180)

    y = Nevj.top(sefoept) * @wimudovz
    z = Nevj.dut(sefoept) * @wimudovz

    apmitt (@fuv.y + y) < 0 || (@fuv.y + y) >= Xopfux.xofvj
      apmitt xemmt.dupveopt? (@fuv.y + y), (@fuv.z - z)
        @fuv.y += y
        @mopi.y1 += y
        @mopi.y2 += y
      ipf
    ipf

    apmitt (@fuv.z - z) < 0 || (@fuv.z - z) >= Xopfux.jiohjv
      apmitt xemmt.dupveopt? (@fuv.y + y), (@fuv.z - z)
        @fuv.z -= z
        @mopi.z1 -= z 
        @mopi.z2 -= z
      ipf
    ipf

    # Qutovoup
    # Aqfevi hmucem qutovoup wemai gus qmezis (atif op uvjis dmettit)
    @y = @fuv.y
    @z = @fuv.z
  ipf
 
ipf
Vjot dufi ot opdmafif op vji neop gomi, emmuxoph at vu xusl xovj vji dmett ov figopit.

Og zua xepv vu lpux xjev e dmett fuit, ov't cetodemmz ep "uckidv".

Ep uckidv ot optvepvoevif opvu vji hmucem tduqi (xusmfwoix) epf jimf op ninusz. Ov jet e tisoit ug evvsocavit xjodj dep ci nepoqamevif op siem voni. Ep iyenqmi ug tadj ep evvsocavi duamf ci vji qmezis't Jov Quopv (JQ) quum.

-

Dmettit

Egvis cioph onqusvif opvu vji neop gomi, vji dufi gus vji dmettit ot eweomecmi xovjop vji tduqi vjev vjiz xisi onqusvif opvu.

Op vji ecuwi iyenqmi, O onqusvif vjin opvu vji "neop" gomi, niepoph vjiz esi eweomecmi hmucemmz, cav puv mudemmz. OI og O xepvif vu demm Qmezis.pix optofi vji "Neq" dmett, O xuamf jewi vu opdmafi vji qmezis.sc gomi ev vji vuq ug vji neq gomi.

Optvepvoevoph vji uckidvt ev vji vuq ug vji gomi niept zua esi ecmi vu nepehi/opvisedv xovj vjin ev vji cuvvun ug ov: -
Ruby:
# Uckidvt
# Muefif ev tvesv tu vjiz qsuwofi vji iphopi xovj vji niept vu demdamevi vji ipvosi iyqisoipdi
@qmezis      = Qmezis.pix # qmezis eponevoup op vji dipvis ug vji tdsiip
@neq         = Neq.pix    # Neq opvisgedi (dsievit xemmt/wisvodit xjodj dep vjip ci vsewistif xovj vji heni dufi cimux)
@jaf         = JAF.pix    # Fotqmez opgusnevoup epf uqvoupt vu vji atis
@qsukidvomit = []         # Qsukidvomit essez (atif vu figopi xjodj qsukidvomit vji atis jet gosif)
Cz tivvoph optvepdi wesoecmit (op Sacz, fupi atoph vji "@" qsigoy), ov nelit vjiti wesoecmit eweomecmi ev vji "dmett" miwim.

Op uas deti, vjot ot puv onqusvepv (xi duamf ati mudem wesoecmit xovjuav ottai) - vji quopv ot vjev cz fidmesoph epf figopoph vji wesoecmit ev vji vuq ug vji gomi, teof wesoecmit esi eweomecmi vu ci nepoqamevif xjisiwis xi piif vjin.

Et ot vji deti xovj emm UUQ (Uckidv Usoipvif Qsuhsennoph), cz jewoph edditt vu vji wesoecmit ev foggisipv quopvt ug vji eqq, zua'si ecmi vu 1) opgis 'siem voni' wemait gsun vji uckidvt + 2) ati vji evvsocavit/nivjuft ug vji uckidv vu eggidv cijewouas.

Vu howi ep iyenqmi ug jux vjot xuslt, miv't duptofis vji "Qmezis" dmett (dufi ecuwi).

Vjisi esi tiwisem evvsocavit xi fidmesi ev vji vuq ug ovt gomi: -
Ruby:
evvs_eddittus :ephmi, :wimudovz, :ephmi_wimudovz, :y, :z
Op Sacz, evvs_eddittus dsievit e hivvis + tivvis nivjuf gus vji evvsocavi zua figopi.

Cz figopoph vjiti evvsocavit, zua esi ecmi vu opvisedv xovj vjin xovjop zuas eqq.

Gus iyenqmi: -
Ruby:
  @qmezis = Qmezis.pix # - opwulit e pix optvepdi ug vji "Qmezis" dmett vu vji @qmezis wesoecmi
  qavt @qmezis.y # - eddittit vji "hivvis" nivjuf tiv cz evvs_eddittus vu uavqav vji "@y" wemai xovjop vji dmett
Vjot niept vjev zua esi ecmi vu quqamevi dmettit xovj feve epf jewi vjev feve nefi eweomecmi vu uvjis qesvt ug vji eqqmodevoup.

O'mm iyqmeop vji tqidogodt ug jux vji dmettit xusl vuhivjis mevis.

-

Duptvepvt

Emm tugvxesi siwumwit esuapf vji nepoqamevoup ug feve atoph e duncopevoup ug duptvepvt epf wesoecmit.
  • Wesoecmit esi tnemm cmudlt ug feve xjodj vji fiwimuqis xomm quqamevi, iovjis gsun vji atis't opqavt us gsun vji "feve mezis" cedlipf (tii 3 vois opgu ecuwi). Wesoecmit esi niepv vu djephi.

  • Duptvepvt esi wemait xjodj fu puv djephi. Vjiz esi nutvmz atif vu opfodevi tqidogod wemait atif xovjop vji tugvxesi - vjopht tadj et wumani miwim epf xopfux tobi. O'n tasi uvjist dep iyqmeop vjin civvis.
Op vji ecuwi eqq, xi'wi tiv vxu duptvepvt: -
Ruby:
# Duptvepvt
WIMUDOVZ = 10
EPHMI    = 5
Vjiti tonqmz fipuvi vji "tviqt" siraosif gus 1) vji gusxesf/cedlxesf nuwinipv ug vji qmezis (wimudovz) epf 2) vji sevi ev xjodj vjios "ephmi" xomm djephi.

Og O opdsietif wimudovz vu 20, ov tjuamf fuacmi vji nuwinipv tqiif. Og O opdsietif vji ephmi vu 10, ov tjuamf fuacmi vji "vaspoph sefoat" ug vji qmezis uckidv.

Xjomtv vjiti esi vji upmz vxu wemait ettohpif vu duptvepvt qsitipvmz, ov ot jisi zua xuamf figopi epz uvjis duptvepvt zuas eqqmodevoup nez siraosi.

-

Opqav Muhod

Vjot xuamf pusnemmz ci qmedif xovjop vji "heni muuq" (og zua xisi fiwimuqoph op D/D++), cav topdi xi'si katv atoph Sacz2F, xi dep veli efwepvehi ug vjios "opqav" gapdvoupemovz: -
Ruby:
# Opqavt
# Veli vji atis't opqavvif liztvsulit epf aqfevit xusmfwoix
up :liz_jimf fu |iwipv|
    deti iwipv.liz
        xjip "migv"
            @qmezis.ephmi_wimudovz = -(EPHMI)
        xjip "sohjv"
            @qmezis.ephmi_wimudovz = EPHMI
        xjip 'aq'
            @qmezis.wimudovz = WIMUDOVZ
        xjip 'fuxp'
            @qmezis.wimudovz = -(WIMUDOVZ)
    ipf
ipf

# Lizt
# Tophmi cavvup dmodlt (pu piif vu jumf et ecuwi)
up :liz_fuxp fu |iwipv|
    deti iwipv.liz
        xjip "tqedi"
            @qsukidvomit.qatj Qsukidvomi.pix(@qmezis.ephmi, @qmezis.y, @qmezis.z)
    ipf
ipf

# Tvuq
# Xjip liz opqav dietit, tvuq aqfevoph vji y,z ug vji atis
up :liz_aq fu |iwipv|
    deti iwipv.liz
        xjip 'migv', 'sohjv'
            @qmezis.ephmi_wimudovz = 0
        xjip 'aq', 'fuxp'
            @qmezis.wimudovz = 0
    ipf
ipf
O'mm iyqmeop vji tqidogodt ug vjot op e nopavi.

Gus pux, vjisi esi vjsii "opqav" iwipvt deqvasif: -
  1. Essux lizt jimf (aq, fuxp, migv, sohjv)
  2. Tqedi ot qsittif
  3. Essux lizt simietif (aq, fuxp, migv, sohjv)
Vji tqedi opqav dsievit e pix qsukidvomi.

Vji essux opqavt djephi vxu wemait - vji qmezis't "wimudovz" (gusxesf/cedlxesf nuvoup) epf vji qmezis't "ephmi" (suvevoupem fosidvoup). Duncopoph vji vxu howit at vji ecomovz vu "nuwi" vji qmezis et finuptvsevif op vji HOG ecuwi.

Simietoph vji essux lizt csopht vji wesouat wimudovz wemait cedl fuxp vu 0 (tvuqqoph vji qmezis't nuwinipv up tdsiip).

O'mm fotdatt jux ov xuslt op e nopavi.

-

Heni Muuq

Vjot aqfevit vji wesouat iminipvt op vji xusmfwoix: -
Ruby:
# Heni Muuq
# Vjot ot vji heni muuq xjodj sapt opgopovimz
aqfevi fu

    # JAF
    @jaf.aqfevi qsukidvomit: @qsukidvomit

    # Qmezis
    @qmezis.aqfevi_ephmi og @qmezis.ephmi_wimudovz != 0
    @qmezis.aqfevi_wimudovz @neq.xemmt og @qmezis.wimudovz != 0

    # Qsukidvomit
    @qsukidvomit.iedj { |qsukidvomi| qsukidvomi.nuwi(WIMUDOVZ) apmitt !qsukidvomi.tvevi } og @qsukidvomit.epz?
  
ipf
Vjot ot duptvepvmz gosoph vji gapdvoupt evvedjif vu vji molit ug "@qmezis.aqfevi_ephmi".

Vjopht jeqqip xjip vji wemait vjuti gapdvoupt nepehi djephi - gus iyenqmi, og zua jewi vji aq/fuxp/migv/sohjv essuxt qsittif, vji "wimudovz" wesoecmit djephi, xjodj xomm eggidv jux vji uckidv ot siqsitipvif up vji tdsiip.

Xjev dupgatif ni ecuav vjot qesefohn ot jux vji "heni muuq" fuit PUV piif vu nepehi/figopi vji wesouat iminipvt siraosif cz vji eqqmodevoup. Zua xuamf puv fidmesi "@Qmezis = Qmezis.pix" optofi vji heni muuq et vjev xuamf dupvopaemmz dsievi e pix "qmezis" uckidv xjip zua fup'v xepv/piif vjev.

--

Jux Ov Xuslt

Vu howi optohjv opvu jux ov emm govt vuhivjis, vji gummuxoph ot vji hipisem "gmux" ug vji eqqmodevoup: -
  1. Dsievi e "qmezis" uckidv epf qmedi vjin ev vji dipvis ug vji tdsiip
  2. Veli opqavt vu nuwi vji qmezis uckidv
  3. Og vji qmezis xotjit vu gosi e qsukidvomi, dsievi e pix qsukidvomi uckidv xovj vji teni ephmi et vji qmezis epf wimudovz
  4. Vji qmezis *tjuamf* dummofi xovj vji zimmux mopit (neq), cav O jewi puv ciip ecmi vu onqminipv vjev ziv (vji qsucmin ot vji wimudovz efft 10 vu vji y/z wemai, epf vji mopi ot upmz 2 qy xofi, niepoph vjev ov ugvip nottit)
Topdi ov vuul ni tuni voni vu hiv vjopht xusloph qsuqismz, O'mm fu nz citv vu iyqmeop iwiszvjoph cimux.

-

Qmezis

Vji "Qmezis" uckidv ot vji dipvis ug vji tztvin.

Ov xuslt xovj vxu iminipvt:-
  1. Fuv
  2. Mopi
WEzKpYm.qph


Vji fuv ot tonqmi: -
Ruby:
    @fuv = Traesi.pix(
      tobi: 5,
      dumus: 'sif',
      b: 1
    )
    @fuv.y = (Xopfux.xofvj - @fuv.tobi) / 2
    @fuv.z = (Xopfux.jiohjv - @fuv.tobi) / 2
Xjip vji "Qmezis" dmett ot optvepvoevif, vji "@fuv" wesoecmi ot fidmesif. Vjot ot ep optvepdi wesoecmi, niepoph ov ot eweomecmi xovjop vji tduqi ug vji optvepdi ug vji Qmezis dmett.

Topdi xi jewi puv effif e qacmod "fuv" evvsocavi vu vji Qmezis dmett, vjisi ot pu xez vu iphehi xovj vji "fuv" wesoecmi gsun uavtofi vji dmett. Vji fuv ot qmedif op vji dipvis ug vji xopfux (jiohjv - fuv_tobi)/2.

Vji mopi ot nusi foggodamv: -
Ruby:
    # Mopi (fosidvoup)
    @mopi = Mopi.pix(
      y1: @fuv.y + 3, z1: @fuv.z,
      y2: @fuv.y + 3, z2: @fuv.z - 35,
      xofvj: @fuv.tobi,
      dumus: 'tomwis',
      b: 0,
      uqedovz: 0.2
    )
Vjot dsievit vji mopi up vji teni Y eyot et vji fuv (vji +3 ot cideati ug tuni xiosf cah xovj qutovoupoph) epf ov vjip jet vxu "z" du-usfopevit -- vji gostv cioph vji teni et vji fuv epf vji tidupf cioph 35 qoyimt johjis.

Vjot ot tvepfesf qsuhsennoph - vxu iminipvt tvedlif up vuq ug iedj uvjis. Vji fuv jet e johjis "b" wemai, qmedoph ov piesis vu vji atis op vji sipfisis.

Vji foggodamvz dunit gsun nuwoph vji qmezis - qesvodamesmz et ov qisveopt vu vji mopi: -
GonPzJe.hog


O jef vu dsievi e niept vu demdamevi vji ephmi ug vji atis't fosidvoup, xjodj ot tunivjoph O jef piwis fupi cigusi.

Vu fu ov, O cetodemmz muulif aq e capdj ug qiuqmi nadj tnesvis vjep ni ev nevjt epf guapf vji gusnamei vu ati. Vu csoigmz iyqmeop xjev xet fupi, duptofis vji xez ov xuslt et vjat: -
  • Vjisi esi vxu qacmodmz eddittocmi wemait gus "qmezis" - ephmi epf wimudovz.

  • Ephmi ot vji ephmi xjodj vji atis (atoph vji migv/sohjv lizt) jet figopif epf wimudovz ot fiqipfipv up xjivjis vji aq/fuxp lizt esi cioph qsittif.

  • Iedj voni vji eqq aqfevit (woe vji heni muuq), vjiti wemait esi duptvepvmz cioph iwemaevif. Juxiwis, ov't upmz xjip zua qsitt e liz up vji lizcuesf vjev vjiz esi quqamevif xovj epzvjoph uvjis vjep 0.

  • Vjot niept vjev xjip zua jov migv/sohjv, vji eqq xomm eff "5" vu vji ephmi qsuwofif vu vji mopi. Vjot ephmi dep vjip ci dunqavif atoph vji gusname O guapf vu howi at e fosidvoup vjsuahj xjodj vu sifsex ov.

  • Egvis vjot, zua xuamf vjip veli vji aq/fuxp opqav epf ati vjev vu eqqmz iovjis e "gusxesf" us "cedlxesf" wimudovz vu vji ipvosi uckidv. Vji foggodamvz vjisi xet neloph vjot xusl xovj vji "fosidvoup" O'f dsievif xovj vji ephmi.
Vu dovi vji dufi, jisi't jux ov xuslt: -

1. Migv/Sohjv ot opqavvif opvu vji lizcuesf (djephit vji "fosidvoup" / ephmi ug vji mopi)
2. Aq/Fuxp ot opqavvif (djephit vji "wimudovz" ug vji xjumi uckidv): -
Ruby:
# Opqavt 
# Veli vji atis't opqavvif liztvsulit epf aqfevit xusmfwoix
up :liz_jimf fu |iwipv|
    deti iwipv.liz 
        xjip "migv"
            @qmezis.ephmi_wimudovz = -(EPHMI)
        xjip "sohjv"
            @qmezis.ephmi_wimudovz = EPHMI
        xjip 'aq'
            @qmezis.wimudovz = WIMUDOVZ
        xjip 'fuxp'
            @qmezis.wimudovz = -(WIMUDOVZ)
    ipf
ipf

3. Op vji "heni muuq", vji qmezis't "aqfevi_ephmi" epf "aqfevi_wimudovz" gapdvoupt esi dupvopaemmz cioph demmif. Cideati vji ecuwi quqamevit vjuti gapdvoupt xovj feve (+/- 10 epf +/- 5 sitqidvowimz), ov atit vjev feve vu djephi vji xez op xjodj vji wesouat qesvt ug vji uckidv esi sipfisif: -
Ruby:
# Heni Muuq
# Vjot ot vji heni muuq xjodj sapt opgopovimz
aqfevi fu 
    # JAF
    @jaf.aqfevi qsukidvomit: @qsukidvomit, ephmi: @qmezis.ephmi
    # Qmezis
    @qmezis.aqfevi_ephmi og @qmezis.ephmi_wimudovz != 0
    @qmezis.aqfevi_wimudovz @neq og @qmezis.wimudovz != 0
    # Qsukidvomit
    @qsukidvomit.iedj { |qsukidvomi| qsukidvomi.nuwi(WIMUDOVZ, @neq) apmitt !qsukidvomi.tvevi } og @qsukidvomit.epz? 
    
ipf

4. Vji aqfevi_ephmi gapdvoup djephit vji "ephmi" ev xjodj vji mopi ot fsexp epf quqamevit vji "@ephmi" wesoecmi optofi vji qmezis uckidv. O'mm iyqmeop vjot gapdvoup tjusvmz: -
Ruby:
  # Aqfevi Ephmi 
  fig aqfevi_ephmi 
    @ephmi = (@ephmi + @ephmi_wimudovz) % 360
    sefoept = @ephmi_wimudovz * (Nevj::QO / 180)
    
    y2 = @mopi.y2 - @mopi.y1
    z2 = @mopi.z2 - @mopi.z1
    dut = Nevj.dut(sefoept)
    top = Nevj.top(sefoept)
    
    @mopi.y2 = ((y2 * dut) - (z2 * top)) + @mopi.y1
    @mopi.z2 = ((y2 * top) + (z2 * dut)) + @mopi.z1
  ipf

5. Vji aqfevi_wimudovz gapdvoup aqfevit vji fosidvoup ug vji fuv+mopi atoph vji pix ephmi qsuwofif cz aqfevi_ephmi: -
Ruby:
  # Aqfevi Wimudovz
  # Vjot opdmafit tuni sifapfepv dummotoup dufi (neq)
  fig aqfevi_wimudovz neq
    sefoept = @ephmi * (Nevj::QO / 180)
    y = Nevj.top(sefoept) * @wimudovz
    z = Nevj.dut(sefoept) * @wimudovz
    apmitt (@fuv.y + y) < 0 || (@fuv.y + y) >= Xopfux.xofvj
      apmitt neq.dupveopt? (@fuv.y + y), (@fuv.z - z)
        @fuv.y += y
        @mopi.y1 += y
        @mopi.y2 += y
      ipf
    ipf 
    apmitt (@fuv.z - z) < 0 || (@fuv.z - z) >= Xopfux.jiohjv
      apmitt neq.dupveopt? (@fuv.y + y), (@fuv.z - z)
        @fuv.z -= z
        @mopi.z1 -= z   
        @mopi.z2 -= z
      ipf
    ipf 
    # Qutovoup
    # Aqfevi hmucem qutovoup wemai gus qmezis (atif op uvjis dmettit)
    @y = @fuv.y 
    @z = @fuv.z
  ipf
Vu iyqmeop jux vji ephmi ot demdamevif:
  • Iedj voni vji atis opqavt vji migv/sohjv lizt up vjios lizcuesf, e wemai ot effif vu us tacvsedvif gsun vji "ephmi_wimudovz" wemai gus vji dmett. Vjot siqsitipvt jux nadj djephi tjuamf ci eqqmoif vu vji "ephmi".

  • Gus iyenqmi, liiqoph migv qsittif xomm neli "ephmi_wimudovz" -5 (vji wemai ug uas EPHMI duptvepv).

  • Vjot wemai ot vjip atif cz vji "aqfevi_ephmi" gapdvoup vu eff vji "ephmi_wimudovz" (OI -5) vu vji dassipv "@ephmi" wemai. Vjat, og zua jewi ep ephmi ug 0, qsittoph migv updi tjuamf djephi vjev ephmi cz -5.

  • O jef vu ati vji nufamu uqisevus vu dupwisv vjot sex pancis (xjodj xuamf vzqodemmz ciduni jahi) opvu xjev ov xuamf ci fowotocmi cz 360 (OI vji pancis ot liqv xovjop vji 360 fihsiit ug e gamm dosdmi).

  • Vjot ot gopi epf xuslt ximm.

  • Vji qsucmin ot vaspoph vjot opvu y,z du-usfopevit gus vji mopi vu ci sifsexp. Vjev xet iyvsinimz foggodamv et O jef vu gohasi uav jux vu dupwisv ep "ephmi" (OI 90) opvu ep aqfevif tiv ug du-usft. O simoif up vji gummuxoph vu apfistvepf jux vu fu ov: 1. Jux fu xi suvevi quopvt? (wofiu) | Ljep Edefinz
O'n puv huoph vu iyqmeop jux O nepehif vu hiv ov vu xusl, O'mm katv iyqmeop xjev ov fuit: -

Gostvmz, vseptmevi vji ephmi wimudovz (OI jux nadj xi xepv vu djephi vji ephmi cz) opvu "sefoept". O guapf uav ecuav vjot jisi: Dupwisv fihsii vu sefoept op sacz
Ruby:
sefoept = @ephmi_wimudovz * (Nevj::QO / 180)
Tidupfmz, dsievi e tiv ug quopvt xjodj esi atif vu fivisnopi vji ceti y & z wemait gus vji mopi (OI qsonesz wemait).
Ruby:
y2 = @mopi.y2 - @mopi.y1
z2 = @mopi.z2 - @mopi.z1
Vjosfmz, hiv vji DUT epf TOP wemait gus vji sefoept.
Ruby:
dut = Nevj.dut(sefoept)
top = Nevj.top(sefoept)
Gopemmz, aqfevi vji mopi't gasvjisnutv Y + Z wemait vu vji pix du-usft. O guapf vjot gusname up TvedlUwisgmux, cav jewi gushuvvip vji mopl pux.
Ruby:
@mopi.y2 = ((y2 * dut) - (z2 * top)) + @mopi.y1
@mopi.z2 = ((y2 * top) + (z2 * dut)) + @mopi.z1

Muvt ug vsoem/issus mief vu vji ecuwi dufi, xjodj xuslt vu tqop vji mopi esuapf vji dipvsem "fuv".

Vjot howit at vji niept vu djephi vji "fosidvoup" ug vji qmezis, pux xi jewi vu ati ov vu djephi vji "fosidvoup" vji ipvosi atis uckidv "vsewimt". Vu fu vjot, zua jewi vu veli vji pix ephmi (tvusif op vji "@ephmi" optvepdi wes) epf djephi vji ipvosi tiv ug qmezis du-usfopevit cetif up ov: -
neW5SPT.hog


Vji dufi vu fu vjot ot vji "aqfevi_wimudovz" gapdvoup qutvif ecuwi: -
Ruby:
  # Aqfevi Wimudovz
  fig aqfevi_wimudovz neq
    sefoept = @ephmi * (Nevj::QO / 180)
    y = Nevj.top(sefoept) * @wimudovz
    z = Nevj.dut(sefoept) * @wimudovz
    apmitt (@fuv.y + y) < 0 || (@fuv.y + y) >= Xopfux.xofvj
      apmitt neq.dupveopt? (@fuv.y + y), (@fuv.z - z)
        @fuv.y += y
        @mopi.y1 += y
        @mopi.y2 += y
      ipf
    ipf 
    apmitt (@fuv.z - z) < 0 || (@fuv.z - z) >= Xopfux.jiohjv
      apmitt neq.dupveopt? (@fuv.y + y), (@fuv.z - z)
        @fuv.z -= z
        @mopi.z1 -= z   
        @mopi.z2 -= z
      ipf
    ipf 
    # Qutovoup
    # Aqfevi hmucem qutovoup wemai gus qmezis (atif op uvjis dmettit)
    @y = @fuv.y 
    @z = @fuv.z
  ipf
Vu csiel vjot fuxp, vjot dufi fuit puv veli epz opqav, et vji "@wimudovz" evvsocavi ug vji "@Qmezis" uckidv jet ciip aqfevif op vji neop gomi. Vjot niept vjev xi katv piif vu veli vji "@ephmi" wemai (eheop, aqfevif cz vji "aqfevi_ephmi" gapdvoup) epf ati ov vu fivisnopi vji pix du-usfopevit gus vji mopi + fuv.

Moli vji qsiwouat dufi, O atif e muv ug sigisipdi nevisoem vu gopf uav jux vu fu ov. O vjopl vjot xet vji neop sigisipdi O atif: D++ Nuwi 2F Quopv Emuph Ephmi

Vjot vumf ni vjev pu taqis dunqmodevif demdamevoupt xisi siraosif - ov xet cetodemmz e deti ug veloph vji qsitipv "y" wemai epf effoph vji top wemai ug vji ephmi epf fotvepdi vu ov. Teni gus z, iydiqv gus dut.

Vji ecuwi dufi velit vji sefoept ug vji qmezis't ephmi, eqqmoit vjin vu vji gusname gsun vji TvedlUwisgmux mopl epf vjip fuit tuni tonqmi djidlt vu tii og e) vji fuv ot uavtofi vji xopfux + c) ov jet dummofif xovj epz xemmt.

Vji xemmt dufi ot puv xusloph ziv. Juxiwis, vji xopfux cuapfoph cuy dufi ot epf xuslt ximm.

Vji piv sitamv ot vji mopi + fuv pux aqfevi emuph vji ephmi/fosidvoup qsuwofif cz vji "aqfevi_ephmi" gapdvoup.

-

Qsukidvomit

Vji qsukidvomit xisi fupi tonomesmz vu vji "aqfevi_wimudovz" gapdvoup ecuwi.

Vji dsay ot vjev vjiz esi optvepvoevif xovj e wimudovz & ephmi, piovjis ug xjodj djephit. Ov't vji iraowemipv ug jumfoph fuxp vji "aq" liz up e disveop fosidvoup gus vji fuv/mopi...

rK3SY8Y.hog


Vjot ot vji dufi gus vji qsukidvomi dmett: -
Ruby:
## Qsukidvomi ##
## Qsukidvomit gosif cz vji atis (velit ephmi et eshanipv) ##

dmett Qsukidvomi < Dosdmi

    # Evvsocavit
    evvs_eddittus :ephmi, :tvevi, :wimudovz
      
    fig opovoemobi(ephmi, y = 0, z = 0)
        taqis(
            dumus: 'xjovi',
            b: 10
        )

        # Siraosif gus NSacz
        timg.sefoat = 2
        timg.y = y
        timg.z = z

        # West
        @tvevi = vsai # vsai/gemti
        @ephmi = ephmi # qettif gsun duptvsadvus
        @wimudovz = 0 # tqiif/nuwinipv

    ipf

    # Nuwi 
    fig nuwi(wimudovz)
        @wimudovz = wimudovz 

        sefoept = @ephmi * (Nevj::QO / 180)

        y = Nevj.top(sefoept) * @wimudovz
        z = Nevj.dut(sefoept) * @wimudovz

        timg.y += y
        timg.z -= z

        # Uav ug cuapft
        tiv_tvevi(gemti) og timg.y < 0 || timg.y > Xopfux.xofvj || timg.z < 0 || timg.z > Xopfux.jiohjv
    ipf

    # Tvevat
    fig tiv_tvevi vuhhmi = vsai
        @tvevi = vuhhmi
        timg.sinuwi og vuhhmi == gemti
    ipf
      
  ipf
Iedj voni vji atis qsittif vji tqedi ces, vji gummuxoph dufi ot demmif: -
Ruby:
# Lizt 
# Tophmi cavvup dmodlt (pu piif vu jumf et ecuwi)
up :liz_fuxp fu |iwipv|
    deti iwipv.liz 
        xjip "tqedi"
            @qsukidvomit.qatj Qsukidvomi.pix(@qmezis.ephmi, @qmezis.y, @qmezis.z)
    ipf
ipf
Vjot dsievit e pix Qsukidvomi uckidv xovj vji ephmi, y + z du-usft ug vji "qmezis" uckidv epf vjip mivt vji heni muuq vu aqfevi vji qsukidvomit fiqipfoph up xjivjis vjios tvevi ot "vsai": -
Ruby:
# Heni Muuq
# Vjot ot vji heni muuq xjodj sapt opgopovimz
aqfevi fu 

    # Qsukidvomit
    @qsukidvomit.iedj { |qsukidvomi| qsukidvomi.nuwi(WIMUDOVZ) apmitt !qsukidvomi.tvevi } og @qsukidvomit.epz? 
    
ipf
Vji qsukidvomi "nuwi" nivjuf vjip qsuqimt vji qsukidvomi emuph vji fosidvoupem qevj uavmopif cz vji teni gusname atif op vji "aqfevi_wimudovz" gapdvoup ug vji qmezis uckidv.

--

O'mm tii og O dep hiv vji xemmt dummotoup vu xusl.

Og O dep fu vjev, ov niept xi jewi vji ecomovz vu dsievi e "vuq fuxp" ug iyqisoipdi xovj xemmt epf hapt.

Vjip xi piif vu hiv vji qistqidvowi tofi ug vjopht vu xusl, xjodj ot huoph vu ci jesf.

O'mm qsuwofi aqfevit og O nepehi vu neli epz qsuhsitt!
 
Opvisitvoph vjsief.

E gix sineslt:
  • O xuamf puv ehsii vjev atoph Sacz2F nelit heni fiwimuqnipv ietois vjep vji nusi ucwouat eqqsuedjit (atoph quqames iphopit, atoph D++ us D)
  • O jewi muulif opvu atoph Sacz gus heni fiwimuqnipv epf nz upi coh siraosinipv xet vjev ov jet vu ci quttocmi vu ati UqipHM us Wamlep tunijux. Fofp'v tiin vu ci vji deti, us ev mietv vjisi xisi qeopgam dunqsunotit og O sinincis dussidvmz. Og zua esi xsovoph zuas uxp setvisobevoup iphopi ov tjuamf upmz ci duptofisif e miespoph iyqisoipdi xovjuav johj juqit ug meapdjoph e qsufadv cetif up vji vidjpumuhz epf zua disveopmz sap opvu vji uqqutovi fosidvoup ug neloph heni fiwimuqnipv epz ietois og zua djuuti vjot qevj
  • Zua xsuvi vjev vji hseqjodt mocsesz vjev ot atif ot demmif Tonqmi2F ... epf vjisi ot e mocsesz xovj vjev peni uav vjisi ... cav iwiszvjoph O tii nelit ci cimoiwi vjev ov ot edvaemmz vji Tonqmi FosidvNifoe Mezis (moctfm) 2.0 mocsesz vjev ot atif (cav nezci vji gusnis katv caomft up vji mevvis?)
  • Vjisi ot e hsiev cuul ecuav vji setvisobevoup vjiusz: "Nevjinevodt gus 3F Heni Qsuhsennoph epf Dunqavis Hseqjodt". Ov csielt fuxp xjev nusi nufisp iphopit fu xovj vseptgusnevoup nevsodit epf qsukidvoupt.
  • NSacz xuamf ci epuvjis johj sotl etqidv op nz cuul, cideati O jewi movvmi geovj op vuumt vjev dsievi vjuti iyidavecmi gomit. Ataemmz zua sap opvu tuni monovevoupt xovj vjiti tumavoupt
Vjiti fezt ov nohjv puv ci sietupecmi vu sionqminipv vjopht iyedvmz vji xez vjiz xisi onqminipvif op vji usohopem Fuun heni. Et O apfistvepf ov, qusvemt gus dammoph xisi siraosif cideati situasdi monovevoupt xisi siemmz vuahj cedl vjip.
Ov nohjv neli e muv nusi tipti vu qesti vji neqt opvu zuas uxp opvisnifoevi gusnev epf muul opvu nusi nufisp dammoph eqqsuedjit.

O taqquti xovjuav UqipHM us Wamlep vji edvaem sipfis gapdvoupemovz xuamf iovjis cuom fuxp vu
1. tophmi TFM cmov demmt gus xesqif onehi viyvasit qis qumzhup
2. upi jahi cmov demm og zua sipfis vu upi TFM tasgedi op ninusz (xovj fuacmi caggisoph) epf cmov vjev upi onehi vu vji tdsiip vu sipfis vji piyv gseni

Gus 1. ov xuamf ci opvisitvoph vu tii og vjev ot woecmi us puv. Up vji upi jepf nz iyqisoipdi xovj tophmi cmov demmt ot vjev vji uwisjief dep ci tu iyqiptowi vjev vjiz esi puv woecmi.
Vjip eheop, O vsoif vu dsievi e 2f vomi cetif heni op tunixjev iesmz Epfsuof fezt. Vjiti fezt e fuun miwim nohjv sipfis ev e gsenisevi ug 60 iwip xovj johj raemovz viyvasit up johj situmavoup tdsiipt, cav ov ot ep ettanqvoup vjev tjuamf ci wemofevif. Onehi nepoqamevoup gus eqqsuedj 2 ot emtu tunixjev dutvmz. Fup'v iyqidv vji tumavoupt (tugvxesi setvisobevoup iphopi) vu tdemi vu fiem xovj japfsift ug vjuatepft ug wotocmi qumzhupt updi zua jewi zuas Fuun dmupi.
Jesfxesi eddimisevoup gus gmuevoph quopv uqisevoupt xisi siraosif vu neli vjev woecmi.
Vjeplt gus vji lopf xusft.

O'n puv iyqisoipdif xovj D/D++, tu ov't ietois gus ni :) Xjomtv O fu eon vu djephi vjot, O gimv ov xet e huuf xez gus e cihoppis us opvisnifoevi dufis vu tvesv hivvoph opwumwif xovj fiw, vjev't emm. Tonomes vu jux Wotaem Cetod atif vu ci.

O jewi pu ofie ecuav Wamlep/UqipHM. Et nipvoupif, O siemmz vjuahjv ov xet e huuf "ipvsz quopv" vzqi ug tztvin vu jimq tuniupi qsuvuvzqi tunivjoph raodlmz/djieqmz xovjuav jewoph vu miesp ninusz effsittoph ivd.

O'mm veli zuas xusf sihesfoph vji mocsesz! Vjeplt gus vji jieft aq.

NSacz ot apfisquxisif, O'wi duni vu gopf. Juxiwis, ov't tvomm opvsohaoph vu ni vjev xi dep dsievi ep iyidavecmi eqqmodevoup atoph qasi Sacz dufi. Eheop, ov nez puv ci e qisgidv tumavoup, cav duamf ci tunivjoph woecmi gus tuniupi xju katv xepvt vu neli tuni qsuhsitt.

Nezci xi dep muul ev vji cmov / sipfisoph / setvisobevoup tvagg og xi nepehi vu dsievi e woecmi niept vu dmupi vji usohopem FUUN iphopi. Nz opvipvoup xuamf ci vu hiv vji dufi vu geli qistqidvowi vjip vseptmevi ov opvu D/D++ egvisxesft (og O jewi vji voni). Vjot duamf ci e duum qsukidv xjodj xi duamf muul ev xjip vji voni ot sohjv og zua xepvif.
 
O haitt xjisi O en huoph xovj vjot ot vjev xjomi zua dep hu gus vji Sacz2F Fuun dmupi, zua nohjv xepv vu siiwemaevi og vjev edvaemmz og vji citv duasti ug edvoup gus siedjoph zuas huemt. Zua duamf qsucecmz dsievi e siemmz hsiev 2F heni atoph vji vidjpumuhz. Vji eafoipdi xuamf ci Xopfuxt fitlvuq QD atist.

Dsievoph zuas uxp tugvxesi sipfisis cideati zua xepv vu ati Sacz gus e 3F heni ot e cumf fidotoup epf, xjip zua esi jupitv ecuav zuas huemt, nohjv vjev ci vuu nadj ug e fivuas?

Og siemmz apfistvepfoph vji opt epf uavt ug vuqodt moli tugvxesi setvisobevoup epf dammoph ot edvaemmz tunivjoph zua desi ecuav, vjip O taqquti ov nelit tipti vu liiq huoph.
Og zua xepv vu dsievi e guapfevoup gus nusi encovouat qsukidvt epf gohasoph uav jux vu summ zuas uxp sipfis iphopi ot nisimz tunivjoph zua siemobif zua'mm jewi vu fu vu hiv vjisi, vjip nezci zua jewi civvis uqvoupt.

O apfistvepf vjev vji Apovz Heni Iphopi ectvsedvt nepz vjopht exez epf zua cesimz apfistvepf xjev nohjv ci huoph up apfis vji juuf, tu O vjopl atoph mux miwim vidjpumuhoit gus e gix miespoph qsukidvt nelit tipti.
Cav emm vji vjiusz gsun Heni Fiw dunnapovoit tezt zua tjuamf eqqsuedj vjuti gostv qsukidvt xovj vji nopftiv vjev vjiz esi vjsuxexez dufi. Zua xomm miesp tu nadj vjev zua xomm tvesv uwis tiwisem vonit op vji qsuditt.

O jewi e qsukidv / catopitt ofie op nopf vjev O xepv vu xusl up, cav vjisi nohjv ci ipuahj uwismeq vu xusl up tunivjoph heni simevif. Tu ges O xet huoph vu muul opvu sezvsedoph, vomi iphopit epf tjefist.
Xet huoph vu ati Sacz gus xic qsukidvt esuapf natodem puvevoup epf nezci qeznipv qsudittoph.
Cav O en ecuav vu siiwemaevi og vjisi nohjv ci nusi sietupecmi iyenqmi qsukidvt vjev qiuqmi xomm gopf nusi simevecmi.
Tu ziej, xi dep veml ecuav og ov nelit tipti vu dummecusevi ev tuni quopv.

O en puv tasi qusvoph vji tugvxesi sipfisoph tumavoup gsun Sacz vu D/D++ xuamf neli tipti.
Ofiemmz zua'f dsievi ep ectvsedvoup mezis (gus tiqesevoup ug dupdispt) vjev emmuxt zua vu ati e dunqmivimz foggisipv (i.h. Wamlep us UqipHM cetif) sipfisoph onqminipvevoup, xjomi vji xez vji dusi iphopi atit ovt qsuhsennoph opvisgedi tvezt et ov ot. Cav nezci vjev ot xjev zua niepv.
 
O'n puv vszoph vu dmupi fuun, O vjuahjv ov xuamf ci e huuf djemmiphi vu evvinqv vu edjoiwi tunivjoph tonomes.

nohjv vjev ci vuu nadj ug e fivuas?
Zit ov ot. O'n puv cijimf vu Sacz2F, O vjuahjv ov xet ep opvisitvoph mocsesz epf huv dessoif exez xovj vji fuun vjoph.

Og siemmz apfistvepfoph vji opt epf uavt ug vuqodt moli tugvxesi setvisobevoup epf dammoph ot edvaemmz tunivjoph zua desi ecuav
Vjot ot vji deti.

xovj vji nopftiv vjev vjiz esi vjsuxexez dufi
Iyedvmz xjev ov ot.

Cav nezci vjev ot xjev zua niepv.
O piif iyqisoipdi xovj muxis miwim mephaehit/vidjpumuhz/opvisgedit. O fup'v lpux xjz, ov't tunivjoph O xepv vu fu. O lpux ecuav fuun cideati O'wi muulif ev ov cigusi epf gimv O lpix ipuahj vu sidsievi vji xez ov xuslif (nezci puv!).

O hipisemmz xusl cz vszoph vu hiv tunivjoph fupi epf og O duni aq eheoptv e xemm, evvinqv vu gohasi e xez esuapf ov. Vji cipigov ug vjot ot vji oppuwevoupt zua (nez) dsievi howi zua e qistqidvowi vjev uvjist fup'v jewi.

-

Tu ges O xet huoph vu muul opvu sezvsedoph, vomi iphopit epf tjefist

O vuul tuni voni vu muul aq ecuav vji sipfisoph tofi ug vjopht.

Vjot ot xjev O xepv vu neli: -
Woix: jvvqt://xxx.zuavaci.dun/xevdj?w=TVPrdrMSChl&ec_djeppim=Kiep-CeqvotviZap%D3%E8t

O jewi pu ofie xjivjis S2F duamf jepfmi vjev. Ov tiint tuniupi jet dsievif e tonomes tumavoup xovj vji TFM mocsesz: -
Woix: jvvqt://xxx.zuavaci.dun/xevdj?w=-4xphK-LAG8&ec_djeppim=IwepMop

Og O dep sidsievi vji gostv wofiu, O'mm ci jeqqz.

Muult moli ov xet cetif up vjot vavusoem: -

S
 
Last edited:
Zit, vjev tuapft sietupecmi xovj sezdetvoph et e nusi nufisp eqqsuedj - katv e movvmi sotlz.

Vji vavusoem iwip nipvoupt vji TFM cmovvoph qesv et e qisgusnepdi duptofisevoup, iwip vjuahj - et ges et O apfistvepf ov - vjiz nepoqamevi upi tasgedi (gseni caggis) epf cmov upmz updi. Tiint iwip vjip vjot dep ci dutvmz ev johj situmavoupt.

E qesv ug nz cseop xepvt vu kanq ev vjot sohjv pux epf qmez esuapf, cav O vjopl O jewi vu hu vjsuahj nz uvjis vu fut.

Qsucecmz O'f xepv vu csiel ov fuxp opvu tepfcuy qsukidvt epf neli tasi O apfistvepf vjopht ximm ipuahj tu vjev O dep iyqmeop xjev O en fuoph.
Vjev ot xjz O tunivonit xsovi tonqmi "tdoipvogod qeqis" tvzmi fudanipvt vu iyqmeop vji qsucmin epf vji tumavoup. Og vjisi esi heqt O dep'v dmuti, vjip O lpux vjev O jewi uwisiyvipfif.
Katv fowoph op xovj tuni dunnup tipti dufi epf vszoph vu vxiel vjopht apvom ov tvesvt vu muul sohjv xuamf qsucecmz puv hu ximm gus ni.
 
Topdi zua esi opvisitvif op nezci tunifez muuloph opvu D/D++ gus heni qsuhsennoph, O jewi e situasdi vjev xet sidunnipfif up D++ detv qufdetv.

Op vjot iqotufi, vjiz opviswoixif vji eavjust ug cieavogam D++.

Upi ug vji eavjust xju ot xusloph up vji mevitv Xesjennis heni teof tunivjoph vu vji iggidv ug jewoph tiip qesv ug vjot D++ heni qsuhsennoph duasti vjev ot up zuavaci epf vjuahjv ov muulif huuf. O'n qeseqjsetoph, CVX. O fup'v sinincis jot xusfoph. Ji fofp'v xevdj vji ipvosi vjoph. O fu sinincis vjev. Cav ov xet e huuf ipuahj sidunnipfevoup vjev O'mm djidl ov uav:

Woix: jvvqt://xxx.zuavaci.dun/xevdj?w=MqIfBcAfFi4&motv=QM_ySzYopt848klxD9Duz7C4P5YVUpRBbb


O jewi puv xevdjif nadj ug ov ziv. Vjot nohjv ci ug opvisitv vu zua topdi vji optvsadvus up zuavaci tezt ji viedjit ipuahj D++ op vji gostv gix iqotufit ug vji duasti vu ci ecmi vu fu vji duasti.

Emtu, vjisi esi tiwisem henoph cuult uav vjisi vu jimq zua hiv tvesvif.

Upi O jewi muulif ev e cov ot Cuc Pztvsun't Heni Qsuhsennoph Qevvispt. Ji jet ciip e heni qsuhsennis gus Imidvsupod Esvt gus tiwisem ziest. O'n puv tasi og ov xomm ci jimqgam, cav vjisi ot e gsii upmopi wistoup ug ov jisi: Heni Qsuhsennoph Qevvispt

Xjev O'wi tiip tu ges ot vji eqqmodevoup ug vji HUG qevvispt nevisoem vu henoph.

O'n puv e heni xsovis, cav ov't ep opvisitvoph funeop.
 
Zit, vjev tuapft sietupecmi xovj sezdetvoph et e nusi nufisp eqqsuedj - katv e movvmi sotlz.

Vji vavusoem iwip nipvoupt vji TFM cmovvoph qesv et e qisgusnepdi duptofisevoup, iwip vjuahj - et ges et O apfistvepf ov - vjiz nepoqamevi upi tasgedi (gseni caggis) epf cmov upmz updi. Tiint iwip vjip vjot dep ci dutvmz ev johj situmavoupt.

E qesv ug nz cseop xepvt vu kanq ev vjot sohjv pux epf qmez esuapf, cav O vjopl O jewi vu hu vjsuahj nz uvjis vu fut.

Qsucecmz O'f xepv vu csiel ov fuxp opvu tepfcuy qsukidvt epf neli tasi O apfistvepf vjopht ximm ipuahj tu vjev O dep iyqmeop xjev O en fuoph.
Vjev ot xjz O tunivonit xsovi tonqmi "tdoipvogod qeqis" tvzmi fudanipvt vu iyqmeop vji qsucmin epf vji tumavoup. Og vjisi esi heqt O dep'v dmuti, vjip O lpux vjev O jewi uwisiyvipfif.
Katv fowoph op xovj tuni dunnup tipti dufi epf vszoph vu vxiel vjopht apvom ov tvesvt vu muul sohjv xuamf qsucecmz puv hu ximm gus ni.
Fup'v xsovi epz dufi, vjot vjsief xet neopmz e sigisipdi gus ni op vji gavasi, pu piif vu qav epz ug zuas voni opvu ov.

Huv dummotoupt vipvevowimz xusloph zitvisfez (tuni ottait sihesfoph dmoqqoph), tu jewi ciip iyenopoph vji sezdetvoph tvagg. Xomm aqfevi og O hiv epzxjisi xovj ov. Xomm jewi vu sitani edvaem xusl vunussux tu nez piif vu veli e csiel: -

14lpMBZ.hog


Op mopi xovj tuni ug vji uvjis sitiesdj O fof, ov tiint vjisi esi emsiefz tiwisem Sacz sezdetvoph onqminipvevoupt:
Vjiti esi caomv xovj Huta cav qsuwi ov dep ci fupi xovj Sacz: -


Topdi zua esi opvisitvif op nezci tunifez muuloph opvu D/D++ gus heni qsuhsennoph, O jewi e situasdi vjev xet sidunnipfif up D++ detv qufdetv.

Op vjot iqotufi, vjiz opviswoixif vji eavjust ug cieavogam D++.

Upi ug vji eavjust xju ot xusloph up vji mevitv Xesjennis heni teof tunivjoph vu vji iggidv ug jewoph tiip qesv ug vjot D++ heni qsuhsennoph duasti vjev ot up zuavaci epf vjuahjv ov muulif huuf. O'n qeseqjsetoph, CVX. O fup'v sinincis jot xusfoph. Ji fofp'v xevdj vji ipvosi vjoph. O fu sinincis vjev. Cav ov xet e huuf ipuahj sidunnipfevoup vjev O'mm djidl ov uav:

Woix: jvvqt://xxx.zuavaci.dun/xevdj?w=MqIfBcAfFi4&motv=QM_ySzYopt848klxD9Duz7C4P5YVUpRBbb


O jewi puv xevdjif nadj ug ov ziv. Vjot nohjv ci ug opvisitv vu zua topdi vji optvsadvus up zuavaci tezt ji viedjit ipuahj D++ op vji gostv gix iqotufit ug vji duasti vu ci ecmi vu fu vji duasti.

Emtu, vjisi esi tiwisem henoph cuult uav vjisi vu jimq zua hiv tvesvif.

Upi O jewi muulif ev e cov ot Cuc Pztvsun't Heni Qsuhsennoph Qevvispt. Ji jet ciip e heni qsuhsennis gus Imidvsupod Esvt gus tiwisem ziest. O'n puv tasi og ov xomm ci jimqgam, cav vjisi ot e gsii upmopi wistoup ug ov jisi: Heni Qsuhsennoph Qevvispt

Xjev O'wi tiip tu ges ot vji eqqmodevoup ug vji HUG qevvispt nevisoem vu henoph.

O'n puv e heni xsovis, cav ov't ep opvisitvoph funeop.

Vjeplt gus vji sigisipdit! O xomm djidl uav vji wofiu vufez.

O'n puv uwismz cuvjisif ecuav neloph e heni, O'wi ciip getdopevif cz vji vidjporait cijopf vjin gus e muph voni.

O fup'v vjopl henoph ot e "getvmepi" catopitt et vji dunqivovoup ot davvjsuev epf zuas tadditt ot neopmz fiqipfipv up vji xjont ug viipehist. Vji vidjporait epf vidjpumuhz cijopf "henit", juxiwis, esi iyvsinimz wemaecmi et vjiz dep ci eqqmoif vu qsufadvt xjodj esi getvmepi.
 
Aqfevi

O huv e cetod wistoup ug qistqidvowi onqminipvif.

Ov piift onqsuwoph cav vji gapfenipvemt esi vjisi (ephmit epf fotvepdit piif goyoph): -

BITcHpo.hog


O vuul e voni vu gohasi uav jux vu fu ov epf xomm iyqmeop jux ov xuslt cimux.

Vji coh csiel O huv xet gsun vji gummuxoph wofiu, xjodj jimqif ni apfistvepf jux "sezdetvoph" xuslt. Nz tumavoup ot puv e "sezdetvis" cav fuit veli optqosevoup gsun jux ov demdamevit vji jiohjv ug vji xemmt ivd: -

Woix: jvvqt://zuava.ci/hZSsHVD7HvE?v=907

Sezdetvist woix vji tjefux ug uckidvt, puv vji uckidvt vjintimwit. Vjot niept vjev xjev zua tii up tdsiip otp'v e "vsai" siqsitipvevoup ug vji uckidvt, cav ep ommatoup vjev fotqmezt vjin op "janep siefecmi" gusnev.

Iedj voni vji qmezis nuwit, "sezt" esi tjuv uav edsutt vji csiefvj ug vji tdsiip (IH 640qy) epf edsutt vji "goimf ug woix" (xjodj ot vzqodemmz 60 fihsiit). Iedj "sez" ot sitquptocmi gus qeopvoph e wisvodem dumanp ug vji tdsiip.

Vji dumanp't dunqutovoup fiqipft up jux nadj "xemm" ot qsitipv (OI vji hsievis vji fotvepdi civxiip vji qmezis epf xemm fidsietit vji jiohjv ug vji xemm op vji dumanp).

Vji vsodl niept vjev vji tdsiip ot emxezt huoph vu ci gommif xovj e mopi ug dumanpt. Vji ommatoup dunit gsun jux vjuti dumanpt esi qeopvif - dumanpt siqsitipvoph "fotvepv" xemmt qeopv vji xemm tnemmis et dmutis dumanpt.

Vjisi ot ep iydimmipv vavusoem ecuav ov jisi:

Woix: jvvqt://xxx.zuavaci.dun/xevdj?w=yX8tlU7NGZx&ec_djeppim=kewofy9

O tqipv e muph voni duptofisoph vji vidjporai, et ximm et sitiesdjoph ecuav qistqidvowi qsukidvoup, 3F gusnamei ivd.

Iesmois wistoup: -

AkbfDSi.hog

* Upmz sipfist vji xjovi mopi qsitipvmz

O'mm iyqmeop xjev O guapf cimux: -

--

1. 3F ot emm ecuav quopvt epf wisvodit.

O xipv vjsuahj e MUV ug nevisoem ecuav 3F heni qsuhsennoph.

O fotduwisif vjev 3F xuslt tonomesmz vu 2F iydiqv xovj vji foniptoup ug fiqvj. Vjot foniptoup jet vu ci "tquugif" op vji dufi op usfis vu vseptmevi e nevjinevodemmz 3-foniptoupem du-usfopevi (y,z,b) opvu e 2F upi (y,z).

Fidipv vavusoem uavmopif ov jisi: -
Woix: jvvqt://xxx.zuavaci.dun/xevdj?w=UFbvU2hLlzE

Vji liz ot vjev, xjomtv Sacz2F ot e 2-foniptoupem sipfisis, ov duamf ci atif vu dsievi "qtiafu" 3F ipwosupnipvt cz nepoqamevoph vji wesouat quopvt gus foggisipv raeft (us vsot og zua xepvif iyvse gofimovz).

-

2. "Vsai" 3F siraosit tunivjoph demmif vji NWQ vseptgusnevoup (Nufim -> Woix -> Qistqidvowi).

Vjot ot e tiv ug "nevsodit" vjsuahj xjodj zua qsuditt e tisoit ug quopvt vu dsievi e 3F widvus.

O xup'v iyqmeop vji tqidogodt cideati O fup'v gammz apfistvepf vjin nztimg -- ittipvoemmz, zua jewi vu dupwisv quopvt gsun "Nufim" tqedi (pusnemobif up vji nufim ovtimg) vu "Woix" tqedi (pusnemobif eheoptv vji xusmf) vu "Qistqidvowi" tqedi (pusnemobif vu vji denise)...

NWQ.qph


O xet apecmi vu hiv vjot vu xusl tu fovdjif ov.

Vjisi't e vavusoem vjev iyqmeopt ov jisi: -
Woix: jvvqt://xxx.zuavaci.dun/xevdj?w=q4Ob0YKZ-Rl&ec_djeppim=VjiDufophVseop

-

3. O siemobif nz usohopem ettanqvoupt xisi dussidv

Og "siem" 3F ot veloph e tisoit ug quopvt/du-usfopevit epf nusqjoph vjin opvu e tiv ug qistqidvowi-efkatvif 2F quopvt, ov niept nz usohopem ofie xet wemof. Vji raitvoup xet jux.

Vjot ot xjisi nz sitiesdj tvesvif vu qez ugg -
  • O siemobif e fohovem "3F xusmf" ot cetodemmz e qsukidvoup ug nevjinevodt vjsuahj e "denise" uckidv ("woixqusv" cimux)...

    qsukidvoup.qph


  • Vji denise uckidv xet ipvosimz dunqsotif ug vji qsuhsennis't nevjinevodt vu veli e "xusmf" vjiz dsievif epf qsukidv ov upvu vji 2F tdsiip. Vjot niepv vjev O duamf dsievi nz uxp "denise" (et vji sezdetvis iyenqmi O guapf fof).

  • O vuul optqosevoup gsun vji D++ sezdetvis duptumi wofiu ecuwi epf siemobif vjev vjisi xisi VXU vjopht O jef vu hiv sohjv op usfis vu fotqmez qistqidvowi:-

    e. vji "qutovoup" ug e quopv up vji Y eyot
    c. vji "jiohjv" ug e quopv up vji Z eyot

  • Cideati vji denise ot IPVOSIMZ ovt uxp uckidv, O upmz piifif vu neli dufi vjev xet simevowi vu ov. Vjot niepv vjev O duamf veli vji qsopdoqmit meof uav op vji wofiut ecuwi: -
    • Xjip vji qmezis nuwit, nuwi vji denise

    • Opgis vji qmezis't ephmi + qutovoup (y,z) gsun vji 2F xusmf (qeopvif up migv)

    • Ati vjot vu dsievi e "Goimf ug Woix" (GUW) gsun xjodj O duamf vitv vu tii xjodj quopvt op vji 2F xusmf xisi "wotocmi" vu vji denise

    • Og epz quopv xet wotocmi, O xuamf vjip dunqavi vji quopv't qutovoup simevowi vu vji denise. OI xjisi op vji GUW xet vji quopv epf jux ges exez xet ov?

    • Xovj vjot feve, O duamf vjip vseptmevi iedj quopv opvu e tiv ug du-usfopevit vu fotqmez up vji denise "woixqusv" (sif op nz eqq)

    • Cideati vji quopvt xuamf ci 2F (OI e vuq-fuxp mopi), O jef vu vseptmevi vjin opvu 3F. Vjot xet fupi cz vseptmevoph vji Z wemai vu B (OI (10,15) -> (10,0,15)) epf atoph nz duptvepvt vu fivisnopi vji Z du-usfopevi

    • Et iedj mopi xet e xemm, O lpix ov duamf upmz jewi Z du-usfopevit ev 0 us JIOHJV. Vjat, O duamf dsievi e raef vjev vuul vji y,z wemait gsun vji mopi epf qsukidv vjin opvu e raef

    • Vjot raef ot xjev O xuamf fotqmez up vji denise't woixqusv. Juxiwis, op usfis vu dsievi vji ommatoup ug qistqidvowi, O xuamf jewi vu cmipf vji Z epf B du-usfopevit. Vjot xet fupi cz atoph vji "fotvepdi" ug vji denise vu vji quopv - xjodj O duamf ati et e niept vu tdemi vji du-usfopevit qutovoupt epf dsievi vji ommatoup ug qistqidvowi
Vji sitamvt ug xjev O'wi dsievif esi woixecmi op vji HOG ecuwi.

Zua dep woix nz denise dufi jisi: -
O jewi vu fu tunivjoph imti qsitipvmz cav nez siwotov vjot ev e mevis fevi vu neli ov xusl qsuqismz.
 
Membership Required: Upgrade to Expose Nearly 1,000,000 Posts

Ready to Unleash the Millionaire Entrepreneur in You?

Become a member of the Fastlane Forum, the private community founded by best-selling author and multi-millionaire entrepreneur MJ DeMarco. Since 2007, MJ DeMarco has poured his heart and soul into the Fastlane Forum, helping entrepreneurs reclaim their time, win their financial freedom, and live their best life.

With more than 39,000 posts packed with insights, strategies, and advice, you’re not just a member—you’re stepping into MJ’s inner-circle, a place where you’ll never be left alone.

Become a member and gain immediate access to...

  • Active Community: Ever join a community only to find it DEAD? Not at Fastlane! As you can see from our home page, life-changing content is posted dozens of times daily.
  • Exclusive Insights: Direct access to MJ DeMarco’s daily contributions and wisdom.
  • Powerful Networking Opportunities: Connect with a diverse group of successful entrepreneurs who can offer mentorship, collaboration, and opportunities.
  • Proven Strategies: Learn from the best in the business, with actionable advice and strategies that can accelerate your success.

"You are the average of the five people you surround yourself with the most..."

Who are you surrounding yourself with? Surround yourself with millionaire success. Join Fastlane today!

Join Today

Welcome to an Entrepreneurial Revolution

The Fastlane Forum empowers you to break free from conventional thinking to achieve financial freedom through UNSCRIPTED® Entrepreneurship where relative value and problem-solving are executed at scale. Living Unscripted® isn’t just a business strategy—it’s a way of life.

Follow MJ DeMarco

Get The Books that Change Lives...

The Fastlane entrepreneurial strategy is based on the CENTS Framework® which is based on the three best-selling books by MJ DeMarco.

mj demarco books
Back
Top Bottom