Exemple #1
0
def setup_bar():
    ra = mopy.monkey.engine.room_args
    gl = mopy.monkey.engine.data.globals
    bonus_left = Entity()
    bonus_left.model = gl.bonus_list[ra[0]]['gfx']
    bonus_left.pos = (2.5*16, 10.2*16, 0.11)
    example.get('main').add(bonus_left)
    bonus_right = Entity()
    bonus_right.model = gl.bonus_list[ra[2]]['gfx']
    bonus_right.pos = (9.5*16, 10.2*16, 0.11)
    example.get('main').add(bonus_right)




    from wbml.data.actions import WBM

    # check if player has enough gold to buy items
    min_cost = min(int(ra[1]), int(ra[3]))
    if gl.gold < min_cost:
        s = Script()
        s.seq([WBM('$msg/8'), act.ChangeRoom('citywl')])
        example.play(s)
    else:
        mopy.monkey.engine.data.globals.pos = [(2, 7.625, 0.1), (5.25, 7.625, 0.1), (9.5, 7.625, 0.1)]
        mopy.monkey.engine.data.globals.cpos = 1
        s = Script()
        s.seq([WBM('$msg/5')])
        example.play(s)
Exemple #2
0
def common3D(ciao):
    dt = monkey.engine.data.globals

    e = Entity()
    e.layer = 1
    e.tag = ciao.get('tag', None)
    scale = ciao.get('scale', 1)
    e.scale = (scale, scale, 1)
    e.model = ciao.get('model', None)
    energy = ciao.get('energy', 1)
    if isinstance(e.model, dict):
        ciao = copy.deepcopy(mopy.monkey.engine.get_asset(e.model['template']))
        f = getattr(mopy.monkey.engine.data.scripts, ciao['builder'])
        if not f:
            print("hey I need a function: " + f + " to create the model")
        e.model = f(ciao, e.model['args'])
    size = ciao.get('size', dt.default_size)

    show_boxes = getattr(monkey.engine.data.globals, 'show_boxes', False)

    e.components.append({
        'type': 'components.controller3D',
        'maxClimbAngle': 80,
        'maxDescendAngle': 80,
        'size': size,
        'offset': [0, size[1] * 0.5, 0],
        'mask_up': 2,
        'mask_down': 2 | 32,
        'debug': show_boxes
    })
    e.add_component({'type': 'components.dynamics3D'})
    e.add_component({
        'type': 'components.info',
        'stuff': {
            'energy': energy,
            'attacks': ciao.get('attacks', None)
        }
    })

    # scaling should be applied only if current room has a scaling associated
    if dt.room_scaling:
        e.add_component({
            'type': 'components.scaler',
            'p0': dt.room_scaling[0],
            'p1': dt.room_scaling[1]
        })
    # shadow
    apply_shadow = getattr(dt, 'apply_shadow', False)
    if apply_shadow:
        shadow = Entity()
        shadow.add_component(ShadowRenderer(**dt.shadow))
        e.add(shadow)
    return e
Exemple #3
0
def bg(data):
    e = Entity()
    if 'image' in data:
        e.model = {
            'type': 'model.rect',
            'tex': data['image'],
            'scale': data.get('scale', (1, 1)),
            'repeat': data.get('repeat', (1, 1)),
        }
    else:
        e.model = data['model']
    e.layer = data.get('layer', 0)
    return e
Exemple #4
0
def rect_platform_3d(ciao):
    e = Entity()
    outline = ciao['poly']
    height = ciao.get('height', 1.0)

    y = ciao.get('y', 0.0)
    top_tex = ciao.get('top')
    side_tex = ciao.get('side')
    collision_tag = ciao.get('collision_tag', 0)
    shape = sh3d.Prism(shape=sh.Poly(outline=outline),
                       height=height,
                       walls=ciao.get('walls', []))
    if top_tex and side_tex:
        e.model = {
            'type': 'model.prism',
            'repeat': ciao['repeat'],
            'poly': outline,
            'top': top_tex,
            'side': side_tex,
            'height': height,
            'offset': [0, height, 0]
        }
    # e.add_component(comp.ShapeGfxColor(shape=shape, color=color))
    e.add_component(
        Collider(shape=shape, flag=2, mask=0, tag=collision_tag, debug=True))
    return e
