Allegro.cc - Online Community

Allegro.cc Forums » The Depot » Liberation Circuit - Rogue AI Simulator

This thread is locked; no one can reply to it. rss feed Print
Liberation Circuit - Rogue AI Simulator
Linley Henzell
Member #3,963
October 2003

Finally, a beta release of Liberation Circuit! (RTS/programming game about escaping from a hostile computer system)

I have, at last, worked out how to use github, so here's the release page.

(it opens in fullscreen window by default; edit init.txt to change this if you don't want it to).

Windows binary only so far, although it should build on any system supported by Allegro 5 (it doesn't have any other dependencies).

The general github page.

A new screenshot.

A trailer!

All feedback appreciated!

Chris Katko
Member #1,881
January 2002
avatar

Hot damn, pretty!

-----sig:
“Programs should be written for people to read, and only incidentally for machines to execute.” - Structure and Interpretation of Computer Programs
"Political Correctness is fascism disguised as manners" --George Carlin

Eric Johnson
Member #14,841
January 2013
avatar

Wow! I like how smooth everything looks.

Gideon Weems
Member #3,925
October 2003

I hope to check this out sometime over the weekend. The screenshot looks great!

Edit: Here is how I compiled.

gcc -v *.c -lallegro -lallegro_audio -lallegro_acodec -lallegro_font -lallegro_image -lallegro_primitives -lallegro_ttf -lallegro_dialog -lm

Everything sounds (and looks) top-notch! One of the more eye-opening byproducts of releasing a game into the wild is realizing how stupid players can be. I wish to contribute to this end by asking if the following error message is part of the game and, if not, what I can do to move past it.

{"name":"610799","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/f\/2f50ad099031c76006a4c6d3d8b08682.png","w":1030,"h":774,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/2\/f\/2f50ad099031c76006a4c6d3d8b08682"}610799

Linley Henzell
Member #3,963
October 2003

Thanks!

Hm, that error message means that somehow the process design or source code in the first template (which the game tries to place at the start of the game) is invalid. There's a few ways this can happen:

- the game's directory structure hasn't been reproduced properly, so the game couldn't find the cm_base.c file in the /proc subdirectory (I don't think that's it, because the game is obviously finding the fonts and other data files)

- there's something wrong with the design of the first template that prevents it being created (e.g. it has components that overlap each other, or uses objects that haven't been unlocked) - did you change the design at all?

- there's something wrong with the source code of the first template. If you select template 0 (using the menu you get by pressing the [Te] button) and try to compile it (use the Compile menu in the [Ed] panel) you should get the compilation report in the log at the bottom of the screen.

To fix it: re-extracting the contents of the /proc directory from the release zip may do it.

Gideon Weems
Member #3,925
October 2003

If you select template 0 (using the menu you get by pressing the [Te] button) and try to compile it (use the Compile menu in the [Ed] panel) you should get the compilation report in the log at the bottom of the screen.

This read, "No source code to compile". Does my directory structure look okay? I have data, proc, and story symbolically linked to respective folders in LibCirc_v0.99_beta.zip. I also tried copying these folders, as opposed to linking.

.
├── LICENSE.md
├── LibCirc beta
│   ├── LibCirc.exe
│   ├── Manual.html
│   ├── allegro-5.0.10-monolith-mt.dll
│   ├── data
│   │   ├── images
│   │   │   ├── fwss_font.bmp
│   │   │   ├── fwt_font.bmp
│   │   │   ├── large_font.bmp
│   │   │   └── title.bmp
│   │   ├── manual
│   │   │   ├── attack.png
│   │   │   ├── basic_core.png
│   │   │   ├── design_panel.png
│   │   │   ├── editor_panel.png
│   │   │   ├── harvesting.png
│   │   │   ├── just_core.png
│   │   │   ├── large_process.png
│   │   │   ├── move.png
│   │   │   ├── multi_process.png
│   │   │   ├── process_header.png
│   │   │   ├── start_menu.png
│   │   │   └── template_panel.png
│   │   └── sound
│   │       ├── alloc.wav
│   │       ├── bang.wav
│   │       ├── bang2.wav
│   │       ├── blip.wav
│   │       ├── blip2.wav
│   │       ├── blip3.wav
│   │       ├── blip4.wav
│   │       ├── bubble.wav
│   │       ├── chirp.wav
│   │       ├── int_break.wav
│   │       ├── int_up.wav
│   │       ├── kill.wav
│   │       ├── music
│   │       │   ├── click.wav
│   │       │   ├── drum1.wav
│   │       │   ├── drum2.wav
│   │       │   ├── drum3.wav
│   │       │   └── thump.wav
│   │       ├── new.wav
│   │       ├── over.wav
│   │       ├── restore.wav
│   │       ├── sine.wav
│   │       ├── slice.wav
│   │       ├── spike.wav
│   │       ├── stream1.wav
│   │       ├── stream2.wav
│   │       ├── ultra.wav
│   │       ├── x_chime.wav
│   │       └── zap.wav
│   ├── init.txt
│   ├── libcirc.do
│   ├── licence.txt
│   ├── proc
│   │   ├── cm_attack.c
│   │   ├── cm_base.c
│   │   ├── cm_command.c
│   │   ├── cm_destroy.c
│   │   ├── cm_harvest.c
│   │   ├── cm_mbuild.c
│   │   └── cm_tri_base.c
│   ├── readme.txt
│   └── story
│       ├── blue
│       │   ├── blue1
│       │   │   ├── base.c
│       │   │   ├── rbase.c
│       │   │   ├── wander1.c
│       │   │   └── wander2.c
│       │   ├── blue2
│       │   │   ├── b2_harvest.c
│       │   │   ├── b2_rbase.c
│       │   │   ├── b2_wander1.c
│       │   │   └── b2_wander2.c
│       │   └── blue3
│       │       ├── b3_harvest.c
│       │       ├── b3_rbase.c
│       │       ├── b3_wander1.c
│       │       └── b3_wander2.c
│       ├── green
│       │   ├── green1
│       │   │   ├── g1_base.c
│       │   │   ├── g1_builder.c
│       │   │   └── g1_firebase.c
│       │   ├── green2
│       │   │   ├── g4_base.c
│       │   │   ├── g4_builder.c
│       │   │   ├── g4_builder2.c
│       │   │   ├── g4_firebase.c
│       │   │   ├── g4_outpost.c
│       │   │   └── g4_spikebase.c
│       │   └── green3
│       │       ├── g5_base.c
│       │       ├── g5_builder.c
│       │       ├── g5_builder2.c
│       │       ├── g5_firebase.c
│       │       ├── g5_outpost.c
│       │       └── g5_spikebase.c
│       ├── orange
│       │   ├── orange1
│       │   │   ├── o1_base.c
│       │   │   ├── o1_escort.c
│       │   │   ├── o1_guard1.c
│       │   │   ├── o1_guard2.c
│       │   │   ├── o1_guard3.c
│       │   │   ├── o1_guard4.c
│       │   │   ├── o1_harvest.c
│       │   │   ├── o1_harvest2.c
│       │   │   └── o1_harvest3.c
│       │   ├── orange2
│       │   │   ├── o2_base.c
│       │   │   ├── o2_defend.c
│       │   │   ├── o2_escort.c
│       │   │   ├── o2_guard1.c
│       │   │   ├── o2_guard2.c
│       │   │   ├── o2_guard3.c
│       │   │   ├── o2_guard4.c
│       │   │   ├── o2_harvest.c
│       │   │   ├── o2_harvest2.c
│       │   │   └── o2_harvest3.c
│       │   └── orange3
│       │       ├── o3_base.c
│       │       ├── o3_defend.c
│       │       ├── o3_escort.c
│       │       ├── o3_guard1.c
│       │       ├── o3_guard2.c
│       │       ├── o3_guard3.c
│       │       ├── o3_guard4.c
│       │       ├── o3_harvest.c
│       │       ├── o3_harvest2.c
│       │       └── o3_harvest3.c
│       ├── purple
│       │   ├── purple1
│       │   │   ├── p1_base.c
│       │   │   ├── p1_defence.c
│       │   │   ├── p1_escort.c
│       │   │   ├── p1_harvest.c
│       │   │   ├── p1_leader1.c
│       │   │   ├── p1_leader2.c
│       │   │   ├── p1_m_builder.c
│       │   │   ├── p1_minbase.c
│       │   │   └── p1_picket.c
│       │   ├── purple2
│       │   │   ├── p2_base.c
│       │   │   ├── p2_defence.c
│       │   │   ├── p2_escort.c
│       │   │   ├── p2_harvest.c
│       │   │   ├── p2_leader1.c
│       │   │   ├── p2_leader2.c
│       │   │   ├── p2_m_builder.c
│       │   │   ├── p2_minbase.c
│       │   │   └── p2_picket.c
│       │   └── purple3
│       │       ├── p3_base.c
│       │       ├── p3_defence.c
│       │       ├── p3_escort.c
│       │       ├── p3_harvest.c
│       │       ├── p3_leader1.c
│       │       ├── p3_leader2.c
│       │       ├── p3_m_builder.c
│       │       ├── p3_minbase.c
│       │       ├── p3_picket.c
│       │       └── p3_picket2.c
│       ├── red
│       │   ├── red1
│       │   │   ├── r1_base.c
│       │   │   ├── r1_follower.c
│       │   │   ├── r1_follower2.c
│       │   │   ├── r1_leader1.c
│       │   │   ├── r1_m_builder.c
│       │   │   ├── r1_minbase.c
│       │   │   └── r1_scout.c
│       │   ├── red2
│       │   │   ├── r2_base.c
│       │   │   ├── r2_defence.c
│       │   │   ├── r2_escort.c
│       │   │   ├── r2_harvest.c
│       │   │   ├── r2_leader1.c
│       │   │   ├── r2_leader2.c
│       │   │   ├── r2_m_builder.c
│       │   │   ├── r2_minbase.c
│       │   │   └── r2_picket.c
│       │   └── red3
│       │       ├── r3_base.c
│       │       ├── r3_defence.c
│       │       ├── r3_escort.c
│       │       ├── r3_harvest.c
│       │       ├── r3_leader1.c
│       │       ├── r3_leader2.c
│       │       ├── r3_m_builder.c
│       │       ├── r3_minbase.c
│       │       └── r3_picket.c
│       ├── tutorial
│       │   ├── tute1
│       │   │   ├── circle1.c
│       │   │   └── defend1.c
│       │   └── tute2
│       │       ├── circle2.c
│       │       └── defend2.c
│       └── yellow
│           ├── yellow1
│           │   ├── y1_base.c
│           │   ├── y1_follower.c
│           │   ├── y1_harvest.c
│           │   ├── y1_leader1.c
│           │   ├── y1_leader2.c
│           │   ├── y1_m_builder.c
│           │   ├── y1_minbase.c
│           │   └── y1_scout.c
│           ├── yellow2
│           │   ├── y2_base.c
│           │   ├── y2_follower.c
│           │   ├── y2_harvest.c
│           │   ├── y2_leader1.c
│           │   ├── y2_leader2.c
│           │   ├── y2_m_builder.c
│           │   ├── y2_minbase.c
│           │   └── y2_scout.c
│           └── yellow3
│               ├── y3_base.c
│               ├── y3_follower.c
│               ├── y3_harvest.c
│               ├── y3_leader1.c
│               ├── y3_leader2.c
│               ├── y3_m_builder.c
│               ├── y3_minbase.c
│               └── y3_scout.c
├── LibCirc_v0.99_beta.zip
├── README.md
├── a.out
├── all.do
├── c_compile.c
├── c_compile.h
├── c_fix.c
├── c_fix.h
├── c_generate.c
├── c_generate.h
├── c_header.h
├── c_init.c
├── c_init.h
├── c_keywords.c
├── c_keywords.h
├── c_lexer.c
├── c_lexer.h
├── c_prepr.c
├── c_prepr.h
├── d_code.c
├── d_code.h
├── d_code_header.c
├── d_code_header.h
├── d_design.c
├── d_design.h
├── d_draw.c
├── d_draw.h
├── d_geo.c
├── d_geo.h
├── data -> LibCirc beta/data
├── default.o.do
├── e_clip.c
├── e_clip.h
├── e_complete.c
├── e_complete.h
├── e_editor.c
├── e_editor.h
├── e_files.c
├── e_files.h
├── e_header.h
├── e_help.c
├── e_help.h
├── e_inter.c
├── e_inter.h
├── e_log.c
├── e_log.h
├── e_slider.c
├── e_slider.h
├── e_tools.c
├── e_tools.h
├── f_game.c
├── f_game.h
├── f_load.c
├── f_load.h
├── f_save.c
├── f_save.h
├── f_turn.c
├── f_turn.h
├── g_cloud.c
├── g_cloud.h
├── g_command.c
├── g_command.h
├── g_game.c
├── g_game.do
├── g_game.h
├── g_group.c
├── g_group.h
├── g_header.h
├── g_method.c
├── g_method.h
├── g_method_clob.c
├── g_method_clob.h
├── g_method_core.c
├── g_method_core.h
├── g_method_misc.c
├── g_method_misc.h
├── g_method_pr.c
├── g_method_pr.h
├── g_method_std.c
├── g_method_std.h
├── g_method_sy.c
├── g_method_sy.h
├── g_method_uni.c
├── g_method_uni.h
├── g_misc.c
├── g_misc.h
├── g_motion.c
├── g_motion.h
├── g_packet.c
├── g_packet.h
├── g_proc.c
├── g_proc.h
├── g_proc_new.c
├── g_proc_new.h
├── g_proc_run.c
├── g_proc_run.h
├── g_shapes.c
├── g_shapes.h
├── g_world.c
├── g_world.h
├── g_world_back.c
├── g_world_back.h
├── g_world_map.c
├── g_world_map.h
├── g_world_map_2.c
├── g_world_map_2.h
├── h_interface.c
├── h_interface.h
├── h_mission.c
├── h_mission.h
├── h_story.c
├── h_story.h
├── i_background.c
├── i_background.h
├── i_buttons.c
├── i_buttons.h
├── i_console.c
├── i_console.h
├── i_disp_in.c
├── i_disp_in.h
├── i_display.c
├── i_display.h
├── i_error.c
├── i_error.h
├── i_header.h
├── i_input.c
├── i_input.h
├── i_sysmenu.c
├── i_sysmenu.h
├── i_view.c
├── i_view.h
├── m_config.h
├── m_globvars.h
├── m_input.c
├── m_input.h
├── m_main.c
├── m_maths.c
├── m_maths.h
├── p_draw.c
├── p_draw.h
├── p_init.c
├── p_init.h
├── p_panels.c
├── p_panels.h
├── proc -> LibCirc beta/proc
├── s_menu.c
├── s_menu.h
├── s_mission.c
├── s_mission.h
├── s_turn.c
├── s_turn.h
├── story -> LibCirc beta/story
├── t_draw.c
├── t_draw.h
├── t_files.c
├── t_files.h
├── t_init.c
├── t_template.c
├── t_template.h
├── v_interp.c
├── v_interp.h
├── x_init.c
├── x_init.h
├── x_music.c
├── x_music.h
├── x_sound.c
├── x_sound.h
├── x_synth.c
├── x_synth.h
├── z_poly.c
└── z_poly.h

38 directories, 364 files

Linley Henzell
Member #3,963
October 2003

"No source code to compile" sounds like the file isn't being loaded from disk.

Your directory structure looks correct, assuming that when the game tries to open a file it looks in the directory with the executable or in a subdirectory relative to that directory - so that e.g. fopen("proc\cm_base.c", ...) should open cm_base.c in the proc subdirectory. But it's finding the font files, so it looks like that's working properly.

Does your init.txt file have a line like this?

template 0 proc/cm_base.c

Are you getting any error messages sent to stdout when the game starts up? (I have Code::Blocks set up so that the game opens a stdout console when run, but I guess your system may work differently)

Edit: Now I think about it, the problem may be that the init file isn't being read at all.

If you have a chance, would you be able to try including this line in init.txt:

vol_music 0

then checking whether it turns the music off? If it doesn't, the init file isn't loading.

If that's the problem, I don't know why it would happen. Is it possible that you have some kind of environment variable or something like that which makes Allegro file access functions load correctly from the game directory, but which doesn't affect C stdio functions like fopen?

Go to: