News:

One Minute Game Review by The Happy Friar: https://ugetube.com/@OneMinteGameReviews
Also on Rumble: https://rumble.com/c/c-1115371

idTech 4 (aka Doom 3 tech) Discord Server! https://discord.gg/9wtCGHa

Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - bitterman

#41
I mean 'common/caulk', 'common/nodraw' etc.

I found where this textures are placed ('\textures\common') but I can't find out which part of Code works with them (can't find keywords 'caulk', 'nodraw' in Code).

How to engine works with common textures (interaction aspect)?

Thanks.
#42
id Tech 4 Discussion / Doom 3 BFG game tips ))
July 20, 2016, 07:31:26 AM
From the depths of the english.lang (may be someone still don't know):


"#str_loadtip_0" "Try to dodge Revenant rockets by quickly running behind cover."
"#str_loadtip_1" "Having a tough time getting past a certain part of a level?  Try saving manually (from the Pause menu) to retain incremental progess."
"#str_loadtip_2" "Use the Grabber to deflect enemy projectiles back at them."
"#str_loadtip_3" "The Shotgun does greater damage at closer distances.  One shot will take out most enemies at very close range."
"#str_loadtip_4" "The BFG-9000 is devastatingly powerful when the shot is fully charged."
"#str_loadtip_5" "Running low on health, armor or ammunition?  Try exploring the environment for stashes."
"#str_loadtip_6" "Conserve your flashlight for when you truly need it.  You don't want to run out of power mid fight."
"#str_loadtip_7" "Switch your weapons every now and then to save ammo for a weapon that could be useful later on. "
"#str_loadtip_8" "You can warm up the chaingun by tapping on the fire button lightly."
"#str_loadtip_9" "Try banking grenades around corners to kill enemies waiting in ambush."
"#str_loadtip_10" "Grenades explode on impact, so throw them at the feet of enemies who are charging for a quick kill."
"#str_loadtip_11" "Armor decreases the amount of damage you take, but is less effective with each hit."
"#str_loadtip_12" "The splash damage from weapons like the rocket launcher and grenades damage you as well as your opponents – avoid use in close range."
"#str_loadtip_13" "Wall-mounted health stations can be found in most levels."
"#str_loadtip_14" "Smaller enemies can be picked up with the Grabber.  Grab and throw them for an instant kill."
"#str_loadtip_15" "The Soulcube kills its target instantly.  It also restores the player's health."
"#str_loadtip_16" "Smaller enemies are weak, but harder to hit. Use spread weapons like the Machine Gun to take them out quickly."
"#str_loadtip_17" "Explosive barrels make great weapons.  Fire at them when enemies are nearby."
"#str_loadtip_18" "PDAs have weapon storage security codes and other useful hints in them. Make sure to look through all emails and audio logs."
"#str_loadtip_19" "Some bosses are immune to normal damage.  Observe their attack patterns to try to find their weak spot."
"#str_loadtip_20" "Punching an opponent in multiplayer also steals their weapon."
"#str_loadtip_21" "Some weapons take longer to reload than others, but do more damage. Gauge your situation carefully."
"#str_loadtip_22" "Some enemy projectiles can be destroyed in mid-air.  Use this to your advantage."
"#str_loadtip_23" "Enemies can take damage from other enemy attacks.  Save your ammunition and have them do your dirty work."
"#str_loadtip_24" "The Grabber can be used to retrieve items from hard to reach places."
"#str_loadtip_25" "Explosive barrels can be devastating to enemies, but also to you. Shoot wisely and be aware of the environment around you."

#43
At now I think about:

1. Create map in D3 with internal editor, compile it, then copy to BFG.

2. Create map in GTK Radiant/Dark Radiant, then compile it in D3 (or D3BFG?), then copy.

But this very unoptimal. Moreover map can contain scripts, shaders and other complex stuff.

I also tried to create common folder for D3 and D3BFG (via fs_basepath) to works with D3 editor and immediately run it in D3BFG but D3 is crashes with it.

Is there a optimal way to create & compile maps for D3BFG?
How you create your maps for D3BFG?

Thanks.
#44
I totally miss this thing.

To create custom video in D3 I used some console command to generate sequence of .tga files and then used Quake Video Maker to make .roq file.

In BFG I see only .bik files. Is anyone know how to work (create, edit, etc) with it for modding purpose?

And second moment.

In Code I see a doom3Intro param wich set as "gui/intro/introloop".

And there is a /base/video/intro/loopintro.bik into resources.

But I don't see and don't remember - what is correct sintax for this?

Is it .gui or .mtr? How to set correct path for "gui/intro/introloop"?

Thanks.

************************************

O, I see:

http://idtechforums.fuzzylogicinc.com/index.php?topic=141.msg1073#msg1073

Why ID do this?
Nevermind.

QuoteBink:
-----

The Doom 3 BFG Edition GPL Source Code release does not include functionality for rendering Bink Videos.

Still don't see a license for BINK. Is it individual for each developer?

About replace from video to cinematics: How to create an Intro using cinematic? Place the trigger in the beginning of a map?
#45
What is cinematic model essentially?

More triangles/bones/materials?

Can I use default model as cinematic model?

Thanks.
#46
I don't have .pk4 at the moment but may be anyone knows.

1. The hands of the player (first person view) -  is it a part of whole player model (shown on the screen) or it's a separate  model?

Can I create player model with lowpoly hands and separate hipoly hands wich shown on the screen constantly?

2. How to connect weapon to the hands?

Thanks.
#47
This is .ase model making in Blender, exported and loaded into modelviewer.

What's wrong with these two faces (colored red)? Ligthing on it also broken.

Normals go outside. And ideas?

And more global questions - what makes (how works) this tool ('mesh analyser')?

Thanks.
#49
Is there a simple way to track which game resources are called by the idTech4 engine (especially at startup)?

May be some kind of logs/console commands?

I'm trying now to solve the problem "a minimal set of own resources" for BFG (without any vanilla code - for great GPL'tice).