Exemple #5
0
def entity(ciao):
    e = Entity()
    e.model = ciao.get('model', None)
    e.scale = ciao.get('scale')
    e.components = ciao.get('components', [])
    e.tag = ciao.get('tag', None)
    children = ciao.get('children')
    if children:
        tile_size = getattr(
            monkey.engine.data.globals, 'tile_size',
            [1, 1])  # monkey.engine.room_vars.get('tile_size', [1, 1])
        for c in children:
            entity_desc = c
            positions = c.get('pos', [0, 0, 0])
            if 'ref' in c:
                entity_desc = monkey.engine.get_asset(entity_desc, c['ref'])
            factory = monkey.engine.get_item_factory(entity_desc['type'])
            if not factory:
                print('Don' 't have factory for item: ' + entity_desc['type'])
                exit(1)
            for ip in range(0, len(positions), 3):
                pos = positions[ip:ip + 3]
                child = factory(entity_desc)
                child.pos = tiles_to_world(pos, tile_size)
                e.children.append(child)

    return e
Exemple #6
0
def box(args):
    color = args['color']
    size = args['size']
    pos = args['pos']
    mass = args['mass']
    color = utils.hex_to_rgb(color)
    half_size = [size[0] * 0.5, size[1] * 0.5, size[2] * 0.5]
    e = Entity()
    e.auto_pos = True
    e.model = {
        'type': 'model.box3D_color',
        'color': [color[0], color[1], color[2], 1],
        'size': size,
        'offset': [-half_size[0], -half_size[1], -half_size[2]]
    }
    e.components = [{
        'type': 'bullet.rigid_body',
        'pos': pos,
        'mass': mass,
        'shape': {
            'type': 'bullet.box',
            'size': half_size
        }
    }]
    return e
Exemple #7
0
def moving_platform(args):
    e = Entity()
    gl = mopy.monkey.engine.data.globals
    width = args.get('width')
    points = args.get('points')
    points = [x * 16 for x in points]
    speed = args.get('speed')
    e.model = {
        'type': 'model.tiled',
        'tex': 'gfx/wbml.png',
        'img_tile_size': [16, 16],
        'tile_size': [16, 16],
        'size': [width, 1],
        'data': [0, 9] * width
    }
    e.add_component(Platform())
    e.add_component(
        Collider(debug=True,
                 flag=gl.CollisionFlags.platform_passthrough,
                 mask=gl.CollisionFlags.player,
                 tag=0,
                 shape=sh.Line(a=[0, 16, 0], b=[width * 16, 16, 0])))
    e.add_component(PolygonalMover(points=points, speed=speed, mode=1))
    #e.add_component(comp.PolygonalMover(origin=(pos[0],pos[1]), loop=args[6], pct=args[4], moves=[
    #    {'delta': [0, args[5]*vars.tile_size], 'speed': args[7], 'hold': 0}]))
    return e
