header general

Repo conflict removal project (and other fixes)

  • DeVloek
  • DeVloek's Avatar Topic Author
  • Hades Elemental
  • Hades Elemental
More
3 weeks 2 days ago - 3 weeks 2 days ago #1 by DeVloek
I mentioned in another thread that I downloaded the entire beastiary, and here's why. I was gonna write a lengthy post about my new WIP mod project but then I remembered that this isn't really the place for it, so I'll try to keep it short and get to the point.

Basically, I made a dynamic "plug'n'play" randomizer mod that allows the user to drag'n'drop any map, monster or weapon wad/pk3 into GZDoom and my mod will automatically scan the files for monsters & weapons and randomize existing things on the map with them.
For example, you can load Afrit.wad, Belphegor.wad and HellstormArchon.wad together with my randomizer and it'll add them to a pool of potential replacements, then RNGesus takes care of the rest and replaces similar monsters such as the Baron of Hell with them. It'll also move stuck monsters and trigger boss death specials like in E1M8.
I'll keep it as lightweight as possible so no custom assets, only code. If you want to know more about this particular project, find me on the Zdoom discord and DM me, I'll be happy to share a beta version for testing and feedback.

Anyway, let's get to the gist of it. While I was testing my mod with some of the R667 wads/pk3s, I came across many errors and conflicts. For example, you can't load Afrit.wad, BruiserAfrit.pk3 and BruiserDemon.wad together, because they share the same classnames for projectiles and whatnot. I haven't tested all monsters yet as there are almost 400 in the repo, but I already came across a few more that won't work together at all, not without editing the classnames. Some also share sprite names even though the sprites are different. 

I'm gonna attempt to fix these conflicts, as I hope this will not only be useful for myself, but anyone who wants to use R667 monsters together but might not have the knowledge or time to remove the conflicts. And while I'm at it I'm gonna fix the numerous other small errors that I noticed. Especially the old files that haven't been touched in 15 years are full of them. Often harmless warning messages about deprecated functions and missing brightmaps, but also many bugs and annoyances that so far have been easy to fix.

I will update this thread from time to time with updated monsters and, at some point in the future, weapons, but if the admins think I should make single update threads for each of them I'll do that instead.

Ideally I'd like every R667 monster and weapon to run together without conflicts or other errors, but I know this is pretty much a pipe dream so I will first start with my favorites and then see how far I can get. Since I'm also working on other stuff, I guess this is gonna be a matter of months... So if anyone wants to help me with this endeavour, let me know :-)
Last edit: 3 weeks 2 days ago by DeVloek.

Please Log in or Create an account to join the conversation.

  • Salahmander
  • Salahmander's Avatar
  • Cacodemon
  • Cacodemon
More
3 weeks 2 days ago #2 by Salahmander
Replied by Salahmander on topic Repo conflict removal project (and other fixes)
Funny this came up, I've also had thoughts of going through stuff and changing conflicting stuff, like sprite graphics that are the same but yet has different graphics so I will probably go over it as well.

Please Log in or Create an account to join the conversation.

  • Gothic
  • Gothic's Avatar
  • Moderator
  • Moderator
More
3 weeks 2 days ago #3 by Gothic

For example, you can't load Afrit.wad, BruiserAfrit.pk3 and BruiserDemon.wad together, because they share the same classnames for projectiles and whatnot.
 
Originally the Bruiser Afrit had different actor names, but I changed them to use the same actors as the Bruiser and Afrit.
My idea is that the modder will take a look at the files and remove the repeated actors, sprites, sounds, gldefs, etc to avoid clutter in their mods, and I did not consider the Plug & Play mentality.

Please Log in or Create an account to join the conversation.

  • DeVloek
  • DeVloek's Avatar Topic Author
  • Hades Elemental
  • Hades Elemental
More
3 weeks 2 days ago - 2 weeks 3 days ago #4 by DeVloek

Originally the Bruiser Afrit had different actor names, but I changed them to use the same actors as the Bruiser and Afrit.
My idea is that the modder will take a look at the files and remove the repeated actors, sprites, sounds, gldefs, etc to avoid clutter in their mods, and I did not consider the Plug & Play mentality.