P.S. A minimal assets for D3 give me a crash into D3BFG/RBDOOM.
#50
As I think image atlas is a one big image that brings together many separate small images in order to reduce the number of operations of opening/reading from file. Every small image has an index, 2D top left coordinates [x,y], size (offset?).

Like one megatexture vs many small textures.

Is that right?

If so, is .bmd5 an one megaanim vs many separate anims?

And what is .bimage format essentially?

Thanks!

*****************************

Quote/*
================================================
idBinaryImage is used by the idImage class for constructing mipmapped
textures and for loading and saving generated files by idImage.
Also used in a memory-mapped form for imageCPU for offline megatexture
generation.
================================================
*/

#51
What if I need only glsl instead arb 1.0?

The code for both projects is available, but I don't understand the amount of changes required.

I believe that a simple replacement of the files is not limited.

With BFG I learned a lot about swf, binarization and other advanced things but didn't create any new content.

Dream bogged down in technical details.
#52
id Tech 4 Engine Coding / SWF problems
October 04, 2015, 10:40:04 AM
Spent a lot of time with try to change engine from D3 to D3BFG.

The main reason was the possibility of using glsl in D3BFG (unlike ARB shaders in D3).

But there are a few ground problems.

First it's a new GUI system based on SWF.

As I suggest guys from ID make a own swf-parser based on ActionScript 2.0 and commandset swf version 7. Moreover the engine convert swf into bswf and then run it with code.

All menus found in base/generated/swf. A main menu (shell.bswf) contain a one main sprite (MovieClip) and ~20 sub-sprites placed in certain sequence. Every sprite action (event) is hardcoded and handled with own proc (HandleAction). Transition between sprites (menu screens) is also hardcoded via SetNextScreen().

In D3BFG a game start with simple "map game/mars_city1" after exec ShowDoomIntro().

There are a few CVARs for swf (swf_loadBinary, swf_debug).

The next shell.swf (Flashdevelop AS2, 1280x960) is compiled and exec in Flash but not working as well in Game:

