Eymiki

Newbie
Oct 13, 2020
33
58
88
A good game. Sad in ended with little to no replay in days because of the lack of variety.

I dont know but the end kinda humored me
You don't have permission to view the spoiler content. Log in or register now.

Also there is no extra dialogue with Claire and Reina inside the dungeon. I can´t say about Mavis because i didn´t prepare it but Claire entered my last room where Reina is and they started fighting without any scene.
 
Last edited:

GCK Devil

Newbie
Jul 12, 2025
38
8
67
Downloaded this thinking it'd be good. Sadly, my expectations were cut short. If the fact the goblins didn't have their way with Claire didn't happen, I'd have been okay with it. But really? Forced monster ntr? After being told explicitly by us, the demon lord, to tie her up and bring her to us, they raped her? That's fucking low. And I'm deleting this shit. At least please add the tag for ntr. She was meant to be ours. But nope. Fuck this game.
 
  • Like
Reactions: Erosuke69 and zmbr

flannan

Engaged Member
Dec 15, 2022
3,552
3,836
428
Downloaded this thinking it'd be good. Sadly, my expectations were cut short. If the fact the goblins didn't have their way with Claire didn't happen, I'd have been okay with it. But really? Forced monster ntr? After being told explicitly by us, the demon lord, to tie her up and bring her to us, they raped her? That's fucking low. And I'm deleting this shit. At least please add the tag for ntr. She was meant to be ours. But nope. Fuck this game.
It gets worse. For some mysterious reason, one of the three scenes for corrupting each heroine has to be sex with your dungeon's monsters.
 

zsa4673

New Member
Apr 3, 2021
7
7
38
Downloaded this thinking it'd be good. Sadly, my expectations were cut short. If the fact the goblins didn't have their way with Claire didn't happen, I'd have been okay with it. But really? Forced monster ntr? After being told explicitly by us, the demon lord, to tie her up and bring her to us, they raped her? That's fucking low. And I'm deleting this shit. At least please add the tag for ntr. She was meant to be ours. But nope. Fuck this game.
Yes, you're right. But you can try this: https://f95zone.to/threads/dungeons-legion-full-dlcs-lunasoft.91922/post-12280921 It's a pity that I can't completely decompile it, otherwise it would be a good game if I just changed the entire plot. The current plot is just as bad as you said. If you didn't use monsters as gatekeepers, those bad plots wouldn't appear.
 

DuniX

Well-Known Member
Dec 20, 2016
1,454
993
430
do you have any other games like this game to recommend?
Charasoft is the best but only Suzukuri Dungeon got a official translation.
I also made a translation for Sono Taiju wa Makai o Kurau but haven't managed to find a crack for the latest patch.
It's probably the best game out of them.
There is also that works a bit diffrent and more about setting up trap combos.
There is also the Venus Blood Gaia series but that is more like a regular SRPG.
There is also Demonion series.
 
  • Like
Reactions: zmbr

onokisaki

Newbie
Nov 30, 2022
20
3
94
Charasoft is the best but only Suzukuri Dungeon got a official translation.
I also made a translation for Sono Taiju wa Makai o Kurau but haven't managed to find a crack for the latest patch.
It's probably the best game out of them.
There is also that works a bit diffrent and more about setting up trap combos.
There is also the Venus Blood Gaia series but that is more like a regular SRPG.
There is also Demonion series.
I'll try playing it
but what i mean is game is about being raped by monsters haha.
 

Miraκ

Newbie
Mar 3, 2019
68
67
192
Cheats and gallery unlocker for 1.3.2k KG 1.00 (current version posted)

unzip Assembly-CSharp.zip in "Dungeon's Legion_Data\Managed"

F1 Toggle unlimited resources
F2 One time boost resources (cap still apply)
F3 One time boost materials

F5 (in the main menu) unlock the gallery
Many thanks to noxtek's work.