I don't think that's a good idea, it will just create extra work for everyone. In my opinion it's better to have unique classnames for every actor, even if the sprites are the same. That way the modder just has to delete the extra sprites and not mess around with the code when they combine several actors into one mod, and it's gonna be much easier to apply minor changes to actors when they already are separated into different classes. I wouldn't consider that as clutter, on the contrary it provides a better overview but maybe that's just my way of thinking.
Also keep in mind that not everyone who downloads stuff from the repo is a modder in that sense, many are just mappers who have no clue about working with code and sprites, I see these folks often on the Zdoom discord asking for help.

Of course it's the decision of the admin team how to proceed with the repo, but either way, I'm still gonna remove the conflicts where I can, if only to make the monsters work flawlessly with my upcoming mod. What you'll do with these updates is up to you. I'll upload everything to my google drive and post the links in this thread instead of making new threads in the submission forum, unless it's a bug fix.

Funny this came up, I've also had thoughts of going through stuff and changing conflicting stuff, like sprite graphics that are the same but yet has different graphics so I will probably go over it as well.


That's great to hear! Let me know which monsters you gonna update so we don't work on the same ones.
I have seen a few sprite conflicts already. One I found is my own mistake though, I did not rename the sprites for my Arachnocortex projectiles. They are based on some Doom alpha sprites and still got the generic BAL names which a lot of other people used as well. I'm sure there are many more of these conflicts but it's gonna take a while to identify them all.

So yeah, I went through most of the files and I have identified the following conflicts and other errors. A lot of them come from totally different monsters that have nothing to do with each other, it's just pure coincidence that they share the same classnames.

Classname conflicts of minor and major severity
  • Afrit, BruiserAfrit - multiple conflicting classes, game does not start
  • HadesElemental, HadesSphere, DeathIncarnate, Overlord - conflicting class "HS", game does not start
  • BloodDemon, ChaingunDemon - conflicting class is renamed
  • BloodFiend, CrimsonDesciple - conflicting class is renamed
  • Catharsi, DuneWarrior - conflicting class is renamed
  • Corpulent, Deathknight, Haedexebus, HellApprentice, HellDuke, HellSmith, Infernal, InfernoDemon - conflicting class "Redpuff",  game does not start. This one almost drove me nuts during my tests X-o
  • Ghoul, Grell - conflicting class "BarbTrail", game does not start
  • ChillerSoul, FrostElemental - conflicting classes are renamed
  • GiantBat, ImpBat - conflicting class is renamed
  • Gatekeeper, Laser-Scout - conflicting class is renamed
  • ArchonOfHell, HellstormArchon - conflicting classes are renamed
  • CyberImp, FusionCyberImp - conflicting class is renamed
  • Familiar, ImpWarlord - conflicting class is renamed
  • BloodLich, MagmaSerpent - conflicting class is renamed
  • DarkGargoyle, LavaDemon - conflicting class is renamed
  • Nailborg, NailborgCommando - conflicting classes are renamed
  • HellPaladin, Paladin - conflicting class is renamed
  • BloodGhost, PhantomFiend - conflicting class is renamed
  • ChaosCube, PyroDemon - conflicting class is renamed
  • GiantRat, RatKing - conflicting class is renamed, the GiantRat is also included with the RatKing
  • GuardianCube, Sentinel - multiple conflicting classes, game does not start
  • SlimeImp, SlimeWorm - conflicting class is renamed
  • SoulHarvester, SoulReaper - conflicting class is renamed
  • EtherealSoul, Shadow - multiple conflicting classes, game does not start
  • Drone, SecurityDrone - conflicting class is renamed
  • Lasershark, Shark - conflicting classes are renamed
  • NetherworldQueen, SourceGuardian - conflicting class is renamed
  • Hierophant, Weakener - conflicting class is renamed

Some if not all of the following monsters could be combined into single pk3s instead of having 2 or more wads for identical or slightly different code/sprites
  • FormerRanger, FormerRangerAlternate
  • InfernalSpider, InfernalSpider(Jumping)
  • Phantasm, Phantasm(Classic)
  • StoneImp, StoneImpHidden
  • FemaleScientists, FormerScientists, ZombieScientists - some single monsters are duplicates and could be safely removed from the repo as they are already included in the packs.
  • ZombieTank, ZombieMissileTank, ZombiePlasmaTank
One could probably include the GiantRat/RatKing on this list as well.