Exemple #8
0
def foe(args):
    gl = mopy.monkey.engine.data.globals
    e = Entity()
    e.model = args['model']

    size = args['size']
    max_speed = args['max_speed']
    gravity, jump_speed = utils.compute_gravity(
        monkey.engine.data.globals.jump_height,
        monkey.engine.data.globals.time_to_jump_apex)
    flip_on_edge = args.get('flip_on_edge', False)

    e.add_component({
        'type': 'components.smart_collider',
        'tag': gl.CollisionTags.foe,
        'flag': gl.CollisionFlags.foe,
        'mask': gl.CollisionFlags.player,
        'debug': True
    })
    e.components.append({
        'type': 'components.controller2D',
        'size': [size[0], size[1], 0],
        'offset': [0, size[1] * 0.5, 0],
        'mask_up': 2,
        'mask_down': 2 | 32,
        'debug': True
    })
    e.components.append({'type': 'components.dynamics'})
    e.components.append({
        'type':
        'components.state_machine',
        'initial_state':
        'walk',
        'states': [{
            'id': 'walk',
            'type': 'state.npc_walk',
            'max_speed': max_speed,
            'jump_speed': jump_speed,
            'gravity': gravity,
            'jump_up_anim': 'walk',
            'jump_down_anim': 'walk',
            'direction': args.get('direction', -1),
            'flip_on_edge': flip_on_edge
        }, {
            'id': 'dead',
            'type': 'state.npc_walk',
            'max_speed': 0,
            'jump_speed': jump_speed,
            'gravity': gravity,
            'walk': 'dead',
            'walk_anim': 'dead',
            'jump_up_anim': 'dead',
            'jump_down_anim': 'dead'
        }]
    })
    return e
Exemple #9
0
def brick(ciao):
    e = Entity()
    e.model = ciao.get('model', None)
    hits_left = ciao.get('hits_left', 1)
    bonus_item = ciao.get('item', None)
    collision_tag = data.CollisionTags.bonus_brick_sensor if bonus_item else data.CollisionTags.basic_brick_sensor
    tile_size = getattr(monkey.engine.data.globals, 'tile_size', [1, 1])
    hidden = ciao.get('hidden', False)
    if hidden:
        collision_tag = data.CollisionTags.hidden_brick_sensor
    e.components.append({
        'type': 'components.collider',
        'shape': {
            'type': 'rect',
            'width': tile_size[0],
            'height': tile_size[1],
        },
        'tag': 0,
        'flag': 0 if hidden else 2,
        'mask': 0,
        'debug': True
    })
    e.components.append({
        'type': 'components.info',
        'stuff': {
            'hits_left': hits_left,
            'item': bonus_item
        }
    })
    e.components.append({'type': 'components.dynamics'})
    e.components.append({'type': 'components.platform'})
    e.components.append({
        'type': 'components.line_dynamic_mover',
        'direction': (0, 1),
        'acceleration': (0, -data.globals.gravity),
        'min': 0
    })
    # add brick sensor
    sensor = Entity()
    sensor.pos = [0.1 * tile_size[0], -0.1 * tile_size[1], 0]
    sensor.components.append({
        'type': 'components.collider',
        'shape': {
            'type': 'shape3d.aabb',
            'size': [0.8 * tile_size[0], 0.2 * tile_size[1], 0]
        },
        'tag': collision_tag,
        'mask': data.CollisionFlags.player,
        'flag': data.CollisionFlags.foe,
        'debug': True
    })

    e.add(sensor)
    return e
Exemple #10
0
def coin(args):
    e = Entity()
    e.model = args.get('model', 'sprites.pickupcoin')
    e.add_component({
        'type': 'components.smart_collider',
        'tag': data.CollisionTags.pickup_coin,
        'flag': data.CollisionFlags.foe,
        'mask': data.CollisionFlags.player,
        'debug': True
    })
    return e
Exemple #11
0
def bg(args):
    e = Entity()
    asset = copy.deepcopy(monkey.engine.get_asset(args.get('model', None)))
    e.anim = args.get('anim', None)
    e.tag = args.get('tag')
    if 'tile_size' not in asset:
        asset['tile_size'] = [16, 16]
    e.model = asset

    print('THE TAG IS ' + str(e.tag))
    e.read_children(args)
    return e
Exemple #12
0
 def f():
     aa = mopy.monkey.engine.read(msg_id)
     id = example.get('main').add(
         Text(font='sprites.mario_font',
              size=8,
              text=aa,
              color=[0, 0, 0, 0],
              maxwidth=160,
              align=TextAlignment.center,
              pos=[96, 132, 1.01]))
     text_size = example.getById(id).getTextSize()
     tw = (text_size[2] - text_size[0])
     th = (text_size[3] - text_size[1])
     width = math.ceil(tw / 8.0)
     height = math.ceil(th / 8.0)
     data = [22, 8]
     data.extend([23, 8] * width)
     data.extend([24, 8])
     md = [22, 7]
     md.extend([23, 7] * width)
     md.extend([24, 7])
     data.extend(md * height)
     data.extend([22, 6])
     data.extend([23, 6] * width)
     data.extend([24, 6])
     e = Entity(tag='msg_wrap')
     e.model = {
         'type': 'model.tiled',
         'tex': 'gfx/wbml.png',
         'img_tile_size': [8, 8],
         'tile_size': [8, 8],
         'size': [width + 2, height + 2],
         'data': data
     }
     e.pos = [96 - 0.5 * tw - 8, 132 - 0.5 * th - 8, 1]
     example.get('main').add(e)
     #s = Script()
     #acts=[]
     #print('positioned ' + str(text_size))
     id1 = example.get('main').add(
         Text(tag='ciaone',
              font='sprites.mario_font',
              size=8,
              text='',
              mode=1,
              color=[255, 255, 255, 255],
              shade_color=(255, 0, 0, 255),
              maxwidth=160,
              align=TextAlignment.top_left,
              pos=[96 - 0.5 * tw, 132 + 0.5 * th, 1.02]))
Exemple #13
0
def trunk(args):
    door = args.get('door')
    model = args.get('model', 'model.trunk')
    width = args.get('width', 6)
    xs = (width - 4) / 2
    tag = 'door_' + str(door)
    e = Entity()
    e.model = model
    door_info = mopy.monkey.engine.data.globals.doors[door]
    if door_info['open'] == 1:
        anim = door_info['anim']
    else:
        anim = 'barred'
    e.children.append(
        build_entity({
            'type': '_line',
            'size': [4, 0],
            'pass_thru': True
        }, [xs, 4]))

    e.children.append(
        build_entity(
            {
                'type': 'bg',
                'model': 'sprites.door',
                'anim': anim,
                'tag': tag
            }, [xs + 1, 0, 0]))
    # check if door is available
    if door_info['open'] == 1:
        coll = Entity()
        coll.add_component(
            Collider(
                shape={
                    'type': 'shape3d.aabb',
                    'size': [16, 32, 0]
                },
                flag=12,
                mask=mopy.monkey.engine.data.globals.CollisionFlags.player,
                tag=mopy.monkey.engine.data.globals.CollisionTags.door,
                debug=True))
        coll.pos = [(xs + 1.5) * 16, 0, 0]
        coll.add_component(Info(door_id=door))

        e.children.append(coll)
    return e
Exemple #14
0
def bonus(model, speed, tag):
    e = Entity()
    e.model = model
    size = data.globals.tile_size
    max_speed = speed
    gravity, jump_speed = utils.compute_gravity(
        monkey.engine.data.globals.jump_height,
        monkey.engine.data.globals.time_to_jump_apex)
    e.add_component({
        'type': 'components.smart_collider',
        'tag': tag,
        'flag': data.CollisionFlags.foe,
        'mask': data.CollisionFlags.player,
        'debug': True
    })
    e.components.append({
        'type': 'components.controller2D',
        'size': [size[0], size[1], 0],
        'offset': [0, size[1] * 0.5, 0],
        'mask_up': 2,
        'mask_down': 2 | 32,
        'debug': True
    })
    e.components.append({'type': 'components.dynamics'})
    e.components.append({
        'type':
        'components.state_machine',
        'initial_state':
        'idle',
        'states': [{
            'id': 'walk',
            'type': 'state.npc_walk',
            'flip_hor': False,
            'max_speed': max_speed,
            'jump_speed': jump_speed,
            'gravity': gravity,
            'jump_up_anim': 'walk',
            'jump_down_anim': 'walk',
            'flip_on_edge': False
        }, {
            'id': 'idle',
            'type': 'state.null',
        }]
    })
    return e
