February 2009 challenge

Assembly Line - Great game! One possible bug?

Posted by HanClinto on 2009/03/01 04:29

Great job! Thoroughly enjoyed this game when it was entered into Pyweek, and have been enjoying the post-Pyggy bugfix release.

However, I'm trying to output a 4x4 panel of Phrisbees, and running into trouble. I put Phrisbees on a QA machine, and they're being rejected, but when I inspect them, they look perfect. I can't figure out what's wrong.

I saved the game file to see if you might find it helpful:
http://hanclinto.com/dav/Clint/4x4PhrisbeeBug.alg

Thanks!

--clint

Add a comment

Assembly Line - assembly Lines feedback

Posted by claxo on 2009/02/12 14:52

Forgivme Greg, if this feedback is too much long.
And, I fear the wording can feel too pushy, but thats not the intention. Blame this to my low english skills.

Theres a lot that the game does, but I dont get engaged.
The basic problem is the unclarity factor, at various levels:

top level: What is the game about ?
The readme.txt gives a description for a 'Assembly Lines: The Engineer'; the first look at the game is more like 'Assembly Lines: The Manufacturing Tycoon'.
Decide what, and put the relevant description in a intro screen.

second level: ui design
The current design has too much top level elements, and probably too much info at all.
Make the ui design show the conceptual hierarquies involved, make it hint a reasonable workflow.

By example, if going with 'the engineer' variant:
-- begins design --
 The game consist of fulfilling a series of orders from the company management.

 Example orders: design an assembly line for a new product, 
 adjust existing Assembly line to product upgrade,
 adjust product volume,
 adjust to custom batch

 All the company, financials and product sales ui elements dissapear.
 
 Left Pane:
    projects pool : button list, each representing a job to be done.
                    Pressing a button will select the project in the project area.
                    Each button hints about completion ( mark or color ).
                    The world model adds or deletes projects.
    history button: will pop up an scrollable history for the 'news channel' ( new
                    technolgies announcements, promotions, bonus, help hints ) 
    save,load, time flow buttons.

 Right Pane (project area):
    Top Pane (Collapsabile Area Control): job - task description
    Medium pane: basically like the current factory screen, empty if the job
                 is 'new design', loaded with the base design for a 'modification order'.
                 Added a 'commit button',
                 added a mark to the 'last machine selected' button that hints it will expand
                 all the buttons with tool tips
    Bottom Pane:
       Left Pane: Product Spec ( assembled product and pieces, scrollable bitmap array )
       Right Pane: Inspection Tool (drag a piece from the product spec pane and one from
                                    the assembly line to compare )
              Compare area
              Adjust position buttons ( to control offset of one of the pieces )
              Clear button.

 Real state is under pressure here, the best probably is breaking the medium 
 pane ( factory) in left pane ( scrollable area, the factory map) and 
 right pane ( the toolbar). As an alternative, or aditionally, the bottom pane
 can be made collapsabile.

The current top level Machines windows must disappear. 
In the 'last machine selected pop up window' add text to each bitmap.

The current top level Inspection windows disapears, ( inspection now is
into the bottom pane)

The notification channel will pop up a window with the last new.

-- ends design --

Note: in the variant 'Assembly Lines: The Manufacturer Tycoon', one could think as the player fulfilling two roles: CEO and Enginer. To acomodate this, the left pane can be tabbed, with tabs CEO and ENG. While selecting the ENG tab, you see the previusly designed interfase, selecting CEO must show a right pane designed for the CEO tasks)

