Welcome Guest! To enable all features please Login or Register.

Notification

Icon
Error

Options
Go to last post Go to first unread
Offline Benjamin  
#1 Posted : Friday, August 26, 2011 4:22:42 PM(UTC)
Benjamin

Medals: Admin

Joined: 8/20/2011(UTC)
Posts: 1,421
Location: Hannover

Thanks: 18 times
Was thanked: 97 time(s) in 92 post(s)
Hi everyone,

This Thread is for the SoulCraft Team, which will post pics, videos and information about the current development status of SoulCraft using the Delta Engine. SoulCraft is a great showcase for the engine Cool

Early SoulCraft picture from a few months ago

Wanna join the discussion?! Login to your forum accountregister a new account. Or Connect via Facebook Twitter Google

Offline Heiko  
#2 Posted : Tuesday, August 30, 2011 3:58:14 PM(UTC)
Heiko

Joined: 8/22/2011(UTC)
Posts: 2

Hi everyone,

this post is about last weeks work, implementing 5 enemies for Soulcraft.
Here is a screenshot from the editor showing off the enemies:
Ghost, Berserker, Warlock, Felhound and Succubus.
UserPostedImage
(The content is low-res version for iPhone)

Some information about the editor:
The editor also uses the DeltaEngine for rendering the scene, handling input etc.
Also most code is shared between game and editor, so adding new stuff is really easy:
Just implement a new enemy inside Soulcraft, and it shows up in the editor.

Sample code from Felhound enemy:
Code:
public class FelHound : CannonFodder
{
	#region Constructor
	/// <summary>
	/// Create fel hound
	/// </summary>
	public FelHound(Vector setPosition, Vector setOrientation)
		: base("Felhound", setPosition, setOrientation)
	{
		Race = UnitRace.Demon;
		
		// LowContent
		animations.Add(new Animation("Idle", 144, 173, true));
		animations.Add(new Animation("Walk", 0, 30, true));
		animations.Add(new Animation("Attack", 112, 143, false, false, 0.1f));
		animations.Add(new Animation("Die", 31, 111, false, false, 0.1f));
		animations.Add(new Animation("GetHit", 174, 200, false));
		animations.Add(new Animation("Run", 201, 255, true));
		animations.Add(new Animation("Stun", 256, 306, true));

		// Sounds
		spawnSoundName = "wpn_emit_hellhound_howl";
		dieSoundName = "enmy_efx_demon_die_hellhound";
		AttackSoundName = "wpn_emit_hellhound_bite";

		// Attack mana leech effect
		AttackEffectName = "ManaLeech";

		// Setup Energy steal
		EnergyStealBuff energyStealBuff = new EnergyStealBuff(this);
		energyStealBuff.Percentage = 2.0f;
		energyStealBuff.Activate(this);
	} // FelHound(setPosition, setOrientation)
	#endregion
} // class FelHound

In fact, this is all what is needed to add a new enemy into Soulcraft from coding point of view.
(of course you have to adjust his attackdamage, movementspeed afterwards)

In Soulcraft we have a sophisticated entity hierarchy, so our FelHound class inherits from CannonFodder,
which sets up some AI settings common for all enemies of given type.
Cannonfodder itself inherits from BaseEnemy (common stuff for all enemies), then BaseUnit (common stuff for all unit entities, like health, mana etc.), then ModelEntity.
ModelEntity is interesting for DeltaEngine users, as it encapsulates a DeltaEngine Mesh.
Back when we started Soulcraft development, there was no support for different animation sets.
(Like "Run", "Walk", "Attack" etc.)
But since DeltaEngine is opensource we could easily extend the Mesh class to support sets of animation,
implement animation blending and inter-frame interpolation.

Code:
// Model constructor
//(it is just a mesh, with some special handling for its animation data)
public Model(string contentName)
{
	Mesh = new Mesh(contentName);

	// Extract animation data
	if (Mesh.AnimationData != null)
	{
		Animation = new Animation(Mesh.AnimationData);
	}
}

Here is a snippet showing the actual bone matrix blending between two different animations.
Code:
Matrix[] finalBoneMatrices =
	new Matrix[blendAnimation.BoneMatrices.Length];

// Calculate the final bone matrices.
for (int i = 0; i < finalBoneMatrices.Length; i++)
{
	finalBoneMatrices[i] =
		Matrix.Multiply(blendAnimation.BoneMatrices[i], (1.0f - blendFactor)) +
		Matrix.Multiply(animation.BoneMatrices[i], blendFactor);
}