Exemple #15
0
def rect_platform(ciao):
    e = Entity()
    tile_size = getattr(monkey.engine.data.globals, 'tile_size', [1, 1])
    size = tiles_to_world(ciao.get('size'), tile_size)
    e.components.append({
        'type': 'components.collider',
        'shape': {
            'type': 'rect',
            'width': size[0],
            'height': size[1],
        },
        'tag': 0,
        'flag': 2,
        'mask': 0,
        'debug': True
    })
    e.model = ciao.get('model')
    return e
Exemple #16
0
def box_platform_3d(ciao):
    e = Entity()
    size = ciao['size']
    top_tex = ciao['top']
    side_tex = ciao['side']
    collision_tag = ciao.get('collision_tag', 0)
    shape = sh3d.AABB(size=size, offset=(0, 0, -size[2]))
    e.model = {
        'type': 'model.prism',
        'repeat': ciao['repeat'],
        'poly': [0, 0, size[0], 0, size[0], size[2], 0, size[2]],
        'top': top_tex,
        'side': side_tex,
        'height': size[1],
        'offset': [0, size[1], 0]
    }
    e.add_component(
        Collider(shape=shape, flag=2, mask=0, tag=collision_tag, debug=True))
    return e
Exemple #17
0
def wa3d(desc):
    outline = desc.get('poly')
    depth = desc.get('depth')
    fy = desc.get('fy', 0)
    if fy > 0:
        outline = [
            fy - outline[i] if i % 2 == 1 else outline[i]
            for i in range(0, len(outline))
        ]
        print(outline)
    height = desc.get('height', 1.0)
    depth_y = depth * math.sqrt(2.0)
    y0 = outline[1] - depth - height
    x0 = 0
    z0 = -depth_y
    pos = (x0, y0, z0)
    top = (x0, y0 + height, z0)
    #vars.walk_areas.append (WalkAreaInfo(x0, y0 + height, z0, fy, outline[1]))
    color = desc.get('color', [1, 1, 1, 1])
    oline = []
    a0 = 0  #outline[1]
    for i in range(0, len(outline), 2):
        oline.append(outline[i] - x0)
        oline.append((outline[i + 1] - a0) * math.sqrt(2.0))
    print(oline)

    pos = (0, 0, 0)
    e = Entity(pos=pos)
    e.auto_pos = True
    shape = sh3d.Prism(shape=sh.Poly(outline=oline),
                       height=height,
                       walls=desc.get('walls', []))
    print(shape)
    e.model = {'type': 'model.shape', 'shape': shape, 'color': color}
    #e.add_component(ShapeGfxColor(shape=shape, color=color))
    dt = monkey.engine.data.globals
    e.add_component(
        Collider(shape=shape,
                 flag=dt.CollisionFlags.platform,
                 mask=0,
                 tag=dt.CollisionTags.platform))
    return e
Exemple #18
0
def ramp(args):
    e = Entity()
    pos = args['pos']
    e.model = {
        'type': 'model.ramp3D_wireframe',
        'width': args['width'],
        'length': args['length'],
        'height': args['height']
    }
    e.components = [{
        'type': 'bullet.rigid_body',
        'pos': pos,
        'mass': 0,
        'shape': {
            'type': 'bullet.ramp',
            'width': args['width'],
            'length': args['length'],
            'height': args['height']

        }
    }]
    return e
Exemple #19
0
def brick_piece(args):
    e = Entity()
    e.model = args['model']
    e.on_create = on_create_brick_piece(args['vx'], args['vy'])
    return e
Exemple #20
0
def bg(args):
    e = Entity()
    asset = copy.deepcopy(monkey.engine.get_asset(args.get('model', None)))
    asset['tile_size'] = [16, 16]
    e.model = asset
    return e
Exemple #21
0
def score_100(args):
    e = Entity()
    e.model = 'score_100'
    e.on_create = on_create_score_100
    return e