third level:
tmove content from the manual to the apropiate controls ( tooltips, news channel, help's buttons if any. )

fourth level:
Examine player activities from a new player point of view. Asume it will not read the manual. Detect problem points and revamp.
Problem examples in the factory, and posible solutions ( assuming the design is like outlined )
  • Machines orientation is not evident while moving (show an alphaed machine at the mouse position)
  • The rotation control is not intuitive. ( use mouse wheel and or add the item 'rotation' to the 'configure part' pop up window, )
  • align with other machines is not evident ( incorporate the apropiate conveyor parts to each machine )
  • parts flow can be not inmediate ( incorporate the apropiate conveyor parts)
  • While editing a factory, theres much mouse displacement from the factory map to the toolbar. Also, the need to select 'add' before clicking into the map area, or 'delete' or 'move' is a) not near the way other software works b) too tiresome. I sugest to aproach the behavoir of vector art editors ( Corel, Inkscape ) like:
     . rclick over a machine brings up the configure or properties pop-up window
     . use mouse drag to move machines
     . lclick into the 'machine selection pop up miniwindows' adds the machine to the map
     . Eliminate the '+', 'move', 'configure' buttons. Change the icon for delete to trashcan
     or eraser (behaving as del key). key 'Del' would erase the current selected machine
     . eliminate the inspection icon. Inspection will be done by draging the product part
     to the inspection pane ( or selecting the product part and lclicking in the inspection
     pane )
    
  • five-th :): after al the activities are streamlined, identify wich remains not clear. Add help elements to clarify those.
    Examples:
    the inspection pane can have a 'question mark minibutton', pushing it will pop up the hint 'drag here a part from the assembly line an one from the product spec pane to compare'.
    At entering a new game, send the 'news element' 'Congrats, you are working now for xxxlll company and have assigned a project. Select a project by clicking one of the Current projects buttons. When you are done with the project, commit it'

    Add a comment

    Visitation - visitation feedback

    Posted by claxo on 2009/02/09 21:31

    It is a reduced version from the initial version, right? I dont see the hud elements , like Oxigen, that shows in the pyweek version ( and the current piggy screenshot)

    with pygame 1.7 text has black bg, not transparent (looks ok with pygame 1.8.1).

    soft scroll.
    sun sprite looks good.

    Getting cheap gains from openGL:

    Would be better if your game logic decoupled from screen resolution. After all, the render is done with openGL. I mean writing the logic in world units, and the render scale acording to resolution. That way, you allow to select the screen size that better feels. Think the variety of display devices: netbook screen, 17'' crts, 22'' wide screen, OLPC.

    floats for world coords: If at some time you want to guide objects along soft curves using delta physics, int coords will introduce inacceptable rounding errors. Even moving a sprite in the h axis at slow speed looks much better using floats coords + openGL.

    1 comment

    Legends of Kiralia: Shadows Dawn - zk_kiralia feedback

    Posted by claxo on 2009/02/06 14:31

    Much improved !!!
    I am not a fan of the genre but a combination of presentation and good enough
    hints made me into the game by two hours.
    
    More activities:
    As I see the gameplay, the player is in a loop:
    	repeat:
    		wander
    		fight
    		sometimes:
    			trade in city
    			break in castle
    with most of the time in the first two. And this feels a little repetitive.
    What about adding more activities to happen in the wander, by example:
    
    . find things ( for trade or improve powers ). Things visible only from short distance.
    . RPG condiments: have NPCs on the road (static and wanders). Get pieces of map or critical
     info from them.
    . Portals where the player warps can be protected by a spell that must be broken; this gives
     another reason to interact with NPCs and find things. Also, this protect the player for
     going too fast into the more dangerous zones. 
    . show in the wander mode where near enemies are, allowing to chose alternative route if
     available
    . with more things to do while wander, the number of fights can be reduced after a
     while: too much in a row and begins to feel repetive. 
    
    
    Clarity factor:
    In general it is clear whats going on, and what is reasonable to do.
    But:
    
    after a while, I was wondering about where to find the strings. The only things found by
     wandering were enemies and sites to trade. Enemies are invisible in the wander map, will the
     string be invisible ? Will be captured in one of the road fights ? The story  can tell
     that the 'Dark Lords' has taken the string ( the word 'lord' more assosiated with 'castles' ),
     NPCs can give notices about diferents 'Dark Lords': this way you reduce the
     'I dont know what to do' factor.
    
    Found the first castle, issue enter, win the guardian round, not realized that you must issue a
     second enter. Can be better if you put the guardian out of the castle or if after kill the
     guardian the player goes automatically into the castle.
    
    Possible bugs:
    Elixirs are supossed to be persistent boosts, but inteligence elixir over athon vanishes.
    

    1 comment

    Threads of Fate - Threads of Fate: some bugs or anomalies

    Posted by claxo on 2009/02/06 13:50

    Some can be real bugs, other not implemented code. Anyway:

    after clicking a character to select it, the green frame dont show till you move the mouse.
    sometimes the 'next character' will skip one or two characters in the party.
    sometimes clicking over a character dont select him, but clicking in the hud element for the character does it.
    party pawns can move over a position where an enemy stands.
    sometimes party pawns can move to a position where another party pawn stands.
    dotie with bow, having APs can not fire.
    lodo cast energy bolt: bolt apear over lodo position, not over enemy.

    Two tracebacks: one the known
    [...]
    File "D:\pygame\threads-of-fate-2.3\gamelib\success.py", line 20, in __init__
    [self.party.items.append(i) for i in character.pack]
    AttributeError: 'PC' object has no attribute 'pack'

    The other:
    EnergyBolt: 4 damage to PC Lodo health=-10
    PC Lodo health=-10 damaged 4
    Traceback (most recent call last):
      File "run_game.py", line 9, in 
        main.main()
      File "D:\pygame\threads-of-fate-2.3\gamelib\main.py", line 66, in main
        director.run(cocos.scene.Scene(MainMenu("Threads of Fate")))
      File "D:\pygame\threads-of-fate-2.3\cocos\director.py", line 296, in run
        event_loop.run()
      File "D:\pygame\threads-of-fate-2.3\pyglet\app\win32.py", line 63, in run
        self._timer_func(0, 0, timer, 0)
      File "D:\pygame\threads-of-fate-2.3\pyglet\app\win32.py", line 84, in _timer_f
    unc
        sleep_time = self.idle()
      File "D:\pygame\threads-of-fate-2.3\pyglet\app\__init__.py", line 193, in idle
    
        window.dispatch_event('on_draw')
      File "D:\pygame\threads-of-fate-2.3\pyglet\window\__init__.py", line 1217, in
    dispatch_event
        EventDispatcher.dispatch_event(self, *args)
      File "D:\pygame\threads-of-fate-2.3\pyglet\event.py", line 340, in dispatch_ev
    ent
        if handler(*args):
      File "D:\pygame\threads-of-fate-2.3\cocos\director.py", line 306, in on_draw
        self._set_scene( self.next_scene )
      File "D:\pygame\threads-of-fate-2.3\cocos\director.py", line 362, in _set_scen
    e
        self.scene.on_exit()
      File "D:\pygame\threads-of-fate-2.3\gamelib\level.py", line 654, in on_exit
        super(Level, self).on_exit()
      File "D:\pygame\threads-of-fate-2.3\cocos\cocosnode.py", line 459, in on_exit
        c.on_exit()
      File "D:\pygame\threads-of-fate-2.3\cocos\layer\base_layers.py", line 90, in o
    n_exit
        super(Layer, self).on_exit()
      File "D:\pygame\threads-of-fate-2.3\cocos\cocosnode.py", line 459, in on_exit
        c.on_exit()
      File "D:\pygame\threads-of-fate-2.3\gamelib\actions.py", line 302, in on_exit
        self.result()
      File "D:\pygame\threads-of-fate-2.3\gamelib\actions.py", line 415, in do_hit
        self.spell.do(self.level, self.character, self.cell, self.other)
      File "D:\pygame\threads-of-fate-2.3\gamelib\magic.py", line 88, in do
        other.apply_damage(damage)
      File "D:\pygame\threads-of-fate-2.3\gamelib\character.py", line 439, in apply_
    damage
        self.dispatch_event('on_character_damage', self, old_health, damage)
      File "D:\pygame\threads-of-fate-2.3\pyglet\event.py", line 340, in dispatch_ev
    ent
        if handler(*args):
      File "D:\pygame\threads-of-fate-2.3\gamelib\level.py", line 135, in on_charact
    er_damage
        sprite = self.get_sprite(character)
      File "D:\pygame\threads-of-fate-2.3\gamelib\level.py", line 113, in get_sprite
    
        return self.character_sprites[character.name]
    KeyError: 'Lodo'
    

    1 comment

    Threads of Fate - Threads of Fate crashes..

    Posted by ServalKatze on 2009/02/06 12:41

    I tried to attack an enemy and then the game crashed. The mage was dead - maybe that's related. ;)
    Traceback (most recent call last):
      File "run_game.py", line 9, in 
        main.main()
      File "threads-of-fate-2.3/gamelib/main.py", line 66, in main
        director.run(cocos.scene.Scene(MainMenu("Threads of Fate")))
      File "threads-of-fate-2.3/cocos/director.py", line 296, in run
        event_loop.run()
      File "threads-of-fate-2.3/pyglet/app/xlib.py", line 94, in run
        sleep_time = self.idle()
      File "threads-of-fate-2.3/pyglet/app/__init__.py", line 187, in idle
        dt = clock.tick(True)
      File "threads-of-fate-2.3/pyglet/clock.py", line 698, in tick
        return _default.tick(poll)
      File "threads-of-fate-2.3/pyglet/clock.py", line 295, in tick
        item.func(delta_t, *item.args, **item.kwargs)
      File "threads-of-fate-2.3/cocos/cocosnode.py", line 688, in _step
        action.step(dt)
      File "threads-of-fate-2.3/cocos/actions/base_actions.py", line 101, in step
        self.update( min(1, self._elapsed/self.duration ) )
      File "threads-of-fate-2.3/cocos/actions/base_actions.py", line 346, in update
        self.actions[ found ].start()
      File "threads-of-fate-2.3/cocos/actions/instant_actions.py", line 134, in start
        self.func(*self.args, **self.kwargs)
      File "threads-of-fate-2.3/gamelib/actions.py", line 298, in done
        self.attack.level.scroller.remove(self)
      File "threads-of-fate-2.3/cocos/cocosnode.py", line 400, in remove
        self._remove(obj)
      File "threads-of-fate-2.3/cocos/cocosnode.py", line 410, in _remove
        child.on_exit()
      File "threads-of-fate-2.3/gamelib/actions.py", line 302, in on_exit
        self.result()
      File "threads-of-fate-2.3/gamelib/actions.py", line 187, in do_hit
        self.other.apply_damage(damage)
      File "threads-of-fate-2.3/gamelib/character.py", line 439, in apply_damage
        self.dispatch_event('on_character_death', self)
      File "threads-of-fate-2.3/pyglet/event.py", line 340, in dispatch_event
        if handler(*args):
      File "threads-of-fate-2.3/gamelib/level.py", line 198, in on_character_death
        director.replace(success.Success(level))
      File "threads-of-fate-2.3/gamelib/success.py", line 20, in __init__
        [self.party.items.append(i) for i in character.pack]
    AttributeError: 'PC' object has no attribute 'pack'
    

    1 comment

    Kiko - Kiko crashing

    Posted by ServalKatze on 2009/02/02 16:00

    I get this error after finishing the 2nd level:
    Traceback (most recent call last):
      File "kiko_play.py", line 55, in 
        kiko.main.run()
      File "D:\Transfer\freigegeben\pyggy\kiko\kiko\main.py", line 133, in run
      File "D:\Transfer\freigegeben\pyggy\kiko\libs\gamebits\sm.py", line 27, in ptick
      File "D:\Transfer\freigegeben\pyggy\kiko\libs\gamebits\trans.py", line 39, in e_start
      File "D:\Transfer\freigegeben\pyggy\kiko\libs\gamebits\sm.py", line 82, in sm
    TypeError: __init__() takes exactly 1 argument (3 given)

    1 comment

    Visitation - Successful blitz, too little too late

    Posted by saluk on 2009/02/01 19:18

    Unfortunately, we haven't had much time lately to work on the game, and what little time we did have, we didn't use. We worked on it more this weekend than we have in the last few months. As far as time management goes, it's too bad that we didn't focus on that until a few days ago, but what we were able to do in that amount of time when we really did focus on time management, was great. We did more in the last few days than we've done in some pyweeks in fact.

    The game is obviously unfinished, and likely very confusing to play. It has changed a lot from the original version, as an effort was made to give the player actual things to do and micro manage, instead of having it feel like you just sit back and watch things. Instead of controlling a faceless entity, you control a person who can walk around and interact with things. If you read newdesigntoruletheworld.txt there is a better idea of where we are going, along with a story that you won't find in the hastily written readme.

    The control so far, is mostly limited to building buildings (interact with the tower, get a flag for the building you want to make, walk to where you want it built, and press space to drop the flag), and hiring and firing workers at each building.

    Important: At the last minute, I mistakenly forgot to add flags for making houses or new towers. These can be instantly added by pressing "A" or "S" respectively.

    There are no longer away missions like there used to be, as the landscape is continuous in either direction. Explorers and soldiers are planned, but we ran out of time :) The goal of the game is basically to make a thriving city, more goals are also planned, hehe. The most unique features are the day and night system (where people work at certain times and go home at night), and being able to help out carriers by moving resources around.

    Work on this is far from over, but at least we finally know where we are going. Hopefully it will be more complete in the next pyggy, if games can be entered repeatedly.

    3 comments

    Endgame: Singularity - UnboundLocalError

    Posted by bishop on 2009/02/01 18:16

    Here's an error I got when selecting the Finance menu after having created some new bases:

    Exception in function show at Sun Feb  1 19:23:47 2009 CEST:
    Traceback (most recent call last):
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/safety.py", line 58, in safe_call
        return func(*args, **kwargs)
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/graphics/dialog.py", line 189, in show
        result = self.handle(event)
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/graphics/dialog.py", line 306, in handle
        return self.call_handlers(handlers, event)
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/graphics/dialog.py", line 318, in call_handlers
        handler(event)
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/graphics/button.py", line 109, in handle_event
        self.activate_with_sound(event)
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/graphics/button.py", line 122, in activate_with_sound
        self.activated(event)
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/graphics/button.py", line 151, in activated
        self.function(*self.args, **self.kwargs)
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/graphics/button.py", line 197, in show_dialog
        raise constants.Handled, dialog.call_dialog(self.dialog, self)
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/graphics/dialog.py", line 96, in call_dialog
        retval = dialog.show()
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/screens/finance.py", line 121, in show
        return super(FinanceScreen, self).show()
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/graphics/dialog.py", line 175, in show
        Dialog.top.maybe_update()
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/graphics/widget.py", line 297, in maybe_update
        self.update()
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/graphics/widget.py", line 301, in update
        self.prepare_for_redraw()
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/graphics/widget.py", line 293, in prepare_for_redraw
        child.prepare_for_redraw()
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/graphics/widget.py", line 293, in prepare_for_redraw
        child.prepare_for_redraw()
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/graphics/widget.py", line 280, in prepare_for_redraw
        self.rebuild()
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/screens/finance.py", line 51, in rebuild
        cash_info, cpu_info = g.pl.give_time(seconds_left, dry_run=True)
      File "/home/paulb/Software/Python/Games/singularity-0.30/code/player.py", line 298, in give_time
        cpu_available=real_cpu )[0]
    UnboundLocalError: local variable 'real_cpu' referenced before assignment
    

    Add a comment

    Assembly Line - Assembly Line Doc Update

    Posted by gcewing on 2009/02/01 04:55

    Uploaded some minor updates to the tutorial and ref man to make them match the current state of the game more closely.

    Add a comment