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)
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
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
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
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
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
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
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
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
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
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
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]))
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
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
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
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
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
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
def brick_piece(args): e = Entity() e.model = args['model'] e.on_create = on_create_brick_piece(args['vx'], args['vy']) return e
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
def score_100(args): e = Entity() e.model = 'score_100' e.on_create = on_create_score_100 return e
def flying_coin(args): e = Entity() e.model = 'flying_coin' e.on_create = on_create_flying_coin return e
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
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
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)