Exemple #22
0
def flying_coin(args):
    e = Entity()
    e.model = 'flying_coin'
    e.on_create = on_create_flying_coin
    return e
Exemple #23
0
def player2D(ciao):
    e = Entity()
    e.model = ciao.get('model', None)
    tile_size = getattr(monkey.engine.data.globals, 'tile_size', [1, 1])
    size = tiles_to_world(ciao.get('size'), tile_size)
    max_speed = ciao.get('max_speed')
    time_acc = ciao.get('time_acc')
    show_boxes = getattr(monkey.engine.data.globals, 'show_boxes', False)
    jump_height = ciao.get('jump_height')
    time_to_jump_apex = ciao.get('time_to_jump_apex')
    gravity = (2.0 * jump_height) / (time_to_jump_apex * time_to_jump_apex)
    jump_speed = abs(gravity) * time_to_jump_apex
    e.tag = ciao.get('tag', None)
    e.components.append({
        'type': 'components.controller2D',
        'size': [size[0], size[1], 0],
        'offset': [0, size[1] * 0.5, 0],
        'mask_up': 2,
        'mask_down': 2 | 32,
        'debug': show_boxes
    })
    e.components.append({'type': 'components.dynamics'})
    e.components.append({'type': 'components.keyinput'})
    e.components.append({
        'type':
        'components.smart_collider',
        'flag':
        monkey.engine.data.CollisionFlags.player,
        'mask':
        monkey.engine.data.CollisionFlags.foe,
        'tag':
        monkey.engine.data.CollisionTags.player,
        'cast_mask':
        monkey.engine.data.CollisionFlags.foe,
        'cast_tag':
        getattr(monkey.engine.data.CollisionTags, 'player_attack'),
        'debug':
        True
    })
    e.components.append({
        'type': 'components.follow',
        'cam': 'maincam',
        'relativepos': [0, 0, 5],
        'up': [0, 1, 0]
    })
    e.components.append({
        'type':
        'components.state_machine',
        'initial_state':
        'jump',
        'states': [{
            'id': 'jump',
            'type': 'state.player_jump',
            'max_speed': max_speed,
            'time_acc': time_acc,
            'gravity': gravity,
            'walk_state': 'walk',
        }, {
            'id': 'walk',
            'type': 'state.player_walk',
            'max_speed': max_speed,
            'time_acc': time_acc,
            'gravity': gravity,
            'jump_state': 'jump',
            'jump_speed': jump_speed
        }]
    })
    return e
Exemple #24
0
def goomba(args):
    e = Entity()
    e.model = args.get('model')
    size = args.get('size')
    max_speed = args.get('max_speed')
    time_acc = args.get('time_acc')
    gravity, jump_speed = utils.compute_gravity(
        monkey.engine.data.globals.jump_height,
        monkey.engine.data.globals.time_to_jump_apex)
    flip_on_edge = args.get('flip_on_edge', False)
    e.add_component({
        'type': 'components.smart_collider',
        'tag': data.CollisionTags.goomba,
        'flag': data.CollisionFlags.foe,
        'mask': data.CollisionFlags.player,
        'debug': True
    })
    e.components.append({
        'type': 'components.controller2D',
        'size': [size[0], size[1], 0],
        'offset': [0, size[1] * 0.5, 0],
        'mask_up': 2,
        'mask_down': 2 | 32,
        'debug': True
    })
    e.components.append({'type': 'components.dynamics'})

    e.components.append({
        'type':
        'components.state_machine',
        'initial_state':
        'walk',
        'states': [{
            'id': 'walk',
            'type': 'state.npc_walk',
            'max_speed': max_speed,
            'jump_speed': jump_speed,
            'gravity': gravity,
            'jump_up_anim': 'walk',
            'jump_down_anim': 'walk',
            'flip_on_edge': flip_on_edge
        }, {
            'id': 'dead',
            'type': 'state.npc_walk',
            'max_speed': 0,
            'jump_speed': jump_speed,
            'gravity': gravity,
            'walk': 'dead',
            'walk_anim': 'dead',
            'jump_up_anim': 'dead',
            'jump_down_anim': 'dead'
        }]
    })
    #
    # pos = makePos2(*args)
    # foe_id = kwargs.get('id')
    # foe_info = vars.foes[foe_id]
    # model = foe_info['model']
    # p = entity.Sprite(model=model, pos=pos)
    # p.add_component(comp.SmartCollider(flag=vars.flags.foe, mask=vars.flags.player, tag=foe_info['tag']))
    # p.add_component(comp.Controller2D(mask_up=vars.flags.platform, mask_down=vars.flags.platform | vars.flags.platform_passthrough,
    #                                   max_climb_angle=80, max_descend_angle=80, size=foe_info['size'], debug=True))
    # p.add_component(comp.Dynamics2D(gravity=vars.gravity))
    # sm = comp.StateMachine(initial_state='walk')
    # sm.states.append(states.SimpleState(uid='dead', anim='dead'))
    # sm.states.append(platformer.states.FoeWalk(uid='walk', anim='walk', speed=foe_info['speed'], acceleration=0,
    #                                            flip_horizontal=foe_info['flip_h'], flip_when_platform_ends=foe_info['flip_when_platform_ends'],
    #                                            left=1))
    # p.add_component(sm)
    # return p
    return e
