=Paper=
{{Paper
|id=Vol-2862/paper13
|storemode=property
|title=Precomputing Player Movement in Platformers for Level Generation with Reachability Constraints
|pdfUrl=https://ceur-ws.org/Vol-2862/paper13.pdf
|volume=Vol-2862
|authors=Vivian Lee,Nathan Partlan,Seth Cooper
|dblpUrl=https://dblp.org/rec/conf/aiide/LeePC20
}}
==Precomputing Player Movement in Platformers for Level Generation with Reachability Constraints==
Precomputing Player Movement in Platformers for Level Generation with Reachability Constraints Vivian Lee Nathan Partlan Seth Cooper Northeastern University Northeastern University Northeastern University lee.viv@northeastern.edu partlan.n@northeastern.edu se.cooper@northeastern.edu Abstract Procedural content generation via Machine Learning (PCGML) creates game levels from examples. PCGML for platformers with physics-based player movement gener- ally has not guaranteed the reachability of goals, relying on post-generation filtering approaches or game-specific heuristic rules. In contrast, constraint-based PCGML can provide gameplay guarantees, but has typically been ap- plied to games with simple grid-based movement. In this work, we present a constraint-based PCGML approach Figure 1: Screenshot of Turtle Loves Pizza, showing the tur- for platformers with physics-based player movement that guarantees playability and provides design controllability. tle, blocks, hazards, a bonus, and the pizza goal. Positions Our approach exhaustively precomputes all possible player and transitions of enumerated state graph overlaid in teal. movement states in example tile-based platformer levels. It Border tiles omitted for clarity. extracts metatiles containing local state information and uses them in constraint-based level generation that ensures legal tile neighbors and consistent movement state transitions. Beyond playability, PCGML methods often struggle to The approach can ensure constraints on gameplay, such guarantee other attributes of the resulting levels such as the as the reachability of goals, guaranteeing level playability, distribution of design elements or the reachability of col- and other elements like platforms and bonuses. It can also incorporate other designer-controllable constraints. lectible items. Many PCGML methods rely on neural net- works, probabilistic graphical models, and other similar ap- proaches that are not easily interpretable or controllable. De- Introduction signers may need to iteratively re-train, often guessing what Procedural content generation via Machine Learning might help the system achieve their desired vision (Sum- (PCGML) is an approach to game level generation that merville, Philip, and Mateas 2015). Constraint-based meth- learns from existing levels (Summerville et al. 2018). By ods allow designers to write a declarative description of their learning to generate unique levels from hand-designed ones, requirements for the resulting level. PCGML methods can complement and support human de- In this paper, we propose an approach to constraint-based signers’ creativity. They can generate new ideas that match PCGML for platformers with physics-based player move- well with the designer’s style and needs, helping with brain- ment that allows reachability and other designer-controllable storming or refinement of a level design. constraints. Our approach precomputes all possible player While researchers have developed PCGML approaches to states, based on the game’s physics and movement rules, generate levels for platformer games, these systems typically in the training levels, and associates the tiles with those do not provide guarantees about the reachability of level el- states and the transitions between them to create metatiles. ements, such as goals, and thus whether the resulting lev- By tracking and constraining state transitions when generat- els are playable. They often rely on post-generation filtering ing levels, we ensure reachability of specific tiles like goals and playability heuristics and start over if the level is not and collectibles. We also include tile neighbor constraints playable (Snodgrass and Ontañón 2016). Constraint-based inspired by Wave Function Collapse (WFC) (Gumin 2016), PCG approaches can incorporate reachability constraints and generate levels by solving the constraints using Answer that guarantee playability, but have typically been applied to Set Programming (ASP) (Gebser et al. 2011). We show how games with simple tile-based movement rules (Nelson and this can be combined with other constraints to ensure other Smith 2016). design requirements, e.g. specific ranges and numbers of tile Copyright c 2020 for this paper by its authors. Use permitted un- types. This process can be divided into 3 steps: (1) enumer- der Creative Commons License Attribution 4.0 International (CC ating the state graph, (2) extracting the metatiles and con- BY 4.0). straints and (3) generating a new level that satisfies all the constraints. We consider this to be a type of PCGML as some tinuing with Hoover, Togelius, and Yannakis (2015), whose of the constraints are learned from the training levels. neuroevolution technique was inspired by music theory, and We applied this level generation technique to a simple then by Guzdial and Riedl (2016). These, however, also did tile-based platformer game we created called Turtle Loves not guarantee playability. Summerville and Mateas (2016) Pizza (TLP), shown in Figure 1. We trained on simplified include special path tiles, but these tile-based paths may not versions of Super Mario Bros. levels from the Video Game reflect the exact player movement rules. ANNs also lack ex- Level Corpus (VGLC) (Summerville et al. 2016). plainability and transparency, making them less legible for We applied two types of reachability constraints: playa- designers. Recent efforts to integrate PCGML with mixed- bility, whether the generated level contains a path from the initiative tools (Hoover, Togelius, and Yannakis 2015; Guz- start to each goal; and usefulness, whether platforms and col- dial, Liao, and Riedl 2018; Guzdial et al. 2019) may help by lectibles in the generated level are reachable and can be used providing feedback and integrating playability checks (Hoyt or collected. The ideal generated level should be both useful et al. 2019), but ANNs remain difficult to train and control. and playable. We show that our approach can be used to gen- Our approach, using a constraint solver to generate coherent erate playable levels that also meet additional user-specified levels that respect playability constraints, affords designers design constraints including specific level dimensions and relative flexibility and control to specify additional local and the number of certain tile types in the generated level. global constraints on levels. The focus of this work is to propose a new technique for generating novel levels from existing ones in platformers. Constraint-based Level Generation Outside of platform- The contributions are (1) a level generation approach which ers, researchers have experimented with constraint-based ensures reachability and allows for other controllable con- level generation. In games, this began with the level de- straints using constraint-based PCGML and precomputed sign tool SketchaWorld by Smelik et al. (2010), followed player movement and (2) a demonstration of the approach by work by A. Smith et al. (2010; 2011) on generating using levels from an established domain with movement puzzle game designs and levels using ASP. As mentioned rules from a custom platformer game. above, Tanagra and Launchpad applied constraint solving to platformer levels (Smith, Whitehead, and Mateas 2010; Related Work Smith et al. 2011), but their approach could only generate a PCG for Platformers Many researchers have proposed single player path. Horswill and Foged (2012) applied con- and tested methods for generating levels for platformer straint solving to ensure playability in dungeon generation. games. One line of work used designer-defined libraries Several released games use versions of Wave Function or grammars, often paired with constraints or optimiza- Collapse (WFC) (Gumin 2016), a method inspired by tex- tions. Compton and Mateas (2006) proposed hill-climbing ture synthesis and model-based synthesis (Harrison 2005; to generate segments of levels by difficulty, stitched to- Merrell 2009). Others have noted that WFC is, essen- gether with grammars. Inspired by Spelunky (Yu and Hull tially, constraint solving without backtracking (Karth and 2009), Mawhorter and Mateas (2010) created more flexi- Smith 2017), and a PCGML method that learns from exam- ble levels, at the expense of playability guarantees, by an- ples (Karth and Smith 2018). Using ASP to re-implement choring hand-defined chunks based on player movement. G. WFC in a full constraint solver has proven successful in Smith et al. (2010; 2011) followed these concepts of pat- generating playable levels for games with simple movement tern analysis, adding the idea of rhythm and “beats,” by us- rules (Nelson and Smith 2016; Scurti and Verbrugge 2018). ing a constraint solver and reactive planning. Another ap- Sandhu, Chen, and McCoy (2019) further demonstrated how proach employed graph grammars (Londoño and Missura design constraints can be incorporated with a WFC approach 2015). Though some of these techniques guaranteed playa- to generate non-repetitive levels for a tile-based maze game. bility, they only supported a single path through each level, and required manual work to define the available patterns. Going beyond previous applications of constraint solv- Seeking to learn such patterns from training data, Soren- ing to platformers, our approach learns from existing levels son and Pasquier (2010), Shaker et al. (2012), and To- to automatically determine playability constraints, melding gelius and Dahlskog (2013) employed evolutionary algo- ideas from WFC and ASP for dungeon generation with plat- rithms. These did not guarantee playability, but did use former physics modeling. fitness functions to search towards it. Controllability of the output, however, was lacking. Others tried probabilis- Precomputation and Sampling Previous work has also tic graphical models such as n-grams and Markov Models applied extensive or exhaustive computation of gameplay (Dahlskog, Togelius, and Nelson 2014; Summerville, Philip, states. One application of this has been improved runtime and Mateas 2015; Snodgrass and Ontañón 2017). However, performance. Stanton et al. (2016) extensively precomputed these models have difficulty respecting global patterns or gameplay states to allow for high-quality rendering on mo- constraints (Summerville and Mateas 2016). Snodgrass and bile devices, and Stanton et al. (2014) adaptively precom- Ontañón (2016) approximated A* pathfinding to check for puted complex fluid dynamics that could be prohibitively playability, but their test-and-regenerate approach could not expensive to compute at runtime. Another application is test- guarantee it. ing and analysis. Bauer and Popović (2012) used rapidly- Finally, others have focused on artificial neural network exploring random trees to analyze and visualize player (ANN) approaches, beginning with Laskov (2009) and con- movement in a platformer game to support level editing. 1) State Graph Enumeration 3 6 6 6 6 6 6 3 2) Metatile Extraction 3) Level Generation 2 5 3 6 6 6 6 6 8 10 1 3 5 7 9 5 7 4 6 6 2 7 7 8 4 2 5 7 7 7 7 8 10 START GOAL 4 4 8 2 10 5 1 4 4 4 4 4 4 4 3 6 24 4 5 78 47 6 6 3 6 3 1 4 4 4 4 4 4 9 57 8 10 2 4 6 8 10 1 4 3 3 START GOAL 5 4 9 6 6 7 10 8 START GOAL 4 4 4 4 4 4 4 4 25 78 1 4 4 4 4 7 578 10 4 4 9 4 9 Figure 2: Illustrative example of the proposed level generation process. This simplified example does not use TLP physics; the state only consists of the (x, y) position with start and goal flags, represented by the node color. 1) Given an input level and the game’s movement rules, a graph of all reachable states is enumerated. 2) Next, all unique metatiles are extracted. A metatile consists of a tile type and a state graph. We also track which metatiles were neighbors in the training level. 3) Finally, a constraint solver is used to assemble metatiles into a new level such that metatile neighbor and transition destination constraints are satisfied, along with any additional constraints supplied. Self transitions and border tiles omitted for clarity. Overview from the start state to every goal state. To generate levels using reachability constraints, we analyze Metatile Extraction After we enumerate the state graph existing playable levels to extract information from each tile for the input level, we extract the level’s metatiles. A and build a set of constraint rules that new levels must sat- metatile contains a tile type, a graph of all the player’s isfy. We organize our method into: (1) enumerating the state states within that specific metatile, and the transitions be- graph, (2) extracting the metatiles and constraints, (3) solv- tween them. A metatile’s state graph also includes outgo- ing the constraints to generate a new level. Here we discuss ing edges, edges where the destination states are in adjacent the generic high-level approach, summarized in Figure 2. metatiles. Each metatile’s graph is a subgraph of the fully Input Our approach takes as input (1) the game’s move- enumerated level state graph. Every tile in the input level has ment rules and (2) a playable level for training. a corresponding metatile. When extracting metatiles, each The game’s movement rules take an existing player state state’s position is offset to be relative to the metatile’s loca- and an input action and return the resulting state. The player tion in the input level. This way, with a level’s metatiles and state contains at minimum a position component, a flag for knowledge of their locations in the input level, the metatiles’ being the start state, and a flag for being a goal state. graphs can be re-joined to reconstruct the fully enumerated state graph. Each unique metatile extracted from the input Next, we define a few simplifying assumptions about the level is stored and assigned a unique ID. movement rules in the game. We assume that the player’s movement is deterministic and that the player’s terminal ve- Once we have extracted the set of unique metatiles from locity cannot exceed the length of a square tile. Hence, we the input level, we examine the input level to determine the assume that the movement rules are local: the player’s move- legal adjacent neighbors for each unique metatile. These are ment, current state, and next state are only affected by the the metatiles that can be placed in each of the 8 possible player’s surrounding 3x3 neighborhood of tiles at each pos- neighbor positions surrounding each metatile. sible state in the level. Thus, we assume that the absolute At this point we have finished analyzing the input level position of the state and neighborhood does not matter, only and have obtained (1) a defined set of metatiles, each con- the state’s relative position within its local neighborhood. taining a unique subgraph of player states and their transi- These assumptions are used to extract metatiles which are tions and (2) the learned adjacency rules for each metatile in then used to generate new levels (discussed below). the set. A valid training level is an existing level, represented as a Level Generation Finally, we input the metatiles and their grid of tile types, with a start tile (which defines the player’s adjacency rules into a constraint solver and use WFC to as- start state), at least one goal tile, and a playable path from semble instances of the metatiles into a new generated level. start to goal. In this work, we assume all tiles along the outer During level generation, when a metatile is assigned to a edge of the level (and none of the interior tiles) are border position in the new level, all of its associated states and tran- tiles, which block the player from going out of the level. We sitions are also placed in the level and offset to the assigned also assume that levels themselves are static, meaning tiles position. We use a technique similar to one suggested by will never change positions during gameplay. Nelson and Smith (2016) to track state reachability: the start State Graph Enumeration The first step in the process is state is inherently reachable and for any source state that is to enumerate the player’s state graph for the input level. We reachable, all destination states that can be transitioned to begin with the player’s start state and use the game’s move- from the source state are also reachable. ment rules to exhaustively precompute every reachable state To assemble metatiles into a level, we use the following in the level. The transitions in the directed graph represent generic constraints: the player’s ability to move from a source state to a destina- • Size: Levels are rectangular and must satisfy a given tion state by performing a particular action. The enumerated width and height, measured in tiles. state graph for a valid input level will always contain a path • Metatile neighbors: Each of the 8 neighbors of a metatile Input Level Input Columns Time Enumeration Time† Rule Gen. Time Other Precomp. Output Size Time Avg. Ground Time Avg. Solve Generated? Input Level Input Blocks Trial Blocks Generated? Input Hazards Trial Hazards Generated? Input Bonuses Trial Bonuses Generated? ∗ ∗ 50% 10m 5m + 500 + 1 – 1 + ∗ 1-1 204 5m 7m 1m 100% 20m 11m + 1-1 534 750 + 7 5 + 13 5 + ‡ ∗ 150% 33m 20m + 1000 – 10 + 10 + 50% 7m 3m – 500 + 1 – 1 – 1-2∗ 160 4m 5m 1m 100% 14m 7m + 1-2 614 750 + 16 5 – 9 5 – 150% 22m 13m + 1000 + 10 – 10 + † ∗ 50% 5m 3m – 200 – 50 – 0 + 1-3 152 2m 3m 1m 100% 10m 5m + 1-3 222 300 + 96 75 + 1 5 – ∗ 150% 16m 8m + 400 – 125 – 10 – Table 1: Summary of outcomes from size test. All levels Table 2: Summary of outcomes from controllability test. have 17 rows; sizes include border tiles. Average times are Timings were similar to those for 100% size, except for mean for 5 levels. Rule gen time is the time it took to gen- those with a ∗ took 1.5–3x as long to solve, † took roughly erate the generic ASP rules from the extracted metatiles and 80m to solve, and ‡ were stopped after roughly 24h. constraints for each input level. ∗ SMB 1-2 did not include the Platform reachability constraint. † After collecting this dataset, we were able to optimize the rule generation step to score bonus the first time they are hit from below, a start tile just a few seconds. indicating where the turtle begins in the level, and a goal tile that completes the level when touched. The movement rules in TLP are based on simple physics must be one of the metatiles that was seen neighboring it rules: the turtle’s state has an x and y position and an x in the same direction in the training level. This is based and y velocity. For simplicity, we used integers for position on the WFC (Gumin 2016) neighbor constraints. and velocity. Jumping sets the y velocity to its maximum • Border tiles: The outer edge tiles are assigned to be bor- upward value, and gravity constantly accelerates the turtle der tiles. Interior tiles must not be border tiles. This en- downward in y. Moving left or right happens at a constant sures that all 8 neighbors exist for all interior tiles. x velocity. In addition to position and velocity, each state in • Transition destination: If a source state and transition out TLP has a flag for being a start, a goal, resting on the ground, of that state exist, the transition’s destination state must or dead. Each state also has an indicator for being in contact also exist. This is based on the tile reachability rule from with a bonus tile that can be collected in its local tile neigh- Nelson and Smith (2016). (Note that this does not re- borhood, if any; the indicator specifies the cardinal direction quire the destination state to have had a corresponding of the bonus tile relative to the turtle. Thus, each state can incoming transition in the training level). be considered a tuple of (xpos, ypos, xvel, yvel, isstart, • Goal reachability: All goal states must be reachable. isgoal, isdead, isonground, whichbonus). This ensures playability. In order to have interesting input levels, we used lev- We used the Potassco (Gebser et al. 2011) tools to run an els from Super Mario Bros. (SMB) from the VGLC (Sum- ASP solver to find a placement of metatiles that satisfies the merville et al. 2016). Note that, although we used SMB lev- defined constraints. Other games may apply additional con- els, we used TLP player movement rules; these are differ- straints, as we did in this work (discussed below). With this ent from Mario’s but ensure that the levels are still playable. approach, we can generate new levels that satisfy defined To prepare SMB levels for TLP we made several modifica- reachability and design constraints from a small training set tions, including mapping SMB tile types to TLP tile types; and elementary ML technique (Karth and Smith 2018). adding an additional bottom row of hazard tiles where there were pits in SMB so that the player would be classified as Application dead after falling into a pit; adding border tiles around the To explore our approach, we implemented a tile-based plat- perimeter of the level; defining start and goal tiles, and mak- former called Turtle Loves Pizza (TLP). The player con- ing minute tile placement adjustments as needed for playa- trols a turtle that can move left and right and jump. The tur- bility (e.g. removing a tile that Mario can pass through with tle’s (x, y) position is based on its center. The turtle moves a special power-up but the turtle cannot). smoothly within tiles and can occupy many possible posi- In addition to the generic constraints discussed above, we tions within them due to the physics-based movement rules. used the following constraints to generate levels: Its goal is to traverse the level to collect the pizza at the end. • Start and goal tiles: There must be exactly one start tile There are several tile types that can be used in the game: within the first 10 columns and one goal tile within the empty tiles that the turtle can move though, block tiles that last 10 columns. block the turtle from moving, hazard tiles that kill the turtle • Other tile counts: The number of block, hazard, and when touched, bonus tiles that behave like blocks but give a bonus tiles must be within ±20% of the number in the ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------XXXXXXX---XXX?-----------------------------------?------------------------------- ---------------------?-----------XXXXXXXXXX---XXX?--------------------XXXXXXXXXX---XXX?------------------------------?----------------------------------------------------XX------------------------------ ---------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------XXX------------------------------ ---------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------XXXX------------------------------ ------------------------------------------------------------------------------------------------!--- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------XXXXX------------------------------ ----------------X?X-------------X-----XXXXXXXXXXXXX?X---------?---X?X?X---------------------XXXXXXXX ------------------?--?--?-----X?X----------------X-----XXXXXX?X----X?X----------------X-----XXXXXXXX?X---------?---X?X?X---------------------XX---------XX------------XXXXXX------------------------------ ------------------------------------------------------------------------------------XX------XXXXXXXX -------------------------------------------------------------------------------------------------------------------------------------XX------XX---------XX-----------XXXXXXX------------------------------ --------------------------------------------------------------------------XX--------XX------XXXXXXXX ---------------------------------------------------------------------------------------------------------------------------XX--------XX------XX---------XX-------XX-XXXXXXXX------------------------------ --*-----------------------------------------------------------------------XX--------XX------XXXXXXXX ------*--------------------------------------------------------------------------------------------------------------------XX--------XX------XX---------XX-------XXXXXXXXXXX-----------------------!------ XXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX--XXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------?-----------XXXXXXXXXXXXX---XXX?----------------------------------XX-------------- -------------XXX----X??X--------------------------------XXXXXXXXX---XXX?----------------------?-----------XXXXX---XXX?---------------XXX----X??X---------------------------------------------------------- -----------------------------------------------------------------------------------XXX-------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------XXXX-------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --*------------------------------------------------------------------------------XXXXX-------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------!------- XXXXXX---------?--?--?-----X?X-------------------X-----XXXXXXXXXXX?X------------XXXXXX-------------- ----------X----------XX------X--X------------XX?X----X?X---------------X-----XXX?X---------?--?--?-----X-------------X-----XXX----X----------XX------X--X------------XXXXXXXXX?X---------XXXXXXXXXXXXXXXXX XXXXXX-------------------------------------------------------------------------XXXXXXX-------------- ----------------------------XX--XX------------------------------------------------------------------------------------------------------------------XX--XX-------------------------------XXXXXXXXXXXXXXXXX XXXXXX---------------------------------------------------------------------XX-XXXXXXXX-------------- ---------------------------XXX--XXX-----XX---------------------------------------------------------------------------------------------------------XXX--XXX-----XX-----------------------XXXXXXXXXXXXXXXXX XXXXXX---------------------------------------------------------------------XXXXXXXXXXX----------!--- --*-----------------------XXXX--XXXX----XX--------------------------------------------------------------------------------------------------------XXXX--XXXX----XX-----------------------XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------?-----------XXXXXXXXXXXXXXXXXXXXX----X??X------------------------------------XXXXXXXX---XXX?----------------------------------------?--------------------------------------XXXXXXXXXXXXXXX---XXX?-----------------XXXXXX----X??X----------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------!---- ------------------?--?--?-----X?X--------------------------XX------X--X------------XXXXXX?X----X?X--------------X-----XX?X---------XXXXXXX---------?---X?X?X---------------------XXX---------X?X---------------------X-----XXX?X----X?X-----------XX------X--X----------XX--X------------XXXX?X---------XXXXXXXX ------------------------------------------------------------------XX--XX-----------------------------------------------------------XXXXXXX-------------------------------XX------XXX---------------------------------------------------------------------XX--XX--------XXX--XX--------------------------XXXXXXXX -----------------------------------------------------------------XXX--XXX-----XX---------------------------------------------------XXXXXXX---------------------XX--------XX------XXX--------------------------------------------------------------------XXX--XXX------XXXX--XXX-----XX------------------XXXXXXXX --------*-------------------------------------------------------XXXX--XXXX----XX---------------------------------------------------XXXXXXX---------------------XX--------XX------XXX-------------------------------------------------------------------XXXX--XXXX----XXXXX--XXXX----XX------------------XXXXXXXX XXXXXXXXXX--XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------?-------------------------------------------------?---------------------------------------?-----------?-----------XXXX---XXX?------------------------?--------------------------------------XXXX---XXX?-----------------------------XX-------------------------------XX---------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------XXX------------------------------XXX---------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------XXXX-----------------------------XXXX---------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------XXXXX----------------------------XXXXX---------------- -------------------?---X?X?X---------------------XXXXXXXXXXX---------?---X?X?X---------------------XXXX---------?--?--?-----?--?--?-----X------------X-----XX?X---------?---X?X?X---------------------XXX---------X------------X-----XXXXXXXX------------XXXXXX-------------XX------------XXXXXX---------------- -----------------------------------------XX------XXXXXXXXXXX-------------------------------XX------XXXX---------------------------------------------------------------------------------------XX------XXX-----------------------------------------------XXXXXXX-------------XX-----------XXXXXXX---------------- -------------------------------XX--------XX------XXXXXXXXXXX---------------------XX--------XX------XXXX-----------------------------------------------------------------------------XX--------XX------XXX-------------------------------------------XX-XXXXXXXX-------------XX-------XX-XXXXXXXX---------------- ----*--------------------------XX--------XX------XXXXXXXXXXX---------------------XX--------XX------XXXX-----------------------------------------------------------------------------XX--------XX------XXX-------------------------------------------XXXXXXXXXXX-------------XX-------XXXXXXXXXXX--------!------- XXXXXXXXXXX--XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------- -XXX-XX-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------XX-------- X-----XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX?XXXXXXXXXXXXXXXXX?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX------------------ X--X-X----XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX?XXXXXXXXXXXXXXXXX?XXXXXXXXXXXXXXXXXXXX?XXXXXXXXXXXXXXXXX?XXXXXXXXXXXXXXXXX?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------------------- -X-------------------------------X--XXX-X------------X-X-XX-------------XX-X-X-XXX-X--X-XXX-X--XX-X--X-XXX--------------XXX---X--X--X------------------------- --X--X-------------------------------XXX-XXXX-----------XXX-XXX------------XX---X---------------XXXXXX-----------XX--XXX-------------X-X-X-------XX---X-X-XXXXXX-------X---------X-X-X-------------X--X---XX-X-X-X---------------------------- XX-----------------------------------X-XX-----------XXX--XX------------XXXXXXXX--X-XXX--X--XXXXX-X--------------------------------------------XXX-----------!- XXXXX------------------------------------X-XX------------XXX-XX------------XX--XX---------------XXX-XX------------X---XX------------X--X--X-XX-XX-XX-XXX----X-XXXXX--XX--X---X-X-------------------------------------------XXX--------------!- XX------------------------------------X-------------X---X-------------XX-X-XXX-X-X-X--X--XX----XX-XX-------------------------------------------------------XXX --XX--------------------------------------X-------------X-X-X----------------XX----------------X-X-X-------------XXX-X--------------XXX---X--X--XX---X-XXX-XX------XXXXX--X--XX-X----------------------------------------------------------XXX --------------------------------------X-----------------X--------------X---X-X-----XXX--X---X-XXX-X----------------------------------------------------------X -XXX--------------------------------------X--------------X--X--------------XX-X-----------------XX-X--------------XX-X--------------X----X-X-XXX-X-XXXXXX-XXX--X--XX-X---X-XXX--X-----------------------------------------------------------XX X-------------------------------------X------XXX--------X------XXX--------X-XXXXXXXXXX-XXXXXXXXXX------------------------------------------------------------- --X-X-------------------------------------X------XXX--------X------XXX--------X------XXXXXX--------X------XXX--------X------XXX---------XXXXXX-XXXXXXXX-----XX-XXXXXXXXXXXXX------------------------------------------------------------------ X---------------------------X---------X------XXX--------X------XXX--------X-X--X--X--XXX--X--X--X--------------------------------------------------XXX??------ XX-XX---------------------------X---------X------XXX--------X------XXX--------X------XXXXXX--------X------XXX--------X------XXX---------XX--X-X-X--X--X-----X-XX--X--X--X--X----------------------------------------------------XXXXXX??------ X---------????--------X-X-------------XXX---------------XXX---------------XXX--XXXX--XXX--X--X--X--------------XX-------------------------XXX----------------- XX--X---------????--------X-X-------------XXX---------------XXX---------------XXX------------------XXX---------------XXX----------------XX--XXXXX--X--X-----XXXX--X--X--X--X----------------XX-------------------------XXX-------------------- X-------------------X-X-X-X---X--------------------------------------------------------------------------XX----XX-----------XX------------X-X-XXX------------- XXX-X-------------------X-X-X-X---X---------------------------------------------------------------------------------------------------------------------------------------------------XX----XX-----------XX------------XXX-XXX---------------- X-----------------X-X-X-X-X---X-X------------------------------------------------------------------------XX----XX----XX-----XX----------XXXXX--X-------------- -XX-X-----------------X-X-X-X-X---X-X-------------------------------------------------------------------------------------------------------------------------------------------------XX----XX----XX-----XX----------XXXXX--X----------------- X---*-----------X-X-X-X-X-X---X-X------------------------------------------------------------------------XX----XX----XX-----XX---------XX-X-X----------------- -XXXX---*-----------X-X-X-X-X-X---X-X-------------------------------------------------------------------------------------------------------------------------------------------------XX----XX----XX-----XX---------XX-XXX-------------------- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--XX--XXXXXXXX-X-X-------XXXXXX--XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXX---XXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--XX--XXXXXXXXX-XX-------XXXXXXXXX--XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@XX@@XXXXXXXXXXXX@@@@@@@XXXXXX@@XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@XX@@XXXXXXXXXXXX@@@@@@@XXXXXXXXX@@XXX -------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- XX---------------------------------------------------------------------------------------------------------------------------------------------------X-------- XXX---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------X--------- ------XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX?XXXXXXXXXXXXXXXXX?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-------------------- X-----XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX?XXXXXXXXXXXXXXXXXXX?XXXXXXXXXXXXXXXXX?XXXXXXXXXXXXXXXXX?XXXXXXXXXXXXXXXXX?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-------------------- -X-------------------------------X-X-XXXX------------XXXX-X-----------XX---XX-X-XXXXX---X--X-X-XX--X--XX--------------X-----XXX-XXX--------------------------- XX-------------------------------XXXX-XXXX-------------XX--XXX-------------XXXX--X------------X----X-----------X---XXX---------------XXXXX-------XX-X-XXX--X-X-X---X-X---------XXXX-XXXX--------------XXXXX-XX-X-X---------------------------- X--------------------------------------XX-----------XX-X-XX-----------XXX-XX--XXX--XXX---XX-X---X-------------------X-------------X---------XXX-------------!- X---------------------------------------XX------------------XX---------------X--XX------------X-X-XX-----------X--X-XX-----------XXXXX-XXX-------XXXXXXXX----X-XX-X--XX---XX-X-X-X------------------X------------XX---------XXX-------------!- XX------------------------------------X--------------X-XX---------------XXXX-X--X-X-X--------XX-X----------------------------------------------------------XXX XX-------------------------------------X----------------XX-X---------------XX-XX-------------XXX-X----------------XX---------------X--XX----XXX--------X--X-X-X-XXXX-----X-XX--X-X---------------------------------------------------------XXX --------------------------------------X----------------XX-----------------X-X--X-XX-X--X---X-XXX-------------------------------------------------------------- X-------------------------------------XX-------------------X----------------XX-X----------------XX--------------XXXX---------------XX-XX----X-X--------X----XX-XXX-X-XXXXXXX-X-XX------------------------------------------------------------- X-------------------------------------X------XXX--------X------XXX--------XXXXX-XXXXXXXXXXXXXXX--------------------------------------------------------------- X-------------------------------------XX------XXXXX--------X------XXXXX--------X------XXX--------X------XXX--------X------XXX--------XXX----X-X--------XXXX--XXXXXX-XXXX---X-X---------------------------------------------------------------- X---------------------------X---------X------XXX--------X------XXX--------XX--XXXX--XX--X--X--X--------------------------------------------------XXXXX??------ X---------------------------X---------XX------XXXXX--------X------XXXXX--------X------XXX--------X------XXX--------X------XXX--------X-X-?--XXX--------X--XXXXX--XX-X--X---X-X---------------------------------------------------XXXXX??------ X---------????--------X-X-------------XXX---------------XXX---------------XX--XXXX--XX--X--X--X--------------XX-------------------------XXX------------------- X---------????--------X-X-------------XXXX-----------------XXX-----------------XXX---------------XXX---------------XXX---------------XXXX---XXX--XXXXXXX--XXXXX--XXXX--X---XXX---------------XX-------------------------XXX------------------- X-------------------X-X-X-X---X------------------------------------------------------------------------XX----XX-----------XX------------XXX-XXX--------------- X-------------------X-X-X-X---X--------------------------------------------------------------------------------------------------------------------------------------------------------XX----XX-----------XX------------XXX-XXX--------------- X-----------------X-X-X-X-X---X-X----------------------------------------------------------------------XX----XX----XX-----XX----------XXX-X------------------- X-----------------X-X-X-X-X---X-X------------------------------------------------------------------------------------------------------------------------------------------------------XX----XX----XX-----XX----------XXX-X--X---------------- X---*-----------X-X-X-X-X-X---X-X----------------------------------------------------------------------XX----XX----XX-----XX---------XX-X-X------------------- X---*-----------X-X-X-X-X-X---X-X------------------------------------------------------------------------------------------------------------------------------------------------------XX----XX----XX-----XX---------XX---X------------------- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--XX--XXXXXXXX-X-X-------XXXXXXXX--XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXX---XXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--XX--XXXXXXXXXX-X-------XXXXXXXX--XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@XX@@XXXXXXXXXXXX@@@@@@@XXXXXXXX@@XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@XX@@XXXXXXXXXX@X@@@@@@@XXXXXXXX@@XXX ------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------XXXXXXX------------------------------------------------------------------------------------------------------- ------------------------------------XXXXXXX--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------XXX----------------------------------------------------------------------------------------------------------XX----------- ------------------------XXX------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------XX----------- ------------------------------------------------------------XXXX-----------------------------------------------------------XXX-----------XX----------- --------------------------------------------------------XXXX------------XXXX---------------------------XXX------------XXXXXXXXXXXXXXXXXXXXXXXXXXXX-----------------------------------------------------XXX-----------XX----------- ---------------------------------------------------------------------------------------------------------------------------------------XXXX----------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------XXXXXXXXXXX-------------------------------XXXX----------- -----------------------------------XXXXX-----------------------------------------------------------------------------------------------XXXX----------- -------------------------------XXXXX------------------------------------------------------------------------------------------------------------------XXXX---------------------------------------------------------XXXX----------- --------------------------XXXXXX--------------------------------------XXXX--XXXX--XXX--XXXXXXXX--XXXXXX--XXXX--XXXXXXXXXX------------XXXXXX----------- ----------------------XXXXXX--------------------------------------XXXX------------XXXX--XXXXXX--XXXXX-----------XXX--------------------------------------------XXX----------------------XXXX--XXXXXXX------------XXXXXX----------- -------------------------------------------------------XXXX?-------------------------------------------------------------------------XXXXXX----------- ---------------------------------------------------XXXX?---------------------------------------------------------------------------------------------------------------------------------------------------------XXXXXX----------- -------------------------------------------------------------------------------------------------------------------------------------XXXXXX----------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------XXXX------------------------------------------XXXXXX----------- -----*--------------XXXX--------XXX--------------------------------------------------------------------------------------------------XXXXXX--------!-- ------*---------XXXX--------XXX----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------XXXXXX--------!-- XXXXXXXXXXXXXXXXXX--------------------------------XXXX-----XXXXX-XXXXX------------------------------------------------------XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXX--------------------------------XXXX-----XXXXX-XXXXX-------XXXXXXXXX----------------------XXXXXXXX---------------------------------------------------------------------XXX----------------XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXX@@@@@XXXXX@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXX@@@@@XXXXX@XXXXX@@@@@@@XXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXX@@@@@@@@@@@@@@@@XXXXXXXXXXXXXXXXXXXXXXXXXX ------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------XXXXXXX--------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------XXXXXXX------------------------------------------------------------------------------------------------------------------------------------------------ ------------------XXXXXXXXXXXXXXXXX------------------------------------------------------------------------------------------------------XX----------- ------------------XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---------------------------------------------------------------------------------------------------------------------------------------------------XX----------- ----------------------------------------------------------------XXXX--------------------------------XXXXXXXX------------XXXXXX-----------XX----------- -----------------------------------------------------------------------------------------------XXXX---------------------XXX------------XXXX--------------------XXXXX-----------------------XXXXXXXXXXXXXXX-----------XX----------- ---------------------------------------------------------------------------------------------------------------------------------------XXXX----------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------XXXX----------- ---------------------------------------XXXXX-------------------------------------------------------------------------------------------XXXX----------- ----------------------------------------------------------------------XXXXX----------------------------------------------------------------------------------------------------------------------------------------XXXX----------- ----------------XXXXXXXXXXXXXXXXXXXX--------------------------------------XXXX--XXXXXXXXX--XXXXXXX----------------XXXX---------------XXXXXX----------- ----------------XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--------------------------------------XXXX--XXXXXXX-----------XXXX------------XXXX--XXXXXX-------------XXXX--XXX--XXXX------------------------XXXXXX----------- -----------------------------------------------------------XXXX?---------------------------------------------------------------------XXXXXX----------- ------------------------------------------------------------------------------------------XXXX?------------------------------------------------------------------------------------------------------------------XXXXXX----------- -------------------------------------------------------------------------------------------------------------------------------------XXXXXX----------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------XXXXXX----------- ---*------XXXX----------------------XXX----------------------------------------------------------------------------------------------XXXXXX--------!-- ---*------XXXX-----------------------------------------------------XXX-------------------------------------------------------------------------------------------------------------------------------------------XXXXXX--------!-- XXXXXXXX----------------------------------------------XXXX-----XXXXX-XXXXX---------------------------XXXXXXXXXXXXX-------XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXX-----------------------------------------------------------------------------XXXX-----XXXXX-XXXXX----------------XXXXXXXX-------XXXXXXXXX---------------XXXXXXXXXX------------------XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXX@@@@@XXXXX@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXX@@@@@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXX@@@@@XXXXX@XXXXX@@@@@@@@@@@@@@@@XXXXXXXX@@@@@@@XXXXXXXXX@@@@@@@@@@@@@@@XXXXXXXXXX@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Figure 3: Example levels generated from the size test. From top to bottom, with two rows of each: 1-1, 50% and 100%; 1-1, 150%; 1-2, 100% and 150%; 1-3, 100% and 150%. Tile characters are -: blank, X: block, @: hazard, ?: bonus, *: start, and !: goal. Border tiles omitted for clarity. input level, scaled by the relative size of the output level Second, to explore how controllable the generated levels (e.g. the counts are halved for levels generated at 50% could be, we generated levels requiring exact counts of spe- size). This constraint helps prevent the solver from gen- cific tile types. For each of the block, hazard, and bonus tile erating uninteresting levels like rectangles of blocks. types, we tried generating a level that required an exact count • Platform reachability: All blocks that do not have a for that tile type (while allowing the other two tile types to block or a goal above them must have a reachable state fall within the ranges previously discussed) for 100% size. A in the tile above them with isonground true. This pre- summary of the controllability test’s results is given in Table vents the solver from creating superfluous unreachable 2, and examples of levels generated in Figure 4. platforms in the air. We did not use this constraint when using SMB 1-2 for input, as that training level itself had Discussion many unreachable platforms. Although we only requested five levels to be generated from • Bonus reachability: All bonuses must have a reachable each training level, we observed a few patterns across the state in the tile below, with whichbonus set so they can generated levels. The generated levels were largely made up be collected. of repeated “motifs” that could be found in the training lev- Processing took place on an AWS r5.4xlarge instance with els, such as stairs, pits, and groupings of platforms. These 16 cores and 128GB RAM, using Python 3 and pypy 3. The motifs are similar to the “scenes” with specific game me- clingo constraint solver was run with 12 threads, using a dif- chanics that Green et al. (2020) showed could be stitched ferent random seed for each level generation. together to generate new SMB levels, though it should be To explore how different levels would impact the genera- noted that our approach ensures playability for all generated tion process, we used SMB levels 1-1, 1-2, and 1-3 for input. levels. The variety in our generated levels seems to be pri- We ran two sets of level generation tests: a size test and a marily based on reorganizations of these motifs with vari- controllability test. To confirm playability, we (1) parsed the ations on their lengths. 1-2 had the least variety of levels solver output to verify that a reachable path existed from the generated, with generated levels of the same length being start to goal and (2) manually played all generated levels. made up of the same sequences of motifs and minor rear- First, to explore the kinds of levels generated, how long rangements of blocks. In fact, 3 of the 5 levels generated it took, and how size impacted them, we generated levels from 1-2 at 100% size were identical. This may be par- of varying sizes: we used the input level height, and gener- tially attributable to the relatively closed-off nature of 1-2 ated levels at 50%, 100% and 150% of the input level width. and the lack of the platform reachability constraint, allow- For each input level and size, we generated five levels. A ing the solver to create unusable platforms to easily satisfy summary of the size test and the levels generated is given in the adjacency and tile type range constraints. The solver ap- Table 1, and examples of levels generated in Figure 3. peared more flexible in generating levels from 1-1 and 1-3, ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------?-----------XXXX---XXX?---------------------------?-------------------------------------XXXX---XXX?--------------------------?----------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------!--- --------------------?--?--?-----X------------X-----XXXXX?X---------?---X?X?X---------------------XX---------X------------X-----XXXXXX---------?---X?X?X---------------------XX---------XXX---------XXXXXXX Finally, although generated levels are technically playable, the path from start to goal can be difficult to -----------------------------------------------------------------------------------------XX------XX-----------------------------------------------------------------XX------XX---------XXX---------XXXXXXX -------------------------------------------------------------------------------XX--------XX------XX-------------------------------------------------------XX--------XX------XX---------XXX---------XXXXXXX --------*----------------------------------------------------------------------XX--------XX------XX-------------------------------------------------------XX--------XX------XX---------XXX---------XXXXXXX XXXXXXXXXXXX--XXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXX@@XXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------XX-------------------XXXXXXXXXXXXXXX---XXX?-------------------------XX------------------------------------------------?-----------XXXXXXXXX---XXX?-------------------------------- -----------------------XXX-----------------------------------------------------------------XXX------------------------------------------------------------------------------------------------------------ ----------------------XXXX----------------------------------------------------------------XXXX------------------------------------------------------------------------------------------------------------ follow (i.e. require precise timings for specific actions at exact locations). It may be interesting to be able to express --*------------------XXXXX---------------------------------------------------------------XXXXX---------------------------------------------------------------------------------------------------!-------- XXXXXXXX------------XXXXXX----------------X?X---------------------X-----XX?X------------XXXXXX---------------------XXX---------XXX---------?--?--?-----X?X---------------X-----XX?X---------XXXXXXXXXXXXXX XXXXXXXX-----------XXXXXXX-------------------------------------------------------------XXXXXXX---------------------XXX---------XXX----------------------------------------------------------XXXXXXXXXXXXXX XXXXXXXX-------XX-XXXXXXXX---------------------------------------------------------XX-XXXXXXXX---------------------XXX---------XXX----------------------------------------------------------XXXXXXXXXXXXXX XXXXXXXX-------XXXXXXXXXXX---------------------------------------------------------XXXXXXXXXXX---------------------XXX---------XXX----------------------------------------------------------XXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--XXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@XXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------- ------XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------XXX---------------------------------------------------------!- the difficulty of following a path as a constraint as well. -----------------------------------------------------------------------------------------------------------------------------------------------------------XXX -------------------------------------------------------------------------------------------------------------------------------------------------------------- X--------------------------------------X-X-------------------------------------------------------------------------------------------------------------------- X----------------------------X---------X-X-----------------------------------------------------------XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX??------ X---------?????--------X-X-------------XXX-----------------------XX-------------------------XXX--------------------------------------------------------------- X--------------------X-X-X-X---X---------------------------XX----XX-----------XX------------X-X-XXX----------------------------------------------------------- X------------------X-X-X-X-X---X-X-------------------------XX----XX----XX-----XX----------XXX-X--------------------------------------------------------------- Future Work Future work can explore games where the X---*------------X-X-X-X-X-X---X-X-------------------------XX----XX----XX-----XX---------XX---X--------------------------------------------------------------- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--XX--XXXXXXXX-----------XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@XX@@XXXXXXXX@@@@@@@@@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@XXX -------------------------------------------------------------------------------------------------------------------------------------------------------------- character has more complex movement rules, as well as X-X----------------------------------------------------------------------------------------------------------------------------------------------------------- -X----XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX?XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX------------------ XX-------------------------------X------X-------------XXX-X------X-XXX-X-XX------X--XXX------X--X-XX--X-X----------------X--X--XX---X------------------------- ------------------------------------X--XX-----------X-XXXXX------XXXXXXXXXX------XXXXXX------XXXX--X------------------X-----------------------XXX-----------!- X-------------------------------------X--------------X-XX----XX------XX-X----XX-----X----XX-----X-X--------------------------------------------------------XXX X-------------------------------------X--------------XXXX----XX------XX-X----XX-----X----XX-----XX----------------------------------------------------------XX more complex levels involving larger local neighborhoods X-------------------------------------X------XXX--------X----XX------XXXX----XX-----X----XX-----X------------------------------------------------------------- X---------------------------X---------X------XXX--------X-?--XX------X--X-?--XX-----X-?--XX-----X--------------------------------------------------XXX??------ X---------????--------X-X-------------XXX---------------XX---XX--XXXXX--XX---XX--XXXXX---XX--XXXX--------------XX-------------------------XXX----------------- X-------------------X-X-X-X---X--------------------------------------------------------------------------XX----XX-----------XX------------XXX-XXX------------- X-----------------X-X-X-X-X---X-X------------------------------------------------------------------------XX----XX----XX-----XX----------XXXXX----------------- X---*-----------X-X-X-X-X-X---X-X------------------------------------------------------------------------XX----XX----XX-----XX---------XX--XX----------------- (which would allow for the incorporation of moving ele- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX---XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX--XX--XXXXXXXX--XX-------XXXXXX--XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@XX@@XXXXXXXX@XXX@@@@@@@XXXXXX@@XXX ------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------ ments like moving platforms and enemies) and generating ------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------XXXXXXX-------------------------------------------------------------------------------------- ---*--------------XX--------------------XXXXXXXX-----------------------------------------------------------------------------------------XX----------- XXXXXXX-----------XX---------------------------------------------------------XXXX------------------------------------------XXX-----------XX----------- levels by training on multiple levels at once. We could also ----------------XXXX-------------------------------------------------------------------------------------------------------------------XXXX----------- ----------------XXXX--------------------------------XXXXX------------------------------------------------------------------------------XXXX----------- --------------XXXXXX------------------XXXXXXXXXXX--------------------------------------XXXX--XXXXXXXXXXXXXXXXXXXXXXXXXXXX------------XXXXXX----------- --------------XXXXXX----------------------------------------------------XXXX?--------------------------------------------------------XXXXXX----------- --------------XXXXXX-----------------------------------------------------------------------------------------------------------------XXXXXX----------- --------------XXXXXX------------XXXX-------------XXX---------------------------------------------------------------------------------XXXXXX--------!-- consider other types of level generation primitives: in SMB- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-------------------------------------XXXX-----XXXXX-XXXXX-------------------------------------XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXX@@@@@XXXXX@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXXXXXXXXXXXXXXX ------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------ style levels, it may make sense to train on columns rather ------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------------------------------------------------XXXXXXX--------------------------------------------------------------------------------- ---------------------------------------XXXXXXXXXXXXXX------------------------------------------------------------------------------XX----------------- ----------------------------------------------------------------------------------XXXX-------------------------------XXX-----------XX----------------- ---------------------------------------------------------------------------------------------------------------------------------XXXX----------------- than individual tiles. Optimizations to improve the speed of ---------------------------------------------------------XXXXX-------------------------------------------------------------------XXXX----------------- -------------------------------------XXXXXXXXXXXXXXXXX--------------------------------------XXXX--XXXXXX--XXXXXXXXX------------XXXXXX----------------- -----------------------------------------------------------------------------XXXX?---------------------------------------------XXXXXX----------------- -------------------------------------------------------------------------------------------------------------------------------XXXXXX----------------- -------*-----------------------XXXX-------------------XXX----------------------------------------------------------------------XXXXXX--------------!-- training and level generation are also areas for future work. XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-------------------------------------------XXXX-----XXXXX-XXXXX--------------------------XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXX@@@@@XXXXX@XXXXX@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Ethical Implications This research uses levels authored by Figure 4: Example levels generated from the controllability humans, and future work based on it must grapple with eth- test. From top to bottom: 1-1, 500 blocks; 1-1, 10 hazards; ical questions of compensation, privacy, and equity, among 1-2, 500 blocks; 1-2, 10 bonuses; 1-3, 300 blocks; 1-3, 75 others. Due to space constraints, we focus here on compen- hazards. Tile characters are -: blank, X: block, @: hazard, ?: sation and equity, and refer readers to Metcalf and Craw- bonus, *: start, and !: goal. Border tiles omitted for clarity. ford (2016) for a discussion of privacy concerns in ML. In implementations and continuations of this research, people should be fairly compensated for their labor to make levels that train the system. Sloane et al. (2020) point out the training levels that had more empty space. 1-2 and 1- that many ML systems are built on uncompensated, unac- 3 failed to generate smaller size levels, possibly due to not knowledged labor. If misused, this could become one such having enough room to work with to place metatiles. system. If it produces profit or increases efficiency by sup- We found that we needed to add some additional con- planting work previously done by people, the profits or sav- straints to produce interesting and usable levels. Without the ings should be shared with the people who enabled them. tile count constraints the solver could produce uninteresting Beyond monetary compensation, Sloane et al. (2020) call levels such as simple rectangles of blocks. We also found on implementers and researchers to ask whether their use of that border tiles were needed to prevent the solver from find- data empowers users or exploits them. ing undesirable solutions like levels with no bottom blocks Moreover, machine learning may amplify harms in de- to stand on (as it could exploit the fact that the neighbor sign (Phillips et al. 2016; Bennett and Keyes 2019): this metatile constraints only apply to metatiles that are present). system may create level elements that are harmful or inac- In terms of controllability, we found mixed results. Levels cessible, or that reproduce intentionally abusive input. Of- were only generated for about half of the tile count configu- ten, machine learning focuses on removing “bias,” but this rations we tested. This may be due to the limitations of the is not sufficient: ML systems may reproduce hate symbols “motifs” discussed above: for example, in 1-1 there was no or add harmful elements, even if they are not “biased” to- pit with only one hazard in it, and the solver could not gen- wards them (Phillips et al. 2016). An equitable implemen- erate a level with only one hazard. In practice, using range- tation would carefully vet input and output designs to mini- based or soft constraints may be helpful to enable the solver mize harm, especially to vulnerable or marginalized groups. to find valid solutions. If automated review is not capable of this detection, human Limitations TLP has relatively simple physics-based review may be necessary. We further call for future work to movement rules. For example, the turtle accelerates when undergo careful design and ethical review, going beyond this jumping or falling in the y-direction, but moves at a fixed incomplete list of potential risks and engaging with intersec- constant velocity in the x-direction. We believe the gen- tional analysis (Ciston 2019). eral technique would work with a more complex movement physics simulation, but would result in a larger state graph Conclusion to precompute. The turtle also has no animation state that In this work, we present an approach for constraint- might influence its movement, and the world itself is static. based platformer level generation that guarantees playabil- The training and level generation process was memory ity, based on player movement, without the need for post- and computation intensive, necessitating a powerful ma- generation evaluation and filtering. Our approach also sup- chine to run on. For example, the average grounding and ports additional constraints to offer designers more creative solving process to generate a level from 1-1 at 150% width control and allow for flexible level generation. We believe took nearly an hour. However, we have since been able to up- this controllable, constraint-based PCGML technique can grade our approach to ground once and solve multiple times aid game designers in elaborating on new ideas, re-mixing with different random seeds to generate multiple levels, thus and expanding on existing levels, and rapidly iterating, while reducing the time taken to generate a level. maintaining playability. References Karth, I., and Smith, A. M. 2017. WaveFunctionCollapse is constraint solving in the wild. In Proceedings of the Bauer, A. W., and Popović, Z. 2012. RRT-based game level 12th International Conference on the Foundations of Dig- analysis, visualization, and visual refinement. In Eighth ital Games, 68:1–68:10. AAAI Conference on Artificial Intelligence and Interactive Digital Entertainment. Karth, I., and Smith, A. M. 2018. Addressing the fun- damental tension of PCGML with discriminative learning. Bennett, C. L., and Keyes, O. 2019. What is the Point of arXiv:1809.04432 [cs, stat]. Fairness? Disability, AI and The Complexity of Justice. In ASSETS 2019 Workshop—AI Fairness for People with Dis- Laskov, A. 2009. Level generation system for platform abilities. games based on a reinforcement learning approach. Uni- versity of Edinburgh, Tech. Rep. EDI-INF-IM090699. Ciston, S. 2019. Imagining Intersectional AI. In 7th Con- Londoño, S., and Missura, O. 2015. Graph Grammars for ference on Computation, Communication, Aesthetics & X, Super Mario Bros Levels. In Proceedings of the 10th Inter- 39. national Conference on the Foundations of Digital Games. Compton, K., and Mateas, M. 2006. Procedural Level De- Mawhorter, P., and Mateas, M. 2010. Procedural level gener- sign for Platform Games. In Second AAAI Conference on ation using occupancy-regulated extension. In Proceedings Artificial Intelligence and Interactive Digital Entertainment, of the 2010 IEEE Conference on Computational Intelligence 109–111. and Games, 351–358. Dahlskog, S.; Togelius, J.; and Nelson, M. J. 2014. Linear Merrell, P. C. 2009. Model synthesis. Ph.D. Dissertation, levels through n-grams. In Proceedings of the 18th Inter- University of North Carolina at Chapel Hill. national Academic MindTrek Conference: Media Business, Metcalf, J., and Crawford, K. 2016. Where are human sub- Management, Content & Services, 200–206. jects in big data research? The emerging ethics divide. Big Gebser, M.; Kaufmann, B.; Kaminski, R.; Ostrowski, M.; Data & Society 3(1). Schaub, T.; and Schneider, M. 2011. Potassco: The Pots- Nelson, M. J., and Smith, A. M. 2016. ASP with ap- dam answer set solving collection. AI Communications plications to mazes and levels. In Shaker, N.; Togelius, 24(2):107–124. ISBN: 0921-7126 Publisher: Citeseer. J.; and Nelson, M. J., eds., Procedural Content Generation Green, M. C.; Mugrai, L.; Khalifa, A.; and Togelius, J. 2020. in Games, Computational Synthesis and Creative Systems. Mario level generation from mechanics using scene stitch- Cham: Springer International Publishing. 143–157. ing. arXiv:2002.02992 [cs.AI]. Phillips, A.; Smith, G.; Cook, M.; and Short, T. 2016. Fem- Gumin, M. 2016. WaveFunctionCollapse. GitHub reposi- inism and procedural content generation: toward a collabo- tory. https://github.com/mxgmn/WaveFunctionCollapse. rative politics of computational creativity. Digital Creativity 27(1):82–97. Guzdial, M., and Riedl, M. 2016. Game level generation from gameplay videos. In Twelfth Artificial Intelligence and Sandhu, A.; Chen, Z.; and McCoy, J. 2019. Enhancing Wave Interactive Digital Entertainment Conference. Function Collapse with design-level constraints. In Proceed- ings of the 14th International Conference on the Founda- Guzdial, M.; Liao, N.; Chen, J.; Chen, S.-Y.; Shah, S.; Shah, tions of Digital Games, 1–9. V.; Reno, J.; Smith, G.; and Riedl, M. O. 2019. Friend, collaborator, student, manager: How design of an AI-driven Scurti, H., and Verbrugge, C. 2018. Generating paths with game level editor affects creators. In Proceedings of the WFC. In Fourteenth AAAI Conference on Artificial Intelli- 2019 CHI Conference on Human Factors in Computing Sys- gence and Interactive Digital Entertainment. tems, 624:1–624:13. Shaker, N.; Nicolau, M.; Yannakakis, G. N.; Togelius, J.; and O’Neill, M. 2012. Evolving levels for Super Mario Bros Guzdial, M.; Liao, N.; and Riedl, M. 2018. Co-creative level using grammatical evolution. In 2012 IEEE Conference on design via machine learning. In Experimental AI In Games Computational Intelligence and Games (CIG), 304–311. Workshop. arXiv:1809.09420. Sloane, M.; Moss, E.; Awomolo, O.; and Forlano, L. 2020. Harrison, P. F. 2005. Image Texture Tools. Ph.D. Disserta- Participation is not a design fix for machine learning. In tion, Monash University. ICML 2020 Workshop on Participatory Approaches to Ma- Hoover, A. K.; Togelius, J.; and Yannakis, G. N. 2015. Com- chine Learning. posing video game levels with music metaphors through Smelik, R.; Tutenel, T.; de Kraker, K. J.; and Bidarra, R. functional scaffolding. In First Computational Creativity 2010. Integrating procedural generation and manual editing and Games Workshop. of virtual worlds. In Proceedings of the 2010 Workshop on Horswill, I. D., and Foged, L. 2012. Fast procedural level Procedural Content Generation in Games, 1–8. population with playability constraints. In Eighth AAAI Smith, A. M., and Mateas, M. 2011. Answer set program- Conference on Artificial Intelligence and Interactive Digital ming for procedural content generation: A design space ap- Entertainment. proach. IEEE Transactions on Computational Intelligence Hoyt, A.; Guzdial, M.; Kumar, Y.; Smith, G.; and Riedl, and AI in Games 3(3):187–200. M. O. 2019. Integrating Automated Play in Level Co- Smith, G.; Whitehead, J.; Mateas, M.; Treanor, M.; March, Creation. In Experimental AI In Games Workshop. J.; and Cha, M. 2011. Launchpad: A rhythm-based level generator for 2-d platformers. IEEE Transactions on com- putational intelligence and AI in games 3(1):1–16. Smith, A. M.; Nelson, M. J.; and Mateas, M. 2010. Lu- docore: A logical game engine for modeling videogames. In Proceedings of the 2010 IEEE Conference on Computa- tional Intelligence and Games, 91–98. Smith, G.; Whitehead, J.; and Mateas, M. 2010. Tanagra: A mixed-initiative level design tool. In Proceedings of the Fifth International Conference on the Foundations of Digital Games, 209–216. Snodgrass, S., and Ontañón, S. 2016. Controllable proce- dural content generation via constrained multi-dimensional Markov chain sampling. In Proceedings of the Twenty- Fifth International Joint Conference on Artificial Intelli- gence, 780–786. Snodgrass, S., and Ontañón, S. 2017. Learning to generate video game maps using Markov models. IEEE Transactions on Computational Intelligence and AI in Games 9(4):410– 422. Sorenson, N., and Pasquier, P. 2010. The evolution of fun: Automatic level design through challenge modeling. In In- ternational Conference on Computational Creativity, 258– 267. Stanton, M.; Humberston, B.; Kase, B.; O’Brien, J. F.; Fata- halian, K.; and Treuille, A. 2014. Self-refining games us- ing player analytics. ACM Transactions on Graphics (SIG- GRAPH) 33(4):73:1–73:9. Stanton, M.; Geddert, S.; Blumer, A.; Hormis, P.; Nealen, A.; Cooper, S.; and Treuille, A. 2016. Large-scale finite state game engines. In Proceedings of the Eurographics/ACM SIGGRAPH Symposium on Computer Animation. Summerville, A., and Mateas, M. 2016. Super Mario as a string: platformer level generation via LSTMs. arXiv:1603.00930 [cs]. Summerville, A. J.; Snodgrass, S.; Mateas, M.; and Ontañón, S. 2016. The VGLC: The Video Game Level Cor- pus. arXiv:1606.07487 [cs]. Summerville, A.; Snodgrass, S.; Guzdial, M.; Holmgård, C.; Hoover, A. K.; Isaksen, A.; Nealen, A.; and Togelius, J. 2018. Procedural Content Generation via Machine Learning (PCGML). IEEE Transactions on Games 10(3):257–270. Summerville, A. J.; Philip, S.; and Mateas, M. 2015. MCM- CTS PCG 4 SMB: Monte Carlo tree search to guide plat- former level generation. Eleventh AAAI Conference on Arti- ficial Intelligence and Interactive Digital Entertainment. Togelius, J., and Dahlskog, S. 2013. Patterns as objectives for level generation. In Proceedings of the Second Workshop on Design Patterns in Games. Yu, D., and Hull, A. 2009. Spelunky (PC Game).