Warnings about classes that are referenced in the code but do not exist
  • Cultist - missing drop item "fire" - whatever that was supposed to be, it's not there
  • PulseNailgunZombie - missing drop item "pulsenailgun" - which is fine since the gun is in the repo and works together with the monster (but it throws a warning message itself, something about truncation)
  • Chiller - missing class "chillerfog2" - there's a class "chillerfog" so maybe use that one instead
  • Moloch - missing class "MolochDeathFire" - nowhere to be found
  • Phantom - missing class "GhostHatch" - there's a class "GhostHatch2" so maybe use that one instead
  • PlaugeImp (sic) - missing class "BarbTrail" - might be the one that's causing conflicts for the Ghoul and Grell? PlaugeImp and Ghoul are Heretic monsters but Grell seems more like a Doom monster.

Miscellaneous warnings
  • Celt - 'bad hex number' - never seen this error before, looks like GZdoom has an issue with Bloodcolor "Ice" and expects a hex value instead of a string. In-game the blood is plain black, should be an easy fix though.
  • Agaures - GLDEFS error
  • Arachnobaron - GLDEFS error
  • Cheshire - GLDEFS error
  • Despicable - GLDEFS error
  • SuperFlyingImp - GLDEFS error
  • Incubus - DECALDEFS error
  • PhaseImp - DECALDEFS error
  • Harpy - uses deprecated code. To fix it just change self.z to self.pos.z in line 63

And finally some very minor issues :-P
  • Cyberbaron, DarkClink - editornumber conflict
  • HellHound, Jackal - editornumber conflict
  • DivineShadow, NightmareDemon - editornumber conflict
  • CyberSatyr, ObsidianStatue, Cacolantern - editornumber conflict
  • Terror, PlasmaDemon - editornumber conflict
  • Scimitar, HeavenGuard - editornumber conflict
  • ShadowBeast, ImpVoid - editornumber conflict

Here is an overview over my findings:
  • 296 Monsters that start up fine without any conflicts or errors, although some might have the same spritenames for different sprites
  • 15 with duplicate editor numbers
  • 9 with small errors like missing brightmaps and decals
  • 7 with missing classes
  • 13 with duplicate classnames and sprites that are redundant and could be combined into single pk3s instead of 2 or more wads
  • 44 with duplicate classnames that are renamed on game start
  • 20 with duplicate classnames that prevent the game from starting at all
Those classes that are renamed when the game starts are low priority, it just would be nice to have a clean startup without warnings so I'll get to them eventually. But first I'll take care of those errors that prevent the game from starting altogether, that's a no-no in my eyes.

Oh and before I forget, I found an issue with the JetPackZombie and the PlasmaElemental. Their death sound volume is extremely loud because it is played too many times in the same tic. That is easy to fix though, so I'll probably submit updates for those monsters at some point if no one else does it first.
Last edit: 2 weeks 3 days ago by DeVloek.

Please Log in or Create an account to join the conversation.

  • Salahmander
  • Salahmander's Avatar
  • Cacodemon
  • Cacodemon
More
3 weeks 1 day ago #5 by Salahmander
Replied by Salahmander on topic Repo conflict removal project (and other fixes)
I'm more going over weapons first so monsters are all yours for now.

Please Log in or Create an account to join the conversation.

  • CaptainToenail
  • CaptainToenail's Avatar
  • Wicked
  • Wicked
More
3 weeks 1 day ago #6 by CaptainToenail
Replied by CaptainToenail on topic Repo conflict removal project (and other fixes)
If you are tuning up the entries, I have some feedback for some of the props that I have used recently

- the KDiZD sitting, slumped corpses do not appear in Ultimate Doom Builder, due to the unusual way they are defined

(subjective)
- the pipe pack collision works better with their width halved
- the marine stuff and food packs work better with the SOLID flag removed, and again, some of their width/height could be tightened

Please Log in or Create an account to join the conversation.

  • DeVloek
  • DeVloek's Avatar Topic Author
  • Hades Elemental
  • Hades Elemental
More
3 weeks 11 hours ago - 2 weeks 3 days ago #7 by DeVloek

I'm more going over weapons first so monsters are all yours for now.

Sounds good 8-)

If you are tuning up the entries, I have some feedback for some of the props that I have used recently

