VIDEO SUPPORT FOR AI COMMS

Post Reply
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

VIDEO SUPPORT FOR AI COMMS

Post by ezee »

As darkvixen is doing a really good work with animations and cinematics , i found useful
to have video enabled for the comms display .

That is not particulary easy , and worst under windows , that need to fix some problems
in the ffmpeg headers .

So i open this thread , where i will try to comment my progres using the actual ffmpeg implementation , then add support for a new lib , libtheoraplayer , that open a lot of new features .

What i will report will be under the windows OS , i hope some other devs from different OS
will be interested too .

FIRST : the ffmpeg lib for windows
Zeranoe's FFmpeg Builds Home Page: < http://ffmpeg.zeranoe.com/builds/ >
Other OS : http://ffmpeg.org/

Once downloaded , the project preprocessor options must be updated like this :
HAVE_AVIO_H
HAVE_AVFORMAT_H
HAVE_AVCODEC_H
HAVE_FFMPEG
And you must add the path to the ffmpeg includes too .

When that will be done , there will be errors to fix in the code :

Fixs :
fatal error C1083: Cannot open include file: 'inttypes.h': No such file or directory
http://ffmpeg.zeranoe.com/forum/viewtopic.php?f=5&t=130
: error C3861: 'av_open_input_file': identifier not found
It is solved in this thread : http://ffmpeg.zeranoe.com/forum/viewtopic.php?f=7&t=461
It's deprecated; use avformat_open_input().
mmm ... after that , error again :
1>..\..\vegastrike\src\gfx\vid_file.cpp(218) : error C2660: 'avformat_open_input' : function does not take 5 arguments
As it seem that the VegaStrike code uses an old ffmpeg lib , there will be a lot of changes
to make ... I won't describe all the process , but i'll report if i had success or not .
( as i'm not sure that ffmpeg is working at all in vegastrike ...)

stack overflow help to migrate :
http://stackoverflow.com/questions/1744 ... ing-ffmpeg
more later ...
:wink:

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by ezee »

:!: BIG UNCOMPATIBILITY PROBLEM

Well , i'm stuck with the last ffmpeg lib , because all of the lib has changed in 10 years ...
I face a conceptual problem that is very difficult to solve :
extern "C" int _url_open( URLContext *h, const char *filename, int flags )
URLContext was the main object used to load a file .
Now this URLContext object no more exist , but is replaced with AVIOContext

I changed the code to be like this
extern "C" int _url_open( AVIOContext *h, const char *filename, int flags )

{
if (strncmp( filename, "vsfile:", 7 ) != 0)
return AVERROR( ENOENT );

const char *type = strchr( filename+7, '|' );
std::string path( filename+7, type ? type-filename-7 : strlen( filename+7 ) );
VSFileType vstype = ( (type && *type) ? (VSFileType) atoi( type+1 ) : VideoFile);

VSFile *f = new VSFile();
if (f->OpenReadOnly( path, vstype ) > Ok) {
delete f;
return AVERROR( ENOENT );
} else {
h->priv_data = f;
return 0;
}
}
But the data in red no more exist in the actual api , and i don't know any equivalent .
So the only way to use properly FFMPEG with vegastrike is to STRICTLY USE THE RIGHT LIB VERSION WICH IS : ???????

Please help .
:lol:

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
loki1950
The Shepherd
Posts: 5841
Joined: Fri May 13, 2005 8:37 pm
Location: Ottawa
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by loki1950 »

It doesn't build with ffmpeg under Linux either with the latest version and committing any code is a bit problematic ATM as only klauss and pheonixstorm currently have full access and neither is very active they have jobs that eat their time.

Enjoy the Choice :)
my box::HP Envy i5-6400 @2Q70GHzx4 8 Gb ram/1 Tb(Win10 64)/3 Tb Mint 19.2/GTX745 4Gb acer S243HL K222HQL
Q8200/Asus P5QDLX/8 Gb ram/WD 2Tb 2-500 G HD/GF GT640 2Gb Mint 17.3 64 bit Win 10 32 bit acer and Lenovo ideapad 320-15ARB Win 10/Mint 19.2
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by ezee »

Yeah , i imagine that well .
My goal is to use the libtheoraplayer , initially a plugin for Ogre .
Kresimir , the author , said to me to he doesn't have time to continue himself the Ogre plugin, but that he would help me if i decided to use/maintain it .

So libtheoraplayer is a good solution even for the hypothetic VS Ogre port .
IF someone knows wich version of FFMPEG to use , just post it here .

I will now concentrate in libtheoraplayer , while i have not a working Vegastrike exemple of
writing frame data in opengl .

I will try ...
:wink:

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by ezee »

