So basically alter the STR pointer dynamically to a custom CHK section to increase the string limit?
Do custom CHK sections even get stored in memory in unmodded SC?
Surely STR section are loaded in memory in unmodded SC. (Excluding EUD Enabler... This method is highly dependent on EUD...) This map doesn't need any fancy custom sections. Every needed operation can be done in STR and TRIG section.
Example (This map, of course)
We want to have 2 stringtables in one STR section. So we tweak STR section.
( I'm refering stringtable to a pure TBL file format. It's basically an STR section without section header and section length...)
( One string table can effectively has 65536 bytes of storage... Maybe the last string may have more... but ignore that )
( To use more than 65536 bytes, we have to modify existing data, or use more storage)
I assumed that SC takes off "STR " and the length of STR section. (8 bytes at the front of STR things) and memcpy(fread?) that to somewhere, and
point there with a pointer found at EUDDB.
So things like this.
stringtable
|
stringtablepointer
So, I just hacked this (content of STR : stringtable1 stringtable2. length are adjusted properly)
stringtable1 stringtable2
|
stringtablepointer
When we want to use stringtable2, add stringtablepointer stringtable1's length.
->
stringtable1 stringtable2
|
stringtablepointer
And everything assosiated with map's str section will work seamlessly with stringtable2. (Display text...)
Some problem with this is, unit's name and some other things are in STR section, so stringtablepointer have to be reset after every DisplayText...
This may give some limitation to this technique... Edited original post a bit.
Otherwise you could just overwrite the STR section directly using a bunch of EUDA's, which would fit well for "chapters" in an RPG or so.
Can I? I only have a pointer to STR section. How can I dereference it?
BTW I wonder if you could dynamically change displayed text using EUDA's while they're being displayed.
I have some utility that seems to do something similar to your idea... but I don't know what exactly it does.
Will have a deep look at it...
Something like this...
DisplayText(" \n \n \n \n \n \n \n \n \n \n \n"); //Change this in starforge style
SomeDirtyStarForgeTriggerSet
Trigger box #1
SetDeaths(3, SetTo, 1919248468,15573);
SetDeaths(4, SetTo, 2019893349,15573);
SetDeaths(5, SetTo, 544502633,15573);
SetDeaths(6, SetTo, 544433529,15573);
SetDeaths(7, SetTo, 544698211,15573);
SetDeaths(8, SetTo, 1702258028,15573);
SetDeaths(9, SetTo, 1210068588,15573);
SetDeaths(10, SetTo, 1751214177,15573);
SetDeaths(11, SetTo, 97,15573);
SetDeaths(0, SetTo, 0,15574);
SetDeaths(1, SetTo, 0,15574);
SetDeaths(2, SetTo, 0,15574);
SetDeaths(3, SetTo, 0,15574);
SetDeaths(4, SetTo, 0,15574);
SetDeaths(5, SetTo, 0,15574);
SetDeaths(6, SetTo, 0,15574);
SetDeaths(7, SetTo, 0,15574);
SetDeaths(8, SetTo, 0,15574);
SetDeaths(9, SetTo, 0,15574);
SetDeaths(10, SetTo, 0,15574);
SetDeaths(11, SetTo, 0,15574);
SetDeaths(0, SetTo, 0,15575);
SetDeaths(1, SetTo, 0,15575);
SetDeaths(2, SetTo, 0,15575);
SetDeaths(3, SetTo, 0,15575);
SetDeaths(4, SetTo, 0,15575);
SetDeaths(5, SetTo, 0,15575);
SetDeaths(6, SetTo, 0,15575);
SetDeaths(7, SetTo, 0,15575);
SetDeaths(8, SetTo, 0,15575);
SetDeaths(9, SetTo, 0,15575);
SetDeaths(10, SetTo, 0,15575);
SetDeaths(11, SetTo, 0,15575);
SetDeaths(0, SetTo, 0,15576);
SetDeaths(1, SetTo, 0,15576);
SetDeaths(2, SetTo, 0,15576);
SetDeaths(3, SetTo, 0,15576);
SetDeaths(4, SetTo, 0,15576);
SetDeaths(5, SetTo, 0,15576);
SetDeaths(6, SetTo, 0,15576);
SetDeaths(7, SetTo, 0,15576);
SetDeaths(8, SetTo, 0,15576);
SetDeaths(9, SetTo, 0,15576);
SetDeaths(10, SetTo, 0,15576);
SetDeaths(11, SetTo, 0,15576);
SetDeaths(0, SetTo, 0,15577);
SetDeaths(1, SetTo, 0,15577);
SetDeaths(2, SetTo, 0,15577);
SetDeaths(3, SetTo, 0,15577);
SetDeaths(4, SetTo, 0,15577);
SetDeaths(5, SetTo, 0,15577);
SetDeaths(6, SetTo, 0,15577);
SetDeaths(7, SetTo, 0,15577);
SetDeaths(8, SetTo, 0,15577);
Trigger Box #2
SetDeaths(9, SetTo, 1096359968,15577);
SetDeaths(10, SetTo, 1096368473,15577);
SetDeaths(11, SetTo, 1096368473,15577);
SetDeaths(0, SetTo, 1096368473,15578);
SetDeaths(1, SetTo, 1096368473,15578);
SetDeaths(2, SetTo, 1096368473,15578);
SetDeaths(3, SetTo, 1396788057,15578);
SetDeaths(4, SetTo, 1397115716,15578);
SetDeaths(5, SetTo, 1145783873,15578);
SetDeaths(6, SetTo, 1262572371,15578);
SetDeaths(7, SetTo, 1397442116,15578);
SetDeaths(8, SetTo, 0,15578);
SetDeaths(9, SetTo, 0,15578);
SetDeaths(10, SetTo, 0,15578);
SetDeaths(11, SetTo, 0,15578);
SetDeaths(0, SetTo, 0,15579);
SetDeaths(1, SetTo, 0,15579);
SetDeaths(2, SetTo, 0,15579);
SetDeaths(3, SetTo, 0,15579);
SetDeaths(4, SetTo, 0,15579);
SetDeaths(5, SetTo, 0,15579);
SetDeaths(6, SetTo, 0,15579);
SetDeaths(7, SetTo, 0,15579);
SetDeaths(8, SetTo, 0,15579);
SetDeaths(9, SetTo, 0,15579);
SetDeaths(10, SetTo, 0,15579);
SetDeaths(11, SetTo, 0,15579);
SetDeaths(0, SetTo, 0,15580);
SetDeaths(1, SetTo, 0,15580);
SetDeaths(2, SetTo, 0,15580);
SetDeaths(3, SetTo, 0,15580);
SetDeaths(4, SetTo, 0,15580);
SetDeaths(5, SetTo, 0,15580);
SetDeaths(6, SetTo, 0,15580);
SetDeaths(7, SetTo, 0,15580);
SetDeaths(8, SetTo, 0,15580);
SetDeaths(9, SetTo, 0,15580);
SetDeaths(10, SetTo, 0,15580);
SetDeaths(11, SetTo, 0,15580);
SetDeaths(0, SetTo, 0,15581);
SetDeaths(1, SetTo, 0,15581);
SetDeaths(2, SetTo, 0,15581);
SetDeaths(3, SetTo, 0,15581);
SetDeaths(4, SetTo, 0,15581);
SetDeaths(5, SetTo, 0,15581);
SetDeaths(6, SetTo, 0,15581);
SetDeaths(7, SetTo, 0,15581);
SetDeaths(8, SetTo, 0,15581);
SetDeaths(9, SetTo, 0,15581);
SetDeaths(10, SetTo, 0,15581);
SetDeaths(11, SetTo, 0,15581);
SetDeaths(0, SetTo, 0,15582);
SetDeaths(1, SetTo, 0,15582);
SetDeaths(2, SetTo, 0,15582);
Trigger Box #3
SetDeaths(4, SetTo, 1162691917,15582);
SetDeaths(5, SetTo, 1263750467,15582);
SetDeaths(6, SetTo, 1179468118,15582);
SetDeaths(7, SetTo, 1178881348,15582);
SetDeaths(8, SetTo, 1178882899,15582);
SetDeaths(9, SetTo, 1095978305,15582);
SetDeaths(10, SetTo, 1146308164,15582);
SetDeaths(11, SetTo, 1095977793,15582);
SetDeaths(0, SetTo, 1146309443,15583);
SetDeaths(1, SetTo, 1396984646,15583);
SetDeaths(2, SetTo, 0,15583);
SetDeaths(3, SetTo, 0,15583);
SetDeaths(4, SetTo, 0,15583);
SetDeaths(5, SetTo, 0,15583);
SetDeaths(6, SetTo, 0,15583);
SetDeaths(7, SetTo, 0,15583);
SetDeaths(8, SetTo, 0,15583);
SetDeaths(9, SetTo, 0,15583);
SetDeaths(10, SetTo, 0,15583);
SetDeaths(11, SetTo, 0,15583);
SetDeaths(0, SetTo, 0,15584);
SetDeaths(1, SetTo, 0,15584);
SetDeaths(2, SetTo, 0,15584);
SetDeaths(3, SetTo, 0,15584);
SetDeaths(4, SetTo, 0,15584);
SetDeaths(5, SetTo, 0,15584);
SetDeaths(6, SetTo, 0,15584);
SetDeaths(7, SetTo, 0,15584);
SetDeaths(8, SetTo, 0,15584);
SetDeaths(9, SetTo, 0,15584);
SetDeaths(10, SetTo, 0,15584);
SetDeaths(11, SetTo, 0,15584);
SetDeaths(0, SetTo, 0,15585);
SetDeaths(1, SetTo, 0,15585);
SetDeaths(2, SetTo, 0,15585);
SetDeaths(3, SetTo, 0,15585);
SetDeaths(4, SetTo, 0,15585);
SetDeaths(5, SetTo, 0,15585);
SetDeaths(6, SetTo, 0,15585);
SetDeaths(7, SetTo, 0,15585);
SetDeaths(8, SetTo, 0,15585);
SetDeaths(9, SetTo, 0,15585);
SetDeaths(10, SetTo, 0,15585);
SetDeaths(11, SetTo, 0,15585);
SetDeaths(0, SetTo, 0,15586);
SetDeaths(1, SetTo, 0,15586);
SetDeaths(2, SetTo, 0,15586);
SetDeaths(3, SetTo, 0,15586);
SetDeaths(4, SetTo, 0,15586);
SetDeaths(5, SetTo, 0,15586);
SetDeaths(6, SetTo, 0,15586);
SetDeaths(7, SetTo, 0,15586);
SetDeaths(8, SetTo, 0,15586);
SetDeaths(9, SetTo, 0,15586);
This will print out
There exist yes cow level. Hahaha
YAYAYAYAYAYAYAYAYAYAYAYKASDKFSAFKDSSAKDFKS
MEMECMSKVAMFDMDFSSDFAMSADFSDAKSACKSDFKDS
This eud can surely modify printed string in dword level. quite interesting. Maybe someone can create a printf example in SC.
(To modify one byte, fill upper 3 bytes with useless bytes, such as <06><06><06> in already red text...)
Although this requires too many triggers, this may can be used for partial string replacing.
Quite interesting though... This also deserves some research.
Sorry for bad english anyway.
Post has been edited 3 time(s), last time on Oct 1 2013, 3:58 pm by trgk.
EUD