I'm sorry Captain, I won't do anything within the other categories anytime soon. As you can see I have my hands full with the monsters  ':-o not to mention the mod I'm working on (which is coming along nicely, but I haven't even started implementing any weapon randomization). But feel free to add any bugs and other findings to this thread, it's always nice to have an overview, and maybe others become inspired to help out :-)


So I've been hunting down sprite conflicts today, I might've missed a few but I think I got like 99% of them identified. Took me much longer than anticipated, there are actually more sprite conflicts than classname conflicts. Many are just minor differences, like a recolored projectile or a palette swap. But some are severe conflicts that can totally ruin a monster. I even found a monster that doesn't really work at all, it's just the last 2 frames of an explosion floating around dealing damage when it comes close.

Anyway, here's the list of my findings. A + sign means that those monsters share the exact same sprites, so no conflict. The / sign means there's a conflict that I'm gonna fix when I can find the time.
  • AEIM: Harpy / FlyingImp - different monster sprites
  • ARAC: Aracknight / FlemoidusArachnus - different monster sprites
  • ARCB: ArchonOfHell / HellStormArchon - same projectile sprites with minor differences
  • BAL3: Cybruiser + Annihilator + InfernoDemon / Arachnocortex / Abbadon - different projectile sprites, gonna fix this asap since this involves my own monster
  • BFAM: Eyes + ImpWarlord / Bat - the Bat's death frames are unbloody, otherwise the same
  • BISH: Demon Wizard / HornBeast - same smoke sprites with minor differences
  • BLAD: Moloch + PulseNailgunZombie - their projectile sprites are different from the PulseNailgun's projectile, that one has some additional fire around it
  • BLST: AracnorbQueen + Cheshire / Terminator - different projectile sprites
  • BONE: Draugr / Scimitar - same projectile sprites but different colors
  • BOOM: Incubus / Zardaz - different explosion sprites
  • BOS3: HellStormArchon / Belphegor - different monster sprites
  • BOS6: WarlordOfHell / Squire - different monster sprites
  • BPOS: FormerRanger / FormerRangerAlternate - same monster sprites with minor differences
  • CBAL: Diabolist + Sentinel + GuardianCube / Cacolich - different projectile sprites
  • CFCF: Diabolist + PyroImp + Hellsmith / HornBeast / Rictus - same fire sprites but different colors and offsets
  • CFFX: Diabolist / HornBeast - same fire sprites but different colors and offsets
  • CFIR: Cacolich / CrimsonDisciple - different projectile sprites
  • CFX3: Disciple / Guardian and Sentinel - same projectile sprites but different colors
  • CURS: Hierophant / BloodLich - different projectile sprites
  • DBAL: NightmareDemon - DevastatorZombie - different projectile sprites
  • DFFP: InfernoDemon + ImpWarlord / Thor - same projectile sprites but different colors
  • DFSH: Defiler / DagfallSkeleton - different sprites of different types
  • DIAB: InfernoDemon / Diabolist - different monster sprites
  • DIMP: PhaseImp / PlasmaDemon - different monster sprites
  • DRFX: FlyingImp / Rictus / Drone - different projectile sprites
  • EXPL: SpiderBot / ZombieFlyer - different explosion sprites
  • FVUL: Vulgar + Azazel + Grell / PlaugeImp - different projectile sprites
  • GHUL: Ghoul / DRPGGhoul - different monster sprites
  • GREN: UACbot / RoboCain - same projectile sprites with minor differences
  • HBA3: HellDuke / AI Marines - technically the same sprites, but for some reason the AI Marines ones are missing the first 3 frames and the frame letters are shifted back, so HBA3D0 in HellDuke became HBA3A0 in AI Marines
  • HBAL: Deathknight + HellApprentice / HellDuke - different projectile sprites
  • HIB1-2: Dark Gargoyle / Hierophant - different projectile sprites
  • ICWS: LavaDemon + IceLich / Thor - same projectile sprites but different colors, and actually unused in LavaDemon and IceLich so can be removed from those
  • MAUD: Marauder / MaulerDemon - different monster sprites
  • NBAL: NImp / Nightshade - different projectile sprites
  • NKXP: InfernoDemon / PyroDemon - same explosion sprites with minor differences
  • PBAL: PyroZombie / ScorpiusTank - different projectile sprites
  • PHNT: Phantasm / Phantasm(Classic) - different monster sprites (variants of the lost soul and beta skull, but why not have both)
  • PROJ: Allied Marines + SniperZombie / ApprenticeOfDsparil - different projectile sprites
  • RPUF: Lavamander / RepeaterZombie - different sprites of different types, both of these are conflicting with the numerous "redpuff" actors from other monsters
  • SAR2: BloodFiend + PhantomFiend / NightmareDemon - different monster sprites
  • SBAL: Shadow + Ethereal Soul / Infernal Spider - different projectile sprites 
  • SBOD: FireSerpent / Swarm - different monster sprites (this one was actually the first conflict I noticed during my tests, when I saw it I was like WTF am I looking at?? :-O
  • SENT: Sentinel / Guardian and Sentinel - different monster sprites
  • SHOK: TimeImp / Zardaz - different projectile sprites
  • SIBA: SnakeImp / SpiritImp - different projectile sprites
  • SIMP: SnakeImp / TimeImp - different monster sprites
  • SKLL: PoisonSoul / SkeletonLegs - different monster sprites
  • SMOK: TeslaCoil / UberMachinegunner - different smoke sprites
  • SPI2: Infernal Spider / Phantom / Avatar - different sprites of different types
  • SSFX: Hangman + ProfaneOne + Vulgar / SCGolems - different projectile sprites
  • STAR: PhEttin / Terminator - different sprites but the PhEttin one is unused and can be safely removed (alongside other unused sprites)
  • STLK: Stalker / Stalker from Strife - this monster doesn't really work when running it with my mod. GZdoom seems to ignore the DECORATE and instead spawns the Strife Stalker. It still uses the custom sprites though, which results in the monster looking totally wrong
  • SUPR: SuperDemon / SupremeFiend - different monster sprites
  • TARM: TarStalker / Terminator / ZombieHenchman - different monster sprites
  • THR2: DuneWarrior + SourceGuardian / Thor - different sprites of different types
  • TSM1-4: ZombieTank + ZombieMissileTank + ZombiePlasmaTank / PyroDemon - same smoke sprites with minor differences
  • VBAL: Diabolist / GrossElemental - different projectile sprites
  • WATC: Watcher / Dark Gargoyle - different monster sprites
  • WRTH: WrathDemon / BloodLich - different monster sprites
  • XPL1: BloodLich + MagmaSerpent + LavaDemon / Moloch - same explosion sprites with minor differences
I'll prioritize sprites that belong to the same game, eg. a Heretic monster that has the same sprite names as a Doom monster will have lower priority for now, as well as most of the "other style" sprites. Some of the projectiles probably aren't even worth fixing as the differences are miniscule, but I added them to the list  anyway, just in case. 
If anyone wants to fix any of the sprites above, let me know. I'll start with the cursive ones, those have the highest priority to me.
Last edit: 2 weeks 3 days ago by DeVloek. Reason: to-do list updated

Please Log in or Create an account to join the conversation.

  • doomedarchviledemon
  • doomedarchviledemon's Avatar
  • Wicked
  • Wicked
More
3 weeks 9 hours ago - 3 weeks 9 hours ago #8 by doomedarchviledemon
Replied by doomedarchviledemon on topic Repo conflict removal project (and other fixes)
I really love this project. Having everything work alongside each other straight out of the gate is a wonderful idea I think.
I had a thought though, would this be something that would be kept up with for current/future submissions? While it's awesome to have this starting with what's already on the site, I also think it would be great to have it become a sort of new standard. If that's possible?

I wanted to share an idea I had that I think may be useful to help with organization and creating a reference guide kind of thing. Would it be useful to make some kind of document that lists all of the currently used editor numbers, classnames, sprite names, etc? Something that would be available to submitters for reference, and updated by mods upon a submission's passing?

I haven't had time to make any example document to fully encompass the above, and unfortunately I won't have the time for a bit to make one, but my current idea is to organize things by editor numbers, starting at 14200 (just because it's a nice even starting point), repository category, and then alphabetically (at least for what's currently on the site) to have a quick and easy reference guide, as well as a sort of check-off list.

To give a very quick and dirty example of what I had in mind:
Warning: Spoiler!

I swear, if the image doesn't show up this time... -_-;
Last edit: 3 weeks 9 hours ago by doomedarchviledemon.

Please Log in or Create an account to join the conversation.

  • DeVloek
  • DeVloek's Avatar Topic Author
  • Hades Elemental
  • Hades Elemental
More
3 weeks 36 minutes ago - 2 weeks 6 days ago #9 by DeVloek

I had a thought though, would this be something that would be kept up with for current/future submissions?
While it's awesome to have this starting with what's already on the site, I also think it would be great to have it become a sort of new standard. If that's possible?


Ofc that's up to the R667 staff, but let me say this.
It's not always possible to have unique sprite names since you only have 4 figures available, so I wouldn't expect anyone from going out of their way to sift through all the submissions before they name their sprites. That's really too much to ask for.
But the issue can be mitigated another way. What I usually do to reduce the chances for a conflict, I start with the letter V (since that's the first letter of my real name), and the other 3 letters are an abbreviation or shortening of the actor's classname. That way the chances for conflicts are already significantly reduced, you just have to keep track of your own sprite names to avoid duplicates there. Using numbers instead of letters is possible too, those aren't used very often.

As for classnames, it should definitely be a standard to have unique ones. 
For example, naming your custom plasmaball actor "Plasmaball2" or anything generic like that is just bad practice. You should at least prefix the classname with an abbreviation of the weapon's/monster's name. For example, if the weapon is called "SuperKillerGun", you'd name the projectile "SKG_Plasmaball". That way the potential of a conflict is reduced to a minimum. If you name it "SuperKillerGunPlasmaball" the conflict potential is next to zero.
Then, if you have a monster that shoots the same plasmaball, it's fine to have the same sprites with the same spritenames, those will just be overridden. But the classname must be different, ie. the Monster's name is "BigBadMofo" so the plasmaball is called "BBM_Plasmaball" or "BigBadMofoPlasmaball".
Now if you load both the gun and the monster together, it will run out of the box without errors. If both were still named "Plasmaball2", you'd have a conflict that, in case of Zscript, would prevent the game from even starting.

If this should be a submission rule or not is again up to the staff, but it should become common practice in general, as it not only avoids conflicts but increases readability, which is a plus for both the creator and those who use their work. This is how pro modders do it, we just have to let the new and occasional modders know about this too.

I wanted to share an idea I had that I think may be useful to help with organization and creating a reference guide kind of thing. Would it be useful to make some kind of document that lists all of the currently used editor numbers, classnames, sprite names, etc? Something that would be available to submitters for reference, and updated by mods upon a submission's passing?

I already have such a document that I use for my own stuff. Well it's really just a MAPINFO lump with a DoomEdNums block that I keep in a folder with all my submissions and unreleased stuff, but it's quite helpful to me so making a full list with all submissions available to the public might come in handy for other submitters.
On the other hand, editor numbers aren't a requirement for submissions at all, and they shouldn't be. Many submission don't have any editor numbers at all, I just assign DoomEdNums for my own convenience so I can add my actors to a test map. But it's generally up to the mapper to add those, and they'll assign them according to their own project.
Plus it will add another layer of organisatorial work for the staff, not sure if it's really worth the effort as it's not hard at all even for non-modders to open the DECORATE or MAPINFO and change/add the number. So yeah not sure about this idea, but it's something to think about.

Edit: A bit late but I just realized there was more text under the image you posted @doomedarchviledemon, didn't see it because of the wierd unreadable colors this forum has since the reboot. Yea a database that keeps track of everything, not just the editor numbers would be great. But maintaining it will be quite some work...
Last edit: 2 weeks 6 days ago by DeVloek.

Please Log in or Create an account to join the conversation.

  • DeVloek
  • DeVloek's Avatar Topic Author
  • Hades Elemental
  • Hades Elemental
More
2 weeks 6 days ago - 2 weeks 6 days ago #10 by DeVloek
The first batch of fixes is done. Now there are 322 Monsters that work together without conflicts or error messages.

https://drive.google.com/file/d/11o7gIbh7b9_2eVF7INqHVSsQKXtE8n5D/view?usp=sharing

I did the following updates:
Warning: Spoiler!


If any of these have a chance to get updated in the repo too, I can add update.txt lumps to the files. For now I only edited existing ones. 
Also I can upload individual zips if needed.
btw I edited my posts above to reflect which monsters I've already done, so it's easier to see what still needs to be done.
Last edit: 2 weeks 6 days ago by DeVloek.

Please Log in or Create an account to join the conversation.