:!: I started to implement the libtheoraplayer , and i have good results ( no display because
i don't know already where to do the updates of frames in vs ... )

Good log :
In path D:\program\experimental\data
Windows version 5 1
Vega Strike
See http://www.gnu.org/copyleft/gpl.html for license details.

Using .vegastrike as the home directory
['D:\\program\\experimental\\data\\python27.zip', 'D:\\program files\\Lib', 'D:\\program files\\DLLs', 'D:\\program files\\Lib\\lib-tk', '', 'D:\\program\\experimental\\data']
['D:\\program\\experimental\\data\\modules\\builtin', 'D:\\program\\experimental\\data\\modules\\quests', 'D:\\program\\experimental\\data\\modules\\missions', 'D:\\program\\experimental\\data\\modules\\ai', 'D:\\program\\experimental\\data\\modules', 'D:\\program\\experimental\\data\\bases', 'D:\\program\\experimental\\data\\python27.zip', 'D:\\program files\\Lib', 'D:\\program files\\DLLs', 'D:\\program files\\Lib\\lib-tk', '', 'D:\\program\\experimental\\data']
1 joysticks were found.

The names of the joysticks are:
SideWinder Joystick
axes: 3 buttons: 8 hats: 0
using NV_CUBE_MAP
Compiling python module modules/dj.py
Initializing optimizer
Compilation of technique fixed successful
Compilation of technique default successful
Compilation of technique default_simple successful
pox 119990000000.000000 -9000000.000000 -109990000000.000000
INFO: Missing video stream aerapit.ogg
MESSAGE FROM FFMPEG lol

Initializing Theora Playback Library (1.0 RC4)
- libtheora version: Xiph.Org libtheora 1.2.0alpha 20100924 (Ptalarbvorm)
- libvorbis version: Xiph.Org libVorbis 1.3.2
------------------------------------
Creating video from data source: darkvixen.ogg
libtheora seem really easy to use , if i can find where update the frames , i think that
we'll have a new video player .
:wink:

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by ezee »

As the goal is to have AI comms as video file , i searched for the implementation ( and loading ... ) of such files , and found :
void VDU::DrawComm()
{
if (comm_ani != NULL) {
GFXDisable( TEXTURE1 );
GFXEnable( TEXTURE0 );
GFXDisable( LIGHTING );

static bool switch_back_from_comms =
XMLSupport::parse_bool( vs_config->getVariable( "graphics", "hud", "switch_back_from_comms", "true" ) );

comm_ani->DrawAsVSSprite( this );
if ( comm_ani->Done() ) {
if (thismode.size() > 1) {
if (switch_back_from_comms) {
thismode.pop_back();
} else {
unsigned int blah = thismode.back();
thismode.pop_back();
thismode.back() = blah;
}
}
communicating.SetUnit( NULL );
comm_ani = NULL;
}
GFXDisable( TEXTURE0 );
} else {
static string message_prefix =
XMLSupport::escaped_string( vs_config->getVariable( "graphics", "hud", "message_prefix", "" ) );
static float background_alpha =
XMLSupport::parse_float( vs_config->getVariable( "graphics", "hud", "text_background_alpha", "0.0625" ) );
GFXColor tpbg = tp->bgcol;
bool automatte = (0 == tpbg.a);
if (automatte) tp->bgcol = GFXColor( 0, 0, 0, background_alpha );
tp->Draw( message_prefix
+MangleString( _Universe->AccessCockpit()->communication_choices.c_str(),
_Universe->AccessCamera()->GetNebula()
!= NULL ? .4 : 0 ), scrolloffset, true, false, automatte );
tp->bgcol = tpbg;
}
}
So probably the VDU class should be updated for enable video comm display instead of VSSprite.

Also a ( bad ? ) news is that Animation::DrawAsVSSprite( VSSprite *spr ) shows that the
core rendering operations is done here , and only defined for sprite animation :
I will certainly need to code the opengl ops for the rendering ( i was hoping that this was
already done :mrgreen: ) .

It's also in that function that there is the transparency bug ...
void Animation::DrawAsVSSprite( VSSprite *spr )
{
if (!spr)
return;
if (g_game.use_animations != 0 || g_game.use_textures != 0) {
//unsigned char alphamaps=ani_alpha;
GFXPushBlendMode();
if (options&ani_alpha) <<- bug here
GFXBlendMode( SRCALPHA, INVSRCALPHA );
else
GFXBlendMode( ONE, ZERO );
size_t lyr;
size_t numlayers = numLayers();
bool multitex = (numlayers > 1);
size_t numpasses = numPasses();
float ms = mintcoord.i, Ms = maxtcoord.i;
float mt = mintcoord.j, Mt = maxtcoord.j;
GFXDisable( CULLFACE );
Vector ll, lr, ur, ul;
spr->DrawHere( ll, lr, ur, ul );
BLENDFUNC src, dst;
GFXGetBlendMode( src, dst );
for (lyr = 0; (lyr < gl_options.Multitexture) || (lyr < numlayers); lyr++) {
GFXToggleTexture( (lyr < numlayers), lyr );
if (lyr < numlayers) GFXTextureCoordGenMode( lyr, NO_GEN, NULL, NULL );
}
for (size_t pass = 0; pass < numpasses; pass++)
if ( SetupPass( pass, 0, src, dst ) ) {
MakeActive( 0, pass );
GFXTextureEnv( 0, GFXMODULATETEXTURE );
GFXBegin( GFXQUAD );
if (!multitex) GFXTexCoord2f( ms, Mt );

else GFXTexCoord4f( ms, Mt, ms, Mt );
GFXVertexf( ll );
if (!multitex) GFXTexCoord2f( Ms, Mt );

else GFXTexCoord4f( Ms, Mt, Ms, Mt );
GFXVertexf( lr );
if (!multitex) GFXTexCoord2f( Ms, mt );

else GFXTexCoord4f( Ms, mt, Ms, mt );
GFXVertexf( ur );
if (!multitex) GFXTexCoord2f( ms, mt );

else GFXTexCoord4f( ms, mt, ms, mt );
GFXVertexf( ul );
GFXEnd();
}
SetupPass( -1, 0, src, dst );
for (lyr = 0; lyr < numlayers; lyr++)
GFXToggleTexture( false, lyr );
GFXEnable( CULLFACE );
GFXPopBlendMode();
}
}
TODO : find where and how actual sprites are associated with comm text messages ,
and add video support .

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by ezee »

:!: I think i've found where the video is updated in the source code :
Doc : http://spacetechs.free.fr/VEGASTRIKEDEV ... tml#l00054

It's in ani_texture.cpp , line 143 :
...
...
try {
//vidSource leaves frame data in its framebuffer, and our image data is initialized
//to point to that framebuffer, so all we need to do is transfer it to the GL.

if ( vidSource->seek( curtime ) ) {
//Override compression options temporarily
//NOTE: This is ugly, but otherwise we would have to hack Texture way too much,
//or double the code. Let's use this then.
int ocompression = gl_options.compression;
gl_options.compression = 0;

VSFileSystem::vs_dprintf( 1, "Transferring video frame\n" );
Transfer( 65535, GFXFALSE );

gl_options.compression = ocompression;
}
}
And so , the Transfer inject the data into opengl ?
void Texture::Transfer( int maxdimension, GFXBOOL detailtexture )
{
//Implement this in D3D
//if(mode == _8BIT)
//glColorTable(GL_SHARED_TEXTURE_PALETTE_EXT, GL_RGB8, 256, GL_RGB, GL_UNSIGNED_BYTE, palette);

TEXTUREFORMAT internformat;
switch (mode)
{
//send DXT1,DXT3,DXT5 ...need to have the function call other glcompressedTexImage2D function
case _DXT1:
internformat = DXT1;
break;
case _DXT1RGBA:
internformat = DXT1RGBA;
break;
case _DXT3:
internformat = DXT3;
break;
case _DXT5:
internformat = DXT5;
break;
case _24BITRGBA:
internformat = RGBA32;
break;
case _24BIT:
internformat = RGB24;
break;
case _8BIT:
internformat = PALETTE8;
break;
default:
return;
}
if (img_sides == SIDE_SINGLE) { // probably our case
GFXTransferTexture( data, name, sizeX, sizeY, internformat, image_target, maxdimension, detailtexture );
} else {
GFXTransferTexture( data, name, sizeX, sizeY, internformat, CUBEMAP_POSITIVE_X, maxdimension, detailtexture, 0 );
GFXTransferTexture( data, name, sizeX, sizeY, internformat, CUBEMAP_NEGATIVE_X, maxdimension, detailtexture, 1 );
GFXTransferTexture( data, name, sizeX, sizeY, internformat, CUBEMAP_POSITIVE_Y, maxdimension, detailtexture, 2 );
GFXTransferTexture( data, name, sizeX, sizeY, internformat, CUBEMAP_NEGATIVE_Y, maxdimension, detailtexture, 3 );
GFXTransferTexture( data, name, sizeX, sizeY, internformat, CUBEMAP_POSITIVE_Z, maxdimension, detailtexture, 4 );
GFXTransferTexture( data, name, sizeX, sizeY, internformat, CUBEMAP_NEGATIVE_Z, maxdimension, detailtexture, 5 );
}
}

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
DarkVixen
Bounty Hunter
Bounty Hunter
Posts: 152
Joined: Sun Jul 28, 2013 12:16 am
Location: Los Angeles, CA, USA

Re: VIDEO SUPPORT FOR AI COMMS

Post by DarkVixen »

I hope we do get video support soon, it looks like we are making some progress and ezee has done a lot of digging and spent time to understand the code. So again, I want to nominate ezee as someone having access to the VS code in svn to make updates. :)
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by ezee »

