Posts for amaurea


1 2
6 7 8
16 17
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
I have also looked a bit at the rom, finding the definition of the first-generation characters, the classes, bloodlines and love growth values. Most of this is already documented at gamefaqs, though, but I'll put it here in the hope that it will be useful to somebody. It is in the form of a few short bash scripts: http://folk.uio.no/sigurdkn/fe4_blood http://folk.uio.no/sigurdkn/fe4_class http://folk.uio.no/sigurdkn/fe4_chars http://folk.uio.no/sigurdkn/fe4_affec These are mostly wrappers around hexdump, which extracts the relevant subset of the rom and formats it as a table. Running each of these on the rom produces: fe4_blood
          Growth boost                Holy weapon boost
 mhp str mag skl spd def res luc  str mag skl spd def res
  20  10   0  10   0   0   0  10    0   0  10  10   0  20 08 50 Baldo
  10   0  20   0   0   0  20   0    0   0  20  20  20  20 01 23 Narga
  20   0   0   0  30   0   0   0   10   0   0  10  10   0 01 24 Dain
  20  10   0   0  10  10   0   0   10   0  10   0  10   0 00 16 Noba
  20   0   0  30   0   0   0   0    0   0  10  20   0   0 03 36 Odo
  20   0   0   0   0   0   0  30   10   0   0  10   0   0 02 2c Ulir
  20   0   0   0   0  30   0   0    0   0   0   0  20  10 05 41 Neir
  20   0  30   0   0   0   0   0    0  10   0   0  10  10 06 46 Fala
  20   0   0  30   0   0   0   0    0   0  20  10   0   0 07 4b Tordo
  20   0   0   0  30   0   0   0    0   0  10  20   0   0 04 62 Holsety
  10   0  10   0   0   0  20  10    0   0   0   0   0   0 00 14 Blagi
  20  30   0   0   0   0   0   0    0   0  20   0   0  10 09 54 Hezul
  10   0  20   0   0   0  20   0    0   0   0   0   0   5 90 00 Loptus