Hope you enjoyed reading,
Heiko

Edited by user Wednesday, August 31, 2011 12:49:38 PM(UTC)  | Reason: Not specified

Offline Benjamin  
#3 Posted : Thursday, September 1, 2011 2:44:04 PM(UTC)
Benjamin

Medals: Admin

Joined: 8/20/2011(UTC)
Posts: 1,421
Location: Hannover

Thanks: 18 times
Was thanked: 97 time(s) in 92 post(s)
Good info, more details about the Animations can be found in Nikos post about Animated 3D Models:
http://forum.deltaengine...out-animated-models.aspx
Offline Christoph  
#4 Posted : Friday, September 9, 2011 4:41:06 PM(UTC)
Christoph

Joined: 9/1/2011(UTC)
Posts: 2

Was thanked: 2 time(s) in 1 post(s)
Hi everyone,

in this post I will show some artist stuff we did this week, mainly particle work.



We decided to do an effect when the player levels up.


this is the effect in the editor




this is the effect in the level editor
( the logic is not yet implemented, so i cant show it ingame)







Other effects we did this week are physicalised environment effect.
These effects will collide with the environment and will be affected
by forces like wind and explosions.

the problem here is that the new particlemeshes blob in





so Heiko implemented a way to scale meshparticle so we could let them grow at spawntime




Also we added small physicalised glowing dots to many spelleffects for the tegra version.
these dots will be driven by forces ingame( for example a character walks nearby or explosions)


here the effect from the iPhone version



and here with dots added



if you have any questions feel free to ask.

Christoph

Edited by user Friday, September 9, 2011 4:41:40 PM(UTC)  | Reason: Not specified

thanks 2 users thanked Christoph for this useful post.
kwkrass on 9/9/2011(UTC), Boje on 9/14/2011(UTC)
Offline mc-kay  
#5 Posted : Friday, September 9, 2011 6:46:21 PM(UTC)
mc-kay

Medals: Admin

Joined: 8/24/2011(UTC)
Posts: 138
Location: Hannover

Thanks: 1 times
Was thanked: 12 time(s) in 7 post(s)
Nice, but I cant see that the level up effect is interacting with the environment, e.g. that the ground and the wall is flashed and reflected a little bit by the light from the effect.
Will this be implemented in the future?

Edited by user Friday, September 9, 2011 6:47:26 PM(UTC)  | Reason: Not specified

Offline Benjamin  
#6 Posted : Friday, September 9, 2011 7:19:19 PM(UTC)
Benjamin

Medals: Admin

Joined: 8/20/2011(UTC)
Posts: 1,421
Location: Hannover

Thanks: 18 times
Was thanked: 97 time(s) in 92 post(s)
You could just add a light on top (either fake light in screen space or a real one that is affecting rendering). Maybe it is a good idea for the SoulCraft team, they just don't have used it yet (a real light is probably too slow on most mobile platforms for every effect, but a fake one could look good enough).

Also remember that SoulCraft is an ongoing effort, when the game is released it will be constantly improved :)
Offline Christoph  
#7 Posted : Monday, September 12, 2011 10:12:57 AM(UTC)
Christoph

Joined: 9/1/2011(UTC)
Posts: 2

Was thanked: 2 time(s) in 1 post(s)
We have fakelights on some effects, but only the smaler ones, for iPhone it is already too much to have a big fakelight.
And as Benjamin sad, a real light take by far too much computationpower from the Gpu of an iPhone.
Offline Kevin  
#8 Posted : Thursday, October 6, 2011 6:23:25 PM(UTC)
Kevin

Joined: 8/29/2011(UTC)
Posts: 1

Was thanked: 1 time(s) in 1 post(s)
Hallo guys, im Kevin and i would like to share some brandnew insight on the Soulcraft interface design, aswell as some of the artwork i did for the game! Enjoy.

UserPostedImage

UserPostedImage

UserPostedImage

UserPostedImage

UserPostedImage

Edited by user Monday, October 10, 2011 10:18:37 AM(UTC)  | Reason: Not specified

Kevin attached the following image(s):
BlogEntryInterface.jpg (219kb) downloaded 244 time(s).
BlogEntryInterface2.jpg (254kb) downloaded 237 time(s).
seelenkreislauf4.jpg (91kb) downloaded 250 time(s).
soulcraftstoryscreenpactwip3.jpg (363kb) downloaded 230 time(s).
lastintroscreenfinisheds.jpg (291kb) downloaded 201 time(s).

