Jump to content

Lindor

DarkMatters Sacred Specialist Modder
  • Posts

    1,136
  • Joined

  • Last visited

  • Days Won

    44

Lindor last won the day on June 11

Lindor had the most liked content!

Profile Information

  • Interests
    Programming, Video Games, Mathematics, German Politics and Cooking

Previous Fields

  • Favorite pizza topping
    Onions, Garlic, Jalapeños, Rucola, Tomatoes, Mozzarella and Gouda with lots of Basilicum and Oregano
  • Why do you want to join DarkMatters?
    modding Sacred 2 is my passion
  • All time best video game ever played
    AoM:TT
  • Country
    Germany

Recent Profile Visitors

3,935 profile views

Lindor's Achievements

Carbon Necromancer

Carbon Necromancer (13/20)

477

Reputation

  1. No line. I think to make armor invisible I think the easiest and most reliable way would be to erase the textures. Firstly, make a texture that is pure alpha 0. Alpha means the alpha channel of rgba colors which controls transparency. Basically create an invisible texture. You can e.g. use GIMP for that. Secondly, go to surface.txt and search for `"helve-ninehells-helmet_a"`. There you get the name of the textures: `` newSurface = { name = "helve-ninehells-helmet_a", texture0Name = "maps/heroes/highelve/sets/ninehells/a_helve-ninehells-helmet_d.tga", texture1Name = "maps/heroes/highelve/sets/ninehells/a_helve-ninehells-helmet_sg.tga", texture2Name = "maps/heroes/highelve/sets/pearl/a_helve-pearl-helmet_n.tga", texture3Name = "fx/lava_fx.tga", flags = SURFACE_FLAG_MASKED + SURFACE_FLAG_DOUBLESIDED, shader = obj_fx_lava, } mgr.surfCreate(newSurface); In your mod's pak folder, go to the three folder paths for each textureXName and paste your invisible texture there. Rename the texture according to the texture name found in surface.txt. Thirdly, repeat the same process for `"helve-ninehells-helmet-fx_a""`. There would be two other ways to do it, one which would involve creating a shader collection with only null.shader and using said shader collection in your two surface.txt's shader entries, and the other way would be just to delete the texturexName entries from the surfaces. But I have never done any of that and knowing th game's somewhat unexpected behaviours sometimes, I think making the textures invisible would be the more reliable method as this woks for sure.
  2. Thx! Good to know! It has been a strategy using willpower boosting buffs with lightsabers, I think it was the dryad who can get her willpower to astronomical values, or was it the inquisitor? Anyways, always wanted to know wether that strategy is really as broken as it has been anounced in builds multiple times. Given the anti-synergy with item level, I doubt that it's that good of a strategy. There are spell damage based combat arts, weapon damage based combat arts and hybrid damage based combat arts. This classification system is not made by me and has been established for a very long time. You can read more about this in the wiki. blueprint.txt, typification.txt and material.txt do indeed define general rules as to how damage works. If you're interested in speed and damage of combat arts and items, you should take a look at balance.txt, animation.txt and spells.txt as well. Itemtype.txt is a very important file for modding, but it is not that important for your mission. When you have the itemtype of an item, you can use Iteminfo.txt to figure out the material of a specific item, but neither of these files produce any general rule for how damage or speed work. I say this much - having complete formulae would be an argument for me redoing the blueprint.txt functionality overhaul. But on the other hand I have grown somewhat tired of modding lately - just want to publish my mod at last. But, who knows, maybe afterwards, who knows what happens
  3. Hi Maneus Yeah you did but apparently I did not. I'm trying to be more precise. Given that in Ice&Blood and later versions, when single-handedly wielding one of two swords with the same stats including base damage but different levels, you receive less Weapon Damage +X from strength when wielding the one of higher level, the questions where: When wielding one of two intelligence-based weapons like magic staves with the same stats including base damage but different levels, do you receive less Combat Art Damage +X from intelligence when wielding the one of higher level? When wielding one of two intelligence-based weapons like magic staves with the same stats including base damage but different levels, do you receive less Weapon Damage +X from intelligence when wielding the one of higher level? In CM-Patch and later, when wielding one of two willpower-based weapons like lightsabers with the same stats including base damage but different levels, do you receive less Weapon Damage +X from willpower when wielding the one of higher level? Question 1 has been answered, but not 2 and 3 . And now that I'm thinking about it, I can think of even more questions when it comes to Hybrid damage based combat arts like magic coup. There is a whole lot more to figure out there I think. Like do these hybrid spells receive bonus damage from both ends, Combat Art Damage and Weapon Damage, or only the latter?
  4. Seeing your formula for spell damage, weapon lvl doesn't appear here. Did you ever test wether intelligence based weapons decrease intelligence bonus damage? And what about lightsabers being willpower based weapons?
  5. Maybe lots of you don't know, but I had a major turning point in life about 2 years ago right after I finished the work on this modding tool. As a result there was a very abrupt ending of my amateur programming for quite some time, but it was also the beginning of me doing professional programming. As a result I never extensively tested this tool. Well I did now. Most of it works, I'd do lots of things differently today but that's okay. But there's one thing which I never caught until recently. It turned out that the overhaul broke special mount traders because of the uniquename property of blueprints. Back in the day I didn't think this property was of any importance, but now I know better. Here is some data about this property: I don't know wether I'll ever fix the overhaul properly. I'd rather redo it in a different programming language which would be a lot of work. It's mainly a tool for modders, and given that there aren't many modders, it wouldn't be really worth the effort. I'd rather use my findings to fix what this bug did with my (yet unreleased) mod without fixing the tool itself. But just in case you want to use this, be aware that you have to give the blueprints their uniquename property after updating each time.
  6. Oh don't worry, I know I'd go this route: itemtype.txt->weargroup->itemtype->model->surface->surface.txt->texture First of all you need to make a decision. If you're fine with always wearing the same armor ingame, then there's no need to remove all the textures for all high elf armor items, you just need to remove the textures of those items you want to wear ingame. It's possible to force drop an item. If you want a smooth gameplay experience however, there's no way around removing all the item textures of all items you could possibly wield. But there's an issue: Not all items are single hero weargroup. There are items with e.g. WEARGROUP_DEFAULT which refers to a hardcoded list; it's not possible to know which heroes are supposed to be able to wield the item without either ingame knowledge about the item or knowledge about the dll files. You need to iterate over all itemtypes with WEARGROU_HIGHELVE and all itemtypes with WEARGROUP_DEFAULT which contain armor items that can be worn by the high elf. Sacred 2 uses the granny 2 format for saving 3d models. This data format does contain information about the name of the surface the model expects. For your purpose we can categorize itemtypes into two groups: The one which overwrite their surfaces and those which don't. For the first kind it's easy to find the surface as it's literally scripted in itemtype.txt: newItemType = { -- standard info renderfamily = "RENDERFAM_ARMOR", family = "FAMILY_ARMOR", subfamily = "SUBFAM_ARMOR_HELMET", classification = "CLF_HELMET_CROWN", flags = "FLAG_HASHAIR + FLAG_HASPREVIEWIMAGE", weargroup = "WEARGROUP_INVALID", -- 3d model + animation info model0Data = { name = "models/heroes/highelve/sets/pearl/a_helve-pearl-helmet.GR2", surface0 = { mgr.surfGetID ("helve-pearl-helmet_a"), mgr.surfGetID ("helve-ninehells-helmet_a") }, surface1 = { mgr.surfGetID ("helve-pearl-helmet-fx_a"), mgr.surfGetID ("helve-ninehells-helmet-fx_a") }, user = "WEARGROUP_HIGHELVE", }, -- logic bounding box logicBox = { minx=-5.824, miny=-9.246, minz=60.793, maxx=5.836, maxy=-0.659, maxz=80.091, }, dangerclass = 0, } mgr.typeCreate(13247, newItemType); "helve-pear-helmet_a" is the surface the model expects and it gets overwritten by "helve-ninehells-helmet_a". Searching in surface.txt, Example: newSurface = { name = "helve-ninehells-helmet_a", texture0Name = "maps/heroes/highelve/sets/ninehells/a_helve-ninehells-helmet_d.tga", texture1Name = "maps/heroes/highelve/sets/ninehells/a_helve-ninehells-helmet_sg.tga", texture2Name = "maps/heroes/highelve/sets/pearl/a_helve-pearl-helmet_n.tga", texture3Name = "fx/lava_fx.tga", flags = SURFACE_FLAG_MASKED + SURFACE_FLAG_DOUBLESIDED, shader = obj_fx_lava, } mgr.surfCreate(newSurface); There are your texture names for this itemtype. Easy to find. However there are a lot of items which don't get their surfaces overwritten, EXAMPLE: newItemType = { -- standard info renderfamily = "RENDERFAM_ARMOR", family = "FAMILY_ARMOR", subfamily = "SUBFAM_ARMOR_LEG", classification = "CLF_LEG_ORNAMENT", flags = "FLAG_EQUIPCUT + FLAG_HASPREVIEWIMAGE", weargroup = "WEARGROUP_INVALID", -- 3d model + animation info model0Data = { name = "models/heroes/highelve/sets/matrix/a_helve-matrix-legs.GR2", user = "WEARGROUP_HIGHELVE", }, -- logic bounding box logicBox = { minx=-6.051, miny=-5.054, minz=5.107, maxx=6.064, maxy=4.134, maxz=36.774, }, dangerclass = 0, } mgr.typeCreate(13318, newItemType); For those items you need to get grannyviewer to find out which surface the model expects. I already linked you to a post of mine which does contain a link to a version of grannyviewer in a previous post. To quote myself: It seems that you didn't read this as you later asked me this: Just go and get it, the link's right there
  7. Currently I don't have the time, but I have seen it and I will answer in the future
  8. Nice Job. I can help you with the equipment. That's the model from sideview: As you can see, the equipment you're seeing does not come from the model, it's the standard equipment the dragon mage has. Take a look at creatureinfo.txt: The dragonmage base model has some standard armor equipped. four items, four attachement bones. Now let's take a look at the creatureinfo.txt of an itemtype which uses the highelf hero model: No eq_fallback entry. That's because for this model, the equipment is already part of the base model while for the standard dragon mage model the equipment is separate. Let me quote Flix: That is exactly what you're seeing here. In order to get rid of that, you either have to delete the eq_fallback entry for the dragon mage, or you have to edit the model with some 3d modelling software to give it the missing attachment bones and export it with 3ds max. I don't know how much experience you have with modelling, but if you're new to this, I'd recommend ging the scripting route instead. Afterwards you can focus on retexturing the surface of your model to make it look more like your dark elf.
  9. Hello again Which version of the game are you playing? For me it's definitely a high elf. I do not understand. Do you tak about itemtype 6474 or 8713? But it doesn't matter; both are "models/npc/highelves/male/v_he-m@hero.GR2" for me. This all sounds to me that you are simply playing another version of the game than me. Why don't you just search for "models/npc/highelves/male/v_he-m@hero.GR2" in itemtype.txt yourself to get your itemtypes? Can you screenshot what you did? Because I don't quite get it from your explanation. If you're having trouble finding out which surfaces and/or animations the model expects, I recommend you getting a version of grannyviewer. This post of mine right here has lots of links to useful tools you need for modding Sacred 2, including grannyviewer: https://darkmatters.org/forums/index.php?/topic/72222-vishankas-mod-corner/page/8/#comment-7143612
  10. I did what I had to do. At times it took 7.5GB RAM AT ONCE! to update the inheritance. Calculating the Levenshtein Distance for strings of tens of kilobytes each is no joke. E.G. the Lengends of Artamark string is 12384 Byte. It's just insane that some C-Libraries can achieve this in under 100ms. Lua is not the best language for string manipulation and speed. It also just occured to me that one wouldn't need the ENCODED files in the github repository since compose.exe is provided, it just slows down the download, so I added it to gitignore.
  11. Well it's probably one of those: If you got the model, you can easily backtrace in itemtype.txt. Looking at the models in grannyviewer, I think it's the hero one. It has itemtypes 8713 and 6474. Those have creature ids 1051 ("He_Story_Librarian", IT 8713 ), 447 ("Helf_sold_hero", IT 6474) and 446 ("Helf_sold_hero_elite", IT 6474). For the future, most models are somewhere in graphics05. You could've easily backtraced it by looking at models/npc/highelves. Once you have the model, you can STRG-F in itemtype.txt and once you have the itemtype, you can STRG-F in creatures.txt. So if this turns out to not be what you're looking for, you know where to search. Another possibility would be using the sector coordinates to determine where the creature you're looking fo spawns. This thread can help you with that process: https://darkmatters.org/forums/index.php?/topic/72255-sacred-2-sector-and-quadrant-coordinates/#comment-7135982 But I'd recommend to search the files first, it's somewhat faster for me. Also the lua demo site doesn't exist anymore. So you'd need to download the lua interpreter binaries if you'd want to run the code I posted there.
  12. I was so happy yesterday. Well turns out I made a mistake in my attempt to optimize. I'll have to go with my other implementation of the levenshtein distane. It's way slower, but at least it's correct. And still way faster than the implementation on the wikipedia page But still takes ages for long strings. I'll have to live with it. Will need to let my PC run for hours again to update he mod inheritance
  13. If only that were the case; I'm almost never satisfied haha until it's perfect! I have thought about this for more and discovered a pretty fast algorithm for calculating the Levenshtein Distance. It takes at least n (when m==n) and at most (m-n+1)*n steps where m is the larger and n the smaller string's size. That's still O(n^2) in worst case scenario (where m = (1+n)/2), but realistically speaking this should be the fastest I have come up with so far. Will implement soon. And still I can see myself trying to get to O(n+m) with suffix trees in the future, although I must say that I don't know wether it's possible. Suffix trees are complicated, and so are string metrics. I do understand how to construct them, but not how to use them yet. https://stackoverflow.com/questions/19368962/approximate-substring-matching-using-a-suffix-tree The downside of this attitude is that I never get anything done, including free time stuff. I wanted to do three things in this two weeks and have not done one of them. Well, that is if you don't count working on this repository as modding. One of these three things was working on Lindor's Mod again, and since I will probably use this repository, one could technically count that. But I didn't work on the items which I initially wanted to do.
  14. The repository is now complete; I have implemented Analyze.exe.
×
×
  • Create New...
Please Sign In or Sign Up