Albeoris / Memoria

Final Fantasy IX tools
MIT License
272 stars 37 forks source link

- IDEAS MEGATHREAD - #390

Open snouz opened 2 months ago

snouz commented 2 months ago

This thread is compiling every general idea which has no owner and no current plan, and is not currently considered a "problem". This is to better organize issues. If someone want to work on some of these, you can re-open the related ticket.

GAME

CHEATS

LAUNCHER

META

reverieAR commented 2 months ago

21:9 ultrawide support would be nice

snouz commented 2 months ago

21:9 ultrawide support would be nice

It's in the list, #186, I tried to add this feature recently, but I haven't found the right way to do it yet (couldn't make it stable and found that it multiplies the number of issues with specific backgrounds) and I put the idea aside as I think the benefits are debatable.

Are you still able to select a 16:9 resolution on a 21:9 screen? I don't own one, I can only emulate that aspect ratio.

Naarin commented 2 months ago

What about having the possibility that the characters join at level 1 ?

Felipefpl commented 2 months ago

21:9 ultrawide support would be nice

This wouldnt create problems with moguri mod?

reverieAR commented 2 months ago

FFNx manages to do 21:9 on Final Fantasy 7 with AI upscale backgrounds.

snouz commented 2 months ago

FFNx manages to do 21:9 on Final Fantasy 7 with AI upscale backgrounds.

21:9 ultrawide support would be nice

This wouldnt create problems with moguri mod?

It depends what you mean by 21:9.

I don't see the problem with Moguri though, which is just texture replacement. I'm working on these features in Memoria to then update Moguri (which is coming soon too)

Felipefpl commented 2 months ago

Good to know, thanks for the explanation. 👍

Albeoris commented 2 months ago

@snouz , @Tirlititi

Since Alternate Fantasy is the gold standard right now, my idea is about that, as there's no point in making multiple massive mods that change the difficulty of the game.

However, it seems to me that to implement this idea, changes are required in Memoria: I would like to have a convenient framework for customizing all fights (especially boss fights) and using it to make the battles less standard.

DV666 commented 2 months ago

For my part, here are the ideas I'd like to implement for Memoria:

And maybe a few other things, but that's mostly what's on my mind right now.

Albeoris commented 2 months ago

@DV666, do you plan to do some kind refactoring with QuadMist? :) I checked it yesterday and it looks terrible (I spent 2+ hours to get that "I can play minigame" is a flag on NPC object, but reference to the player in DB is a part of script in event engine, and another hour to find where we filling Enemy and Player Hands x.x)

I guess we can introduce Memoria.CardGame project, and move all types to it except Unity-classes like MonoBehaviour and ScriptableObject

// Memoria.CardGame.dll
public interface IQuadMistGameView
{
    public TextMesh WinScore { get; }
    public TextMesh LoseScore { get; }
    public TextMesh DrawScore { get; }
    public TextMesh CardTypeCount { get; }
    public TextMesh CardStockCount { get; }
    // ...
}

// Memoria.CardGame.dll
public sealed class QuadMistGameImplementation
{
    private readonly IQuadMistGameView _view;

    public QuadMistGameImplementation(IQuadMistGameView view)
    {
        _view = view;
    }

    public void OnStartMonoBehaviour()
    {
        // Moved spagetti-code
        QuadMistGame.main = this;
        InitResources();
        preBoard.InitResources();
        board.InitResources();
        ClearHands();
        ClearGameObjects();
        ClearStates();
        ClearInput();
        FF9Snd.ff9minisnd_song_play(66);
        StackCardInfo = new QuadMistCard();
        StackCardCount = 0;
    }
}

// Assembly-CSharp.dll
public class QuadMistGame : MonoBehaviour, IQuadMistGameView
{
    private readonly QuadMistGameImplementation _impl;

    public QuadMistGame()
    {
        _impl = new QuadMistGameImplementation(this);
    }

    private void Start()
    {
        _impl.OnStartMonoBehaviour();
    }

    public TextMesh winScore;
    public TextMesh loseScore;
    public TextMesh drawScore;
    public TextMesh cardTypeCount;
    public TextMesh cardStockCount;

    TextMesh IQuadMistGameView.WinScore => _winScore;
    TextMesh IQuadMistGameView.LoseScore => _loseScore;
    TextMesh IQuadMistGameView.DrawScore => _drawScore;
    TextMesh IQuadMistGameView.CardTypeCount => _cardTypeCount;
    TextMesh IQuadMistGameView.CardStockCount => _cardStockCount;

    // ...
}

After we hide unchangeable Unity-code beyond the interface, we can start the refactoring of logic.

    // Before:
    private void Start()
    {
        // Moved spagetti-code
        QuadMistGame.main = this;
        InitResources();
        preBoard.InitResources();
        board.InitResources();
        ClearHands();
        ClearGameObjects();
        ClearStates();
        ClearInput();
        FF9Snd.ff9minisnd_song_play(66);
        StackCardInfo = new QuadMistCard();
        StackCardCount = 0;
    }

    // After:
    public void OnStartMonoBehaviour()
    {
        var ctx = GetTetraMasterContext();
        InitializeGameMode(ctx.Mode);
        InitializePlayer(ctx.PlayerData);
        InitializeOpponent(ctx.OpponentData);
        InitializeBackgroundMusic(ctx.Music);
    }