You cannot view/download attachments. Try to login or register.
thanks 1 user thanked Kevin for this useful post.
vickfl on 10/14/2011(UTC)
Offline Nils  
#9 Posted : Friday, October 14, 2011 5:51:59 PM(UTC)
Nils

Joined: 8/22/2011(UTC)
Posts: 3

Was thanked: 2 time(s) in 2 post(s)
Hi everyone,

I have been working in the Soulcraft team for some weeks now. In my last week in the Soulcraft team, I'll show you the little localization tool I have developed using Windows.Forms.

Language editor

With the localization tool, it is possible to open the reference language file and use it to translate words to another language. To make the tool more usable, there is a search filter and a filter for missing translation strings.

When I want to translate a string in soulcraft, I use:
Language.Get("menu_exit");

I need to display a list with three columns in this tool. The first column shows the key for the translation item. The second column shows the reference string for the translation item (in our case the english language as reference) and the translation string for the
translation item.

For starters, I have got a reference xml file with the english language strings. Inside the file there is written:
Code:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<LanguageFile Version="1" Mode="0">
  <Language ObjectType="Soulcraft.I18n.Language">
    <TranslationList>
      <TranslationItem ObjectType="Soulcraft.I18n.TranslationItem" Key="menu_exit" Translation="Exit" />
      <TranslationItem ObjectType="Soulcraft.I18n.TranslationItem" Key="menu_create_account" Translation="Create account" />
      <TranslationItem ObjectType="Soulcraft.I18n.TranslationItem" Key="menu_level_selection" Translation="Level selection" />
      <TranslationItem ObjectType="Soulcraft.I18n.TranslationItem" Key="menu_settings" Translation="Settings" />
      <TranslationItem ObjectType="Soulcraft.I18n.TranslationItem" Key="menu_shop" Translation="Shop" />
      <TranslationItem ObjectType="Soulcraft.I18n.TranslationItem" Key="menu_inventory" Translation="Inventory" />
      <TranslationItem ObjectType="Soulcraft.I18n.TranslationItem" Key="menu_forge" Translation="Forge" />
      <!--And much more TranslationItems-->
    </TranslationList>
  </Language>
</LanguageFile>


I mainly need two methods to save a language file and load a language file. I have carried this out in a very simple way.

The loading:
Code:

// Create a XmlDocument object and load the language xml file.
XmlDocument document = new XmlDocument();
document.Load(path);

// Get all translation list nodes. We only should have one node 
// translation list node per file, but if there are more, we can add all 
// of them.
XmlNodeList nodes = document.GetElementsByTagName("TranslationList");

// iterate all translation lists.
foreach (XmlNode translationListNode in nodes)
{
 // iterate all translation items node in the list.
 foreach (XmlNode translationItemNode in translationListNode.ChildNodes)
 {
  // initialize a empty key and translation string...
  string key = string.Empty;
  string translation = string.Empty;

  // iterate all attributes in the translation item node.
  foreach (XmlAttribute attribute in translationItemNode.Attributes)
  {
   // now if we have the key attribute, set the key string,
   // if we have the translation attribute, set the translation 
   // string.
   switch (attribute.Name)
   {
    case "Key":
     key = attribute.InnerText;
     break;

    case "Translation":
     translation = attribute.InnerText;
     break;
   }
  }

  // Add the key and the translation to the referenceEntry dictionary.
  referenceEntries.Add(key.Trim(), translation.Trim());
 }
}


The saving:
Code:

// Create a XmlDocument object where the translation strings will be saved.
XmlDocument document = new XmlDocument();

// First we need to create the LanguageFile tag, because the language xml 
// structure in soulcraft needs it.
XmlElement languageFileNode = document.CreateElement("LanguageFile");

// Create the language tag, this is also needed in soulcraft.
XmlElement languageNode = document.CreateElement("Language");

// Add the language file node to the document first.
document.AppendChild(languageFileNode);
languageFileNode.AppendChild(languageNode);

// Create the important attributes for the language file node and the
// language node.
XmlAttribute versionAttribute = document.CreateAttribute("Version");
XmlAttribute modeAttribute = document.CreateAttribute("Mode");
XmlAttribute languageObjectType = document.CreateAttribute("ObjectType");

// Set the values for the attributes.
versionAttribute.Value = "1";
modeAttribute.Value = "0";
languageObjectType.Value = "Soulcraft.I18n.Language";   

// Append the attributes to the nodes now.
languageFileNode.Attributes.Append(versionAttribute);
languageFileNode.Attributes.Append(modeAttribute);
languageNode.Attributes.Append(languageObjectType);