fe4_class
                                 |-- for generic enemies? -|
     hp? str mag skl spd def res  hp str mag skl spd def res swd spr axe bow sta fir thu wnd lit drk mov     skills     cls
  20  30   7   0   6   6   6   0 100  30  10  30  30  30  10   1   2   3   3   3   3   3   3   3   3   8   0 000100  10   0
  20  30   7   0   6   6   6   0 100  30  10  30  30  30  10   3   1   3   3   3   3   3   3   3   3   8   0 000100  10   1
  20  30   7   0   6   6   6   0 100  30  10  30  30  30  10   3   3   3   1   3   3   3   3   3   3   8   0 000100  10   2
  20  30   7   0   6   6   6   0 100  30  10  30  30  30  10   3   3   1   3   3   3   3   3   3   3   8   0 000100  10   3
  20  30   7   0   6   6   6   0 100  30  10  30  30  30  10   1   3   3   3   3   3   3   3   3   3   8   0 000100  10   4
  20  26   3   3   6   6   3   3 100  30  10  30  30  20  10   1   3   3   3   2   3   3   3   3   3   8   0 000102  10   5
  20  40  10   0   7   7   7   3 100  30  10  30  30  30  10   0   1   3   3   3   3   3   3   3   3   9   1 000104  30   6
  20  40  12   0   7   7   8   3 100  30  10  30  30  30  10   3   0   3   3   3   3   3   3   3   3   9   1 000100  30   7
  20  40  12   7  12  12  12   7 100  30  10  30  30  30  10   0   0   0   0   0   0   0   0   2   3   9   1 000900  30   8
  20  40   9   5   9   9   9   5 100  30  10  30  30  30  10   1   1   3   3   3   3   3   3   3   3   9   1 000100  30   9
  20  40   9   5   9   9   9   5 100  30  10  30  30  30  10   1   2   3   3   2   3   3   3   3   3   9   1 000100  30  10
  20  40  10   0   8   8   8   3 100  30  10  30  30  30  10   3   3   3   0   3   3   3   3   3   3   9   1 000100  30  11
  20  40   8   0  15  12   8   3 100  30  10  30  30  30  10   0   3   3   3   3   3   3   3   3   3   9   1 001100  30  12
  20  40   5  10   7   7   5   7 100  30  20  30  30  20  20   1   3   3   3   3   1   1   1   3   3   9   1 000100  30  13
  20  40  12   0   7   7  10   3 100  30  10  30  30  30  10   3   3   0   3   3   3   3   3   3   3   9   1 000100  30  14
   1  30   6   0   5  10   3   5 100  30  10  30  30  30  10   2   2   3   3   3   3   3   3   3   3   8   2 010100  10  15
  20  35   7   0   7  12   5   7 100  30  10  30  30  30  10   1   1   3   3   3   3   3   3   3   3   8   2 010100  30  16
  20  40   7   7  10  15   6  12 100  30  10  30  30  30  10   0   0   3   3   2   3   3   3   3   3   8   2 011100  50  17
   1  35   9   0   5   5   8   0 100  30  10  30  30  30  10   2   2   3   3   3   3   3   3   3   3   9   2 010100  10  18
  20  40  10   0   7   6  11   0 100  30  10  30  30  30  10   1   1   3   3   3   3   3   3   3   3   9   2 010100  30  19
  20  45  12   0   9   7  14   0 100  30  10  30  30  30  10   0   0   3   3   3   3   3   3   3   3   9   2 010900  50  20
   1  30   7   0  10  10   5   0 100  30  10  30  30  30  10   3   3   3   0   3   3   3   3   3   3   6   3 000800  10  21
   1  30   7   0  10  10   5   0 100  30  10  30  30  30  10   0   3   3   3   3   3   3   3   3   3   6   3 000800  10  22
  20  40  12   0  15  15   7   3 100  30  10  30  30  30  10   0   3   3   3   3   3   3   3   3   3   6   3 001800  30  23
  20  40  12   0  12  12   7   3 100  30  10  30  30  30  10   3   3   3   0   3   3   3   3   3   3   6   3 000800  30  24
  20  40  12   3  12  12   7   3 100  30  10  30  30  30  10   0   3   3   3   3   3   3   3   3   3   6   3 000800  30  25
  20  40  10   0   6   5  12   3 100  30  10  30  30  30  10   0   0   1   1   3   3   3   3   3   3   5   4 000200  30  26
  20  45  15  15  15  15  15  15 100  30  10  30  30  30  10   0   0   0   0   0   0   0   0   3   3   5   4 000208  60  27
  20  45  12   7   7   7  12   7 100  30  10  30  30  30  10   0   0   0   0   0   0   0   0   3   3   5   4 000200  50  28
  20  30   6   0   5   5   7   0 100  30  10  30  30  30  10   3   2   3   3   3   3   3   3   3   3   6   5 000000  10  29
  20  30   6   0   5   5   7   0 100  30  10  30  30  30  10   3   1   3   3   3   3   3   3   3   3   6   5 000000  10  30
  20  30   6   0   5   5   7   0 100  30  10  30  30  30  10   3   3   2   3   3   3   3   3   3   3   6   5 000000  10  31
  20  30   6   0   5   5   7   0 100  30  10  30  30  30  10   3   3   3   2   3   3   3   3   3   3   6   5 000000  10  32
  20  30   6   0   5   5   7   0 100  30  10  30  30  30  10   2   3   3   3   3   3   3   3   3   3   6   5 000000  10  33
  20  40   9   0   5   3  10   0 100  30  10  30  30  30  10   3   1   3   3   3   3   3   3   3   3   5   4 000000  20  34
  20  40   9   0   5   3  10   0 100  30  10  30  30  30  10   3   3   1   3   3   3   3   3   3   3   5   4 000000  20  35
  20  40   9   0   5   3  10   0 100  30  10  30  30  30  10   3   3   3   1   3   3   3   3   3   3   5   4 000000  20  36
  20  40   9   0   5   3  10   0 100  30  10  30  30  30  10   1   3   3   3   3   3   3   3   3   3   5   4 000000  20  37
  20  35   5   0   0   7   5   0 100  30   0  30  30  30  10   3   3   1   3   3   3   3   3   3   3   6   7 000000  10  38
  20  35   8   0   3  10   8   0 100  30   0  30  30  30  10   3   3   0   3   3   3   3   3   3   3   6   6 000000  20  39
  20  35   5   0   0   7   5   0 100  30   0  30  30  30  10   3   3   1   3   3   3   3   3   3   3   6  11 000000  50  40
  20  40  11   0   5  12  10   3 100  30   0  30  30  30  10   3   3   0   1   3   3   3   3   3   3   6   6 000000  30  41
  20  35   7   0   0   7   5   0 100  30   0  30  30  30  10   3   3   3   0   3   3   3   3   3   3   6   7 000000  10  42
  20  35   5   0   0   7   5   0 100  30   0  30  30  30  10   3   3   1   3   3   3   3   3   3   3   6   8 000000  50  43
  20  30   5   0   5   5   5   0 100  30  10  30  30  30  10   1   3   3   3   3   3   3   3   3   3   6   9 000000  60  44
  20  30   5  12  10  10   7   7 100  20  20  30  30  30  20   2   3   3   3   3   1   1   1   3   3   6   9 001000  30  45
  20  30   8   3   7   6   7   3 100  30  10  30  30  30  10   0   3   3   3   3   3   3   3   3   3   6   9 000000  50  46
  20  26   5   7   5   8   5   7 100  20  20  30  30  30  20   1   3   3   3   2   3   3   3   3   3   6   9 000008  50  47
  20  26   3  12   9  12   5  10 100  20  20  30  30  30  20   2   3   3   3   1   1   1   1   3   3   6   9 001000  30  48
  20  35   5  15  10  12  10  15 100  20  20  30  30  30  20   3   3   3   3   0   0   0   0   3   3   6   9 000008  60  49
  20  26   3   0   1   7   1   3 100  30  10  30  30  30  10   2   3   3   3   3   3   3   3   3   3   6   9 008000  10  50
  20  26   0   7   6   6   1   7 100  10  30  30  30  10  30   3   3   3   3   1   3   3   3   3   3   5  10 000000  10  51
  20  26   0   7   6   6   1   5 100  10  30  30  30  10  30   3   3   3   3   3   2   2   2   3   3   5  10 000000  10  52
  20  26   0  10   6   6   1   5 100  10  30  30  30  10  30   3   3   3   3   3   1   3   3   3   3   5  10 000000  10  53
  20  26   0   7   9   6   1   5 100  10  30  30  30  10  30   3   3   3   3   3   3   1   3   3   3   5  10 000000  10  54
  20  26   0   7   6   9   1   5 100  10  30  30  30  10  30   3   3   3   3   3   3   3   1   3   3   5  10 000000  10  55
  20  35   0  12   9   8   3   8 100  10  30  30  30  10  30   3   3   3   3   0   2   2   2   3   3   5  10 000000  30  56
  20  35   0  10   8   5   3   8 100  10  30  30  30  10  30   3   3   3   3   0   1   1   1   3   3   5  10 000000  30  57
  20  35   0  15  12  15   3  12 100  10  30  30  30  10  30   3   3   3   3   1   1   1   1   1   3   6  10 001000  50  58
  20  30   0   7   7  10   3   7 100  10  30  30  30  10  30   3   3   3   3   3   2   2   2   2   3   6  10 000000  20  59
  20  30   0   8   7   7   3  10 100  10  30  30  30  10  30   3   3   3   3   1   3   3   3   0   3   5  10 000000  20  60
  20  40   0  10   8   8   7  10 100  10  30  30  30  10  30   3   3   3   3   1   3   3   3   3   1   5  10 000000  30  61
  20  40   0  15  10  10  10  12 100  10  30  30  30  10  30   3   3   3   3   0   0   0   0   3   0   5  10 000800  50  62
  20  26   3   0   3   7   1   0 100  30  10  30  30  30  10   2   3   3   3   3   3   3   3   3   3   6  11 002000  50  63
  20  30   7   3   7  12   5   3 100  30  10  30  30  30  10   0   3   3   3   3   3   3   3   3   3   7  11 002800  60  64
  20  20   0   0   0  10   2   0 100   0   0  30  30   0   0   3   3   3   3   3   3   3   3   3   3   5  12 000000   0  65
  20  20   0   0   0   0   0   0 100   0   0  30  30   0   0   3   3   3   3   3   3   3   3   3   3   5  12 000000   0  66
  20  30   0   0   0   0   0   0 100  30  10  30  30  30   0   3   3   3   0   3   3   3   3   3   3   0  13 000000  10  67
  20  30   0   0   0   0  10   0 100  30  10  30  30  30   0   3   3   3   0   3   3   3   3   3   3   0  13 000000  10  68
  20  30   0   0   0   0   0   0 100  30  10  30  30  30   0   3   3   3   0   3   3   3   3   3   3   0  13 000000  10  69
  20  30   0   0   0   0   0   0 100  30  10  30  30  30   0   3   3   3   0   3   3   3   3   3   3   0  13 000000  10  70
  20  30   0  15  12  12  10  15   0   0   0   0   0   0   0   3   3   3   3   3   0   0   0   3   0   5  14 000000   0  71
