A downloadable game for Windows

A highly precise 3D flight simulator and fighter aircraft control software for Windows, targeting enthusiasts and available on software distribution sites such as Japan's "Vector" and "itch.io". Features: Highly precise aerodynamic calculations are performed, and it is equipped with extremely advanced simulation functions such as addition of funnels (remote guided weapons) to fire control, display of engine efficiency graphs, adjustment of maximum angle of attack, and display of ground surface collision avoidance algorithms. Development specifications: Source code and the "Blue Impulse 3DG SDK" are attached, and it also has an aspect as software for development and verification for core aviation enthusiasts. Operating environment: It is compatible with environments such as Windows XP / 7 / 8 / 10 / 11.


日本のソフトウェア流通サイト「Vector」や「itch.io」などで公開されている、マニア向けの超精密なWindows用3Dフライトシミュレータ・戦闘機操縦ソフトです。特徴: 超精密な空力計算が施されており、火気管制へのファネル(遠隔誘導兵器)追加、エンジン効率グラフの表示、最大迎え角の調節、地表衝突回避アルゴリズムの表示など、非常に高度なシミュレーション機能を備えています。開発仕様: ソースコードや「Blue Impulse 3DG SDK」が付属している、コアな航空マニア向けの開発・検証用ソフトとしての側面もあります。動作環境: Windows XP / 7 / 8 / 10 / 11 などの環境に対応しています。

Google AI Overviews



■no sounds, low polygons, no textures

■Windows joystick OK

■the included SDK might be too old to build...

how to use Funnel

■code sample

// Fixed directional control issue during ground taxiing. 1998.2.18

//

// Cause: Operating direction keys in the Main*.c module assigned values to the position/attitude recording 

// structure as if a bank angle were applied even on the ground. When motion calculations were performed 

// based on this, strong sideslip occurred due to low speed.

// Solution: Addressed by forcibly setting the bank angle to 0 degrees at ground altitude at the beginning of the motion calculation function.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <stddef.h>

#include <math.h>

//#include <impulse.h>

#include <impulse2g.h>/////

#include <hotas.h>

#include <skyhawk.h>

#include <aurora.h>

//#include "F-16C.h"

#include "DogFight.h"

double Lift;

BIANGLE nose;

struct HPB {

    double h,p,b;

    };

struct HPB dnosed;//,lastdnosed; // Nose rotational angular velocity (deg/sec)

extern struct AIRCRAFTDATA

{

    double aspectratio,wingarea,weight,

        mil_thrust,aft_thrust,

        lc,lc_approach,cl_aoa0,cd0,aoaStall,

        cd_airbrake,cd_gear,cd_flap,

        maxSeaLevelSpeed,maxAeroForce,

        maxMach,

        dRollSpeedK,maxRollSpeedPerSecond,

        tailArea,tailMomentArm,pitchInertia,

        vArea,vMomentArm,yawInertia;

};

extern struct AIRCRAFTDATA data[2];

extern struct CONTROL {    // Structure type representing control status such as steering and throttle.

    double ail;

    double elv;

    double airbrake;

    double geardown;

    double thr;

    double ab;

} ;

extern struct CONTROL playerCtr;

const double toropopose=11000.0;

double forwards,upwards,sidewards; // Global variables for rendering/display in draw.

double mu[2]={0.025F,0.3F}; // Friction coefficient μ during ground roll. [0] Dry runway, [1] Brakes applied. cf. p.373, p.409

extern struct KAITEN {double h,p,b;}; // Structure representing rotational angular velocity

extern struct KAITEN kaiten; // Player

extern struct KAITEN enmKaiten[MAX_N_ENEMY]; // Enemy aircraft

double elevatorFBW;

int getTerrainElevation(double *terElv,BIPOINT *samplingpoint); // Assigns elevation of corresponding terrmesh[][] to terElv. If out of range, elevation = 0. Return value is BI_IN if p is within *ter object range, BI_OUT if outside.

int getTerrainElevationWithRand(double *terElv,BIPOINT *samplingpoint); // Assigns elevation of corresponding terrmesh[][] to terElv. If out of range, elevation = 0. Return value is BI_IN if p is within *ter object range, BI_OUT if outside.

double fbw(int aircraftType,double currentElevator,double currentElevatorAOA,double currentAOA,double objectiveAOA,double currentAOAIncreasePerSec,double lastAOABetweenObjAndCnt); // Return value is the elevator angle after FBW processing.

double rotatePlane(BIPOINT *movement_return,int aircraftType,double elevator,double rudder,long last_dpitch,long last_dhead,long last_bank); // Return value is tentatively the actual angle of attack (degrees).