Look what I found:
C:
public void CreateDropCostume(int battleScore)
{
    ExpedDropCostume expedDropCostume = default(ExpedDropCostume);
    expedDropCostume.HeroID = -1;
    GameManager instance = SingletonMonoBehaviour<GameManager>.Instance;
    ParamManager instance2 = SingletonMonoBehaviour<ParamManager>.Instance;
    List<ExpedDropCostume> list = new List<ExpedDropCostume>();
    foreach (HeroData heroData in instance.HeroDataList)
    {
        if (instance.GameMode == GAME_MODE.STORY && instance.GetAdvCount(ADV_LABEL.MEV2000) <= 0)
        {
            break;
        }
        if (!instance.IsDoneTechnology(TECHNOLOGY_TYPE.HERO_MENU_UNLOCK00))
        {
            break;
        }
        if (heroData.State == HERO_STATE.EVIL && this.m_HeroCtrl.GetPlayerHeroType(heroData.HeroID) != PLAYER_HERO_TYPE.PREGNANT)
        {
            for (int i = 0; i < 4; i++)
            {
                HERO_COSTUME_TYPE hero_COSTUME_TYPE = (HERO_COSTUME_TYPE)i;
                if (!heroData.IsUnlockedCostume(hero_COSTUME_TYPE))
                {
                    Entity_HeroCostume.Param heroCostumeParam = instance2.GetHeroCostumeParam(heroData.HeroID, hero_COSTUME_TYPE);
                    int expedMinScore = heroCostumeParam.expedMinScore;
                    if (battleScore >= expedMinScore)
                    {
                        float expedGetProb = heroCostumeParam.expedGetProb;
                        if (instance.CalcProb(expedGetProb))
                        {
                            list.Add(new ExpedDropCostume
                            {
                                HeroID = heroData.HeroID,
                                CostumeType = hero_COSTUME_TYPE
                            });
                        }
                    }
                }
            }
        }
    }
    if (list.Count > 0)
    {
        int num = global::UnityEngine.Random.Range(0, list.Count);
        expedDropCostume = list[num];
    }
    this.m_DropCostume = expedDropCostume;
}
and
C:
    public bool CalcProb(float percent)
    {
        int num = 0;
        if (percent.ToString().IndexOf(".") > 0)
        {
            num = percent.ToString().Split(new char[] { '.' })[1].Length;
        }
        int num2 = (int)Mathf.Pow(10f, (float)num);
        int num3 = 100 * num2;
        int num4 = (int)((float)num2 * percent);
        return global::UnityEngine.Random.Range(0, num3) < num4;
    }
The function CalcProb isn't that well implemented. I'll show you the reasoning as below:

if percent = 0.1f, then it may be stored as 0.100000001 due to the defect of the binary system.
Then num = 9 as it's the Number of decimal places.

Then num2 = 10^9 = 1,000,000,000; 1,000,000,000 <= 2,147,483,647 = 2^31-1
num3 = 100 * num2 = 100,000,000,000; 100,000,000,000 > 2,147,483,647 (which is the maximum of signed int 32)

Then it's an overflow. num3 is stored as 3,567,587,328 (= 11010100 10000010 11010000 00000000₂ = -727,379,968)

Java:
100 × X
= (2⁶ + 2⁵ + 2²) × X
= (X << 6) + (X << 5) + (X << 2)
It overflows during the process of multiplication!

Then Random.Range(0, num3) is invalid since num3 is a negative number and num3 < 0.

That may in some point explains that the game may get sucked and don't let you get new costume.


Modified:
C:
        if (heroData.State == HERO_STATE.EVIL && this.m_HeroCtrl.GetPlayerHeroType(heroData.HeroID) != PLAYER_HERO_TYPE.PREGNANT)
        {
            for (int i = 0; i < 4; i++)
            {
                HERO_COSTUME_TYPE hero_COSTUME_TYPE = (HERO_COSTUME_TYPE)i;
                if (!heroData.IsUnlockedCostume(hero_COSTUME_TYPE))
                {
                    int expedMinScore = instance2.GetHeroCostumeParam(heroData.HeroID, hero_COSTUME_TYPE).expedMinScore;
                    if (battleScore >= expedMinScore)
                    {
                        list.Add(new ExpedDropCostume
                        {
                            HeroID = heroData.HeroID,
                            CostumeType = hero_COSTUME_TYPE
                        });
                    }
                }
            }
        }
This may help.
And a cheat table.
 
Last edited:
  • Like
Reactions: noxtek

noxtek

Well-Known Member
Modder
Aug 19, 2017
1,305
8,722
801
Many thanks to noxtek's work.

Look what I found:
C:
public void CreateDropCostume(int battleScore)
{
    ExpedDropCostume expedDropCostume = default(ExpedDropCostume);
    expedDropCostume.HeroID = -1;
    GameManager instance = SingletonMonoBehaviour<GameManager>.Instance;
    ParamManager instance2 = SingletonMonoBehaviour<ParamManager>.Instance;
    List<ExpedDropCostume> list = new List<ExpedDropCostume>();
    foreach (HeroData heroData in instance.HeroDataList)
    {
        if (instance.GameMode == GAME_MODE.STORY && instance.GetAdvCount(ADV_LABEL.MEV2000) <= 0)
        {
            break;
        }
        if (!instance.IsDoneTechnology(TECHNOLOGY_TYPE.HERO_MENU_UNLOCK00))
        {
            break;
        }
        if (heroData.State == HERO_STATE.EVIL && this.m_HeroCtrl.GetPlayerHeroType(heroData.HeroID) != PLAYER_HERO_TYPE.PREGNANT)
        {
            for (int i = 0; i < 4; i++)
            {
                HERO_COSTUME_TYPE hero_COSTUME_TYPE = (HERO_COSTUME_TYPE)i;
                if (!heroData.IsUnlockedCostume(hero_COSTUME_TYPE))
                {
                    Entity_HeroCostume.Param heroCostumeParam = instance2.GetHeroCostumeParam(heroData.HeroID, hero_COSTUME_TYPE);
                    int expedMinScore = heroCostumeParam.expedMinScore;
                    if (battleScore >= expedMinScore)
                    {
                        float expedGetProb = heroCostumeParam.expedGetProb;
                        if (instance.CalcProb(expedGetProb))
                        {
                            list.Add(new ExpedDropCostume
                            {
                                HeroID = heroData.HeroID,
                                CostumeType = hero_COSTUME_TYPE
                            });
                        }
                    }
                }
            }
        }
    }
    if (list.Count > 0)
    {
        int num = global::UnityEngine.Random.Range(0, list.Count);
        expedDropCostume = list[num];
    }
    this.m_DropCostume = expedDropCostume;
}
and
C:
    public bool CalcProb(float percent)
    {
        int num = 0;
        if (percent.ToString().IndexOf(".") > 0)
        {
            num = percent.ToString().Split(new char[] { '.' })[1].Length;
        }
        int num2 = (int)Mathf.Pow(10f, (float)num);
        int num3 = 100 * num2;
        int num4 = (int)((float)num2 * percent);
        return global::UnityEngine.Random.Range(0, num3) < num4;
    }