fe4_chars
             Starting stats                                                            Growth rates
    mhp str mag skl spd def res luc cls lvl ldr gld  id    nam    loc sex    mhp str mag skl spd def res luc skills    blood    items
 00  35   4   0   4   5   2   0   7   6   5   2   5   1 00   0 00   1   0 00  70  30   5  30  30  40   5  20 020000 02000000 07 2d ff Sigurd
 00  33   4   0   1   2   2   0   4   0   3   0   2   2 00   1 00   2   0 00  80  40   5  30  20  40   5  20 000500 00000000 09 ff ff Noiche
 00  32   2   0   3   4   1   0   4   0   2   0   2   3 00   2 00   3   0 00  70  30   5  40  30  30   5  30 420000 00000000 01 ff ff Alec
 00  36   4   0   0   1   3   0   3  37   3   0   2   4 00   3 00   4   0 00  90  50   5  10  20  40   5  10 000200 00000000 03 ff ff Adan
 00  32   2   0   2   4   1   0   8   1   1   0   2   5 00   4 00   5   0 00  70  30   5  40  30  30   5  50 820004 00000000 2e ff ff Finn
 00  34   4   0   3   3   2   0   5   7   4   2   5   6 00   5 00   6   0 00  70  30   5  30  20  30   5  10 040004 80000000 32 37 ff Cuan
 00  32   2   0   1   3   1   0   3   2   2   0   2   7 00   6 00   7   0 00  60  30   5  30  40  30   5  10 020400 00000000 47 ff ff Mideel
 00  34   1   5   5   6   2   2   7  59   6   0   8   8 00   7 00   8   0 00  50  10  30  40  30  20  10  20 040100 00000800 5a ff ff Levin
 00  40   7   0   7   7   6   1   1  22  12   0  10   9 00   8 00   9   0 00  90  30   5  50  30  30   5  20 001000 00010000 0c ff ff Holin
 00  30   0   3   1   3   1   1   2  52   1   0   5  10 00   9 00  10   0 00  50  10  10  20  50  20  10  20 020000 00400000 50 ff ff Azel
 00  36   4   0   4   4   4   0   4  21   6   1   5  11 00  10 00  11   0 00  90  50   0  10  30  30   5  40 040400 00000000 4e ff ff Jamuka
 00  34   0   9   5   7   2  12   9  56  20   0  10  12 00  11 00  12   0 00  50  10  20  20  30  20  10  30 000000 00002000 6c 71 ff Claude
 00  38   7   0   5   5   4   0   3   4   9   0   2  13 00  12 00  13   0 00  80  40   0  40  30  30   5  20 020400 00000000 08 ff ff Beowulf
 00  33   3   0   4   5   3   0   8   3   4   0   5  14 00  13 00  14   0 00  70  40   5  20  20  20   5  20 000202 00100000 3f ff ff Lex
 00  28   0   0   3   8   0   0  12  63   1   0  15  15 00  14 00  15   0 00  50  40  10  40  40  40  10  40 002010 00000000 04 ff ff Deu
 00  26   0   6   2   5   0   6   6  60   3   0   1  16 00  15 00  16   1 00  40  10  10  20  10  10  10  10 600000 08000001 72 60 ff Diadora
 00  28   2   5   5   6   1   3   8   5   1   0   4  17 00  16 00  17   1 00  40  20   5  20  30  20  10  10 000104 01000000 1c 62 ff Ethrin
 00  26   1   1   4   5   2   2   5  47   2   0  10  18 00  17 00  18   1 00  40  20   5  10  20  20  10  40 100000 00004000 15 63 ff Lachesis
 00  32   4   0   6   7   2   1   3  22   4   0   3  19 00  18 00  19   1 00  50  30   5  30  30  20   5  20 400800 00010000 0d ff ff Ayra
 00  32   4   1   5   6   4   2   7  16   6   1   8  20 00  19 00  20   1 00  50  20  10  20  30  30  10  20 020000 00000000 3c ff ff Fury
 00  28   0   3   6   4   0   4   9  54   3   0   5  21 00  20 00  21   1 00  40  10  20  30  40  10  10  50 010000 00000100 57 54 ff Tiltyu
 00  28   0   0   3   5   0   2   6  50   1   0   5  22 00  21 00  22   1 00  40  10  20  10  10  10  20  20 840000 00001000 1e ff ff Sylvia
 00  28   0   6   2   3   0   3  11  51   3   0   5  23 00  22 00  23   1 00  50  20  30  20  30  20   5  30 000000 00040000 65 ff ff Edin
 00  40   8   0  10   9   7   6   7  24  12   0  10  24 00  23 00  24   1 00  50  30  20  30  20  20   5  10 000000 00080000 49 ff ff Briggit
