Mercurial > touhou
view data/ST/make_stage.py @ 182:20843875ad8f
(Hopefully) use difficulty as it should.
The difficulty[0] (also called rank) varies from 0 to 32 and affects
various parts of the game. The difficulty now impact those parts,
but how it is modified during the gameplay is not clear.
Such changes to the difficulty are not handled yet.
[0] http://en.touhouwiki.net/wiki/Embodiment_of_Scarlet_Devil/Gameplay#Rank
author | Thibaut Girka <thib@sitedethib.com> |
---|---|
date | Tue, 25 Oct 2011 01:29:40 +0200 |
parents | 1bc0ad774ed4 |
children | 016f6b937893 |
line wrap: on
line source
from pytouhou.formats.std import Stage, Model from pytouhou.formats.anm0 import Animations from pytouhou.vm.anmrunner import ANMRunner from pytouhou.game.sprite import Sprite from pytouhou.resource.anmwrapper import AnmWrapper from pytouhou.opengl.sprite import get_sprite_rendering_data ground = Model(quads=[(14, -100.0, -46*3, 0.5, (192+100)*2, 46*3), (0, 192.0 - 40, -46.0, 0.0, 0, 0), (0, 192.0 - 40, -46.0*2, 0.0, 0, 0), (0, 192.0 - 40, -46.0*3, 0.0, 0, 0), (11, -100.0, -46*3, 0.0, 220, 46*3), (11, 192*2+100.0-220, -46*3, 0.0, 220, 46*3), (12, 120.0, -46*3, -0.1, 0, 46*3), (13, 192*2-120-14, -46*3, -0.1, 0, 46*3)]) tree = Model(quads=[(9, 0.0, 0.0, 0.0, 0, 0)]) tree2 = Model(quads=[(10, 0.0, 0.0, 0.0, 0, 0)]) models = [ground, tree, tree2] instances = [(0, 0.0, -46*3*-1, 0.0), (0, 0.0, -46*3*0, 0.0), (0, 0.0, -46*3*1, 0.0), (0, 0.0, -46*3*2, 0.0), (0, 0.0, -46*3*3, 0.0), (0, 0.0, -46*3*4, 0.0), (0, 0.0, -46*3*5, 0.0), (0, 0.0, -46*3*6, 0.0), (0, 0.0, -46*3*7, 0.0), (0, 0.0, -46*3*8, 0.0), (0, 0.0, -46*3*9, 0.0), (0, 0.0, -46*3*10, 0.0), #Trees (1, 40.0, -46*3*1, -50.0), (1, 40.0, -46*3*2, -50.0), (1, 40.0, -46*3*3, -50.0), (1, 40.0, -46*3*4, -50.0), (1, 40.0, -46*3*5, -50.0), (1, 40.0, -46*3*6, -50.0), (1, 40.0, -46*3*7, -50.0), (1, 40.0, -46*3*8, -50.0), (1, 40.0+40, -46*3*1-20, -50.0), (1, 40.0+40, -46*3*2-20, -50.0), (1, 40.0+40, -46*3*3-20, -50.0), (1, 40.0+40, -46*3*4-20, -50.0), (1, 40.0+40, -46*3*5-20, -50.0), (1, 40.0+40, -46*3*6-20, -50.0), (1, 40.0+40, -46*3*7-20, -50.0), (1, 40.0+40, -46*3*8-20, -50.0), (2, 192*2-30-40.0, -46*3*1, -50.0), (2, 192*2-30-40.0, -46*3*2, -50.0), (2, 192*2-30-40.0, -46*3*3, -50.0), (2, 192*2-30-40.0, -46*3*4, -50.0), (2, 192*2-30-40.0, -46*3*5, -50.0), (2, 192*2-30-40.0, -46*3*6, -50.0), (2, 192*2-30-40.0, -46*3*7, -50.0), (2, 192*2-30-40.0, -46*3*8, -50.0), (2, 192*2-30-40.0-50.0, -46*3*1-20, -50.0), (2, 192*2-30-40.0-50.0, -46*3*2-20, -50.0), (2, 192*2-30-40.0-50.0, -46*3*3-20, -50.0), (2, 192*2-30-40.0-50.0, -46*3*4-20, -50.0), (2, 192*2-30-40.0-50.0, -46*3*5-20, -50.0), (2, 192*2-30-40.0-50.0, -46*3*6-20, -50.0), (2, 192*2-30-40.0-50.0, -46*3*7-20, -50.0), (2, 192*2-30-40.0-50.0, -46*3*8-20, -50.0)] # Bounding boxes anm_wrapper = AnmWrapper([Animations.read(open('stg1bg.anm', 'rb'))]) for model in models: vertices = [] for script_index, ox2, oy2, oz2, width_override, height_override in model.quads: sprite = Sprite(width_override, height_override) anmrunner = ANMRunner(anm_wrapper, script_index, sprite) anmrunner.run_frame() key, (vertices2, uvs2, colors2) = get_sprite_rendering_data(sprite) vertices.extend((x + ox2, y + oy2, z + oz2) for x, y, z in vertices2) xmin, ymin, zmin = min(x for x, y, z in vertices), min(y for x, y, z in vertices), min(z for x, y, z in vertices) xmax, ymax, zmax = max(x for x, y, z in vertices), max(y for x, y, z in vertices), max(z for x, y, z in vertices) model.bounding_box = (xmin, ymin, zmin, xmax - xmin, ymax - ymin, zmax - zmin) stage = Stage() stage.name = 'Test by ThibG' stage.bgms = ('', 'bgm/th06_15.mid'), ('', ''), ('', ''), ('', '') stage.models = models stage.object_instances = instances stage.script = [(0, 1, (50, 0, 50, 300.0, 800.0)), (0, 2, (0.0, 400.0, 0.3)), (0, 0, (0.0, 0.0, 0.0)), (2100, 0, (0.0, -800.0, 0.0)), (3200, 0, (0.0, 0.0, 0.0)), (6500, 0, (0.0, 0.0, 0.0))] with open('stage1.std', 'wb') as file: stage.write(file)