- Site Map >
- Modding and Creation >
- Sims 3 Creation >
- Modding Discussion >
- The Sims Medieval Content Compatibility with TS3
- Site Map >
- Modding and Creation >
- Sims 3 Creation >
- Modding Discussion >
- The Sims Medieval Content Compatibility with TS3
Posts: 982
Thanks: 2391 in 16 Posts
I find it hard to believe no one has found this out, but just in case I think it deserves a thread.
Most CLIP files from The Sims Medieval are 100% compatible with The Sims 3.
I was shocked but the more files I tried, the more I convinced myself that in fact there's no difference between adult rigs in these two games.
VIDEO
So I'm wondering how nobody has ever tried to use this animations to recreate some of the most interesting gameplay objects in TSM, such as the cards game or the interrogation chair (such an amazing object for sadists) or heck even swords... I also tried taking a peek at TSM dlls but Reflector doesn't like them, so I cannot see whether the code is that different compared to Sims 3's. Assuming both games are written in C#, it should not be that different, right? Nothing you can't adapt.
Even if we cannot adapt (convert) gameplay objects, TSM CLIPs are perfectly compatible and they could help some modders who struggle really hard to make animations (God knows I tried but I didn't like the result so I gave up). Not knowing how to script, I don't have much use for these animations (they could still be nice for storytelling purposes) but I know some people could use them to create amazing content. As I said, this may be a known fact but since I have never ever seen a mod using a TSM animation, some people may not know it's possible (I remember in fact a breastfeeding mod whose creator said that TSM animations were not compatible, or something like that).
If someone wants a certain group of animations just ask me and I'll compile them for you. :D
Posts: 3,856
Thanks: 8483 in 67 Posts
But a lot of people have made a few medieval animations already. But awesome found!
Posts: 982
Thanks: 2391 in 16 Posts
I got Reflector to open the game assemblies and the code looks somehow compatible (of course it requires some adaptation):
For example, this is what the GameTable class looks like (methods not expanded):
public class GameTable : GameObject { // Fields [Tunable] private static int AmountToWinBeforeWonMoneyBuff; private GameData curGame; private static List<Type> gti; [Tunable] private static int kSmallBetAmount; private int mCompulsiveGamblerMoneyMod; private WinningsOnTable mWinnings; private GameData nextGame; private static readonly string sLocalizationKey; // Methods static GameTable(); public GameTable(); public static bool CanLoseMoney(Sim a); public override void ClearUseList(); public bool HasMoneyToBet(Sim a, int amount); public override bool IsObjectInFrontOfMe(IGameObject gameObject); private static string LocalizeString(string name, params object[] parameters); public override void OnCreation(); public override void OnStartup(); public Sim OtherPlayer(Sim player); public bool ScootInActor(Sim actor); // Properties public int CompulsiveGamblerMoneyMod { get; set; } public static List<Type> GameTableInteractions { get; } public int Losings { get; } private WinningsOnTable SimWinnings { get; } public int Winnings { get; } // Nested Types public sealed class AccuseCheat : ImmediateInteraction<Sim, GameTable>, IMultiplayer { // Fields public static readonly InteractionDefinition Singleton; // Methods static AccuseCheat(); public AccuseCheat(); protected override BaseInteractionResult RunAndReturnInteractionResult(); // Properties public Sim[] Opponents { get; } // Nested Types [HasSpecializedTuning(typeof(GameTable.AccuseCheat.SpecializedTuning))] private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.AccuseCheat> { // Methods public Definition(); protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback); } public class SpecializedTuning : SpecializedInteractionTuning { // Fields public float ContinueChance; public float FistFightChance; public const float kContinueChance = 5f; public const float kFistFightChance = 5f; public const int kMoneyTransfer = 5; public const float kRelationshipDelta = 5f; public int MoneyTransfer; public float RelationshipDelta; public const string XMLContinueChance = "ContinueChance"; public const string XMLFistFightChance = "FistFightChance"; public const string XMLMoneyTransfer = "MoneyTransfer"; public const string XMLRelationshipDelta = "RelationshipDelta"; // Methods public SpecializedTuning(); public override void Load(DataNode rootNode, bool bIsClone); public override void WriteToXml(XmlTextWriter xmlWriter, string whitespace); } } public sealed class BetClothes : GameTable.BetHuge { // Fields public static readonly InteractionDefinition Singleton; // Methods static BetClothes(); public BetClothes(); protected override BaseInteractionResult DoBet(Sim Actor, GameTable Target, GameTable.BetHuge.SpecializedTuning st); // Nested Types [HasSpecializedTuning(typeof(GameTable.BetHuge.SpecializedTuning))] private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.BetClothes> { // Methods public Definition(); protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback); } } public class BetHuge : ImmediateInteraction<Sim, GameTable>, IMultiplayer { // Fields public static readonly InteractionDefinition Singleton; // Methods static BetHuge(); public BetHuge(); protected virtual BaseInteractionResult DoBet(Sim Actor, GameTable Target, SpecializedTuning st); protected override BaseInteractionResult RunAndReturnInteractionResult(); // Properties public Sim[] Opponents { get; } // Nested Types [HasSpecializedTuning(typeof(GameTable.BetHuge.SpecializedTuning))] private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.BetHuge> { // Methods public Definition(); public override InteractionTestResult Test(ref InteractionInstanceParameters parameters, ref GreyedOutTooltipCallback greyedOutTooltipCallback); protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback); } protected class SpecializedTuning : SpecializedInteractionTuning { // Fields public const bool kSureLose = false; public const bool kSureWin = false; public const int kWinAmount = 100; public bool SureLose; public bool SureWin; public int WinAmount; public const string XMLSureLose = "SureLose"; public const string XMLSureWin = "SureWin"; public const string XMLWinAmount = "WinAmount"; // Methods public SpecializedTuning(); public override void Load(DataNode rootNode, bool bIsClone); public override void WriteToXml(XmlTextWriter xmlWriter, string whitespace); } } private sealed class ChangeIntoPajamas : Interaction<Sim, Sim> { // Fields public static readonly InteractionDefinition Singleton; // Methods static ChangeIntoPajamas(); public ChangeIntoPajamas(); protected override BaseInteractionResult RunAndReturnInteractionResult(); // Nested Types private sealed class Definition : InteractionDefinition<Sim, Sim, GameTable.ChangeIntoPajamas> { // Methods public Definition(); protected override bool Test(Sim a, Sim target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback); } } public sealed class Cheat : ImmediateInteraction<Sim, GameTable>, IMultiplayer { // Fields public static readonly InteractionDefinition Singleton; // Methods static Cheat(); public Cheat(); protected override BaseInteractionResult RunAndReturnInteractionResult(); // Properties public Sim[] Opponents { get; } // Nested Types [HasSpecializedTuning(typeof(GameTable.Cheat.SpecializedTuning))] private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.Cheat> { // Methods public Definition(); protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback); } private class SpecializedTuning : SpecializedInteractionTuning { // Fields public const bool kSureWin = false; public bool SureWin; public const string XMLSureWin = "SureWin"; // Methods public SpecializedTuning(); public override void Load(DataNode rootNode, bool bIsClone); public override void WriteToXml(XmlTextWriter xmlWriter, string whitespace); } } [Persistable] private class GameData { // Fields public Sim accusor; public int betAmount; public Sim bettor; public Sim cheater; public bool clothesBet; public float continueChance; public float fistFightChance; public int moneyTransfer; public float relationshipDelta; public Sim sureWinner; // Methods public GameData(); public void Initialize(); // Properties public bool IsDefault { get; } } public sealed class InviteToJoin : ImmediateInteraction<Sim, Sim> { // Fields public static readonly InteractionDefinition Singleton; // Methods static InviteToJoin(); public InviteToJoin(); protected override BaseInteractionResult RunAndReturnInteractionResult(); // Nested Types private sealed class Definition : InteractionDefinition<Sim, Sim, GameTable.InviteToJoin> { // Methods public Definition(); protected override bool Test(Sim a, Sim target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback); public string Tooltip(); } } public sealed class JoinGame : Interaction<Sim, GameTable> { // Fields public static readonly InteractionDefinition Singleton; // Methods static JoinGame(); public JoinGame(); protected override BaseInteractionResult RunAndReturnInteractionResult(); // Nested Types private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.JoinGame> { // Methods public Definition(); protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback); public string Tooltip(); } } public sealed class PlayGameA : Interaction<Sim, GameTable>, IMultiplayer { // Fields private InteractionInstance mInstance; private Sim mPlayerX; private Sim mPlayerY; public static readonly InteractionDefinition Singleton; public Sim targetSim; // Methods static PlayGameA(); public PlayGameA(); private int CalculateOdds(Sim sim); private Sim CalculateWinner(); public override void Cleanup(); private bool DoAccuseCheat(); private void DoCheat(); private void DoWin(Sim winner, Sim loser, StateMachineClient CurrentStateMachine, string sFirstPlayer, bool firstWinner); private Sim GetFirstPlayer(); public void PlayGame(StateMachineClient CurrentStateMachine); protected override BaseInteractionResult RunAndReturnInteractionResult(); private void SetupCurrentGame(); // Properties public Sim[] Opponents { get; } // Nested Types [HasSpecializedTuning(typeof(GameTable.PlayGameA.SpecializedTuning))] public sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.PlayGameA> { // Methods public Definition(); public InteractionInstance CreateInstance(IGameObject target, IActor actor, InteractionPriority priority, bool isAutonomous, bool cancellableByPlayer, Sim simToTarget); public InteractionInstance CreateInstance(IGameObject target, IActor actor, InteractionPriority priority, bool isAutonomous, bool cancellableByPlayer, Sim simToTarget, InteractionInstance linkedInstance); protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback); } private class SpecializedTuning : SpecializedInteractionTuning { // Fields public float BaseProbability; public float CheaterMod; public float CompulsiveGamblerMod; public const float kBaseProbability = 50f; public const float kCheaterMod = 5f; public const float kCompulsiveGamblerMod = 5f; public const float kMoodMod = 5f; public const float kPlayerAAccuseChance = 5f; public const float kPlayerABetClothesChance = 5f; public const float kPlayerABetHugeChance = 5f; public const float kPlayerACheatChance = 5f; public const float kSkillMod = 5f; public const float kSkillUpdatePerMinute = 5f; public const float kWiseMod = 5f; public float MoodMod; public float PlayerAAccuseChance; public float PlayerABetClothesChance; public float PlayerABetHugeChance; public float PlayerACheatChance; public float SkillMod; public float SkillUpdatePerMinute; public float WiseMod; public const string XMLBaseProbability = "BaseProbability"; public const string XMLCheaterMod = "CheaterMod"; public const string XMLCompulsiveGamblerMod = "CompulsiveGamblerMod"; public const string XMLMoodMod = "MoodMod"; public const string XMLPlayerAAccuseChance = "PlayerAAccuseChance"; public const string XMLPlayerABetClothesChance = "PlayerABetClothesChance"; public const string XMLPlayerABetHugeChance = "PlayerABetHugeChance"; public const string XMLPlayerACheatChance = "PlayerACheatChance"; public const string XMLSkillMod = "SkillMod"; public const string XMLSkillUpdateTimer = "SkillUpdatePerMinute"; public const string XMLWiseMod = "WiseMod"; // Methods public SpecializedTuning(); public override void Load(DataNode rootNode, bool bIsClone); public override void WriteToXml(XmlTextWriter xmlWriter, string whitespace); } } private sealed class PlayGameB : Interaction<Sim, GameTable> { // Fields public static readonly InteractionDefinition Singleton; // Methods static PlayGameB(); public PlayGameB(); protected override BaseInteractionResult RunAndReturnInteractionResult(); // Nested Types private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.PlayGameB> { // Methods public Definition(); protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback); } } public sealed class PlayGameWith : ImmediateInteraction<Sim, GameTable> { // Fields public static readonly InteractionDefinition Singleton; // Methods static PlayGameWith(); public PlayGameWith(); public override void Cleanup(); protected override BaseInteractionResult RunAndReturnInteractionResult(); // Nested Types private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.PlayGameWith> { // Methods public Definition(); protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback); private string Tooltip(); } } private sealed class PracticeCards : Interaction<Sim, GameTable> { // Fields public static readonly InteractionDefinition Singleton; // Methods static PracticeCards(); public PracticeCards(); public override void Cleanup(); public void DoPractice(StateMachineClient smc, Interaction<Sim, GameTable>.LoopData ld); protected override BaseInteractionResult RunAndReturnInteractionResult(); // Nested Types [HasSpecializedTuning(typeof(GameTable.PracticeCards.SpecializedTuning))] private sealed class Definition : InteractionDefinition<Sim, GameTable, GameTable.PracticeCards> { // Methods public Definition(); protected override bool Test(Sim a, GameTable target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback); public string ToolTip(); } private class SpecializedTuning : SpecializedInteractionTuning { // Fields public int FunValueStopPracticing; public const int kFunValueStopPracticing = 100; public const float kMaximumAutonomousPractice = 120f; public const float kSkillUpdatePerMinute = 5f; public float MaximumAutonomousPractice; public float SkillUpdatePerMinute; public const string XMLFunValueStopPracticing = "FunValueStopPracticing"; public const string XMLMaximumAutonomousPractice = "MaximumAutonomousPractice"; public const string XMLSkillUpdatePerMinute = "SkillUpdatePerMinute"; // Methods public SpecializedTuning(); public override void Load(DataNode rootNode, bool bIsClone); public override void WriteToXml(XmlTextWriter xmlWriter, string whitespace); } } [Persistable] private class WinningsOnTable { // Fields private Sim mPlayerX; private Sim mPlayerY; private GameTable mTable; private int mWinningsX; private int mWinningsY; // Methods public WinningsOnTable(); public WinningsOnTable(GameTable table); public void AddWinnings(Sim sim, int amount); public int GetWinnings(Sim sim); public void Reset(); public void SetPlayers(Sim PlayerX, Sim PlayerY); } }
I can see someone adapting the code to be compatible with TS3. I'm just wondering why nobody has.
It could really expand Sims 3 gameplay in very interesting ways...
Posts: 3,856
Thanks: 8483 in 67 Posts
Posts: 3,443
Thanks: 937 in 5 Posts
I wonder if it's possible to grab entire interactions and dump them into the Sims 3.
More than that, I'd love it if we could get the Sims Medieval shaders (they apparently have subskin scattering, and face meshes into the Sims 3.
Posts: 5,656
Thanks: 1031 in 5 Posts
Time to convert everything! I wonder if it's possible to grab entire interactions and dump them into the Sims 3. More than that, I'd love it if we could get the Sims Medieval shaders (they apparently have subskin scattering, and face meshes into the Sims 3. |
I'm liking where this is going.
( Join my dumb Discord server if you're into the whole procrastination thing. But like, maybe tomorrow. )
Posts: 3,856
Thanks: 8483 in 67 Posts
Posts: 5,656
Thanks: 1031 in 5 Posts
( Join my dumb Discord server if you're into the whole procrastination thing. But like, maybe tomorrow. )
Posts: 982
Thanks: 2391 in 16 Posts
Posts: 5,656
Thanks: 1031 in 5 Posts
I mean if it were for me, I would convert everything, hahaa... But we need someone who can actually write C# to do it. I can help with everything else, because I know a little bit of everything, but someone who really knows their way around the game code has to see how they can adapt TSM scripts to be functional in The Sims 3. I was waiting for a programmer to come here and help, but sadly nobody has. I knew I should've studied Computer Sciences instead of Literature *sigh* |
Do you know of any such people? They're not gonna be up for help if you don't ask them.
( Join my dumb Discord server if you're into the whole procrastination thing. But like, maybe tomorrow. )
Posts: 3,856
Thanks: 8483 in 67 Posts
For the birds, it shouldn't be hard to make that function. As in, exporting the mesh and textures and make it a new kind that the game reads. Just need to figure out if it's just as adding a new vegetable in the grocery store. Or if it needs any script/xml tuning editing.
Posts: 3,443
Thanks: 937 in 5 Posts
Small thing about the shaders though. The sims 3's shaders are inside this file: Shaders_Win32.precomp (C:\Program Files (x86)\Electronic Arts\The Sims 3\Game\Bin) I just never found out how to 'unpack' it. Since there were some threads going around asking how to change the ghost's transparency but back then, no one knew it was inside that file. |
Lol I wonder if the Sims Medieval's shaders are in the same format.
If that were the case, I wonder what would happen if you swapped one out for the other...
Posts: 5,656
Thanks: 1031 in 5 Posts
Lol I wonder if the Sims Medieval's shaders are in the same format. If that were the case, I wonder what would happen if you swapped one out for the other... |
There's only one way to find out.
( Join my dumb Discord server if you're into the whole procrastination thing. But like, maybe tomorrow. )
Posts: 5,656
Thanks: 1031 in 5 Posts
( Join my dumb Discord server if you're into the whole procrastination thing. But like, maybe tomorrow. )
Posts: 3,856
Thanks: 8483 in 67 Posts
Posts: 2,478
#BlairWitchPetition
TS3 NEEDS: TENNIS COURTS > BUSES > PIGS/SHEEP
Can't find stuff in build and buy mode? http://www.nexusmods.com/thesims3/mods/1/?
Posts: 5,656
Thanks: 1031 in 5 Posts
( Join my dumb Discord server if you're into the whole procrastination thing. But like, maybe tomorrow. )
Posts: 519
Thanks: 409 in 3 Posts
IMAGINE HOW WE WOULD LOVE YOU!!!
That is what Medieval players need above all I reckon.
Forgive my impertinence! I wish I had the brains to know how to do that sort of stuff.
Good luck with what you're talking about working on!
*Eagerly snoops on conversation from the sidelines*
Posts: 3,856
Thanks: 8483 in 67 Posts
Posts: 519
Thanks: 409 in 3 Posts
Actually, the topic was about TSM to TS3. So converting scripts and all to the sims 3. Not the TSM. Although I can understand it would be awesome to have something in TSM to contact your sims's friends! Wasn't it possible to send letters to other sims instead? |
Yeah, I was talking about Medieval mods for TS3 (Sorry if I said TSM in TS3) I meant the smartphone in TS3. Never played TSM tbh.
Who Posted
|