Hrmmm, I can't seem to find the timer. The man in the middle of the square that tells you how many minutes remaining until the crowd gets together. I found how that was calculated by can't exactly figure out how it's calculated if that makes sense :P.
When you walk into the area where the cutscene takes place, address 7E2515 gets written to, this is the minutes remaining. However it's only written to when entering the area and the way it's value gets derived is confusing (well, how the pointer works, not how it's actually retrieved).
8cea4f lda [$82] [92cc90] A:2515 X:0038 Y:004b S:1fe8 D:0000 DB:7e NvMXdizc V:258 H:1038 ; load the pointer
8cea51 inc $82 [000082] A:25be X:0038 Y:004b S:1fe8 D:0000 DB:7e NvMXdizc V:258 H:1080 ; increase its address by 1
8cea53 bne $ea57 [8cea57] A:25be X:0038 Y:004b S:1fe8 D:0000 DB:7e NvMXdizc V:258 H:1114
8cea57 asl a A:25be X:0038 Y:004b S:1fe8 D:0000 DB:7e NvMXdizc V:258 H:1132 ; double the lower byte in the accumulator
8cea58 rol $8a [00008a] A:257c X:0038 Y:004b S:1fe8 D:0000 DB:7e nvMXdizC V:258 H:1144
8cea5a tax A:257c X:0038 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V:258 H:1178
8cea5b rep #$30 A:257c X:007c Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V:258 H:1190
8cea5d jmp ($f041,x) [8cf0bd] A:257c X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:258 H:1208
8cea73 lsr a A:257c X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:258 H:1244 ; divide the accumulator in half
8cea74 and #$000f A:12be X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:258 H:1256 ; AND against 0x000F, the remainder is the minutes
8cea77 sta $02 [000002] A:000e X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:258 H:1274
8cea79 stz $04 [000004] A:000e X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:258 H:1302
8cea7b jmp $ea49 [8cea49] A:000e X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:258 H:1330
8cea49 sep #$30 A:000e X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:258 H:1348
8cea4b lda $8a [00008a] A:000e X:007c Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V:259 H: 2
8cea4d bne $ea60 [8cea60] A:0001 X:007c Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V:259 H: 22
8cea60 rep #$30 A:0001 X:007c Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V:259 H: 40
8cea62 lda $02 [000002] A:0001 X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:259 H: 58
8cea64 rtl A:000e X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:259 H: 86
8cd7e0 plx A:000e X:007c Y:004b S:1feb D:0000 DB:7e nvmxdizc V:259 H: 128
8cd7e1 sta $0000,x [7e2515] A:000e X:2515 Y:004b S:1fed D:0000 DB:7e nvmxdizc V:259 H: 162 ; store the result from the AND from earlier at the address
Above are the instructions exected when 14 minutes were remaining.
Here is the same routine with only 2 minutes remaining, the pointer at [$82] is what changes between the two:
8cea4f lda [$82] [92cd74] A:2515 X:0038 Y:004b S:1fe8 D:0000 DB:7e NvMXdizc V: 34 H: 600
8cea51 inc $82 [000082] A:25b2 X:0038 Y:004b S:1fe8 D:0000 DB:7e NvMXdizc V: 34 H: 642
8cea53 bne $ea57 [8cea57] A:25b2 X:0038 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V: 34 H: 676
8cea57 asl a A:25b2 X:0038 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V: 34 H: 694
8cea58 rol $8a [00008a] A:2564 X:0038 Y:004b S:1fe8 D:0000 DB:7e nvMXdizC V: 34 H: 706
8cea5a tax A:2564 X:0038 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V: 34 H: 740
8cea5b rep #$30 A:2564 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V: 34 H: 752
8cea5d jmp ($f041,x) [8cf0a5] A:2564 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 770
8cea73 lsr a A:2564 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 806
8cea74 and #$000f A:12b2 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 818
8cea77 sta $02 [000002] A:0002 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 836
8cea79 stz $04 [000004] A:0002 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 864
8cea7b jmp $ea49 [8cea49] A:0002 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 892
8cea49 sep #$30 A:0002 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 910
8cea4b lda $8a [00008a] A:0002 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V: 34 H: 928
8cea4d bne $ea60 [8cea60] A:0001 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V: 34 H: 948
8cea60 rep #$30 A:0001 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V: 34 H: 966
8cea62 lda $02 [000002] A:0001 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 984
8cea64 rtl A:0002 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H:1012
8cd7e0 plx A:0002 X:0064 Y:004b S:1feb D:0000 DB:7e nvmxdizc V: 34 H:1054
8cd7e1 sta $0000,x [7e2515] A:0002 X:2515 Y:004b S:1fed D:0000 DB:7e nvmxdizc V: 34 H:1088
Apparently it just gets the value from a table that starts at:
0x92CC7D the first value for 15 minutes being 0xBF, and every 0x13 bytes is the next (0xBE for 14 at 0x92CC90, 0xBD for 13 at 0x92CCA3)
I've tried following that pointer at [$82] to try and make sense of it but I cannot. I will try checking out the save game timer next and seeing if maybe it uses the same clock that does to calculate a difference.