fe4_affec
 sig noi alc adn fin cua mid lev hol azl jam cld beo lex deu
   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0 Diadora
   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0 Ethrin
   0   2   2   2   2   0   2   2   2   2   2   3   2   2   2 Lachesis
   0   2   2   2   2   0   2   2   2   2   2   2   2   2   2 Ayra
   0   2   2   2   2   0   2   2   2   2   2   3   2   2   2 Fury
   0   3   3   3  10   0   3   3   3   3   3   3   3   3   3 Tiltyu
   0   3   3   3   3   0   3   2   3   3   3   1   3   3   3 Sylvia
   0   2   2   2   2   0   1   2   2   1   1   3   2   2   2 Edin
   0   4   4   4  10   0   3   4   3   3   3   4   4   4   2 Briggit
Most of the above information can be found in a more convenient format (but without any memory or rom addresses, despite the author clearly having disassembled the rom quite thoroughly) in this gamefaqs article.
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
The other script is more directly useful during normal play. It displays the relationship status for the first-generation characters when the Y-button is pressed:
Language: lua

emu = snes9x function sword(x) if x >= 0x8000 then return x-0x10000 else return x end end nw, nm = 9, 15 wname = { "brg", "til", "fur", "syl", "lch", "dia", "edn", "ayr", "eth" } mname = { "sig", "noi", "alc", "adn", "fin", "cua", "mid", "lev", "hol", "azl", "jam", "cld", "beo", "lex", "deu" } function get_love() local love_skip = 3 local love_tab = 0x7e3be5 local love = {} for i = 1, nw do love[i] = {} end for w = 0, nw-1 do for m = 0, nm-1 do love[w+1][m+1] = sword(memory.readword(love_tab+2*(w*(nm+love_skip)+m))) end end return love end function love_color(score) if score >= 500 then return 0x00ff00ff elseif score > 400 then return 0xff8080 else return 0xffffff00 end end -- Display love table, hiding people who are not present -- (i.e. those with 0 for all scores) function show_love(love) local width, height = 16, 7 local bsub = 4 -- Check which are present of each sex, and which are already -- in love local mok, wok, mmax, wmax = {}, {}, {}, {} for w = 1, nw do wok[w] = 0 wmax[w] = 0 end for m = 1, nm do mok[m] = 0 mmax[m] = 0 end for w = 1, nw do for m = 1, nm do if love[w][m] ~= 0 then mok[m] = mok[m] + 1 wok[w] = wok[w] + 1 if(love[w][m] > mmax[m]) then mmax[m] = love[w][m] end if(love[w][m] > wmax[w]) then wmax[w] = love[w][m] end end end end wi = 0 for w = nw, 1, -1 do if wok[w] > 0 then wi = wi + 1 gui.fillbox(width*wi-2,0,width*(wi+1)-bsub,height,love_color(wmax[w])) gui.text(width*wi,0,string.format("%3s",wname[w])) mi = 0 for m = 1, nm do if mok[m] > 0 then mi = mi + 1 gui.fillbox(width*wi-2,height*mi,width*(wi+1)-bsub,height*(mi+1),love_color(love[w][m])) gui.text(width*wi,height*mi,string.format("%3d",love[w][m])) if wi==1 then gui.fillbox(-2,height*mi,width-bsub,height*(mi+1),love_color(mmax[m])) gui.text(0,height*mi,string.format("%3s",mname[m])) end end end end end end while true do local keys = joypad.get(1) if keys.Y then show_love(get_love()) end emu.frameadvance() end
Most of this code is simply drawing to the screen. The actual work is done in get_love().
Post subject: Fire Emblem 4: Seisen no Keifu
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
I've made a couple of scripts for Fire Emblem 4 that might be useful to people. The first script contains an implementation of the game's RNG, and uses it to predict the next 16 values:
Language: lua