Thank you .
As vega strike is an open source project , everybody have access in read mode to the source files , for numerous reasons ( learning , copying , ...) , the write access being reserved to the dev team .

I'm not sure that i want to be a member of that dev team , for say the truth , or talk
like an aera , i don't like the actual management .

But i like the vegastrike project , and i try to contribute to it the best i can .
Some days i ask myself " why are you doing that ? " , and the answer is " for the experience " . The exchange of ideas we have , technically and artistically , is the main reason for me to being there .

I'm not this kind of guy who will claim " hey , look what i can do " , or let people think " woaw , this guy is amazing " . I'm just a dreamer that learn how to realize his dreams .
And like John lennon said , a dream that you share is not a dream but a reality .

That's why i'm still writing my comments , just to be there and create something , in the hope that another dreamer will be in the same frequency ...

Back to the subject , when i study the content of the communications folder ,
in aera.xml for example , i notice that to every text node is coupled a path to a soundfile.
</node>
<node text="You should have been a diplomat, you have a liar's tongue!" text1="I regret only the expense of my ammunition." relationship="-.03125"><!-- node 18 (trying to appease, but failing)-->
<sound file="communications/sounds/aera/aera_you-should-have-been.ogg" sex="0"/>
<sound file="communications/sounds/aera/aera_i-regret-only.ogg" sex="0"/>
<edge index="12"/>
<edge index="13"/>
<edge index="14"/>
<edge index="15"/>
But there is no line for .ani , nor .ogg ( video i mean ).

I believe that this will be the first location to receive modifications in the form of a new
line , in the style of :
<video file= "path to video.ogg " sex="0"/>

So instead to have only a sound file declaration , we could have a video too .
The program then should load a video only if the video line exists .
But it's too early to enter in the details of the code now .

That is just the direction where i look at .
:)
Last edited by ezee on Fri May 09, 2014 3:37 pm, edited 1 time in total.

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
DarkVixen
Bounty Hunter
Bounty Hunter
Posts: 152
Joined: Sun Jul 28, 2013 12:16 am
Location: Los Angeles, CA, USA

Re: VIDEO SUPPORT FOR AI COMMS

Post by DarkVixen »

I always thought artists, engineers, and other bright minds contributed to these open source project to put on their resume? (in addition to the learning experience of course). :)

About the video file, I could add audio from the speech files to the theora videos, that way we only have one .ogg file per comm animation? That way we don't need to modify any data files.
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by ezee »

Code: Select all

About the video file, I could add audio from the speech files to the theora videos, that way we only have one .ogg file per comm animation? That way we don't need to modify any data files.
It's a good idea , and libtheoraplayer can support Audio/Video , but i don't know right now
if libtheora create his audio interface from the video file , or from a separate audio that is mixed in the rendering loop .
I'll check that .

But now i have problems with the implementation in vegastrike , it seem that in the python
side , the frames are used as VSSprites , not in raw frame buffer .
So i need to find the core implementation from ffmpeg , but that is hidden when i don't set
the HAVE_FFMPEG flag .
And if i use the flag , i got compile errors because i'm not using the same lib version number... :mrgreen:

Very complicated , when that could be much simpler .
The most difficult is to figure out how VS was designed for video , and how many c++ classes and python modules are involved .

I just discovered that the Videos rooms are launched by using the GUY.py , that calls c++ , but guy.py is called by main_menu.py , that is called by main_menu.mission , etc...

It's like i must know every line of code to be able to use it , that will take time ...
:?

edit : My last debug log :
EZEE VIDEO DEBUG
In AnimatedTexture::CreateVideoTexture , opening : darkvixen.ogg
LoadVideoSource darkvixen.ogg ...
In AnimatedTexture::LoadVideoSource try load darkvixen.ogg ...
Traceback (most recent call last):
File "main_menunightprivateer.py", line 315, in <module>
File "d:\program\experimental\data\modules\GUI.py", line 390, in broadcastMessage
self.objects[1].onMessage(message,params)
File "d:\program\experimental\data\modules\GUI.py", line 1802, in onMessage
if not GUIStaticImage.onMessage(self, message, params):
File "d:\program\experimental\data\modules\GUI.py", line 773, in onMessage
self.onDraw(params)
File "d:\program\experimental\data\modules\GUI.py", line 794, in onDraw
self.draw()
File "d:\program\experimental\data\modules\GUI.py", line 1739, in draw
self.spritestate = Base.VideoStream(self.room.getIndex(),self.index,self.sprite[0],x,y,w,h)
RuntimeError: unidentifiable C++ exception