The function CalcProb isn't that well implemented. I'll show you the reasoning as below:

if percent = 0.1f, then it may be stored as 0.100000001 due to the defect of the binary system.
Then num = 9 as it's the Number of decimal places.

Then num2 = 10^9 = 1,000,000,000; 1,000,000,000 <= 2,147,483,647 = 2^31-1
num3 = 100 * num2 = 100,000,000,000; 100,000,000,000 > 2,147,483,647 (which is the maximum of signed int 32)

Then it's an overflow. num3 is stored as 3,567,587,328 (= 11010100 10000010 11010000 00000000₂ = -727,379,968)

Java:
100 × X
= (2⁶ + 2⁵ + 2²) × X
= (X << 6) + (X << 5) + (X << 2)
It overflows during the process of multiplication!

Then Random.Range(0, num3) is invalid since num3 is a negative number and num3 < 0.

That may in some point explains that the game may get sucked and don't let you get new costume.


Modified:
C:
        if (heroData.State == HERO_STATE.EVIL && this.m_HeroCtrl.GetPlayerHeroType(heroData.HeroID) != PLAYER_HERO_TYPE.PREGNANT)
        {
            for (int i = 0; i < 4; i++)
            {
                HERO_COSTUME_TYPE hero_COSTUME_TYPE = (HERO_COSTUME_TYPE)i;
                if (!heroData.IsUnlockedCostume(hero_COSTUME_TYPE))
                {
                    int expedMinScore = instance2.GetHeroCostumeParam(heroData.HeroID, hero_COSTUME_TYPE).expedMinScore;
                    if (battleScore >= expedMinScore)
                    {
                        list.Add(new ExpedDropCostume
                        {
                            HeroID = heroData.HeroID,
                            CostumeType = hero_COSTUME_TYPE
                        });
                    }
                }
            }
        }
This may help.
And a cheat table.
Interesting but I think the problem there is just "percent.ToString().IndexOf(".") > 0"
Depending on the country the separation mark could change.
Here in Italy we use the comma instead of the dot and would return -1.

I can't even imagine why the dev turned a float to string to int in the first place.

Anyway, in theory this should be the easiest solution:

public bool CalcProb(float percent)
{
return UnityEngine.Random.value * 100f < percent;
}
 

Miraκ

Newbie
Mar 3, 2019
68
67
192
Interesting but I think the problem there is just "percent.ToString().IndexOf(".") > 0"
Depending on the country the separation mark could change.
Here in Italy we use the comma instead of the dot and would return -1.

I can't even imagine why the dev turned a float to string to int in the first place.

Anyway, in theory this should be the easiest solution:

public bool CalcProb(float percent)
{
return UnityEngine.Random.value * 100f < percent;
}
Right. I also don't understand the way the author implemented the percent function. It's unnecessarily complicated, of low efficiency and practically mistaken.

And, BTW, how do you write MATH numeric and formulas if you use the comma in replacement of dot?
 

noxtek

Well-Known Member
Modder
Aug 19, 2017
1,305
8,722
801
Right. I also don't understand the way the author implemented the percent function. It's unnecessarily complicated, of low efficiency and practically mistaken.

And, BTW, how do you write MATH numeric and formulas if you use the comma in replacement of dot?
In the IDE like visual studio and such, is always dot for decimal. The language itself (C# for example) has international rules and sintax impose the dot.
But when the game runs on a machine, the strings follow the locale rules for formatting.

For example:
x.ToString() can output for Italy 1,23 and USA 1.23

The same can happen with dates if treated the same way swapping month/day.

Probably that function wasn't with float as argument during development, but a string to parse, then got changed along the way.
 
3.60 star(s) 24 Votes