Something like that. But it must be definitely done when no one is working with this place. :)

Felipefpl commented 2 months ago

Just an idea: wouldnt be better to fix (if it's possible) or close all oldest issues before this one to give at least a feeling of closure to the ppl who posted them? Just some food for thought. ;)

Albeoris commented 2 months ago

Just an idea: wouldnt be better to fix (if it's possible) or close all oldest issues before this one to give at least a feeling of closure to the ppl who posted them? Just some food for thought. ;)

That is what @snouz did in the beginning of this thread. But we still have our own wishes, and they do not always overlap with existing issues, but some of them are too important to be closed.

snouz commented 2 months ago

Just an idea: wouldnt be better to fix (if it's possible) or close all oldest issues before this one to give at least a feeling of closure to the ppl who posted them? Just some food for thought. ;)

I've done the cleaning, but of course if an issue becomes a real project, lets reopen that thread.

I'm myself opening ideas, adding them here and closing immediately, this way the ideas are here to be explored in the future by anyone, but the "issues" board stays usable as a "current" issue/progress tracker.

Felipefpl commented 2 months ago

That is what @snouz did in the beginning of this thread.

I know but i'm talking about the other issues not mentioned there. ;)

DV666 commented 1 month ago

@DV666, do you plan to do some kind refactoring with QuadMist? :) I checked it yesterday and it looks terrible (I spent 2+ hours to get that "I can play minigame" is a flag on NPC object, but reference to the player in DB is a part of script in event engine, and another hour to find where we filling Enemy and Player Hands x.x)

I guess we can introduce Memoria.CardGame project, and move all types to it except Unity-classes like MonoBehaviour and ScriptableObject

// Memoria.CardGame.dll
public interface IQuadMistGameView
{
    public TextMesh WinScore { get; }
    public TextMesh LoseScore { get; }
    public TextMesh DrawScore { get; }
    public TextMesh CardTypeCount { get; }
    public TextMesh CardStockCount { get; }
    // ...
}

// Memoria.CardGame.dll
public sealed class QuadMistGameImplementation
{
    private readonly IQuadMistGameView _view;

    public QuadMistGameImplementation(IQuadMistGameView view)
    {
        _view = view;
    }

    public void OnStartMonoBehaviour()
    {
        // Moved spagetti-code
        QuadMistGame.main = this;
        InitResources();
        preBoard.InitResources();
        board.InitResources();
        ClearHands();
        ClearGameObjects();
        ClearStates();
        ClearInput();
        FF9Snd.ff9minisnd_song_play(66);
        StackCardInfo = new QuadMistCard();
        StackCardCount = 0;
    }
}

// Assembly-CSharp.dll
public class QuadMistGame : MonoBehaviour, IQuadMistGameView
{
    private readonly QuadMistGameImplementation _impl;

    public QuadMistGame()
    {
        _impl = new QuadMistGameImplementation(this);
    }

    private void Start()
    {
        _impl.OnStartMonoBehaviour();
    }

    public TextMesh winScore;
    public TextMesh loseScore;
    public TextMesh drawScore;
    public TextMesh cardTypeCount;
    public TextMesh cardStockCount;

    TextMesh IQuadMistGameView.WinScore => _winScore;
    TextMesh IQuadMistGameView.LoseScore => _loseScore;
    TextMesh IQuadMistGameView.DrawScore => _drawScore;
    TextMesh IQuadMistGameView.CardTypeCount => _cardTypeCount;
    TextMesh IQuadMistGameView.CardStockCount => _cardStockCount;

    // ...
}

After we hide unchangeable Unity-code beyond the interface, we can start the refactoring of logic.

    // Before:
    private void Start()
    {
        // Moved spagetti-code
        QuadMistGame.main = this;
        InitResources();
        preBoard.InitResources();
        board.InitResources();
        ClearHands();
        ClearGameObjects();
        ClearStates();
        ClearInput();
        FF9Snd.ff9minisnd_song_play(66);
        StackCardInfo = new QuadMistCard();
        StackCardCount = 0;
    }

    // After:
    public void OnStartMonoBehaviour()
    {
        var ctx = GetTetraMasterContext();
        InitializeGameMode(ctx.Mode);
        InitializePlayer(ctx.PlayerData);
        InitializeOpponent(ctx.OpponentData);
        InitializeBackgroundMusic(ctx.Music);
    }

Something like that. But it must be definitely done when no one is working with this place. :)

... Ugh... I'm very touched by your message my dear @Albeoris but you underestimate my level in C# ahahah xD I'm just doing some tweaking or small corrections... I'm doing my best for this Triple Triad feature ^^’.

Echokiss commented 1 month ago

Fix the problem with the 3 forced battles in Pandemonium are not escapable; To have the battles not give any exp or to remove the monsters immunity to any status effects, so that we can have a full lvl 1 party without having to a level 30 Zidane or 3 member having level 22, 22,23. This is for lvl 1 runs

snouz commented 1 month ago

Removing https://github.com/Albeoris/Memoria/issues/250 as it was implemented in the latest update

Albeoris commented 1 month ago

the "issues" board stays usable as a "current" issue/progress tracker.

@snouz you can try to use Milestones for this. Not sure if it'll help but you can try.

SpicyCactuar commented 1 month ago

Suggestion: Dual-language support