And that is an other implementation , kind of high-level , found in the base_util.cpp :
bool VideoStream( int room, std::string index, std::string streamfile, float x, float y, float w, float h )
{
BaseInterface::Room *newroom = CheckRoom( room );
if (!newroom) {
fprintf(stderr, "ERROR: Room not found!!\n");
return false;
}

BaseInterface::Room::BaseVSMovie *newobj = new BaseInterface::Room::BaseVSMovie( streamfile, index );
newobj->SetPos( x, y );
newobj->SetSize( w, h );


I think the failure actually comes from BaseInterface::Room::BaseVSMovie ,
i will dig on that .

The dig :
BaseInterface::Room::BaseVSMovie::BaseVSMovie( const std::string &moviefile, const std::string &ind ) :
BaseVSSprite( ind, VSSprite( AnimatedTexture::CreateVideoTexture( moviefile ), 0, 0, 2, 2, 0, 0, true ) )
{
playing = false;
soundscene = "video";
if (g_game.sound_enabled && spr.LoadSuccess()) {
soundsource = BaseUtil::CreateVideoSoundStream( moviefile, soundscene );
spr.SetTimeSource( soundsource );
} else {
spr.Reset();
}
SetHidePointer(true);
}


VSSprite( AnimatedTexture::CreateVideoTexture( moviefile ) seem to be the actual problem .

And we have a start of information about Audio and Video stream in CreateVideoSoundStream( const std::string &afile, const std::string &scene )

Tracing that we'll know if the sound is extracted from the video or loaded in a separate file.

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by ezee »

:!: CreateVideoTexture( moviefile ) is the part of code that fails inside of
BaseVSSprite( ind, VSSprite( AnimatedTexture::CreateVideoTexture( moviefile ), 0, 0, 2, 2, 0, 0, true )
So the high level python interface is working good , the failure occurs in the core c++ ,
and seem to be on my implementation of libtheoraplayer ... :mrgreen:

stderr mog :
EZEE VIDEO DEBUG
In AnimatedTexture::CreateVideoTexture , opening : darkvixen.ogg
LoadVideoSource darkvixen.ogg ...
In AnimatedTexture::LoadVideoSource try load darkvixen.ogg ...

EZEE VIDEO DEBUG --------------VidFile_theora::open(std::string path)

clip duration = 0
It is probably a good news , as for now the VS system is working fine .
The video clip is not loaded in the theoraplayer , i suspect path in
VidFile_theora::open(std::string path)
to be wrong ...
An exception is thrown from somewhere , probably here :
void VidFile::open( const std::string &path, size_t maxDimension, bool forcePOT ) throw (Exception)
complicated ...

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by ezee »

:!: IMPORTANT TECHNICAL NOTE :!:

About frame buffer formats ( use by VS and libtheora ) , i have found the core of it :
Transfers texture to the graphics card with given buffer in previously specified format. Scales texture approrpiately to Max texture sizes gotten from vid card
GFXBOOL GFXTransferTexture
It was hard to find , but i think the datas will match :
In libtheoraplayer :
unsigned char* TheoraVideoFrame::getBuffer()
and in Vegastrike using the GFX lib
GFXTransferTexture
GFXBOOL GFXTransferTexture ( unsigned char * buffer,...,...)
Used in void Texture::Transfer( int maxdimension, GFXBOOL detailtexture ) , probably launched in void AnimatedTexture::MakeActive( int stage, int pass )

So when i will have a valid theoraclip object , i know where it will be updated .

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by ezee »

Little progress , no more crash , the video file seem to be accepted by the python side ,
but not played in the c++ side :

last debug log :
LOAD SUCCESS FOR VIDEO FILE
Creating video from data source: D:/program/experimental/data/movies/darkvixen.ogg

LOAD SUCCESS FOR VIDEO FILE
INFO: Added video stream darkvixen.ogg

In Guy.py line 1744: SetVideoCallback...

In Guy.py : setAspectRatio...

In Guy.py : Prepare to play ...

Force feedback support disabled when compiled
Loading active missions True
IS NOW AT Special/Empty

Launching bases for Special/Empty
Adding news
Thank you for playing!
Writing Save Game Autosave-main_menu

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by ezee »

:!: I have a problem with the sound now .
It appear that a sound object is automatically created with the video file , and stored in
the audio scene manager .
But the original ffmpeg impl was doing some initialisation somewhere i guess , thing that i don't actually do .

The sound object created automatically has only one good parameter , his name .
The std error say :
Ignoring exception in renderable update: No registered codec can handle the file "darkvixen.ogg"
I was thinking that it was a video failure again , but the msg is sent from :
void Audio::RenderableSource::update
void RenderableSource::update(int flags, const Listener& sceneListener)
throw()
{
try {
updateImpl(flags, sceneListener);
} catch(Exception e) {
fprintf(stderr, "Ignoring exception in renderable update: %s", e.what());
}
}
Welcome in the matrix ...
local view of VS before the crash :
- this 0x00000000 {data={...} } Audio::SceneManager * const
- Singleton<Audio::SceneManager,InitializationFunctors::DefaultConstructor<Audio::SceneManager> > {_singletonInstance=0x02357b90 } Singleton<Audio::SceneManager,InitializationFunctors::DefaultConstructor<Audio::SceneManager> >
- _singletonInstance 0x02357b90 {data={...} } Audio::SceneManager *
+ Singleton<Audio::SceneManager,InitializationFunctors::DefaultConstructor<Audio::SceneManager> > {_singletonInstance=0x02357b90 } Singleton<Audio::SceneManager,InitializationFunctors::DefaultConstructor<Audio::SceneManager> >
+ __vfptr 0x00aaf03c const Audio::SceneManager::`vftable' *
- data {px=0x0235ac98 } boost::scoped_ptr<Audio::__impl::SceneManagerData>
- px 0x0235ac98 {activeScenes=[1](("video",{px=0x02358210 pn={...} })) inactiveScenes=[4](("base",{px=0x0235b550 pn={...} }),("cockpit",{px=0x0235b398 pn={...} }),("music",{px=0x0235b230 pn={...} }),("space",{px=0x0235b708 pn={...} })) activeSources=[1]({source={...} scene={...} needsActivation=-1 }) ...} Audio::__impl::SceneManagerData *
+ activeScenes [1](("video",{px=0x02358210 pn={...} })) std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,boost::shared_ptr<Audio::Scene>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,boost::shared_ptr<Audio::Scene> > > >
+ inactiveScenes [4](("base",{px=0x0235b550 pn={...} }),("cockpit",{px=0x0235b398 pn={...} }),("music",{px=0x0235b230 pn={...} }),("space",{px=0x0235b708 pn={...} })) std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,boost::shared_ptr<Audio::Scene>,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,boost::shared_ptr<Audio::Scene> > > >
+ activeSources [1]({source={...} scene={...} needsActivation=-1 }) std::set<Audio::__impl::SceneManagerData::SourceRef,std::less<Audio::__impl::SceneManagerData::SourceRef>,std::allocator<Audio::__impl::SceneManagerData::SourceRef> >
- renderer {px=0x02358010 pn={...} } boost::shared_ptr<Audio::Renderer>
- px 0x02358010 Audio::Renderer *
- [Audio::BorrowedOpenALRenderer] {...} Audio::BorrowedOpenALRenderer
- Audio::OpenALRenderer {data={...} } Audio::OpenALRenderer
- Audio::Renderer {meterDistance=1.0000000 dopplerFactor=0.00000000 outputFormat={...} } Audio::Renderer
+ __vfptr 0x00aafe34 const Audio::BorrowedOpenALRenderer::`vftable' *
meterDistance 1.0000000 float
dopplerFactor 0.00000000 float
- outputFormat {sampleFrequency=3131961357 bitsPerSample='
' channels='ð' ...} Audio::Format
sampleFrequency 3131961357 unsigned int
bitsPerSample 13 '
' unsigned char
channels 240 'ð' unsigned char
signedSamples -1 int

nativeOrder 0 int
+ data {px=0x02358048 } boost::scoped_ptr<Audio::__impl::OpenAL::RendererData>
+ __vfptr 0x00aafe34 const Audio::BorrowedOpenALRenderer::`vftable' *
meterDistance 1.0000000 float
dopplerFactor 0.00000000 float
+ outputFormat {sampleFrequency=3131961357 bitsPerSample='
' channels='ð'
...} Audio::Format
+ pn {pi_=0x023581a0 } boost::detail::shared_count
+ rootListener {px=0x0235ae18 pn={...} } boost::shared_ptr<Audio::Listener>
maxSources 32 unsigned int
minGain 6.1035156e-005 float
maxDistance 1.#INF000000000000 double
lastPositionUpdateTime -1.#INF000000000000 double
lastAttributeUpdateTime -1.#INF000000000000 double
lastListenerUpdateTime 41054.732272227353 double
lastListenerAttUpdateTime 41054.732272227353 double
lastActivationTime 41054.732272227353 double
positionUpdateFrequency 0.050000001 float
attributeUpdateFrequency 0.20000000 float
listenerUpdateFrequency 0.033333335 float
activationFrequency 0.10000000 float
__vfptr CXX0030: Error: expression cannot be evaluated
+ data {px=??? } boost::scoped_ptr<Audio::__impl::SceneManagerData>
withAttributes true bool
updateFlags UPDATE_ALL Audio::RenderableSource::UpdateFlags
+ it {source={...} scene={...} needsActivation=-1 } std::_Tree<std::_Tset_traits<Audio::__impl::SceneManagerData::SourceRef,std::less<Audio::__impl::SceneManagerData::SourceRef>,std::allocator<Audio::__impl::SceneManagerData::SourceRef>,0> >::const_iterator
In red , some information about our weird sound file , it seem that only the output config need to be configured .

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
DarkVixen
Bounty Hunter
Bounty Hunter
Posts: 152
Joined: Sun Jul 28, 2013 12:16 am
Location: Los Angeles, CA, USA

Re: VIDEO SUPPORT FOR AI COMMS

Post by DarkVixen »

Wow you are doing a lot of code hacking and exploring. :)

I really appreciate that, and I know how difficult that is as a programmer myself, though I was wondering if anyone knows who wrote the video code and if we can ask that person for help/directions? I really don't want you spend so much energy and time on that if we can find someone with the answer.
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by ezee »

ah ah ah !
Thank you !

Yeah , that is very time consuming , but i'm learning a new way of thinking with that code ,
it's like climbing a mountain for me .
What view !
:wink:

This source code has something " organic " , the more i play with it , the more i realize that .
So much things are inter-connected , and updated together , that is impressive !
:shock:

The libtheoraplayer is designed to be high level and very friendly ( while dealing with threads ... ) , and
is hiding the complexity that is in use in the actual implementation of ffmpeg :
void open( const std::string &path ) throw (VidFile::Exception)
{
if (pCodecCtx != 0) throw VidFile::Exception( "Already open" );
//Initialize libavcodec/libavformat if necessary
FFMpeg::initLibraries();

//Open file
std::string npath = std::string( "vsfile:" )+path;
std::string errbase = std::string( "Cannot open URL \"" )+npath+"\"";
if ( ( 0 != avformat_open_input( &pFormatCtx, npath.c_str(), NULL,NULL ) )
|| ( 0 > av_find_stream_info( pFormatCtx ) ) ) throw VidFile::FileOpenException( errbase+" (wrong format or)" );
//Dump format info in case we want to know...
#ifdef VS_DEBUG
dump_format( pFormatCtx, 0, npath.c_str(), false );
#endif

//Find first video stream
pCodecCtx = 0;
videoStreamIndex = -1;
VSFileSystem::vs_dprintf(2, "Loaded %s\n", path.c_str());
for (int i = 0; i < pFormatCtx->nb_streams; ++i) {
VSFileSystem::vs_dprintf(3, " Stream %d: type %s (%d) first dts %ld\n",
i,
( (pFormatCtx->streams->codec->codec_type == CODEC_TYPE_VIDEO) ? "Video"
: ( (pFormatCtx->streams->codec->codec_type == CODEC_TYPE_AUDIO) ? "Audio" : "unk" ) ),
pFormatCtx->streams->codec->codec_type,
pFormatCtx->streams->start_time
);
if ((pCodecCtx == 0) && (pFormatCtx->streams->codec->codec_type == CODEC_TYPE_VIDEO))
pCodecCtx = (pStream = pFormatCtx->streams[videoStreamIndex = i])->codec;
}
if (pCodecCtx == 0) throw VidFile::FileOpenException( errbase+" (no video stream)" );
VSFileSystem::vs_dprintf(3, " Codec Timebase: %d/%d\n", pCodecCtx->time_base.num, pCodecCtx->time_base.den);

//Find codec for video stream and open it
pCodec = avcodec_find_decoder( pCodecCtx->codec_id );
if (pCodec == 0) throw VidFile::UnsupportedCodecException( errbase+" (unsupported codec)" );
if (avcodec_open2( pCodecCtx, pCodec,NULL ) < 0) throw VidFile::UnsupportedCodecException( errbase+" (unsupported codec)" );
pFrameYUV = avcodec_alloc_frame();
pNextFrameYUV = avcodec_alloc_frame();
if ( (pFrameYUV == 0) || (pNextFrameYUV == 0) ) throw VidFile::Exception(
"Problem during YUV framebuffer initialization" );
//Get some info
frameRate = float(pStream->r_frame_rate.num)/float(pStream->r_frame_rate.den);
duration = float(pStream->duration*pStream->time_base.num)/float(pStream->time_base.den);
VSFileSystem::vs_dprintf(3, " Framerate: %d/%d\n", pStream->r_frame_rate.num, pStream->r_frame_rate.den);
VSFileSystem::vs_dprintf(3, " Stream timebase: %d/%d\n", pStream->time_base.num, pStream->time_base.den);

//Get POT dimensions
if (fbForcePOT) {
width = height = 1;
while (width < pCodecCtx->width && width <= (fbDimensionLimit/2)) width *= 2;
while (height < pCodecCtx->height && height <= (fbDimensionLimit/2)) height *= 2;
} else {
width = pCodecCtx->width;
height = pCodecCtx->height;
while ( (width > fbDimensionLimit) || (height > fbDimensionLimit) ) {
width /= 2;
height /= 2;
}
}
VSFileSystem::vs_dprintf(2, " playing at %dx%d\n", width, height);

//Allocate RGB frame buffer
pFrameRGB = avcodec_alloc_frame();
if (pFrameRGB == 0) throw VidFile::Exception( "Problem during RGB framebuffer initialization" );
frameBufferSize = avpicture_get_size( PIX_FMT_RGB24, width, height );
_frameBuffer = new uint8_t[frameBufferSize];
if (_frameBuffer == 0) throw VidFile::Exception( "Problem during RGB framebuffer initialization" );
avpicture_fill( (AVPicture*) pFrameRGB, _frameBuffer, PIX_FMT_RGB24, width, height );
frameBuffer = pFrameRGB->data[0];
frameBufferSize = pFrameRGB->linesize[0]*height;
frameBufferStride = pFrameRGB->linesize[0];

//Initialize timebase counters
prevPTS =
fbPTS =
pFrameYUV->pts =
pNextFrameYUV->pts = 0;

#ifndef DEPRECATED_IMG_CONVERT
pSWSCtx = sws_getContext( pCodecCtx->width, pCodecCtx->height, pCodecCtx->pix_fmt,
width, height, PIX_FMT_RGB24, SWS_LANCZOS|SWS_PRINT_INFO, NULL, NULL, NULL );
#endif
}


That code is the open function of the impl class , used when HAVE_FFMPEG is set in the preprocessor arguments .
My work is to compare this initialisation and the internal initialisation of the theora player .
Then give the needed infos to VS , like sound format and codecs .

That will take time , but i hope that my notes will be useful to me and others to finally make it work .
I asked for the version number of the original ffmpeg used in VS , without that information , it will be
really difficult to use even the original design .

So i prefer learn in the stack ( and sometime being stuck ... ) than waste my time with an old deprecated
API .

What is beautiful also in the libtheoraplayer api , is that it was designed by someone that make point and click
games , using video for extra effects , in an innovative way , that could fit with the vega strike original gameplay :
Composite Animation
Image
This demo is designed to illustrate how you can create high quality animation without sacrificing image quality or processing time.
Imagine a HD scene on an iPad3 in 2048x1536 resolution. Displaying the whole scene as a video would require a lot of processing power, the video file would be large and image quality would be somewhat degraded due to video compression.
An alternative is to make a composite scene such as the one in the example. Some scene elements can be static such as the background. Some can be animated with texture coord animation such as the clouds in this demo. Some elements can be animated with rotation such as the branch in the upper right corner.
And ofcourse, some elements can be animated with video elements. In this demo you can see the water animated as a 16-frame video rendered with this library and a translucent video of the main character rendered in a video animation loop.
The main character texture has been constructed to have an alpha channel in the same way as in the Sprite Animation demo.
The overall effect is that the scene looks great, has no noticable video artifacts, takes a lot less CPU power and uses very little disk space.


It would be a perfect alternative to 3d bases , a kind of upgrade of the actual animation system .
But i let that idea for an other time , the first step is to have a " simple video " playing in a VS room .

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by ezee »

:!: I got the function responsible for the sound creation from a video file :
SharedPtr<Source> CreateVideoSoundStream( const std::string &afile, const std::string &scene )
{
SharedPtr<Sound> sound = SceneManager::getSingleton()->getRenderer()->getSound(
afile,
VSFileSystem::VideoFile,
true);

SharedPtr<Source> source = SceneManager::getSingleton()->createSource(
sound,
false);

source->setAttenuated(false);
source->setRelative(true);
source->setPosition(LVector3(0,0,1));
source->setDirection(Vector3(0,0,-1));
source->setVelocity(Vector3(0,0,0));
source->setRadius(1.0);
source->setGain(1.0);


SceneManager::getSingleton()->getScene(scene)->add(source);

return source;
}
These parameters in red are the ones that were valid in the previous debug local view .
But no output nor codec definition here ...

I think that's very specific to the BaseInterface , as it is called inside :
BaseInterface::Room::BaseVSMovie::BaseVSMovie( const std::string &moviefile, const std::string &ind ) :
BaseVSSprite( ind, VSSprite( AnimatedTexture::CreateVideoTexture( moviefile ), 0, 0, 2, 2, 0, 0, true ) )
{
playing = false;
soundscene = "video";
if (g_game.sound_enabled && spr.LoadSuccess()) {
soundsource = BaseUtil::CreateVideoSoundStream( moviefile, soundscene );
spr.SetTimeSource( soundsource );
} else {
spr.Reset();
}
SetHidePointer(true);
}
Perhaps the audio in video for comms could be setup in a different way , inside libtheoraplayer only .
But i will have to find a way to allocate too a soundsource for the VS Audio engine manually .
I must check what native audio interface libtheoraplayer uses .

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by ezee »

:!: AUDIO WITH VIDEO TECHNICAL NOTE

That was a good idea to look inside the VSAudio engine and the libtheoraplayer source code .
At the core level , they are pretty similar , and prepared to be connected to other modules .
For exemple , in the case of TheoraAudioInterface :
/**
This is the class that serves as an interface between the library's audio
output and the audio playback library of your choice.
The class gets mono or stereo PCM data in in floating point data
*/

class TheoraPlayerExport TheoraAudioInterface
{
public:
//! PCM frequency, usualy 44100 Hz
int mFreq;
//! Mono or stereo
int mNumChannels;
//! Pointer to the parent TheoraVideoClip object
TheoraVideoClip* mClip;

TheoraAudioInterface(TheoraVideoClip* owner, int nChannels, int freq);
virtual ~TheoraAudioInterface();
//! A function that the TheoraVideoClip object calls once more audio packets are decoded
/*!
\param data contains one or two channels of float PCM data in the range [-1,1]
\param nSamples contains the number of samples that the data parameter contains in each channel
*/
virtual void insertData(float* data, int nSamples)=0;
};

class TheoraPlayerExport TheoraAudioInterfaceFactory
{
public:
//! VideoManager calls this when creating a new TheoraVideoClip object
virtual TheoraAudioInterface* createInstance(TheoraVideoClip* owner, int nChannels, int freq) = 0;
};
While in vegastrike , the design is defined in the VS AUDIO namespace :
namespace Audio {

/**
* Audio format information class
*
*/
struct Format {
unsigned int sampleFrequency;
unsigned char bitsPerSample;
unsigned char channels;
int signedSamples : 1;
int nativeOrder : 1;

Format() {}

Format(unsigned int freq, unsigned char bps, unsigned char nch) :
sampleFrequency(freq),
bitsPerSample(bps),
channels(nch),
signedSamples((bps>=16)?1:0),
nativeOrder(1)
{
}

unsigned int frameSize() const
{
return (bitsPerSample * channels + 7) / 8;
}

unsigned int bytesPerSecond() const
{
return frameSize() * sampleFrequency;
}

bool operator==(const Format &o) const
{
return (sampleFrequency == o.sampleFrequency)
&& (bitsPerSample == o.bitsPerSample)
&& (channels == o.channels)
&& (signedSamples == o.signedSamples)
&& (nativeOrder == o.nativeOrder);
}

bool operator!=(const Format &o) const
{
return !(*this == o);
}
};

};
Now , i need to define the Male-Female of these 2 connectors .
Male gives information , female receive .

So ... TheoraAudioInterface is the male connector , that branch to VS using the female connector (Format )
in the VS Audio::Sound class :
/**
* Sound abstract class
*
* @remarks This is the interface to all kinds of sound resources.
* @see Stream, Codec, CodecRegistry, for data sources.
*
*/

class Sound
{
private:
std::string name;
Format format;

protected:
/** @note Accessible to derived classes to support external unloading (ie: memory-short events) */
struct Flags {
/** Loaded state of the resource.
*/
int loaded : 1;

/** Background loading state of the resource.
* @note Accessible to derived classes to support easier and safer threading
*/
int loading : 1;

/** Sound is a streaming resource
* @note Accessible to derived classes to support easier and safer threading
*/
int streaming : 1;
} flags;

protected:
/** Internal constructor used by derived classes */
Sound(const std::string& name, bool streaming) throw();

/** Protected Write access to the sound's format, for implementations. */
Format& getFormat() throw() { return format; };
...
...
/** Play the source
* @param start an optional timestamp to start playing from.
* @remarks Rewind and play from the beginning. If the source is playing, it is reset.
* May not take effect immediately.
*/

void startPlaying(Timestamp start = 0) throw(Exception);

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
jackS
Minister of Information
Minister of Information
Posts: 1895
Joined: Fri Jan 31, 2003 9:40 pm
Location: The land of tenure (and diaper changes)

Re: VIDEO SUPPORT FOR AI COMMS

Post by jackS »

DarkVixen wrote:Wow you are doing a lot of code hacking and exploring. :)
though I was wondering if anyone knows who wrote the video code and if we can ask that person for help/directions?
There's always SVN blame (will tell you the last author to change a given line).
DarkVixen
Bounty Hunter
Bounty Hunter
Posts: 152
Joined: Sun Jul 28, 2013 12:16 am
Location: Los Angeles, CA, USA

Re: VIDEO SUPPORT FOR AI COMMS

Post by DarkVixen »

I hope things get fixed and put into the code, a lot of people are contributing a lot of stuff but little seems to "get in".

I think we need to have someone with more time to arrange/coordinate data/code that gets contributed.

Simply giving access to SVN isn't enough, we need to have consensus on what goes in because I've worked on projects in the past where the gates are wide open and "bad stuff" gets into the code. (I won't go into that rant here)

I just think VS is a great game, with potential to be as great as Star Wars or Star Trek (I know those are not games) but we have enough story material (some better) for that. :)
ezee
Intrepid Venturer
Intrepid Venturer
Posts: 703
Joined: Tue Feb 11, 2014 12:47 am
Location: FRANCE
Contact:

Re: VIDEO SUPPORT FOR AI COMMS

Post by ezee »

Hi .
From the dev point of view , we need to have at minimum one dev for each OS , to help
keep moving on with respect to the portability of the code .

I could make solutions for win32/64 , but if this code is not evaluated and tested on other
platforms , that will be an orphan branch , that will never be included in the next release because
of the portability .

I think the devs forum is a good place to expose ideas , share pieces of code and try some experimentations .
But because of the different spare time we have , there will always be a delay in the process , while experimentation needs
a great attention , a big focus to control all the parameters and logic of a program .

I wrote a lot of things technicals in the forum to be able to achieve my ideas in a future time , and help other devs
to understand the concepts of Vegastrike source code also .

Code: Select all

 if (!track.HasWeapons())
            {
                // So what are you going to threaten me with? Exhaustion gas?
                return ThreatLevel::None;
            }
Vegastrike evolved
DEV YOUTUBE CHANNEL
Vegastrike evolved wiki
DarkVixen
Bounty Hunter
Bounty Hunter
Posts: 152
Joined: Sun Jul 28, 2013 12:16 am
Location: Los Angeles, CA, USA

Re: VIDEO SUPPORT FOR AI COMMS

Post by DarkVixen »

I understand, I recall learning programming on Windows, it was a nightmare, Linux is a lot easier but each distribution needs to have its own "package" for each program.

I really do want to volunteer for code but as of lately I want to put more of my skills to art.

I just really wish more code and artwork gets into VS, I looked at a lot of stuff on the forums yesterday and I saw so much great works that never got in.
jackS
Minister of Information
Minister of Information
Posts: 1895
Joined: Fri Jan 31, 2003 9:40 pm
Location: The land of tenure (and diaper changes)

Re: VIDEO SUPPORT FOR AI COMMS

Post by jackS »

DarkVixen wrote:
Simply giving access to SVN isn't enough, we need to have consensus on what goes in because I've worked on projects in the past where the gates are wide open and "bad stuff" gets into the code. (I won't go into that rant here)
A long while back, we tried to see if we could get a separate repo/access list just for art contributions so that we could allow artists to directly upload their master files without being on the developer list for the engine / primary codebase. It was not approved by Source Forge :-/ (this was not a surprise, but we did ask).
DarkVixen
Bounty Hunter
Bounty Hunter
Posts: 152
Joined: Sun Jul 28, 2013 12:16 am
Location: Los Angeles, CA, USA

Re: VIDEO SUPPORT FOR AI COMMS

Post by DarkVixen »

Well actually what I had in mind regarding SVN access (with respect to artwork) was that (as an hard-core artist myself) I like to have the entire "show" follow a particular theme, meaning that visually, aesthetically, and audio-wise, the entire "show" should have the same uniform theme throughout.

I don't like to see (as I mentioned a while back) some graphics that look like Star Trek, other look like Disney, and parts that look like Zulu patrol. It's not in harmony.

And in particular, I'm referring to the style, not the quality. There are a lot of VS graphics, particularly base/planet images, that look really out of place.

Such as the University Planet landing port and Bio Simple Methane bar, if you ever landed there you'll know what I'm talking about.

So I wanted to have an artistic manager review images and make sure the new artwork's theme "fits". Again, not quality, but theme or style. It should not look out of place.

PS: I did not want to touch on quality, because, as a free game, it feel it would be unreasonable to demand a certain overly high level of quality... BUT at the same time we do need to set a certain minimal standard of quality of course. :)
Post Reply