class Main
{

public static function main(swfRoot:MovieClip):Void
{
// entry point

var menuScreens : Array = new Array(
"NULL",
"menuRoot",
"menuCampaign",
"menuSettings",
"menuLoad",
"menuNewGame",
"menuSystemOptions",
"menuGameOptions",
"menuPartyLobby",
"menuGameLobby",
"menuStereo",
"menuDifficulty",
"menuControls",
"menuKeyboard",
"menuResolution",
"menuController",
"menuDev",
"menuLeaderboards",
"menuGamepad",
"menuMatch",
"menuModeSelect",
"menuBrowser",
"menuCredits");

var myClip : MovieClip = new MovieClip;

myClip = _root.createEmptyMovieClip("menuStart", 0);

for (var i = 1; i < 23; i++) {
// trace( menuScreens[i] );
myClip.attachMovie( menuScreens[i], menuScreens[i], i);
}
}
public function Main()
{

}


And there is no original shell.as or a manual like iddevnet.

Have anyone an idea how to proceed reverse-engineering this process?

Is it possible to ask the developer of the code listing for shell.bswf (e.g. for education/modding purposes)?
How to make it correct?





#53
I have a laptop with windows 7 sp1, doom3.gpl source code (from TTimo, not BFG) and VS 2010 Express.

So on this config I can (and I do) build a doom3lite.exe (without MFC, ATL, DoomEdit, <Edit*> console commands etc).

In fact I build a release version w/o any inline tools.

But now I need build a "developer" verison with all inline stuff.

As I think it is possible in VS 2013 Community edition (with MFC, ATL etc).

So my questions:

1. It is possible?

2. Is VS2010E must uninstall before install VS2013CE?

3. Is laptop must have a internet access to install/registration/product key from VS2013CE.iso?
A key from installed VS2010E is valid?

4. Can I use /neo/doom.sln (perhaps for VS NET 2002) in VS2013CE or I must reconfigure it (make my own solution)? How to do this?

Thanks for any advise.

#54
Can anyone explain this please?

collision model = clip model = combat model?

// this happens in multiplayer on the combat models
gameLocal.Warning( "idClipModel::Handle: clip model %d on '%s' (%x) is not a collision or trace model", id, entity->name.c_str(), entity->entityNumber );



*******upd***********

Ok, looks like collision model (.cm) it's term for maps and moveable physics objects (idMoveable).

Then perhaps combat model it's term for actors (idActor).

Clip model it's common term for these two terms I think.

Therefore trace model it's a clip model based on render (visual) model.

***********************

/*
   33 ===============================================================================
   34
   35         A trace model is an arbitrary polygonal model which is used by the
   36         collision detection system to find collisions, contacts or the contents
   37         of a volume. For collision detection speed reasons the number of vertices
   38         and edges are limited. The trace model can have any shape. However convex
   39         models are usually preferred.
   40
   41 ===============================================================================
   42 */


48 // trace model type
   49 typedef enum {
   50         TRM_INVALID,            // invalid trm
   51         TRM_BOX,                        // box
   52         TRM_OCTAHEDRON,         // octahedron
   53         TRM_DODECAHEDRON,       // dodecahedron
   54         TRM_CYLINDER,           // cylinder approximation
   55         TRM_CONE,                       // cone approximation
   56         TRM_BONE,                       // two tetrahedrons attached to each other
   57         TRM_POLYGON,            // arbitrary convex polygon
   58         TRM_POLYGONVOLUME,      // volume for arbitrary convex polygon
   59         TRM_CUSTOM                      // loaded from map model or ASE/LWO
   60 } traceModel_t;
#55
I have new model of player with two anims - idle and walk. Anims are played with script.

But I see there is a incorrect position for hitbox:

1. When it's idle hitbox is asymmetric (see pic.1).

2. After begin of walk cycle hitbox makes very little and then moving down (see pic. 2 - 3).

And I can't change size of bounding box for player model via "size", "mins" and "maxs" into player.def.

Is bbox for player hardcoded?

In walk anim "origin" bone is moving along +x if it's make sense.

Screenshots with g_showCollisionModels 1:



#56
I see in neo/tools/ a source code for all "Edit<name>" console commands (editor, editGUI, etc.).

But these commands are not available in compiled doom3gpl.exe.

How to compile .exe with tools? Is it possible? Some EULA problems?

#57
When I try to load the map using the "map game/test.map" - map load properly.
When I try to load this map with the command "startgame game/test" from the gui menu - the program crashes.

mapDef "game/test" is declared.

The last console output is PrintWarnings() (see below).

But I don't see any critical sections below.

"gameError" from loaded map is also crashes.

How can I find what causes crashes?

/*
1506 ===============
1507 idSessionLocal::ExecuteMapChange
1508
1509 Performs the initialization of a game based on mapSpawnData, used for both single
1510 player and multiplayer, but not for renderDemos, which don't
1511 create a game at all.
1512 Exits with mapSpawned = true
1513 ===============
1514 */
1515 void idSessionLocal::ExecuteMapChange( bool noFadeWipe ) {
1516  int i;
1517  bool reloadingSameMap;
1518
1519  // close console and remove any prints from the notify lines
1520  console->Close();
1521
1522  if ( IsMultiplayer() ) {
1523  // make sure the mp GUI isn't up, or when players get back in the
1524  // map, mpGame's menu and the gui will be out of sync.
1525  SetGUI( NULL, NULL );
1526  }
1527
1528  // mute sound
1529  soundSystem->SetMute( true );
1530
1531  // clear all menu sounds
1532  menuSoundWorld->ClearAllSoundEmitters();
1533
1534  // unpause the game sound world
1535  // NOTE: we UnPause again later down. not sure this is needed
1536  if ( sw->IsPaused() ) {
1537  sw->UnPause();
1538  }
1539
1540  if ( !noFadeWipe ) {
1541  // capture the current screen and start a wipe
1542  StartWipe( "wipeMaterial", true );
1543
1544  // immediately complete the wipe to fade out the level transition
1545  // run the wipe to completion
1546  CompleteWipe();
1547  }
1548
1549  // extract the map name from serverinfo
1550  idStr mapString = mapSpawnData.serverInfo.GetString( "si_map" );
1551
1552  idStr fullMapName = "maps/";
1553  fullMapName += mapString;
1554  fullMapName.StripFileExtension();
1555
1556  // shut down the existing game if it is running
1557  UnloadMap();
1558
1559  // don't do the deferred caching if we are reloading the same map
1560  if ( fullMapName == currentMapName ) {
1561  reloadingSameMap = true;
1562  } else {
1563  reloadingSameMap = false;
1564  currentMapName = fullMapName;
1565  }
1566
1567  // note which media we are going to need to load
1568  if ( !reloadingSameMap ) {
1569  declManager->BeginLevelLoad();
1570  renderSystem->BeginLevelLoad();
1571  soundSystem->BeginLevelLoad();
1572  }
1573
1574  uiManager->BeginLevelLoad();
1575  uiManager->Reload( true );
1576
1577  // set the loading gui that we will wipe to
1578  LoadLoadingGui( mapString );
1579
1580  // cause prints to force screen updates as a pacifier,
1581  // and draw the loading gui instead of game draws
1582  insideExecuteMapChange = true;
1583
1584  // if this works out we will probably want all the sizes in a def file although this solution will
1585  // work for new maps etc. after the first load. we can also drop the sizes into the default.cfg
1586  fileSystem->ResetReadCount();
1587  if ( !reloadingSameMap ) {
1588  bytesNeededForMapLoad = GetBytesNeededForMapLoad( mapString.c_str() );
1589  } else {
1590  bytesNeededForMapLoad = 30 * 1024 * 1024;
1591  }
1592
1593  ClearWipe();
1594
1595  // let the loading gui spin for 1 second to animate out
1596  ShowLoadingGui();
1597
1598  // note any warning prints that happen during the load process
1599  common->ClearWarnings( mapString );
1600
1601  // release the mouse cursor
1602  // before we do this potentially long operation
1603  Sys_GrabMouseCursor( false );
1604
1605  // if net play, we get the number of clients during mapSpawnInfo processing
1606  if ( !idAsyncNetwork::IsActive() ) {
1607  numClients = 1;
1608  }
1609
1610  int start = Sys_Milliseconds();
1611
1612  common->Printf( "--------- Map Initialization ---------\n" );
1613  common->Printf( "Map: %s\n", mapString.c_str() );
1614
1615  // let the renderSystem load all the geometry
1616  if ( !rw->InitFromMap( fullMapName ) ) {
1617  common->Error( "couldn't load %s", fullMapName.c_str() );
1618  }
1619
1620  // for the synchronous networking we needed to roll the angles over from
1621  // level to level, but now we can just clear everything
1622  usercmdGen->InitForNewMap();
1623  memset( &mapSpawnData.mapSpawnUsercmd, 0, sizeof( mapSpawnData.mapSpawnUsercmd ) );
1624
1625  // set the user info
1626  for ( i = 0; i < numClients; i++ ) {
1627  game->SetUserInfo( i, mapSpawnData.userInfo[i], idAsyncNetwork::client.IsActive(), false );
1628  game->SetPersistentPlayerInfo( i, mapSpawnData.persistentPlayerInfo[i] );
1629  }
1630
1631  // load and spawn all other entities ( from a savegame possibly )
1632  if ( loadingSaveGame && savegameFile ) {
1633  if ( game->InitFromSaveGame( fullMapName + ".map", rw, sw, savegameFile ) == false ) {
1634  // If the loadgame failed, restart the map with the player persistent data
1635  loadingSaveGame = false;
1636  fileSystem->CloseFile( savegameFile );
1637  savegameFile = NULL;
1638
1639  game->SetServerInfo( mapSpawnData.serverInfo );
1640  game->InitFromNewMap( fullMapName + ".map", rw, sw, idAsyncNetwork::server.IsActive(), idAsyncNetwork::client.IsActive(), Sys_Milliseconds() );
1641  }
1642  } else {
1643  game->SetServerInfo( mapSpawnData.serverInfo );
1644  game->InitFromNewMap( fullMapName + ".map", rw, sw, idAsyncNetwork::server.IsActive(), idAsyncNetwork::client.IsActive(), Sys_Milliseconds() );
1645  }
1646
1647  if ( !idAsyncNetwork::IsActive() && !loadingSaveGame ) {
1648  // spawn players
1649  for ( i = 0; i < numClients; i++ ) {
1650  game->SpawnPlayer( i );
1651  }
1652  }
1653
1654  // actually purge/load the media
1655  if ( !reloadingSameMap ) {
1656  renderSystem->EndLevelLoad();
1657  soundSystem->EndLevelLoad( mapString.c_str() );
1658  declManager->EndLevelLoad();
1659  SetBytesNeededForMapLoad( mapString.c_str(), fileSystem->GetReadCount() );
1660  }
1661  uiManager->EndLevelLoad();
1662
1663  if ( !idAsyncNetwork::IsActive() && !loadingSaveGame ) {
1664  // run a few frames to allow everything to settle
1665  for ( i = 0; i < 10; i++ ) {
1666  game->RunFrame( mapSpawnData.mapSpawnUsercmd );
1667  }
1668  }
1669
1670  common->Printf ("-----------------------------------\n");
1671
1672  int msec = Sys_Milliseconds() - start;
1673  common->Printf( "%6d msec to load %s\n", msec, mapString.c_str() );
1674
1675  // let the renderSystem generate interactions now that everything is spawned
1676  rw->GenerateAllInteractions();
1677
1678  common->PrintWarnings();
1679
1680  if ( guiLoading && bytesNeededForMapLoad ) {
1681  float pct = guiLoading->State().GetFloat( "map_loading" );
1682  if ( pct < 0.0f ) {
1683  pct = 0.0f;
1684  }
1685  while ( pct < 1.0f ) {
1686  guiLoading->SetStateFloat( "map_loading", pct );
1687  guiLoading->StateChanged( com_frameTime );
1688  Sys_GenerateEvents();
1689  UpdateScreen();
1690  pct += 0.05f;
1691  }
1692  }
1693
1694  // capture the current screen and start a wipe
1695  StartWipe( "wipe2Material" );
1696
1697  usercmdGen->Clear();
1698
1699  // start saving commands for possible writeCmdDemo usage
1700  logIndex = 0;
1701  statIndex = 0;
1702  lastSaveIndex = 0;
1703
1704  // don't bother spinning over all the tics we spent loading
1705  lastGameTic = latchedTicNumber = com_ticNumber;
1706
1707  // remove any prints from the notify lines
1708  console->ClearNotifyLines();
1709
1710  // stop drawing the laoding screen
1711  insideExecuteMapChange = false;
1712
1713  Sys_SetPhysicalWorkMemory( -1, -1 );
1714
1715  // set the game sound world for playback
1716  soundSystem->SetPlayingSoundWorld( sw );
1717
1718  // when loading a save game the sound is paused
1719  if ( sw->IsPaused() ) {
1720  // unpause the game sound world
1721  sw->UnPause();
1722  }
1723
1724  // restart entity sound playback
1725  soundSystem->SetMute( false );
1726
1727  // we are valid for game draws now
1728  mapSpawned = true;
1729  Sys_ClearEvents();
1730 }
1731
#58
What is the loading sequence after launching doom3lite.exe (from GPL compiled code)?
Or what are the minimum resources (game data) needed to run the compiled file doom3lite.exe?

This works well if you copy the entire  base folder from the original version (which contains the game data).

doom3lite.exe first looks for a file default.cfg and get an error if it is not found. What's next?

UPDATE:

QuoteIn order to run the game you will need the base folder containing the Doom 3 assets.

When Doom3.exe starts up it:

