Skip to content

Commit 1d89f04

Browse files
committed
Implement multi-language mod localization
1 parent 4939da7 commit 1d89f04

File tree

3 files changed

+13
-74
lines changed

3 files changed

+13
-74
lines changed

ModLocalizer/Dumper.cs

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -267,13 +267,6 @@ private void DumpNpcs()
267267

268268
var value = ins.Operand as string;
269269

270-
ins = inst[++index];
271-
272-
if ((ins.OpCode.Equals(OpCodes.Call) || ins.OpCode.Equals(OpCodes.Callvirt))
273-
&& ins.Operand is IMethodDefOrRef m)
274-
if (!m.Name.ToString().Equals("Concat") || m.MethodSig.Params.Count == 1)
275-
continue;
276-
277270
npc.ChatTexts.Add(value);
278271
}
279272
}
@@ -387,31 +380,6 @@ private void DumpMiscs()
387380
misc.Contents.Add(ins.Operand as string);
388381
write = true;
389382
}
390-
else if (ins.OpCode.Equals(OpCodes.Call) &&
391-
ins.Operand is IMethodDefOrRef n &&
392-
n.Name.ToString().Equals("Concat", StringComparison.Ordinal))
393-
{
394-
var index2 = index;
395-
var count = 0;
396-
var total = n.MethodSig.Params.Count;
397-
var list = new List<string>();
398-
while (--index2 > 0 && count < total)
399-
{
400-
ins = inst[index2];
401-
if (ins.OpCode.Equals(OpCodes.Ldelem_Ref)) // for array
402-
{
403-
count++;
404-
}
405-
else if (ins.OpCode.Equals(OpCodes.Ldstr))
406-
{
407-
count++;
408-
list.Add(ins.Operand as string);
409-
}
410-
}
411-
list.Reverse();
412-
misc.Contents.AddRange(list);
413-
write = true;
414-
}
415383
}
416384

417385
if (write)

ModLocalizer/Patcher.cs

Lines changed: 11 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ public void Run()
5454
private void LoadAssemblies()
5555
{
5656
_module = AssemblyDef.Load(_assembly).Modules.Single();
57-
_emitter = new TranslationEmitter(_module, _language);
57+
_emitter = new TranslationEmitter(_module, _language, _mod.Name);
5858

5959
if (_monoAssembly != null)
6060
{
6161
_monoModule = AssemblyDef.Load(_monoAssembly).Modules.Single();
62-
_monoEmitter = new TranslationEmitter(_monoModule, _language);
62+
_monoEmitter = new TranslationEmitter(_monoModule, _language, _mod.Name);
6363
}
6464
}
6565

@@ -133,8 +133,10 @@ void ApplyItemsInternal(ItemTranslation translation, TranslationEmitter emitter)
133133

134134
if (ins.OpCode.Equals(OpCodes.Ldstr) && inst[index - 2].OpCode.Equals(OpCodes.Ldstr))
135135
{
136-
inst[index - 2].Operand = translation.ModifyTooltips[listIndex++];
137-
inst[index - 1].Operand = translation.ModifyTooltips[listIndex++];
136+
var cache = inst[index - 1];
137+
138+
emitter.Emit(method, inst[index - 2], translation.ModifyTooltips[listIndex++]);
139+
emitter.Emit(method, cache, translation.ModifyTooltips[listIndex++]);
138140
}
139141
else if (ins.OpCode.Equals(OpCodes.Call) && ins.Operand is MemberRef n && n.Name.Equals("Concat")) // for thorium mod
140142
{
@@ -185,7 +187,7 @@ void ApplyItemsInternal(ItemTranslation translation, TranslationEmitter emitter)
185187
switch (m.Name)
186188
{
187189
case "setBonus":
188-
inst[index - 1].Operand = translation.SetBonus;
190+
emitter.Emit(method, inst[index - 1], translation.SetBonus);
189191
break;
190192
}
191193
}
@@ -237,14 +239,7 @@ void ApplyNpcsInternal(NpcTranslation translation, TranslationEmitter emitter)
237239
if (ins.OpCode != OpCodes.Ldstr)
238240
continue;
239241

240-
ins = inst[++index];
241-
242-
if ((ins.OpCode.Equals(OpCodes.Call) || ins.OpCode.Equals(OpCodes.Callvirt))
243-
&& ins.Operand is IMethodDefOrRef m)
244-
if (!m.Name.ToString().Equals("Concat") || m.MethodSig.Params.Count == 1)
245-
continue;
246-
247-
inst[index - 1].Operand = translation.ChatTexts[listindex++];
242+
emitter.Emit(method, ins, translation.ChatTexts[listindex++]);
248243
}
249244
}
250245

@@ -263,9 +258,9 @@ void ApplyNpcsInternal(NpcTranslation translation, TranslationEmitter emitter)
263258
ins = inst[index - 1];
264259

265260
if (ins.OpCode.Equals(OpCodes.Ldarg_1))
266-
inst[index].Operand = translation.ShopButton1;
261+
emitter.Emit(method, inst[index], translation.ShopButton1);
267262
else if (ins.OpCode.Equals(OpCodes.Ldarg_2))
268-
inst[index].Operand = translation.ShopButton2;
263+
emitter.Emit(method, inst[index], translation.ShopButton2);
269264
}
270265
}
271266
}
@@ -338,31 +333,7 @@ void ApplyMiscsInternal(NewTextTranslation translation, TranslationEmitter emitt
338333

339334
if ((ins = inst[index - 5]).OpCode.Equals(OpCodes.Ldstr))
340335
{
341-
ins.Operand = translation.Contents[listIndex++];
342-
}
343-
else if (ins.OpCode.Equals(OpCodes.Call) &&
344-
ins.Operand is IMethodDefOrRef n &&
345-
n.Name.ToString().Equals("Concat", StringComparison.Ordinal))
346-
{
347-
var index2 = index;
348-
var count = 0;
349-
var total = n.MethodSig.Params.Count;
350-
var list = translation.Contents.GetRange(listIndex, translation.Contents.Count - listIndex).AsEnumerable().Reverse().ToList();
351-
var currentIndex = 0;
352-
while (--index2 > 0 && count < total)
353-
{
354-
ins = inst[index2];
355-
if (ins.OpCode.Equals(OpCodes.Ldelem_Ref)) // for array
356-
{
357-
count++;
358-
}
359-
else if (ins.OpCode.Equals(OpCodes.Ldstr))
360-
{
361-
count++;
362-
listIndex++;
363-
ins.Operand = list[currentIndex++];
364-
}
365-
}
336+
emitter.Emit(method, ins, translation.Contents[listIndex++]);
366337
}
367338
}
368339
}

ModLocalizer/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@
1414

1515
[assembly: Guid("613f981d-c5dd-43d1-b0ff-057169a647c4")]
1616

17-
[assembly: AssemblyVersion("0.7.0.0")]
18-
[assembly: AssemblyFileVersion("0.7.0.0")]
17+
[assembly: AssemblyVersion("0.8.0.0")]
18+
[assembly: AssemblyFileVersion("0.8.0.0")]

0 commit comments

Comments
 (0)