Exemple #25
0
def pane():
    aa = mopy.monkey.engine.read('$msg/1')
    print(aa)
    id = example.get('main').add(Text(font='sprites.mario_font', size=8, text=aa, color=[0,0,0,0], maxwidth=160,align=TextAlignment.center, pos=[96, 132,1.01 ]))
    text_size = example.getById(id).getTextSize()
    # s.add_action(Msg(
    #     font=gl.msg_font,
    #     color=(127, 83, 30, 255),
    #     align=TextAlignment.center,
    #     text=mopy.monkey.engine.read(text),
    #     pos=(gl.sci_viewport[2] * 0.5, gl.sci_viewport[3] * 0.5, 1),
    #     inner_texture=gl.msg_inner_texture,
    #     border_texture=gl.msg_border_texture,
    #     eoc=True,
    #     timeout=1000,
    #     box=True,
    #     padding=(4, 5)))
    # s.add_action(sierra_enable_controls(True))
    # return s
    #s = Script()
    #
    #
    # print ('fottimilcazzzzo!!!!')
    #s.seq([
    #    act.AddEntity(entity_id='entities.textbg', pos=[0.5, 7, 1])
    #])
    import math
    tw = (text_size[2] - text_size[0])
    th = (text_size[3] - text_size[1])
    width = math.ceil(tw / 8.0)
    height = math.ceil(th / 8.0)
    data = [22, 8]
    data.extend([23, 8] * width)
    data.extend([24, 8])
    md = [22, 7]
    md.extend([23, 7] * width)
    md.extend([24, 7])
    data.extend(md * height)
    data.extend([22, 6])
    data.extend([23, 6] * width)
    data.extend([24, 6])
    e = Entity()
    e.model = {
            'type': 'model.tiled',
            'tex': 'gfx/wbml.png',
            'img_tile_size': [8, 8],
            'tile_size': [8, 8],
            'size': [width + 2, height + 2],
            'data': data}
    e.pos=[96 - 0.5 * tw - 8, 132 - 0.5*th - 8, 1]
    example.get('main').add(e)
    s = Script()
    acts=[]
    print('positioned ' + str(text_size))
    id1 = example.get('main').add(Text(tag='ciaone', font='sprites.mario_font', size=8, text=aa,
                                      color=[255,255,255,255], maxwidth=160,align=TextAlignment.top_left, pos=[96-0.5*tw, 132+0.5*th, 1.02]))
    for n in range(1, len(aa)+1):
        acts.append(act.SetText(tag='ciaone', text=aa[0:n]))
        acts.append(act.Delay(0.05))
    s.seq(acts)
    example.play(s)