emu = snes9x function get_rng() return { step = memory.readbyte(0x7e04a2), table = memory.readbyterange(0x7e046b,0x37) } end function rand(rng) rng.step = rng.step + 1 if rng.step >= 0x37 then for i = 0, 0x36 do local j if i < 0x18 then j = i+0x1f else j = i-0x18 end rng.table[i+1] = rng.table[i+1] - rng.table[j+1] if rng.table[i+1] < 0 then rng.table[i+1] = rng.table[i+1] + 100 end end rng.step = 0 end local res = rng.table[rng.step+1]-1 if res < 0 then res = 99 end return res end while true do local rng = get_rng() for i = 1, 0x10 do gui.text(i*12, 0,string.format("%02x",rng.step)) gui.text(i*12,10,string.format("%2u",rand(rng))) end emu.frameadvance() end
The forum won't let me paste another code block in the same post due to a bug, so the other script will come in the next post. Edit: The reason for the code block problem was just me forgetting to disable HTML in the post. I should note that though the above RNG is simple, the actual code in the game is quite a bit scarier, with code paths for much more shuffling of the random table. However, this code never kicks in - the function that should randomly enable this extra shuffling depends solely on ROM values, and therefore always returns the same result, which leads to the extra shuffling always being skipped. If you want to see it for yourself, the RNG is at 80A73A, and a commented disassembly of it can be seen here.
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Have you looked at the current TAS (http://www.youtube.com/watch?v=6sklnNBZvyc)? After a by-eye comparison, it seems like you lose about 10 seconds just between exiting your house and entering the second floor of Hyrule castle, and a similar amount from there to the Triforce room. This seems to be mostly due to an inefficient way of walking, but also due to general sloppiness. I was going to point you towards our link to the past tricks page to help you improve, but it seems we don't have a resource page for this game. PS. You should upload your videos to microstorage rather than mediafire.
Post subject: Re: Lua question
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
YaLTeR wrote:
How do I make my gui.drawRectangle function paint a rectangle that will stay while emulation is paused (like in FCEUX or like gui.text)?
I am not familiar with Bizhawk, but if it works like other lua-enabled emualtors, then a function passed to gui.register() will be called every time the screen needs to be redrawn, whether paused or not. If so, you can get a rectangle to stay by doing:
Language: lua

gui.register(function() gui.drawbox(10,10,20,20,0xff0000) end)
once, before entering the main loop of the script.
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Thanks for the TAS! Fast and nice entertainment choices (like the Tetris blocks). I voted yes.
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
feos wrote:
P.JBoy wrote:
Here's a much simpler script
Language: lua

while true do if memory.readbyte(0x03000BDE) ~= 0001 or memory.readbyte(0x03000BE0) ~= 0002 then avi.pause() else avi.resume() end vba.frameadvance() end
Oh god this was really obvious! We don't need a frame perfect video after all! The Guide shall have this script for all cutsceneless GBA encodes. I also guess some other emuators allow that.
I use this for super metroid in snes9x:
Language: lua

prev = -1 while true do igframe = memory.readword(0x7e09da) if igframe == prev then emu.speedmode("maximum") else emu.speedmode("normal") end prev = igframe emu.frameadvance() end
This is similar to the above, but has the advantage that the same script can be used for skipping cutscenes while playing, not just while dumping. However, I think this method may not work with AVI dumping on windows with snes9x due to a bug which causes the audio dumping to ignore the speedmode. I have also implemented support for emu.speedmode in my copy of VBA (for the linux version), which is what I used to create the cutsceneless encode. For that, I used this lua script:
Language: lua

pigf = -1 while true do local igf = memory.readbyte(0x0300013B) if igf ~= pigf then emu.speedmode("normal") else emu.speedmode("maximum") end pigf = igf emu.frameadvance() end
Post subject: Re: Millennium Prize Problem Solved
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Mister wrote:
amaurea wrote:
Mister wrote:
Looking through two movies (and ISM's), I came to the conclusion that Panga did actually save a frame in entering the pipe over ISM, despite his loss from lag. So all I did is to imitate Panga's pipe entry. Caution from me: Do not overestimate the comparison lua script. It wouldn't always provide informations we need. We sometimes have to run two (or three) emulators and compare two movies by our eyes with detailed data.
Ouch, it sounds like you've been stuck for a long while debugging a problem that turned out to be a bug in my script. Sorry about that. This may be fixable, though, if you can provide a few examples where it happens. I tried to make it frame-accurate, but my level of testing was far less than the level of scrutiny you have been giving it.
Uhh sorry, I didn't mean that. To tell the truth I haven't used the comparison script but I've seen a few times they get stuck because of some problems. I'm not sure what kind of problems make them lose their ways. I would guess it's partially because the script doesn't exactly tell us a subtle difference, coming from frame-by-frame detailed data, such as ghosts' subpositions, speeds, momentum, lag frames, etc, which we still need if we want to find out the reason of such a difference. Of course I know that the screen is too small to exhibit all those data at one time.
Hm, ok. So for the the sub position and extra information part, that would be easy to display on screen, as it is all available internally in the script, as well as the velocity of each mario. So if you are willing to sacrifice some screen real estate, that can easily be added. Information about lag frames for each ghost is also indirectly available, since the ghosts keep track of an in-game frame counter which stops during lag frames. For the getting stuck part, I'm not sure what could be causing that, so I think I'd need an example to be able to debug it. I also talked to bahamete on IRC on a related topic which may be of interest:
IRC wrote:
22:18 <bahamete> I think the improvement may have been noticed if a lag frame would change the overall difference 22:18 <bahamete> rather than the real-time one 22:18 <amaurea> Let me see if I get this: On an autoscroll level (where the continuous offset detection does not work), a frame was gained, but the appearance of a lag frame conteracted that, leaving 0 frames total? 22:19 <bahamete> Yup, which is why I was so confused at a change of frame rule 22:19 <amaurea> What happens in the same situation with ingame-timing? 22:20 <amaurea> That should ingnore lag frames, I think 22:20 <amaurea> I haven't tested that myself, though 22:20 <bahamete> what do you mean? 22:21 <amaurea> the script has different timing modes, right? For example realtime and ingame 22:21 <amaurea> Realtime considers all frames, ingame only those where an in-game frame counter ticks 22:22 <bahamete> ugh, I overlooked trying that .__. 22:22 <amaurea> I'm guessing that that the in-game counter does not tick during lag frames. If so, using that mode will only see non-lag savings 22:26 <bahamete> Yes, setting "ingame" mode sees the issue. 22:26 <bahamete> I'll remember that next time. 22:26 <amaurea> Glad to be of help :)
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Maser wrote:
Part 1: http://www.youtube.com/watch?v=Roy12x3n1R8 Part 2: http://www.youtube.com/watch?v=yso6fB7AgA4 Part 3: http://www.youtube.com/watch?v=vS7Iw40SUEA
Runs like these are sometimes called 'half-assisted', since they use tools, but only to cover the most obvious mistakes, rather than to aim for perfection. That would make this run a 'half-assisted playthrough'.
Post subject: Re: Millennium Prize Problem Solved
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Mister wrote:
Looking through two movies (and ISM's), I came to the conclusion that Panga did actually save a frame in entering the pipe over ISM, despite his loss from lag. So all I did is to imitate Panga's pipe entry. Caution from me: Do not overestimate the comparison lua script. It wouldn't always provide informations we need. We sometimes have to run two (or three) emulators and compare two movies by our eyes with detailed data.
Ouch, it sounds like you've been stuck for a long while debugging a problem that turned out to be a bug in my script. Sorry about that. This may be fixable, though, if you can provide a few examples where it happens. I tried to make it frame-accurate, but my level of testing was far less than the level of scrutiny you have been giving it.
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
I tried to rescale the video framerate slightly to improve the A/V sync, and it got quite a bit better, though it still isn't perfect (and won't be until somebody does a new dump with the correct version of Dolphin). Still, this version should have a desync of ± half a second or so, instead of almost 10 seconds or so as the original had. Link to video Ps. I haven't had time to check the sync of the actual youtube upload yet, but the file I had pre-upload had the sort of sync described above.
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
I voted yes.
  • The game is played blisteringly fast
  • The puzzles are solved in surprising ways totally different from those intended
  • Many of the solutions are possible only due to the high speed used here
  • The author spends downtime well, providing entertainment with the cursor
  • The game is fun to play, and this TAS is fun to watch
Isn't this exactly what we look for in a TAS? I am a bit dismayed at all the no votes here. Most are from people who have not played the game, and I understand if the action here is too quick for them to see all the glitching, breakage and smart solutions going on here. But the primary audience of a TAS is people who have played the game, and not publishing this TAS will be a disservice to them, as they will be stuck wondering what an optimized completion of this game looks like. And remember, the question is "Should this movie be published?", not "Should this movie be starred?". Ps. A better encode would be nice, though: By the end of the current one, the A/V desync was 7.5 seconds or so, which is very irritating. Perhaps a simple timecode rescaling using mkvmerge will work?
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Here is a cutsceneless encode: Link to video To be precise, this encode shows only in-game frames which are the ones BioSpark aimed to minimize. This leaves out all the dialogue, pause screens and door transitions (though they are relatively fast in this game), but leaves in the item fanfares. Edit: Apparently the html5 version of this video is broken, showing a length of 0 seconds. The flash version works, though. Edit2: Replaced the video with a better version. This one should have the correct scaling and non-horrible sound.
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Here is a comparison video of the two Yoshi's island any% TASes: Link to video
Post subject: Yoshi's Island comparison script
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
I have ported the comparison script to Yoshi's Island. The script can be found here: http://folk.uio.no/sigurdkn/yicomp.zip It works much like the previous scripts (Super Metroid, Mega Man X, Super Mario Bros, Super Mario World): First run yirecord.lua while playing back each .smv file you want to compare. Then edit the list of "ghost" files to use at the top of yiplayer.lua (you can also change some simple settings up here, like what information to display). After that, simply play back the .smv file you want to compare the others to while running yiplayer.lua. A comparison made using this script will eventually be available below: Link to video
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Due to some encode problems this was a bit delayed, but here is a comparison between this run and its two predecessors: Link to video I just watched it now: Yes vote, of course. I especially liked maridia. Now, if only Saturn would submit super metroid redesign too...
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Nice to see that somebody is working on this again. There was some talk earlier about not pickup up the piercing weapon upgrade. I think it would be best to use this upgrade - not only is it generally better, it also looks much better.
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Ok, that fixed it. I don't think many people will be willing to do that, though.
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
HttpFox shows GET's to baidu.tasvideos.org which receive 0 bytes, with a status of (Error). They are the only https-connections, so the reason is probably that I don't have the site's certificate installed (but I haven't been asked to install it either).
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
http://arxiv.org/abs/1112.4168 wrote:
The angular momentum of a star is an important astrophysical quantity related to its internal structure, formation and evolution. On average, helioseismology yields S = 1.92 10^41 kg m^2 s^-1 for the angular momentum of the Sun.
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Works with firefox here.
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Nach wrote:
Any chance you're getting some kind of security warnings, or you have some kind of blocker installed?
I use adblock plus too, but turning it off does not change anything. I do not get any obvious warnings, but looking in the error console, there is a bunch of warnings about unbalanced trees being written using document.write. But those are not the kind of security warnings you are thinking about, I think.
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Does not work here in firefox. Same symptoms as I had for nicovideo. Edit: But if I follow the link baidu itself works (though it stops to buffer a lot, and has choppy playback even when not buffering).
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
Ok, it works now.
Experienced Forum User, Published Author, Former player
Joined: 2/19/2007
Posts: 424
Location: UK
It worked for me previously, but this time I'm just getting a large empty area.
1 2
6 7 8
16 17