void aerodynamics(BIPOINT *movement_return,int aircraftType,BIPOSATT *mtn,double thrust,double aoad); // Returns rotational velocity to BIPOINT *movement_return.

long direct(int aircraftType,BIPOSATT *mtn,double thrust,double aoad);

void symbol(BIPOINTS *s,double value,BICOLOR *color,int precision); // Converts double value to a string with "precision" digits and draws it at screen coordinates &s.

double meanFlapperonDeg(double aoad,double flap, double playerAileron);

double airDensity(double alt) // Returns air density ρ at altitude = alt (meters) based on the International Standard Atmosphere "Conventional Standard Atmosphere".

{

    if (alt<toropopose)    return (.12492*pow((1.0F-2.2557e-5*alt),4.2561)); // (.12492*(1-2.2557e-5*alt)^4.2561);

    else    return (.037109*exp((toropopose-alt)/6341.6)); // (.037109*E^((toropopose-alt)/6341.6));

}

double airTemp(double alt) // Returns air temperature (Celsius) at altitude = alt (meters) based on the International Standard Atmosphere "Conventional Standard Atmosphere".

{

    if (alt<toropopose)        return (288.16-.0065*alt)-273.16;

    else    return 216.66-273.16;

}

double soundSpeed(double airTemp)  // Returns the speed of sound (m/s) at air temperature = airTemp (Celsius).

{

    return 20.05*sqrt(airTemp+216.66);

}

double mach(double alt,double speed)

{

    return speed/soundSpeed(airTemp(alt));

}

double aeroForce(double alt,double speed) // Standard aerodynamic force per unit area (dynamic pressure). Used for airframe strength limit calculations, roll acceleration calculations, etc.

{

    return  1.0 / 2.0 * airDensity(alt) * speed * speed;

}

double aeroForceToSpeed(double alt,double aeroforce) // Returns speed that generates a specific aerodynamic force at a specific altitude.

{

    return sqrt(2.0*aeroforce/airDensity(alt));

}

double deltaP(double alt) // Atmospheric pressure. Returns ratio relative to sea level pressure.

{

    if (alt<toropopose) return pow((1-0.000022557*alt),5.2561);

    else return 0.22336*exp((toropopose-alt)/6341.6);

}

double TasToCas(double alt,double tas) // Calculates Calibrated AirSpeed from True AirSpeed.

{

//    return tas*sqrt(deltaP(alt)); // Seems correct. "Depends on sea level pressure P0 and flight altitude pressure P, TAS=EAS*√(P0/P)"

//    return tas*aeroForce(alt,100.0)/aeroForce(0.0,100.0); // Seems incorrect.

    return tas*sqrt(airDensity(alt)/airDensity(0.0)); // 20080831

}

double cl(int aircraftType,double aoad) // Returns lift coefficient. Argument is angle of attack (degrees).

{

    extern double flap;

    extern int playerGorA;

    double cL;

    if((aoad<=data[aircraftType].aoaStall)&&(aoad>=-data[aircraftType].aoaStall))    // Pre-stall

    {

        if(aircraftType==Su27)

        {

            cL=data[aircraftType].cl_aoa0 + data[aircraftType].lc * aoad;

        }

        if(aircraftType==F16C)

        {

            cL=data[aircraftType].cl_aoa0 + ( data[aircraftType].lc * aoad )*(1.0-flap) + ( data[aircraftType].lc_approach * aoad )*(flap);

        }

        if(aircraftType==F16C && playerGorA==Ground) cL=BiLarger(cL,data[aircraftType].cl_aoa0+15.0/40.0*data[aircraftType].lc_approach);

    }

    

    if(aoad>data[aircraftType].aoaStall)                                        // Post-stall                                                                                                  // Post-stall

    {

        double aoa_overStall,maxcl;

        aoa_overStall=aoad-data[aircraftType].aoaStall;

        if(aircraftType==Su27)

        {

            maxcl=data[aircraftType].cl_aoa0 + data[aircraftType].lc * data[aircraftType].aoaStall;

            cL=maxcl-(data[aircraftType].cl_aoa0 + data[aircraftType].lc * aoa_overStall);

        }

        if(aircraftType==F16C)

        {

            maxcl=data[aircraftType].cl_aoa0 + ( data[aircraftType].lc * data[aircraftType].aoaStall )*(1.0-flap) + ( data[aircraftType].lc_approach * data[aircraftType].aoaStall )*(flap);

            cL=maxcl-(data[aircraftType].cl_aoa0 + ( data[aircraftType].lc * aoa_overStall )*(1.0-flap) + ( data[aircraftType].lc_approach * aoa_overStall )*(flap) );

        }

        cL=BiLarger(cL, 0.0);

    }

    

    if(aoad<-data[aircraftType].aoaStall)                                        // Post-inverted stall

    {

        double aoa_overStall,maxcl;

        aoa_overStall=aoad-(-data[aircraftType].aoaStall);

        if(aircraftType==Su27)

        {

            maxcl=data[aircraftType].cl_aoa0 + data[aircraftType].lc * data[aircraftType].aoaStall;

            cL=-maxcl-(data[aircraftType].cl_aoa0 + data[aircraftType].lc * aoa_overStall );

        }

        if(aircraftType==F16C)

        {

            maxcl=data[aircraftType].cl_aoa0 + ( data[aircraftType].lc * data[aircraftType].aoaStall )*(1.0-flap) + ( data[aircraftType].lc_approach * data[aircraftType].aoaStall )*(flap);

            cL=-maxcl-(data[aircraftType].cl_aoa0 + ( data[aircraftType].lc * aoa_overStall )*(1.0-flap) + ( data[aircraftType].lc_approach * aoa_overStall )*(flap) );

        }

        cL=BiSmaller(cL, 0.0);

    }

    return cL; // data[aircraftType].cl_aoa0 + data[aircraftType].lc * aoad;

}