// Now create the translation list node and append it to the language node.
XmlElement tranlsationListNode = document.CreateElement("TranslationList");   
languageNode.AppendChild(tranlsationListNode);

// iterate all translation entries in the dictionary to add them as
// translation items to the translation list node.
foreach (string entryKey in translationEntries.Keys)
{
 // Declarate a string with the keyed translation entry.
 string translationEntry = translationEntries[entryKey];

 // Create a translation item node.
 XmlElement translationItem = document.CreateElement("TranslationItem");

 // Now create all important attributes for the translation item,
 // the object type, required by soulcraft, the key (id for each string)
 // and the translation text.
 XmlAttribute translationItemObjectType = document.CreateAttribute("ObjectType");
 XmlAttribute keyAttr = document.CreateAttribute("Key");
 XmlAttribute tranlsationAttr = document.CreateAttribute("Translation");

 // And here are the values for the attributes set.
 translationItemObjectType.Value = "Soulcraft.I18n.TranslationItem";
 keyAttr.Value = entryKey;
 tranlsationAttr.Value = translationEntry;

 // Append all the attributes to the translation item node.
 translationItem.Attributes.Append(translationItemObjectType);
 translationItem.Attributes.Append(keyAttr);
 translationItem.Attributes.Append(tranlsationAttr);

 // At the end, we need to append the translation item node to the
 // translation list node.
 tranlsationListNode.AppendChild(translationItem);
}

// At the end, we can save the document.
document.Save(path);


This tool may be used for other projects too and later as a delta engine localization tool.

kind regards,

Nils Ohlig

Edited by user Friday, October 14, 2011 5:53:17 PM(UTC)  | Reason: Not specified

Nils attached the following image(s):
LanguageEditor.jpg (160kb) downloaded 169 time(s).

You cannot view/download attachments. Try to login or register.
Offline mc-kay  
#10 Posted : Friday, October 14, 2011 9:26:42 PM(UTC)
mc-kay

Medals: Admin

Joined: 8/24/2011(UTC)
Posts: 138
Location: Hannover

Thanks: 1 times
Was thanked: 12 time(s) in 7 post(s)
What's the advantages comparing to the Zeta Resource Editor ?
Offline MSDeveloper  
#11 Posted : Sunday, November 20, 2011 2:28:52 PM(UTC)
MSDeveloper

Joined: 11/19/2011(UTC)
Posts: 10

Thanks: 2 times
Hello Nils, could you share your program with us?

I used to take an xml file in the same way as you did, but I think your tool is pretty nice to get a nice languagefile with many supported languages.


Hope you link in your tool ;-)
Offline Benjamin  
#12 Posted : Sunday, November 20, 2011 2:47:01 PM(UTC)
Benjamin

Medals: Admin

Joined: 8/20/2011(UTC)
Posts: 1,421
Location: Hannover

Thanks: 18 times
Was thanked: 97 time(s) in 92 post(s)
Hey MsDeveloper,

We can include the language editor in the next nightly release. It is lacking some features right now (tree structure and the menu options are not all there yet), but it is fully useable.

Btw: What also works great is using Excel as a language editor, the xml files can be loaded and saved with it and then uploaded via the ContentManager tool (or check them out with the LanguageEditor tool).
Offline MSDeveloper  
#13 Posted : Sunday, November 27, 2011 10:20:56 AM(UTC)
MSDeveloper

Joined: 11/19/2011(UTC)
Posts: 10

Thanks: 2 times
Originally Posted by: Benjamin Nitschke (DeltaEngine) Go to Quoted Post


We can include the language editor in the next nightly release.

Thank you, thats nice!

I didn't thought about Excel, I should give it a try.

I have a question. In XNA we have the possibility to check, whether the gameloop is taking too long or not.
Its the so called isRunningSlow Property Do we have this property in delta engine too?

Thank you,
kind regards
Offline Benjamin  
#14 Posted : Sunday, November 27, 2011 3:04:29 PM(UTC)
Benjamin

Medals: Admin

Joined: 8/20/2011(UTC)
Posts: 1,421
Location: Hannover

Thanks: 18 times
Was thanked: 97 time(s) in 92 post(s)
Not really, but you can just check Time.Delta and if it is higher than you expected (e.g. more than 0.1 seconds), you can do whatever you need to run faster.
Rss Feed  Atom Feed
Users browsing this topic
OceanSpiders 2.0
Forum Jump  
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.

Powered by YAF.NET | YAF.NET © 2003-2023, Yet Another Forum.NET
This page was generated in 0.177 seconds.