While you make your selections the numbers and bars will also update to show your skill level after studying your current selection. Looks something like this:

Create a new text file in your LongLiveTheQueen/game directory, call it skillpage.rpy and dump the following wall of text in there. To get rid of it delete both skillpage.rpy and skillpage.rpyc from that directory.
And with that I'm officially out of ideas for mods.
Code: Select all
# skillpage
# Allows you to select your classes for the week from the skill page.
# Written for version 1.2.13
# WARNING: UNOFFICIAL AND BARELY TESTED, USE AT YOUR OWN RISK!
init 1:
python:
renpy.config.label_overrides['skills_page'] = 'mod_skillpage_skillspage'
@renpy.curry
def mod_skillpage_setskill(skill):
global current_morning_activity_group, current_morning_activity, current_evening_activity_group, current_evening_activity
group = Stat.instances[skill].subgroup.name
if not current_morning_activity:
current_morning_activity_group = group
current_morning_activity = skill
elif not current_evening_activity:
current_evening_activity_group = group
current_evening_activity = skill
elif current_morning_activity == skill:
current_morning_activity_group = None
current_morning_activity = None
elif current_evening_activity == skill:
current_evening_activity_group = None
current_evening_activity = None
return 0
@renpy.curry
def mod_skillpage_delskill(morning=False, evening=False):
global current_morning_activity_group, current_morning_activity, current_evening_activity_group, current_evening_activity
if morning:
current_morning_activity_group = None
current_morning_activity = None
if evening:
current_evening_activity_group = None
current_evening_activity = None
return 0
# Pretty much a complete rewrite of how the stats are drawn
def mod_skillpage_drawstatbox(bonus, t,v,orig_v):
global hoveredskill
new_v = v
new_orig_v = orig_v
if current_morning_activity == t:
new_v += 5 * (2 + bonus)
new_orig_v += 5 * (2 + bonus)
if current_evening_activity == t:
new_v += 5 * (2 + bonus)
new_orig_v += 5 * (2 + bonus)
ui.button(style='hbox', clicked=mod_skillpage_setskill(t))
ui.hbox(xpos=10)
ui.fixed(ymaximum=16,xmaximum=stat_caption_width)
if new_orig_v > orig_v and orig_v >= 100:
# stat is full but we're studying it anyway => red
color='#f00'
elif new_orig_v > orig_v:
# stat is *not* full and we're studying it => blue
color = '#80C0ff'
elif v > orig_v:
# Not studying it but wearing the costume => green
color='#0f0'
else:
color = '#fff'
ui.text(t,style=style.statstext, color=color)
v = min(v, 100)
orig_v = min(orig_v, 100)
new_v = min(new_v, 100)
new_orig_v = min(new_orig_v, 100)
p = '%.1f' % (new_v, )
if new_v >= 100:
p = '100'
elif new_v >= 99.9:
p = '99.9'
ui.text(p,xpos=stat_caption_width,xanchor=1.,style=style.statsnum,color=color)
ui.close()
ui.null(width=8)
# Time for mad image composition
image = []
# Empty border without any bar inside
image.extend([(0, 0), im.Crop('ui/bar-right.png', 0, 0, 107, 16)])
# Current length of the bar
length = 0
if orig_v >= 1:
if orig_v >= 100:
# Skill maxed out, light green bar
image.extend([(4, 3), im.MatrixColor(im.Crop('ui/bar-left.png', 4, 3, 100, 9), im.matrix.hue(90))])
else:
# Not maxed, yellow bar for what we have right now
image.extend([(4, 3), im.Crop('ui/bar-left.png', 4, 3, int(orig_v), 9)])
length += int(orig_v)
if new_orig_v - length >= 1:
# Blue bar for what we're about to learn
image.extend([(length + 4, 3), im.MatrixColor(im.Crop('ui/bar-left.png', 4, 3, int(new_orig_v - length), 9), im.matrix.hue(180))])
length += int(new_orig_v - length)
if new_v - length >= 1:
# Green bar for what the outfit bonus will get us
image.extend([(length + 4, 3), im.MatrixColor(im.Crop('ui/bar-left.png', 4, 3, int(new_v - length), 9), im.matrix.tint(0, 1.0, 0))])
ui.image(im.Composite((107, 16), *image))
ui.close()
# The original draw_subgroup except we need to pass the tiny skill family bonus on
def mod_skillpage_drawsubgroup(family_bonus, title, bonus, t1, v1, o1, t2, v2, o2, t3, v3, o3):
ui.fixed(ymaximum=16,xmaximum=200)
ui.hbox()
ui.text(title,style=style.statstext)
if outfit_for_statgroup.get(title,'')==current_outfit:
ui.text('*',color='#5f5')
ui.close()
if bonus>=0:
ui.text("+ %.2f"%bonus, style=style.statsnum,xalign=1.)
else:
ui.text("- %.2f"%-bonus, style=style.statsnum,xalign=1.,color='#f80')
ui.close()
mod_skillpage_drawstatbox(family_bonus + bonus, t1,v1,o1)
mod_skillpage_drawstatbox(family_bonus + bonus, t2,v2,o2)
mod_skillpage_drawstatbox(family_bonus + bonus, t3,v3,o3)
# The original draw_stats with some modifications, to draw the field for the selected skills and the "Okay" button
def mod_skillpage_drawstats():
ui.window(background=Frame(im.MatrixColor('ui/buttpurple.png',im.matrix.brightness(-.2)),20,20),xmaximum=270,xpos=764,xanchor=.5,ypos=20,yanchor=.5,xminimum=25,yminimum=25)
ui.text("Current mood: "+mood,style=style.statstext, xalign=.5, xminimum=40, xmaximum=300)
global stat_caption_width
stat_caption_width = 152
ui.vbox(xpos=10,ypos=10)
spacing = 15
draw_statgroup_head('Social',social_bonus)
mod_skillpage_drawsubgroup(social_bonus, 'Royal Demeanor',royal_demeanor_bonus,
'Composure',composure,composure_,
'Elegance',elegance,elegance_,
'Presence',presence,presence_)
ui.null(height=spacing)
mod_skillpage_drawsubgroup(social_bonus, 'Conversation',conversation_bonus,
'Public Speaking',public_speaking,public_speaking_,
'Court Manners',court_manners,court_manners_,
'Flattery',flattery,flattery_)
ui.null(height=spacing)
mod_skillpage_drawsubgroup(social_bonus, 'Expression',expression_bonus,
'Decoration',decoration,decoration_,
'Instrument',instrument,instrument_,
'Voice',voice_skill,voice_skill_,)
ui.close()
ui.vbox(xpos=10,ypos=270)
draw_statgroup_head('Physical',physical_bonus)
mod_skillpage_drawsubgroup(physical_bonus, 'Agility',agility_bonus,
'Dance',dance,dance_,
'Reflexes',reflexes,reflexes_,
'Flexibility',flexibility,flexibility_,)
ui.null(height=spacing)
mod_skillpage_drawsubgroup(physical_bonus, 'Weapons',weapons_bonus,
'Swords',swords,swords_,
'Archery',archery,archery_,
'Polearms',polearms,polearms_,)
ui.null(height=spacing)
mod_skillpage_drawsubgroup(physical_bonus, 'Athletics',athletics_bonus,
'Running',running,running_,
'Climbing',climbing,climbing_,
'Swimming',swimming,swimming_,)
ui.null(height=spacing)
mod_skillpage_drawsubgroup(physical_bonus, 'Animal Handling', animal_handling_bonus,
'Horses',horses,horses_,
'Dogs',dogs,dogs_,
'Falcons',falcons,falcons_,)
ui.close()
stat_caption_width = 182
ui.vbox(xpos=305,ypos=8)
draw_statgroup_head('Intellectual',intellectual_bonus)
mod_skillpage_drawsubgroup(intellectual_bonus, 'History',history_bonus,
'Novan History',novan_history,novan_history_,
'Foreign Affairs',foreign_affairs,foreign_affairs_,
'World History',world_history,world_history_)
ui.null(height=spacing)
mod_skillpage_drawsubgroup(intellectual_bonus, 'Intrigue',intrigue_bonus,
'Internal Affairs',internal_affairs,internal_affairs_,
'Foreign Intelligence',foreign_intelligence,foreign_intelligence_,
'Ciphering',ciphering,ciphering_)
ui.null(height=spacing)
mod_skillpage_drawsubgroup(intellectual_bonus, 'Medicine', medicine_bonus,
'Herbs',herbs,herbs_,
'Battlefield Medicine',battlefield_medicine,battlefield_medicine_,
'Poison',poison,poison_)
ui.null(height=spacing)
mod_skillpage_drawsubgroup(intellectual_bonus, 'Economics',economics_bonus,
'Accounting',accounting,accounting_,
'Trade',trade,trade_,
'Production',production,production_)
ui.null(height=spacing)
mod_skillpage_drawsubgroup(intellectual_bonus, 'Military',military_bonus,
'Strategy',strategy,strategy_,
'Naval Strategy',naval_strategy,naval_strategy_,
'Logistics',logistics,logistics_,)
ui.close()
ui.vbox(xpos=305,ypos=428)
draw_statgroup_head('Mystical',mystical_bonus)
mod_skillpage_drawsubgroup(mystical_bonus, 'Faith',faith_bonus,
'Meditation',meditation,meditation_,
'Divination',divination,divination_,
'Lore',lore,lore_)
if lumen_unlocked:
ui.null(height=spacing)
mod_skillpage_drawsubgroup(mystical_bonus, 'Lumen',lumen_bonus,
'Sense Magic',sense_magic,sense_magic_,
'Resist Magic',resist_magic,resist_magic_,
'Wield Magic',wield_magic,wield_magic_,)
ui.close()
ui.window(xpos=660,ypos=428,xminimum=50, xmaximum=215, yminimum=165, style=style.roundrect)
ui.vbox(xpos=20)
ui.text('Morning class',style=style.statstext,xalign=.5)
ui.textbutton(current_morning_activity,clicked=mod_skillpage_delskill(morning=True),style=style.buttonwhite,yminimum=50,ymaximum=50,xminimum=160,xmaximum=160)
ui.text('Evening class',style=style.statstext,xalign=.5)
ui.textbutton(current_evening_activity,clicked=mod_skillpage_delskill(evening=True),style=style.buttonwhite,yminimum=50,ymaximum=50,xminimum=160,xmaximum=160)
ui.close()
if current_evening_activity and current_morning_activity:
ui.textbutton('Done',clicked=starts_week,ypos=590,yanchor=1.,xpos=1024,xanchor=1.)
else:
ui.textbutton('Done',
background=Frame('ui/button-disabled.png',53,24),
hover_background=Frame('ui/button-disabled.png',53,24),
clicked=classes_required_tooltip,
ypos=590,yanchor=1.,xpos=1024,xanchor=1.)
label mod_skillpage_skillspage:
scene statsbg
call show_calendar
pass
hide screen moods
hide screen log
show statsbackdrop
python:
start_week = False
mod_skillpage_drawstats()
draw_sidebar(skills='room_nofade')
ui.interact()
if start_week:
jump start_week
jump mod_skillpage_skillspage