YS FLIGHT SIMULATOR 20th Anniversary
Another decade has passed since the 10th anniversary. I started YSFLIGHT as my escape-from-reality project while I was studying for my Ph.D qualifying exam. Although it may not be as popular as it once was because 3D games are not special now, slowly I am still working on it.
While I was using Fujitsu FM TOWNS, I wrote several 3D games and had download count of 1,000 or so. That was when I was an undergrad. Back in 1990s, a free game scoring 1,000 downloads was a big deal. Now if I look at just download count YSFLIGHT has scored 1 million+ downloads overall. It doesn't mean more than 1 million players flew YSFLIGHT because same person may download multiple times especially when a new version comes out. Nonetheless, more than 1 million downloads was a beyond my imagination.
Also I have always been impressed by the quality and details of the maps and the aircrafts created by the users in the past two decades. I thank all the users who contributed to the user community. I feel bad to those who asked questions about how to create models for YSFLIGHT, but I cannot spare my time to answer those questions.
I want to do something special to cerebrate 20 years. I may finish some features that I started and haven't completed. But, there are reasons why those feature additions are stalling. Usually those features typically turn out to be difficult to implement, break backward compatibility, or not difficult but require many lines of code. Or, maybe I would add a 20-year paint scheme airplane at least.
I am very concerned about the current trend of software development that computer programs are treated just like consumables. Computer programs are not consumables. Software is NOT a service. I will never forgive whoever started saying Software As Service. Software is a product, at the same time is a piece of art. A masterpiece must be kept for the future, it must not disappear when the service terminates. It must not be thrown away like a tissue paper. To write a stable program, code must be re-used, and must be exposed to various different input so the program is trained. Once the program is mature, it will require less updates. Less update should not be taken as the program is abandoned. It should mean the program is reaching its goal. So many fantastic things have been introduced to the computing world. So many bad ideas have also been introduced.
YSFLIGHT may not be a masterpiece. But, I want to make it like a program that anyone can come back anytime. Someone may leave YSFLIGHT today. But after several years one day the person may find it still available and maybe fly one round of traffic pattern. I am determined to keep YSFLIGHT alive.
YS FLIGHT SIMULATOR Version 20181124 Available for Download!
Thank you for your patience! YSFLIGHT Ver 20181124 is ready for download! Major changes are as follows.
- Shadow mapping in OpenGL 2.x version.
When you try to run YSFLIGHT, you may be seeing a security warning from your operating system stating that the executable binary is not code-signed. The purpose of he code signature is to confirm that the program is written by a known person and not altered by a malicious hand. The purpose itself is very correct.
Information security is extremely important. There is no question about that. We hear security breaches, stolen information, identity thiefts, and all sorts of crimes. Many of those incidents originate from a malicious program. Of course, the responsibility is primarily on a person who wrote such a malicious program. Such a programmers should be locked for life without parole.
But unfortunately there are even more cowardly groups of people. There are some companies called certificate authorities who are responsible for issuing digital certificates including code-signing certificates. Those companies are taking advantage of the security problems and cowardly trying to decimate individual free-software programmers.
Code-signing certificate used to be too expensive for individuals. Most of them used to cost like $500 per year. Not just one-time payment every year you have to pay. I wanted to get one for my projects. Yeah, it is not impossible to pay $500 per year, but I couldn't justify to do it for my free-software projects. This time one of the long-time YSFLIGHT users raised a concern about the security warning. So, I did shop around again. I then found $179 per year certificate from COMODO. I paid for it, only to hear that they no longer issue a certificate for individual developers.
I looked into other major certificate authorities, too. None of them issues a code-signing certificate to individuals any more. They apparently are united and are trying to destroy individual developers. It is not just unaffordable. It is now impossible for an individual developer to get a certificate. It is not right. I don't understand how it is allowed. The certificate authorities are intentionally trying to decimate individual programmers like myself.
Therefore, it is not what I like, but I am not able to sign my programs available from YSFLIGHT.COM. I just release my programs without signature. I can do nothing about it. Probably those cowards will win. Individual free-software developers will eventually extinct. All I can do is to tell what's going on on this web site.
In YSFLIGHT for OpenGL 2.0, I have implemented the shadow-map method. I believe it can also be done with Direct X9, but, I don't want to spend even a second to learn an API that runs on only one operating system, and even declared deprecated by the vendor. Shadow-map feature will be available only in YSFLIGHT on OpenGL 2.0/ES 2.0 for now. If Vulkun API catches up the speed, I will add support for Vulkun. Then the shadow-map feature will be available in YSFLIGHT on Vulkun then. But, I don't know how popular Vulkun can become. It may just fade away. Right now, there is no replqcement of OpenGL 1.1. I need to go very high-level, which is pretty much useless for me, or very low-level, which needs work to make it useful for me. Not everyone needs photo-realistic movie-like graphics. For me, I need 3D graphics to prove my concept in my research. OpenGL 1.1 was just good for my purpose. To use OpenGL 2.0 with ease, I wrote a cover library. Maybe I'll need to do the same for Vulkan eventually.
But, what I desperately want to avoid is to spend considerable time to lean how to use Vulkun only to see Vulkun just fading away. I wasted too much time to learn Direct3D9. Microsoft ditched it in Direct X10. If I knew my knowledge in DirectX9 becomes useless in such a short time, I definitely wouldn't have wasted time learning Direct3D9. I learned from it. I will never spend time learning Direct X12.
The shadow-map method is a standard method for rendering shadow in the recent 3D graphics applications. However, most of the 3D-graphics techniques are not good for rendering a scene that expands up to 20 miles. First I need to render a texture in which each pixel is a distance from the light source. But, even if I use 2048x2048 texture, one pixel corresponds to 0.01 mile. A shadow of a F-18 becomes a square. Useless.
The solution is to use multiple shadow-maps. I have tried a method that is said to be the most efficient method to this day called Cascaded Shadow Map (CSM) with three shadow-map textures. But, it turned out still too coarse. Useless. If you have a high-end GPU, and if I can increase the shadow-map count to like 8 or 10, it may be useful. But, my goal is to keep YSFLIGHT comfortable with 3-year old hardware. Three shadow-maps seems to be the maximum, based on the performance on 2014 Mac mini. Actually, this method has a problem, too. Imagine a formation passes above you from the behind. The light source is also to the back far above. The shadow of the formation must be visible before the formation comes in to the view. However, if I implement the CSM method as described in the paper, the shadow won't be visible until the formation is in the view frustum.
In conclusion, I need to adjust the light volume depending on the view mode. CSM might be generally good solution, but if I am looking at a particular airplane, I want the maximum resolution around the airplane, not close to the view point. I haven't implement this adaptive light-volume yet, but I tested the implementation with a very ad-hoc light volumes.
By the way, I also reduced the shaking of the rendering when the view point is far from the origin. The problem was that the GPU calculates matrices in 32-bit floating points. I have modified my code so that CPU calculates the transformation matrices using 64-bit floating points. This change essentially gets rid of the shaking. A few years ago everyone was talking about General Purpose GPU. But, GPU vendors are stubbornly refusing to support 64-bit floating points. 32-bit floating point is too inprecise for serious applications. GPUs are pretty much useless for many engineering applications, until GPUs are capable of calculating 64-bit floating points.
Nonetheless, maximum Z-buffer precision used to be 16-bit. Now, it looks like the low-end GPU supports at least 24-bit Z-buffer. I am thinking to remove "Z-Buffer Quality" option in YSFLIGHT and simplify the rendering code.
By the way, I have tried machine learning to fly an airplane in YSFLIGHT, too. I tried to make a speed-controller with machine learning. Unless my machine-learning code can control the speed, there is no way to do more complex flying with it. The result was a failure. I let an airplane fly in many different conditions and used flight records as learning data. Then, I made my machine-learning code to control the airspeed. But, it didn't work well. I guess I need to study more about machine learning. Eventually I can make something. Let's see.
OK. I initially thought the changes in the new Mac OSX wouldn't affect YSFLIGHT. But, it did actually. I tentatively uploaded the package that at least worked in OSX 10.11 on my 2008 MacBook Pro. You can download from the following link:
I thought that YSFLIGHT should be ok because the OpenGL settings are reset when switching modes in the program. Actually I was building GLSL program only once immediately after opening the window :-P
As always, I thank all users who sent me bug reports and comments for the test version. I really appreciate your help!
The major update (other than bug fixes) are as follows:
- Realistic propeller simulation in some airplanes
I was thinking to release minor-debug version early this year. And, the time flies! It's already end of August. The new fall semester means my teaching duty starts again! I have 79 students so far. It's going to be a fun!
I spent quite good amount of time for developing Polygon Crest and less time for YSFLIGHT. But I don't want to miss a release of the 2014 version of YSFLIGHT. I'm working on it. I'm trying hard to get it ready before the end of the year.
One big change is that I took advantage of Vertex-Buffer Objects of OpenGL ES2.0/2.0. So, YSFLIGHT on OpenGL 2.0 works as fast as (if not faster than) on Direct 3D9. It gives good boost of YSFLIGHT for MacOSX, too.
By the way, I wanted to add ground textures since I terminated CPU-Rendered version of YSFLIGHT. So I did it. One problem is I am such a horrible painter. I don't have a picture to put on the ground. I cannot download a map from the Internet because all of them are copyrighted.
So, I randomly picked a picture of Hummingbird copyrighted to me, and pasted on AOMORI map for test.
I should be able to paste a texture on elevation grids with small modification. I'm thinking to add that, too. It will be possible to show snows covering the peaks of the mountains.
Also, I implemented one of the heavily-requested features, multi-color smoke.
So, these will be included in the next release for sure.
If you watch F-22 demonstration in an airshow, it is nothing but impressive. I want to do it in YSFLIGHT. To do it, I need to enable post-stall maneuvers in YSFLIGHT. Basically, I'm a big air-show fun. So, I want to re-create the excitement of air shows in YSFLIGHT.
Still I need to do something to smooth out transition from normal maneuver to post-stall maneuver, but at this point, I can do something like the following flight record.
Smooth transition is one of the remaining problems. If you look at F-18's high-alpha pass, it smoothly enters the maneuver. I think it is possible because F-18's strake prevents sudden loss of lift during stall. Probably the wings of F-18 smoothly lose lift beyond the critical angle of attack. In YSFLIGHT currently makes lift zero as soon as the wing reaches the critical angle of attack. I probably need to make some stall patterns.
Also, I am adding more realistic propeller simulation. I want to add Cessna 172. To do so, I want my engine to react more realistic. New realistic propeller simulation is now tested on Piper Archer and P-51 Mustang. In the next version, the .DAT file can pick between realistic propeller simulation or simplified (current) propeller simulation.
The problem with this realistic propeller simulation is that the auto-pilot cannot deal with the time delay and miserably fails. It looks nearly impossible to manually set up control parameters. So, I am now using a concept of machine learning to pick a reasonable control parameters. The technique I am implementing apparently is called Least-Square Monte-Carlo. So, it looks to be one step before machine learning, but should be a good learning opportunity for me. I have written a code to make sample training data for air-speed controller. I'll see if this idea works or not soon.
In the future, I don't know how future it is, I want to make an AI that learns from the player's air combat. Then, you can exchange your AI and let it fight an air-combat against your friend's AI. Well, it's one of the dreams I have, but I am still slowly learning the machine learning. It won't be in the near future.
This time, crews from YSUpload.com kindly offered to host YSFLIGHT binaries. You can download the newest version from the following link.
YSFLIGHT binaries will be available from both YSUpload.com and Download.com. I'll put links to Download.com back as soon as the file is up in their server.
Major changes are as follows:
- Using OpenGL 2.0/ES2.0 features
I have implemented change-of-vehicle. My goal is to use it for campaign mode, in which the player has to conquer enemy bases in the map. But, it takes some more coding.
I also implemented landing-analysis tab. You can see the vertical and horizontal profiles of your approach. It would be nice if I can add some automatic grading scheme for that, but if you do a short-approach, your course will not be aligned to the runway centerline until the very last minutes before touch down, your approach may be steeper if you have a headwind, and in fact some instructors like steeper approach because that way you can land safely even in case of engine failure on final. So, I think no matter what grading scheme I add, it's going to be controversial. I instead I show vertical speed on touch down and crab angle relative to the ground.
I was trying to add landing-evaluator in the next version of YSFLIGHT. Landing evaluator will show the vertical speed at the time of touch down and also plot the vertical path profile of the last 30 seconds to one minutes before the touch down.
To add this feature, I need to search for all the landings of the user airplane after the simulation. It was easy in the previous version because the user was equal to an airplane (or a ground vehicle.) So, the program had to look at up to one airplane.
But, another thing I am desperately trying to add in the next version is change of vehicle, which allows the user to switch an airplane or vehicle. For example, you can come up with a map in which the user is only allowed to start in a truck, and the user drives up to an airplane parked in an airport and board the airplane and go. This will turn the Scenery Editor into more like a mission editor.
The problem is, if I add this feature, the user may fly more than one airplane in one flight. The program needs to check all the user airplanes for landing evaluation. If I write landing evaluator before adding change-of-airplane feature, I will need to make modification afterward. So, I thought it is better to add change-of-airplane first.
If I'm done with change-of-airplane, and if the Scenery Editor can be used as a mission editor, you can make a mission like, you capture an enemy base, and then board an airplane there and continue to the final goal. Then, I want to add an interceptor, which stays stand-by until the user airplane comes close, and then take-off to intercept the user airplane. But, if the airplane cannot land and re-supply, the user can keep the dogfight long enough so that the computer airplane runs out of fuel, which will not be a fun. I want the computer airplane being able to return to the base, re-supply, and then take off again.
To make computer airplane smart enough to land, re-supply, and take-off again, I need to add taxiing-path on the map for runway to ramp, and ramp to runway. Also, I had to have an autopilot for doing these.
Actually, if I add that feature, I can define air routes and keep some airplanes flying. Like, I can fly Concordes between Heathrow and Gatwick.
So, I'm almost done with this air-route feature. I think I diverted quite far from the original purpose....
I wish best of luck to you all
By the way, everyone talks about cloud computing now a days. If you visit tech-related web sites, you must see articles about cloud computing every day.
I have my own interest, and it is not usually in sync with the current trend. I am honestly not interested in cloud computing much, and I got somewhat behind from the current trend of cloud computing because it has been off my scope.
But, it's not so good for a researcher in the field of engineering. So, I decided to catch up during the break. The following screenshots are the results.
What? Am I misunderstanding something? It's about cloud, isn't it?
It's not shaded but is much more realistic cloud than previous versions. I also experimented with giving some shading effect, but that dropped the frame rate substantially on my late-2008 Macbook Pro. I keep it on hold until I come up with a technique to speed-up.
So, clouds will look more realistic in YSFLIGHT on OpenGL 2.0 / ES 2.0.
I have ported more than half of the graphics code for OpenGL 2.0 / ES 2.0. Theoretically, if I finish porting everything to OpenGL ES 2.0 and write I/O functions, I should be at least able to compile and run YSFLIGHT on iOS. Writing I/O with all touch interface is another challenge, but finishing with graphics is one big step toward YSFLIGHT for iPhone and iPad. I have one and half obstacles to go. In the next version, I'm thinking to include executable binaries for:
By the way, because I am forced to use shader programming in OpenGL ES 2.0, which is a very bad specification, I am trying to add some visual effects. I have been hearing that the explosion in YSFLIGHT was too crappy. I added alpha mask to make it more like an explosion. By the way, this alpha mask was taken from a real explosion that I took photos in the past air shows. Actually, the boundary of the explosion is supposed to be obscured, but I still see octagonal boundary. I'm trying to find what's not working as expected. But, it's nicer than the previous explosion.
I think I can do something for smoke trails and clouds, but that's something I am studying right now. The brightness of the clouds and smoke trails are ok in the current form, but I want to make the boundary look more like clouds and smoke trails.
Also, runway lights will look nicer.
After spending hours during Thanksgiving break, I was able to draw and rotate F-22 in iOS Simulator! I am also making structural change to the program so that it can be somehow ported to iOS.
At least in the next version, CPU-Rendered executable will be discontinued. Instead, I will add OpenGL 2.0 support. That will give slightly better visual effects.
I also thought about porting YSFLIGHT to Microsoft Surface. But, that's a bad environment. It doesn't support OpenGL (not even ES). It requires Direct X11 at least. Direct X9 not supported. Microsoft is essentially asking to re-write whole rendering code. Microsoft has alienated bunch of programmers by dropping OpenGL support. It may not be too big a deal for Microsoft because those who have been writing code in OpenGL were not so sympathetic to Microsoft after all. But, by dropping Direct X10, Microsoft is alienating even more programmers who may have been sympathetic to Microsoft. It was ok for Microsoft to be arrogant when they were dominant. But, that's not true any more. If Microsoft is still thinking that programmers over the world will spend time for writing a program that runs only on Windows, the future of Microsoft is clouded. Microsoft must learn that they cannot afford to be arrogant any more.
Well, I was feeling strange because I didn't receive any notification from vector.co.jp and download.com. But, As I checked today, the new official version was already online. I don't know where the notifications are gone. (Or have they stopped sending a notification when the program is available online?)
Some of the bugs that are not too serious for flying haven't been fixed yet, but I wanted to make a stable official release so that everyone can use. Thank you very much for everyone for helping me debugging new features. I continue work on the left-over bugs. So, please give me some time to fix them. And, my focus now is updating the Scenery Editor. I appreciate your feed backs! (Go to Download section)
I missed my target of starting test phase by the end of January, but I am really close. Another thing I desperately wanted to add was a virtual air traffic controller. I finished a preliminary implementation. At least the ATC will guide you to the final approach course in the next release. It does not do spacing though. At least you can feel a taste of the IFR flying.
And, you will have someone to tell when to turn in the landing-practice mode. By following the ATC direction, you will not have to overshoot the localizer any longer in the low-visibility condition.
By the way, I realized that if I concentrate on the instruments, I don't notice an ATC message shown at the top left of the window. So, I added a notification sound, just like a electronic tone that you hear when you push call-cabin-attendant button in an airliner.
The following is a screenshot from the Ground-To-Air Defense Mission, which will also be added in the next release.
In the upcoming version, an aircraft carrier can have a ski-jump flight deck like HMS Invincible. Below is some screenshot of AV-8B Harrier taking off from HMS Invincible. This same data structure allows a ground object go over a bridge. A ground object cannot have multiple-storey structure (like a parking lot), but it can be achieved by stacking up multiple ground objects. I haven't tested, but theoretically it is possible. Also, an airplane can come out of an underground bunker, climb up a slope, and take off from an elevated runway.
I had to make a relatively large change in the code base. I guess a lot of bugs are hiding now. One of the things I regretted about the initial design of YSFLIGHT was class hierarchy. I was thinking that ground objects are just sort of appendix, and made the data structure for ground objects totally separated from aircrafts. But, this time, I made a lot of parts common between aircraft and ground-object data structures.
If you are a C++ programmer, probably you can understand the change by the following explanation. The data structure for aircraft properties and ground-object properties were in FsAirplaneProperty and FsGroundProperty classes, which were totally unrelated. Now, I made a class FsVehicleProperty, and moved common properties and methods from FsAirplaneProperty and FsGroundProperty to FsVehicleProperty. FsAirplaneProperty and FsGroundProperty classes are inherited from FsVehicleProperty. There are more things in common. I continue cleaning the data structure. But, I made sufficient changes that were needed to implement above new features. Well, I could implement above features with the old data structure, but what I needed was writing duplicate code for aircrafts and ground objects, which would have messed up the program. With the new data structure, I could achieve above features with cleaner and shorter code.
I want to add a bunch of more new features. I have long to-do list of user requests. I am trying to address as many of them as possible. I probably would start test phase later this month or earlier next month. At this time I cannot say for sure when I can do it. Stay tuned!
I finished a very primitive implementation of user-controlling ground objects. At this time, only a Jeep and a fuel truck can be controlled, and you can do nothing other than moving around in these vehicles. In the future, I am planning to allow a user to change vehicle, like you park your vehicle next to an airplane, open the door, and then transfer to the airplane.
Until then, you have nothing you can do in a ground object. I'll make Anti-Air Artillery and SAM site controllable. Then I can make air-defense missions.
I haven't written collision detection between user-controlling ground objects and other ground objects. To implement it, I had to make the data structure for collision detection, which I was cutting corner. Then I had to make some modifications to air-to-air collision detection according to the changes to the data structure. I have done it, and that's the current state.
Since I made door controllable, I am also thinking to make canopy of aircrafts controllable. Also, maybe it is nice to make tires visually rotate while airplane is moving on the ground. I'm thinking about these additions.
It's been a while since the last update of YSFLIGHT. You know, the development of YSFLIGHT is not so fast, rather slow. But, I'm making some progress in the development. I just want to make a status report here. At least the following changes will be in the next version.
I was thinking it's going to take long time and was not thinking I could do it for the next version. But, turned out, I could do it.
The current version of YSFLIGHT stores all Japanese messages in PNG bitmap. You can theoretically make bitmaps of your language and make your language pack. PNG bitmap is small, and storeing all the messages will not take much disk space. Nonetheless, it's not a clean solution. Also, if you want to change font size, all I could do was enlarge or shrink a bitmap, which doesn't appear nicely.
I make it a lot more cleaner in the next version. I can only prepare Japanese and English messages, but by writing a message-definition file, YSFLIGHT can show other languages. You can download sample message-definition files below. The file needs to be saved in UTF-8 encoding.
This change may not be significant for English and Japanese speakers. But, I have received E-Mails regarding YSFLIGHT from more than 30 countries. I've been wanting to support languages other than English and Japanese. I count on YSFLIGHT user communities of each country for their own message-definition file.
Base Elevation and Magnetic Variation
In the current version, Y=0 means 0ft mean-sea-level. But, if I want to make a scenery of Pittsburgh, the elevation around here is around 1200ft, and I need to cover entire map with a elevation grid, which is not very convenient. So, in the next version, you can specify base elevation for each scenery. The scenery editor will be updated together.
Also, the current version of YSFLIGHT does not take magnetic variation into account. Magnetic variation is a difference of the magnetic heading from the true heading. Here around Pittsburgh, the magnetic variation is roughly +8 degrees, means I need to add 8 degrees to the true heading to get a magnetic heading. In the new version of YSFLIGHT, you can specify magnetic heading per scenery.
I have also fixed a few bugs that have been reported since the last official version. Still big items like controllable ground objects, virtual ATCs, dynamically-generated airplanes, changing vehicle, and so on, in my todo list. I'll add those features one by one. So, I'll let you know when I make some more progress on those items. I appreciate your patience.
I have started a network server for YSFLIGHT Ver. 20110207. The address is:
It's on my desk in CMU. If you are accessing from far away, you may experience some time lag.
The server is running on Toshiba Dynabook T4-495CME, which is, I believe, nine years old. I was able to run the console server despite its age. Its optical drive is already broken, and it may break any time. If it breaks, the server will be suspended until I find a spare (and that I can use freely) PC. The server resets every six hours, and changes a field.
It is open to everyone. Enjoy!
YS FLIGHT SIMULATOR Version 20110207 is ready for download! You can download from here. Major changes are:
By the way, if you want to use YSFLIGHT on Windows 98, please download this, and follow the instruction. At this time, I don't have a PC that is running Windows 98. So, I cannot guarantee this works, but I believe (hope) this should work.
Also the source file for the sound DLL is available. If you are interested in replacing the sound effect of YSFLIGHT, you can write your own sound module (and you may want to upload to your web site so that other YSFLIGHT users can enjoy!)
Thank you very much for all you helped me finding and fixing bugs during the test period!
A few days ago, I received a report regarding an issue on sound effect in YSFLIGHT for Windows. I am reading your E-Mails. Now I am replying to about three-month old E-Mails. If you haven't received a reply from me, I'm very sorry for late reply. Please wait a little more.
I have been thinking I should use DirectSound in YSFLIGHT for Windows. Sound effect has been one of the big problems in YSFLIGHT for Windows for years. This time, I decided to finally get rid of old Windows sound functions and use DirectSound API. I have long been doubting about the right stuff of the programmers who are designing DirectX API. They are poorly designed. But, DirectSound is just for sound. It shouldn't be too bad. By the way, my expectation "it shouldn't be too bad" has been torn down by Microsoft over and over again in the past.
So, I went to MSDN and made a console application to test DirectSound API functions. But, I didn't hear anything. I checked the error code, and IDirectSoundBuffer8::Play function was returning DSERR_PRIOLEVELNEEDED. The explanation of IDirectSoundBuffer8::Play function was saying something called cooperative level must be set before using this function. Then I looked at IDirectSound8::SetCooperativeLevel function.
Huh? Why this function takes a window handle as a first parameter? Sound API is supposed to be independent of the window manager. Adding dependency from the sound API to the window-manager API is the worst possible thing. Therefore, it shouldn't be really dependent on the window. I must be able to give NULL as the window handle to IDirectSound8::SetCooperativeLevel function. Such an expectation has been torn down by Microsoft over and over again in the past. So, I gave NULL window handle to IDirectSound8::SetCooperativeLevel function. But it didn't work. I made a 64x64 dummy window and gave it to IDirectSound8::SetCooperativeLevel. Then.... It worked! Why the hell!
It's fine. How about making an invisible window and give to IDirectSound8::SetCooperativeLevel? It didn't work! I apparently need to have a visible window to use a sound API! It's impossible. How come a Microsoft programmer doesn't understand such a basic? I googled for "using DirectSound without window" or like that and was convinced that this was a fundamental problem of DirectSound. Why in the world the sound API depends on the window manager? It's beyond ridiculous! Hilarious!
Didn't you learn that you are not supposed to impose an unnecessary dependency when you design an interface in school? > Whoever designed DirectSound API
Since YSFLIGHT can be compiled and run on Windows, Linux, and MacOSX, I want to make its sound module (I mean, source files) independent from everything else. That way I can keep clean interface. However, since DirectSound API itself depends on the window manger, I cannot eliminate the dependency from my sound module to the window-handling module. I need to make sure to initialize the sound module after the main window opens. If, for whatever reason, I need to close and re-open the main window in the program (luckily I don't have to at this time), I need to make sure my window-handling module notifies my sound module. If I have some issues with the sound, how can I know which of my sound module or window-handling module is doing something bad? It is not impossible to debug, but it gets unnecessarily difficult. I give F-GRADE for DirectSound API just for this critical dependency on window manager. I might show it to my class as a bad example of poor API design.
It is ironic to me that such a programmer who doesn't understand the most basic concept is hired and getting paid by Microsoft. It is inevitable for such a giant company to end up with hiring who is not so skilled or experienced. But, such an inexperienced programmer shouldn't be designing such an important API. Microsoft's dominance may not last long.
Anyways, next version of YSFLIGHT for Windows (reluctantly) utilizes DirectSound API. So, the engine sound will not stop when you fire a gun or a missile any more.
By the way, FYI. This is the program I wrote to test and learn DirectSound functions.
Although I haven't received too many requests regarding GUI of YSFLIGHT, I am trying to improve the usage. I am trying tabbed dialog in the work-in-progress version, and it seems to be working all right. Since new weapon types are added in the next version, airplane-selection dialog was getting crowded. I think this tab feature makes the dialog organized.
I have implemented some new weapon types, high-drag bomb, chaff-flare pod, and external fuel tank.
Actually, I was debating myself whether I should add external fuel tank. With external fuel tanks, you may fly quite long time, but flying such a long time without break may be just tiring. When I made the first version of YSFLIGHT, I was thinking what I should add for the future version and thought that it may be interesting if I can make a mission like taking off from a Saudi Arabia air base and attacking a target in Iraqi desert. But, then I wondered do I really want to fly hours over the desert until I reach the target? I decided to make a map no larger than the size that takes 30 minutes to 1 hour from one end to the other at the maximum speed.
I really think to be a military pilot, you need a tremendous patience. In an actual mission, you would be over the target for very short time. Before and after that, you will need to fly in a hostile environment for hours. If you run out of your concentration when you reach the target, you will not accomplish the mission. You would need to sit in the not-so-comfortable cockpit for hours just for the short-time over your target. It requires a considerable patience.
So, I'm wondering if there is a mission that having external fuel tanks plays a significant role. Maybe a mission like delivering fuel to a friendly airplane landed an abandoned airport due to fuel exhaustion over a hostile environment? Do you think it would be an interesting mission?
Another change is a new type of short-range AAM labeled as "A-AAM" (A for Agile). I made a geometric model by looking at AIM-9X, the newest version of Sidewinder missile. The difference from the current short-range AAM is it continues tracking the target even after losing it from its own sight if the airplane that fired the missile is still tracking the same target. If you fire A-AAM from the position that you can continuously track the target, you will have much better chance of hitting the target. On the other hand, if an enemy airplane shoots an A-AAM at you, you will need to not only evading the missile but also need to get out of radar sight of the enemy airplane, or the missile will find your airplane again. Mid-range AAM will have the same functionality. So, it would be less useless than the current mid-range AAM. (And, according to my brief survey, modern air-to-air missiles really have data link between its mother airplane for better target tracking. So, it's like taking good aspects of both passive and active guidance system.)
To Add-On Creators:
FYI. In the current version of YSFLIGHT, you can specify weapon-loading points first, and then specify the total number of weapons that can be loaded later by MAXNMAAM, MAXNMAGM, etc. This loose loading specification will not work in the next version. MAXNM??? except MAXNMGUN will be ignored. The loading capacity will be specified in HRDPOINT, like:
Added 2010/08/09: You can still have MAXNM??? in the DAT file. It will be ignored, but will not give an error. Also, if you don't specify the number of units in HRDPOINT, it will be taken as one unit. So, you can use old DAT file as is, although loading capacity may change.
I'm also developing YSFLIGHT Scenery Editor. The next version will be available for Windows, Mac OSX, and Linux. I have ported all the current functionalities to the YSFLIGHT GUI library and was able to compile the program on MacOSX and Linux today. It still is iffy. I will test and correct issues.
One of my next big goals is to make Allegheny County airport, Pittsburgh International airport, and Beaver County airport. Then I want to make YSFLIGHT capable for practicing IFR approaches under vectoring by a virtual air traffic controller. But, to do that, I must be able to edit approach procedures and define air spaces in YSFLIGHT Scenery Editor. I have long way to go.
By the way, I have received some comments regarding new HUD design that the new HUD may not be readable with a low-resolution monitor. It is a legitimate concern. But, please do not worry. For a low-resolution monitor, you will be able to choose the previous HUD design from the configuration dialog.
I'm experimenting with multi smoke and multi flare dispenser. I am also considering to use particle for drawing flare. It should look nicer if I use particle. And, I enabled simultaneous use of HUD and Instrument Panel.
YSFLIGHT's head up display and instrument panel has been shabby. Not just appearance, but it was visible only when the viewpoint is in the cockpit and looking straight ahead. It was not so good. So, I'm making changes to the Head Up Display and Instrument Panel of YSFLIGHT. It will look slightly nicer than before. Also, you can change your view direction in the cockpit and you still see the instruments. (The feature will not be available in CPU-Rendered version.)
Thank you for your patience. YSFLIGHT 20100331 Official Version is ready for download. I have receive many bug reports from users during the testing period. I appreciate your help on debugging the program from my heart. You can download the latest version from the Download section.
Main changes are as follows.
Well, I spent most of the time for porting YSFLIGHT for Mac OS X. So, if you were expecting more new features, I'm sorry for not being able to address your requests more. But, now YSFLIGHT for Mac OS X is stabilized, and I restart adding new features. In fact, although I'm not receiving request for making Head Up Displays and Instrument Panel more like a real ones, I definitely want to do a make over of HUD and instruments. And, I want to add Air Traffic Controller so that I can practice approaches. I will eventually add these features when I have time.
And, I have received many useful information regarding engine output. I will try to incorporate those information in the future versions of YSFLIGHT to make engine reaction more realistic. Thank you very much for your help!
There is one thing that I cannot figure out in developing YSFLIGHT. Well, not one. There are a few things. In fact, many things.
Anyways, one of the biggest problem is the calculation of jet-engine thrust. In propeller airplane, thrust can be roughly calculated by
It is really rough. And, in fact efficiency is affected by the air speed. This equation also tells that the thrust could go up to infinity when the air speed is zero, but it doesn't happen clearly. To be accurate, I should calculate aerodynamic forces acting on each blade of the propeller. (The matter is when I set my mind to go for it.)
But, what's mysterious to me is the output of a jet engine. Jet engine produces thrust by accelerating incoming air inside the engine. The thrust is a reaction of the acceleration of the air. Therefore, the thrust is calculated as:
It implies that the thrust is maximum when the airplane is sitting still on the ground, and as it goes faster, the thrust gets smaller, which somewhat makes sense.
But, if it is true, modern airplanes like F-15 and F-22, which have more than one thrust-weight ratio, accelerates like impossible on take off. If I assume friction from the tire and aerodynamic force is small compared to the thrust (and it is in fact), the airplane can accelerate faster than free fall on take off because thrust exceeds the airplane's weight. I have seen them taking off in air shows, but they don't accelerate that fast.
Actually they may if they use truly-maximum thrust on take off in clean configuration. One of my friend said he witnessed F-15 left the ground within 300ft, then briefly accelerated before climbed up vertically in one of the air shows. I think he was in an air show of Chitose Japanese Air Force base. But, when the F-15 started the take off run, he was far away from the airplane. His estimation of 300ft is very unreliable. If you are far away from a moving object, the moving distance appears to be small even when the object moved quite long distance. So, it could have been actually 1000ft or 2000ft.
Another clue is in F-15 Eagle Modern combat aircraft written by Jeff Ethell. In his book, he wrote that a clean-configuration F-15 needs to take at least 60 degree climb angle on take off with full afterburner, or it exceeds the speed of sound during the climb. So, the airplane may accelerate like free fall on take-off run if the thrust is that strong. If it is the case, what we see in the air shows are not full afterburner. Maybe 60% thrust of the full afterburner. But, is it really the case?
My guess is the thrust from a jet engine can be maximum when the airplane is flying at certain air speed. In other words, there should be a ideal speed for a jet engine to produce maximum thrust. If I know the maximum thrust as a function of air speed, I can put it in YSFLIGHT's aerodynamic computation. But, I cannot find this information. I guess it is a confidential information for a military aircraft because this gives away the weakness of the aircraft. If you know that you are in air combat against an airplane that cannot perform well in certain air speed, then you keep that air speed and you will have an advantage. I think adding airspeed-thrust function will change the strategy of the air combat in YSFLIGHT, but at this time I cannot find a good source of finding this information.
I was thinking to make YSFLIGHT for Mac OS X an official release, and then upgrade YSFLIGHT for Windows and for Linux. But, I decided to upgrade all together. It's a minor upgrade for Windows and Linux versions, but some user-interface improvements and new visual effects may be worth an upgrade. Also, I updated F-22 model. I hope you like it. All of them are in test phase. I will start pre-release test soon.
By the way, I thought about buying a Macbook Pro for myself. It was totally impossible for me to even think about buying a Mac a few years ago. I'm working in the Department of Mechanical Engineering. As an engineer, my priority is achieving a specific goal. Appearance comes second. I hate a product that appears nice but doesn't do what it is supposed to do. On the other hand, if something is designed to achieve a specific goal, and its appearance became nice as a result of the engineering solution, I love it. That's why I love Concorde. And, my impression on Macintosh used to be something that appears nice but doesn't work. It is said that the first impression is very important. Because of my first impression, I didn't bother checking newer versions of Mac OS X for a while.
Then came a big change. Windows Vista. That was worst of the worst kind of something appears nice and doesn't work. It's troubled performance was one thing, but for me, the other problem was its changes of user interface from Windows XP. I'm a programmer. I do most of the work by keyboard. So, I learned shortcut keys of Windows XP so that I can do almost everything without moving my hand off from the home position. I didn't customize much because I knew I anyway had to clean-up and re-install the system periodically. Microsoft has made a drastic change in shortcut keys in Windows Vista. And, I think some operations that I could do with a keyboard no longer can be done without using a mouse. It's a betrayal to me.
Think this way. The time you spend for learning new user interface is absolutely total waste. In fact, absolute waste took place all over the world by countless number of workers. While they were learning new user interface, their work either stopped or slowed down. It's a enormous economic loss, which nobody has even estimated. I'm sure negative economic impact from this waste of time exceeds whatever positive impact (if exist) of Windows Vista and Windows 7.
It didn't improve my impression on Mac, but I lost a reason to stick with Windows. (Later I realized my favorite text editor hasn't been ported to Mac OS. I now have one reason to stick with Windows.) At that time, I started teaching programming in CMU. And, at least three of the students taking my class were using a Mac. I wanted to allow them to use their computers to do assignments because it would be a big pain to spend nights to do assignments in a computer cluster at school. I needed to write a simple framework that opens a OpenGL-ready window and takes keyboard/mouse input. So, I decided to study Mac OS programming.
As I studied Mac OS programming, I realized it was a different computer from Macintosh I knew. It is much nicer. It would be even nicer if it totally get rid of Objective-C. But, one thing I liked is that it is based on Free BSD. I should be able to count on its stability. (More than three times the iMac totally stopped responding to keyboard and mouse input though.) I may like Mac OS X better than Windows 7.
I was thinking to replace my 6-year old PC that I'm using at home. I came to the conclusion that it would be a perfect developing environment for me if I get a Macbook Pro, and install Windows XP (or 7) in the half of the hard drive, and install Linux by using a virtual environment. I wanted it to be portable. So, I would choose 13 inch or 15 inch model. I visited a nearby Apple store and used Macbook Pro briefly. In fact, I liked it, and I almost placed an order.
.... Until I realized there is no way to connect an eSATA hard drive to it.
I was going to invest nearly $2,000 money. I want to use it for my personal use and for work. There are good reasons that I need to plug external had drives via eSATA connection. USB 2.0 used to be fast two years ago. It is way too slow now. Firewire 800 may have been fast enough until last year, but latest hard drives can continuously transfer data faster than 800Mbps. Among current Macbook Pro line up, only 17 inch model, which is too large to carry and too expensive, can connect an external hard drive via eSATA connection by using an Express Card. In 13 inch and 15 inch models, the fastest connection of an external hard drive is Firewire 800. I also learned that older 15 inch model, late 2008 model, had an Express Card slot. Apple decided to remove it and put a SD card slot. This decision cost Apple at least one new customer. I'm pending to order Macbook Pro only because it cannot connect an eSATA hard drive. Replacing an Express Card slot with a SD card slot seems to me an obviously wrong decision. I can read/write a SD card just by plugging a tiny SD card reader to one of the USB ports. But, no USB port and Firewire port can transfer data at the speed of Express Card. If you look at the maximum speed that a Macbook Pro can transfer data to/from an external hard drive, 2009 models has been downgraded from 2008 models.
It's Apple after all. This company always stops short of delivering something performs.... It disappointed me pretty much especially because I liked Mac OS X.
If you use a laptop only for Web browsing, reading E-Mail, and watching movies, Macbook should be good enough. Most likely you don't need an eSATA connection. But, I regularly compile four hundred thousands lines of code (not YSFLIGHT), and read and write over 100MB data files for testing. Current line up of Macbook Pro is useless for my purpose. I'm ok with its processor. I'm not asking it to perform as fast as my desktop computer in my office. But, I cannot accept if its performance is limited by data-transfer rate of a hard drive.
So, I'm keeping eye on new line up of Macbook Pro, which is rumored to be released soon. I hope current Macbook users complained Apple a lot about lack of Express Card slot (or eSATA port), so that Apple paid attention. If the new 15 inch Macbook Pro comes with an Express Card slot or an eSATA slot (or I can live with a USB 3.0 slot), I would place an order immediately.
Now it can show side windows. I have added sound effect, but it sounds somewhat strange though. I have also tested network mode. I am planning to release a test version in December.
Two More Screenshots of YSFLIGHT for Mac OS X
First Two Screenshots from YSFLIGHT for Mac OS
Since I don't have my own iMac, what I'm doing is I first write code for Mac OS X just by making my best guess, and transfer files to my home directory of my CMU account, and then I walk to the Macintosh cluster in Wean Hall for compiling and testing, So, it's not moving so fast, but I am making progress little by little.
YSFLIGHT Tested on Windows 7
OpenGL was substantially slow. I didn't figure if it was specific to the PC on which I tested, or if Microsoft deliberately slowed OpenGL in order to promote Direct 3D. Maybe it is the latter case. I will not be surprised if Microsoft does such a trick.
So, in Windows 7, please use Direct 3D version.
Ubuntu Linux binary
YSFLIGHT receives Editors' Choice Award from PCFreunde.de
By the way, I have received numerous report that the latest version of YSFLIGHT for Linux does not run on recent versions of Ubuntu. I have been using CentOS 5 for compiling YSFLIGHT, but maybe it's time to switch to recent version of Ubuntu. So, I have installed Ubuntu 8.04 on my PC. I confirmed the crash, and after compiling exactly the same source code, I was able to run YSFLIGHT with no problem. I am going to upload the executable compiled on Ubuntu 8.04 here after some testing in a few days.
You can download it from here..
In this update, I totally renewed user interface. Now YSFLIGHT is almost free from Windows' user-interface functions. Also, Japanese-language pack is available. You can easily see how to make your own language (or font) pack. If you make your own language pack, I encourage you to make it public so that other people can benefit from your work. And, the Linux version has almost identical look & feel as the Windows version. Still there is a room for improvement, it is much better than the previous state (like sub-set of the Windows version.)
YSFLIGHT celebrates 10th anniversary in May 2009. So, when the current test version becomes an official version, it will be the 10th anniversary version. I also changed the look & feel of this page, too. I was using blue background, just to make it look like the color of the sky. But, after careful consideration, black letters on white background seems to be the most readable after all. Maybe the simple color scheme is the best.
YSFLIGHT originally started as a escaping-from-reality project during my preparation for Ph.D Qualifying Exam. I was a kind of student who didn't study too hard but was able to get not-too-bad grade. I was luckily able to join a good university, (and failed the test to join All Nippon Airways' pilot training program), then joined the graduate school. While I was an undergrad and was studying for master's degree, I took advantage of my programming skill, and easily got good grades in a programming-related courses, which other students were feeling like a torture. Then, I followed an advice from professors and came to the U.S. for my Ph.D. Until then, I never tried my absolute limit. However, Ph.D Qualifying Exam was way harder than I expected. That was my toughest challenge of my life to date. From August 1998 to May 1999, I studied absolutely as hard as I could. I was pushing myself to the limit. When I knew I passed the exam, for the first time in my life, I learned that a person bursts into tears from an extreme happiness. I've seen such a scene in dramas and movies, but I never experienced such feeling. Now I can say that was a very good experience, but if I had failed the exam, I would simply have burnt out and might not exist today. During that period, while I was preparing for my Ph.D Qualifying Exam, I was studying 10 hours a day excluding breaks. But, unless I had something to enjoy or relax, I wouldn't have been able to sustain that hard work. So, I started a hobby programming project because programming has been one of my biggest hobbies. That was the beginning of YSFLIGHT. Therefore, YSFLIGHT helped me maintain my mental health.
On May 14, 1999, I finally overcame my biggest challenge and passed the Ph.D Qualifying Exam. And, I released the first version of YSFLIGHT. I don't remember exact date when I released the first version, but the time stamps of the files included in the first-version archive implies that it was May 15, 1999.
When I released it, I never expected so many people from so many countries was going to download and use my program. So far, I have received E-Mails regarding YSFLIGHT from at least 31 different countries. By the way, I'm trying to reply to all the E-Mails. Sometimes it can be back logged several months though. Please wait for my reply with patience. If you haven't received a reply within six months, it could be like your E-Mail encoding was not readable in my environment, your E-Mail was blocked by your E-Mail server, or you are using a free E-Mail that is a common source of a spam E-Mail. So, in that case, please check your E-Mail configuration and/or use a different E-Mail service.
Now, I write programs for work. But, thanks to YSFLIGHT project, I still have fun with programming. I hear many times that someone who was very enthusiastic about programming begins to hate programming as soon as he/she writes programs for work. But, I believe programming, by its nature, is a fun thing to do.
I have a lot more features to add to YSFLIGHT. I plan to continue working on YSFLIGHT. So, please keep in touch, and stay tuned to YSFLIGHT.COM!
By the way, to commemorate 10th Anniversary, I uploaded the very first version of YSFLIGHT for download. 10 years ago, a display adapter with 3D-graphics acceleration was uncommon, and there was no Direct 3D. Only available executable was "CPU Rendered" version.
By the way, if you are looking for the latest version, please click here. (Not to confuse)
The following environment is required.
If you are using Windows XP Service Pack 2 and would like to use the network feature, please read this.
Following devices are recommended but not required.
These sites will make YSFLIGHT more fun.
(Disclaimer : I haven't officially released the all data formats used in YSFLIGHT. And, additional airplane, map and/or missions downloaded from these sites may make YSFLIGHT unstable. Please use those additional data by your own risk. But, I have to admit they are very skilled modellers! :-)
Following sites seems to be moved or closed. If you know the new link, please let me know and I will re-link to the new location. If you have closed your site, thank you for your work.
(If you want me to add your site here, please send me an E-Mail. Your site must have something related to YSFLIGHT to be listed here.)
When you buy a product from Amazon.com (not necessarily the product shown in the banner), please use one of the above banners to open Amazon.com web site and place an order. It gives me some referral fee, and it will be a tremendous help for maintaining YSFLIGHT project.
Here you can see some screenshots of YSFLIGHT.
(Click to enlarge)