Files @ 84adc69fdf8a
Branch filter:

Location: light9/light8/sub_analyzer.py

Drew Perttula
fix inlineattrs setup and effect editing
Ignore-this: f5d5089ab5550815158fcdbaa79d71f1
#!/usr/bin/python
from Subs import *
from Patch import *
from types import TupleType

from Config import patch, subs

import re
import Patch
Patch.reload_data(0)

subusage = {}

# colors = 'ROGBVndcihs'
colors = 'ndcihs'

color_chart = {
    '1-01' : 'ROYd',   # broadway (morning - afternoon)
    '1-02' : 'i',      # int. mission
    '1-03' : 'R',      # phone booth
    '1-04' : 'RBVh',   # hotbox
    '1-05' : 'RBd',    # off broadway
    '1-06' : 'ROYd',   # ext. mission
    '1-07' : 'ROYn',   # gambler intro, off broadway
    '1-08' : 'ROBIVc',  # havana, clubs
    '1-09' : 'ROYBIVc', # havana, outside, night
    '1-10' : 'BVn',     # ext. mission, night (4am)

    '2-01' : 'RBIVh',  # hotbox
    '2-02' : 'RBn',    # more can i wish you
    '2-03' : 'GBs',    # sewer (crap game)
    '2-04' : 'Bn',     # sue me
    '2-05' : 'i',      # int. mission
    '2-06' : '',       # marry
    '2-07' : 'd',      # broadway finale
}

scene_names = {
    '1-01' : 'broadway (morning to afternoon)',
    '1-02' : 'int. mission',
    '1-03' : 'phone booth',
    '1-04' : 'hotbox',
    '1-05' : 'guys and dolls (off broadway)',
    '1-06' : 'ext. mission, lunch time',
    '1-07' : 'gambler intro, off broadway',
    '1-08' : 'havana, clubs',
    '1-09' : 'havana, outside, night',
    '1-10' : 'ext. mission, night (4am)',

    '2-01' : 'hotbox',
    '2-02' : 'more can i wish you',
    '2-03' : 'sewer (crap game)',
    '2-04' : 'sue me',
    '2-05' : 'rock the boat (int. mission)',
    '2-06' : 'marry (trav)',
    '2-07' : 'finale (broadway)',
}

sub_to_scene = {}

# blacklist is a list of *prefixes* to light names that won't be shown
blacklist = 'god upfill red blue cyc oran sidefill'.split()
blacklist.extend(['side l','side r'])

for subname, levdict in subs.items():
    if type(subname) == TupleType:
        subname = subname[0]
    oldname = subname
    subname = re.sub(r'\*(\d-\d+)-.*', r'\1', subname)
    if oldname == subname: continue
    sub_to_scene[oldname] = subname
    subname = oldname # restore 'em.  restore 'em good.
    if not levdict:
        print "Warning: %s is useless (empty sub)." % subname
    else:
        for ch, lev in levdict.items():
            if lev:
                ch = resolve_name(ch)
                subusage.setdefault(ch, [])
                subusage[ch].append((lev, subname))

def twist(l):
    return [(b,a) for a,b in l]

def format_usage(ch, usage):
    if max([ch.startswith(pre) for pre in blacklist]):
        return
    
    usage=twist(usage)
    usage.sort()
#    usage.reverse()
    usage=twist(usage)
    print "======= %s ======= (%d uses)" % (ch, len(usage))
    if 1:
        use_str = ''
        for lev, sub in usage:
            if lev>30:
                if sub_to_scene[sub] in color_chart:
                    subcolors = color_chart[sub_to_scene[sub]]
                    col_str = ''
                    for c in colors:
                        if c in subcolors: col_str += c
                        else: col_str +=  ' '
                    print col_str,
                else:
                    print ' ' * len(colors),
                scenename = scene_names.get(sub_to_scene[sub], '')
                levbar="*"*(lev//5)
                print '  %3d %-20s\t%-30s %s' % (lev, levbar,sub, scenename)
    else:
        use_str = '\n    '.join(["%d\t%s" % (lev, sub) for lev, sub in usage])
        print '    ' + use_str

subitems = subusage.items()
subitems.sort()
for ch, usage in subitems:
    if 0:
        usedict = {}
        for lev, subname in usage: # remove duplicates
            usedict[subname] = max(lev, usedict.get(subname, 0))

        newusage = [(lev, sub) for sub, lev in usedict.items()]

        format_usage(ch, newusage)
    else:
        format_usage(ch, usage)