    Loads the DLL in its process memory space via LoadLibrary.
    Get the address of GetGameAPI in the dll using win32's GetProcAddress.
    Call GetGameAPI.
    gameExport_t * GetGameAPI_t( gameImport_t *import );
       
At the end of the "handshake", Doom3.exe has a pointer to a idGame object and Game.dll has a pointer to a gameImport_t object containing additional references to all missing subsystems such as idFileSystem.

Gamex86's view on Doom 3 executable objects:

        typedef struct {
           
            int                         version;               // API version
            idSys *                     sys;                   // non-portable system services
            idCommon *                  common;                // common
            idCmdSystem *               cmdSystem              // console command system
            idCVarSystem *              cvarSystem;            // console variable system
            idFileSystem *              fileSystem;            // file system
            idNetworkSystem *           networkSystem;         // network system
            idRenderSystem *            renderSystem;          // render system
            idSoundSystem *             soundSystem;           // sound system
            idRenderModelManager *      renderModelManager;    // render model manager
            idUserInterfaceManager *    uiManager;             // user interface manager
            idDeclManager *             declManager;           // declaration manager
            idAASFileManager *          AASFileManager;        // AAS file manager
            idCollisionModelManager *   collisionModelManager; // collision model manager
           
        } gameImport_t;

http://fabiensanglard.net/doom3/
#59
Hi all!


_currentRender is projection on a rectangular plane, which is equal to the size of the current screen resolution. In fact, since it can be used like texture.

I see also _scratch (Doom3) and _ss buffers (sikkpin mod). Can you explain this?

And I'm looking for a way to render to a texture via ARB. It's possible?

Thanks.


update:

Quote// scratchImageis used for screen wipes/doublevision etc

scratchImage = ImageFromFunction("_scratch", R_RGBA8Image);

Doublevision?

g_doubleVision [0,1] - If set to 1, shows a blurry "double vision" effect when taking damage. Setting this to 0 removes this effect and can improve performance when taking damage.

UPDATE:

As I see doubleVision is a Code (not material shader).

I was looking for how to realize _prevRender (or _accum) via material shader for the effect of M-blur but I see that it is implemented in the Doom3BFG otherwise (see motionBlur.pixel).

Also, I have not found simple ways to use _scratch. How it work:

QuoteWhen you issue a "map" command, the following process happens:

    Mute Sound System
    Run Wipe
        Capture screen to "_scratch"

But it is not clear how to use a _scratch buffer for any purpose other than this.

And this is no access to _accum via shader.