progression.swf
An interactive node-tree map UI that displays a zoomable, pannable node graph showing unlocked, locked, and upgradeable nodes. Trove reuses it for the Star Chart and for the gear-crafting, rune-crafting and fishing trees; the SWF is never told which tree it shows, only handed a background texture. Selecting a node drives the separate
progressioninfo.swfpanel. AProgressionProgressMeterskill-point-bar component is compiled into the same SWF but never placed or constructed.
Document/main class: Progression (extends _kiwi.Core.UIComponent)
SWF-specific classes: 13
Main class: Progression
Progression owns the entire map viewport: a mapStage MovieClip that is dragged, scaled, and panned by the player. All map nodes (NodeA, NodeB) are created at runtime and added as children of mapStage.map. Node metadata is stored in a Dictionary of ProgressionValue objects keyed by node name. Gradient connection lines between nodes are drawn procedurally into a paths MovieClip using Graphics.lineGradientStyle.
Constructor wires mouse listeners (move, wheel, down, up, leave, click, over, out), initialises the node dictionaries, positions and scales mapStage to default values, and calls addFrameScript for frames 19, 20, and 40. configUI() adds an ENTER_FRAME listener for the animateIn reveal (a no-op in practice, see below), attaches the ObjectPreview image child, and registers all Iggy/ExternalInterface callbacks. On consoles the cursor MovieClip is shown and button-legend text is populated; on PC both are hidden.
Public methods
showNextNode(e:Event) : void— ENTER_FRAME handler; pops one entry fromanimateIn, makes that named map child visible, removes itself when the array is empty. None of the default names (hub,a,b,c) exists undermapStage.map, so it shows nothing and unhooks after four frames.setSelected(name:String) : void— Iggy callback; looks up the namedProgressionValueand callsselectNode().addNode(name, parent, unlocked, upgraded, canUnlock, type, title, desc, xOffset, yOffset) : void— Iggy callback; creates aNodeA(type 0) orNodeB(type 1) MovieClip, wraps it in aProgressionValue, adds it tomapStage.map, registers it in bothnodesand (if root)rootNodes, then invalidates DATA. The node's position comes only fromxOffset/yOffset, mapped throughsetGuiMapRange.updateNode(name, unlocked, upgraded, canUnlock) : void— Iggy callback; updates flags on an existingProgressionValueand refreshes the node's frame label.
Key fields
mapStage : MovieClip— the scrollable / zoomable container; default scale1.45, position(960, 540).background : MovieClip— full-screen backdrop, resized inonStageResized.consoleCursor : MovieClip— visible highlight reticle on console platforms; inverse-scaled to appear constant size.m_buttonLegend : MovieClip— console button-legend overlay; containslegendButtons.closeButton,interact,center_btn,center.image : ObjectPreview— 256×256 texture preview added tomapStage.map.mapBackground.art; texture name set viaSetBackground. Its constructor is what registersobjectPreviewReadyfor this SWF. The four backgrounds shipped inui/Progression/map/areprog_background.png(Star Chart),gearcrafting_background.png,prog_runecrafting_background.pngandfishing_bg.png, each with a_ps4twin.nodes : Dictionary— maps node nameString→ProgressionValue; the authoritative runtime node registry.allNodes : Dictionary— secondary public dictionary (populated externally).rootNodes : Array— ordered list of names of nodes with no parent; used for left/right highlight navigation.currentNode : MovieClip— the currently selected node MovieClip.paths : MovieClip—mapStage.map.paths; receives all procedural gradient line drawing.globalRotation : Number— set bysetRotationand threaded intorotateNode's angle arguments, which never affect where a node is placed.guiMapRange : int/resolutionStageRange : Number— coordinate mapping parameters set bysetGuiMapRange; used inrotateNodeto convert game-space offsets to screen positions as(offset + range/2) / range * stageRange - stageRange/2.guiMapRangestarts at 0, so no node is placed meaningfully untilsetGuiMapRangehas arrived.
Frame scripts / timeline
- Frame 19 (
frame19) —stop() - Frame 20 (
frame20) —stop() - Frame 40 (
frame40) —stop()
Frame 1 is labelled PC (the timeline plays to the stop on frame 19) and frame 20 Console; the stage is 1920×1080 at 60 fps, 40 frames.
Runtime dependencies & integration
- ExternalInterface callbacks registered:
UIComponent.onStageResized,GainedFocus,LostFocus,setSelected,addNode,updateNode,setRotation,setGuiMapRange,centerOnCurrentNode,scaleMap,moveMap,moveHighlight,SetBackground,SetMapLocation, plusobjectPreviewReadyfrom theimageObjectPreview. - ExternalInterface calls outbound:
SelectNode(name)(SelectNode("")when the selection is cleared),UIComponent.OnShowTooltip(x, y, title, desc, nodeName),UIComponent.OnHideTooltip(),NOTIFY_RESIZED(w, h). IggyFunctions.inIggyguards all callback registration;IsConsole()/IsNX()switch console-specific layout.IggyTweenused incenterOnCurrentNodeto animatemapStage.x/yon console.- Node state frame labels:
"Locked","Unlocked","CanUnlock","CanUpgrade","Upgraded", each optionally suffixed"_Hovered"or"_Selected".CanUpgradeis never sent by the engine: it is derived for a node that is unlocked, not upgraded, and whose parent is upgraded. - Map drag uses
mapStage.startDrag()/stopDrag(); mouse wheel callsscaleMap(±1)clamped betweenMIN_SCALE=1.3andMAX_SCALE=2.8. rotateNode()recursively walks the node tree, places each node at its mapped offsets and draws gradient lines; the gradient uses nine stops at alpha 0→opaque→0 to fade line ends.
Other game-specific classes
ProgressionValue— plain data record:node:MovieClip,parent:String,children:Array,unlocked,upgraded,canUnlock:Boolean,xOffset/yOffset:Number,title/desc:String.ProgressionProgressMeter(extendsUIComponent, embeds symbol128) — skill-point bar companion component, never placed on any timeline nor constructed in code, so none of the callbacks below is registered at runtime; managesm_markers:ArrayofProgressionUpgradeMarkerandm_rewards:ArrayofProgressionPotentialReward, draws a mask-scaled progress bar (m_barMask), exposes console D-pad highlight navigation (moveHighlight), and registers Iggy callbacks:clearRewards,addReward,setBarProgress,addMarker,clearMarkers,invalidateCurrentSkillPoints,showResetButton,hideResetButton,moveProgressMeterHighlight. Reset button firesExternalInterface.call("RESET_REQUEST").ProgressionPotentialReward(extendsUIComponent, embeds symbol104) — reward icon slot for the progress bar, only ever created byProgressionProgressMeter(so unused); shows aSlotart clip, am_percentChance:TextField, and am_highlight:MovieClip. Initialised viainitialize(claimRef, iconInstance, percentChance).ProgressionUpgradeMarker(extendsUIComponent, embeds symbol108) — milestone tick mark for the progress bar, only ever created byProgressionProgressMeter(so unused); storesm_assignedSkillPoints:int, displays skill-point count, goes to frame label"active"or"inactive"viasetActive(bool).ProgressionNode(extendsMovieClip, embeds symbol3) — generic node art with ahover:MovieClipchild; 5 frame states (stops at frames 1, 11, 21, 31, 41).MapNode(extendsMovieClip, embeds symbol137) — alternate node art withhover:MovieClip; same 5-state frame structure.MapNodeHub(extendsMovieClip, embeds symbol136) — hub/root node art withhover:MovieClip; 3 frame states (frames 1, 11, 21).NodeA(extendsMovieClip, embeds symbol68) — small node type (type 0); 15 frame-stop states (frames 1–71 in steps of 5) encoding all state/hover/select combos.NodeB(extendsMovieClip, embeds symbol37) — large node type (type 1); identical 15-state frame layout toNodeA.NodePath(extendsMovieClip, embeds symbol6) — animated path segment; frame 20 loops back to frame 1, frame 21 stops (loop / stop modes).ProgressionNode,MapNode,MapNodeHubandNodePathare bound to symbols that are never placed or constructed; onlyNodeAandNodeBare used for nodes.btnGreen(extendsLabelButton, embeds symbol147) — green label button skin used in the progression panel; 4 frame states (10, 20, 30, 40).image(extends_kiwi.Controls.ArtClip, embeds symbol148) — art clip used as a placeholder/thumbnail inside the map background.dummy(extendsBitmapData) — 52×52 asset wrapper embedding82_dummy.png; trivial placeholder bitmap.
Progression_fla timeline symbols (3): slotFrame_13 (symbol75, 3-state slot frame), equipped_15 (symbol81, 2-state equipped badge), qualityPips_21 (symbol98, 1-state quality pip row) — all pure embedded MovieClip symbols with only stop() frame scripts.
Notable logic
- Layout is the engine's:
draw()callsrotateNode()recursively and passes each root an even share of 360° (plusglobalRotation) and each child a slice of its branch, but those angles are only threaded through the recursion. Every node's position is itsxOffset/yOffsetmapped throughguiMapRange/resolutionStageRangeinto screen space, so the arrangement is exactly what the engine sends; the map must receivesetGuiMapRangebefore layout is meaningful. - Gradient path lines: Each edge is drawn with
lineGradientStyleusing a nine-stop alpha ramp so lines fade in from the parent and out at the child. The line into a root node is drawn at alpha 0, into a locked node at 0.5, otherwise 1; lines into upgraded nodes are gold (0xFFB410), the rest white. - Console cursor snap:
moveMap()(called by Iggy) moves theconsoleCursorin world space and callssnapToNearestNode()which iterates all nodes and selects the closest withinSNAP_RADIUS=10000squared units. - D-pad highlight navigation:
moveMapHighlight(dx, dy)walks the parent/children arrays: horizontal movement steps among siblings (or root nodes), vertical movement moves up to a parent or down to the first child. animateInintro: meant to reveal named map children one perENTER_FRAMEtick in the order listed inanimateIn(["hub","a","b","c"]). No such children exist on this SWF's timeline, so the reveal does nothing and the listener removes itself after four ticks.