double lift(int aircraftType,double speed,double aoad,double alt) // Returns lift.

{

    return cl(aircraftType,aoad) / 2.0 * airDensity(alt) * speed * speed * data[aircraftType].wingarea;

}

double cdi(int aircraftType,double aoad) // Returns induced drag coefficient.

{

    return cl(aircraftType,aoad) * cl(aircraftType,aoad) / YSPI / data[aircraftType].aspectratio;

}

double cd(int aircraftType,double aoad,double airBrake) // Returns total drag coefficient. airBrake is speedbrake deployment ratio. Drag coefficient other than induced drag "CD0" is a macro.

{

    double cD,cDOverStall;

    double aoa_overStall; // =aoad-(-data[aircraftType].aoaStall);

    double cDgear;

    extern double gear;

    extern double flap;

    extern double playerAileron;

    if(aircraftType==Su27)

    {

        cD=data[aircraftType].cd0 + cdi(aircraftType,aoad) + data[aircraftType].cd_airbrake * airBrake;

    }

    if(aircraftType==F16C)

    {

        cDgear=BiLarger(gear,0.0);

        cD=data[aircraftType].cd0 + cdi(aircraftType,aoad) + data[aircraftType].cd_airbrake * airBrake + data[aircraftType].cd_gear * cDgear + BiAbs(meanFlapperonDeg(aoad,flap,playerAileron))*data[aircraftType].cd_flap/40.0; // 40.0 is max flap deflection angle.

    }

    if(aoad>data[aircraftType].aoaStall) // Form drag increment due to stall

    {

        aoa_overStall=aoad-data[aircraftType].aoaStall;

        cDOverStall=aoa_overStall*0.03; // Drag from non-wing components included here as well.

        cD+=cDOverStall;

    }

    if(aoad<-data[aircraftType].aoaStall) // Form drag increment due to inverted stall

    {

        aoa_overStall=aoad-(-data[aircraftType].aoaStall);

        cDOverStall=-aoa_overStall*0.03;

        cD+=cDOverStall;

    }

    return cD;

}

double drag(int aircraftType,double speed,double aoad,double alt,double airBrake) // Returns drag. Calculates total drag coefficient internally.

{

    return cd(aircraftType,aoad,airBrake) / 2.0 * airDensity(alt) * speed*speed * data[aircraftType].wingarea;

    //return cd(aoad,airBrake) / 2.0F * airDensity(alt) * speed*speed * WINGAREA;

}

double engine_efficiency(double speed, double alt, double vw,double throttle) // Returns engine efficiency corresponding to airspeed speed (m/s), altitude alt (m), and exhaust velocity vw (m/s).

                                                                  ・

                                                                  ・

                                                                  ・
                                                                  ・
                                                                  ・

                                                                  ・

                                                                  ・

                                                                  ・

Updated 21 hours ago
Published 4 days ago
StatusReleased
PlatformsWindows
Authormono2315
GenreSimulation
Tagsdogfight, f-16, Flight, free, Open Source, sdk-included, Singleplayer, sourcecode, su-27

Download

Download
DGFT Professional.zip 64 MB

Development log

Leave a comment

Log in with itch.io to leave a comment.