Git Product home page Git Product logo

azimuth's Introduction

Azimuth

Azimuth is a metroidvania game, with vector graphics. You can build it from source here, or download binaries at https://mdsteele.games/azimuth/download

Azimuth is inspired by such games as the Metroid series (particularly Super Metroid and Metroid Fusion), SketchFighter 4000 Alpha, and Star Control II (a.k.a. The Ur-Quan Masters) -- all fine games that are well worth your time.

Build instructions

Prerequisites

Azimuth depends on OpenGL and on SDL2. On Mac, you can install SDL2 either in Framework form or via e.g. Homebrew or MacPorts, and the Makefile should be able to sort it out. On Debian, all it should take is:

$ sudo apt-get install libgl1-mesa-dev libsdl2-dev

Building and running

To build and run a debug build of the game, run:

$ make       # Compiles everything.
$ make test  # Runs unit tests, to make sure things look okay on your system.
$ make run   # Starts the game.

To build and install a packaged app on Mac OS X, run:

$ BUILDTYPE=release make macosx_app
$ mv -i out/release/host/Azimuth.app /Applications/
$ open /Applications/Azimuth.app

To build and install a packaged app on Debian, run:

$ BUILDTYPE=release make linux_deb
$ sudo dpkg -i out/release/host/azimuth_*.deb
$ azimuth

Troubleshooting

SDL_SetVideoMode failed: Couldn't find matching GLX visual

This error seems to occur on some older Linux machines. One thing you can try is to edit src/azimuth/gui/screen.c and comment out the following lines before recompiling:

SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 2);

This will disable antialiasing, so the graphics might not be 100% correct, but the game should still be perfectly playable.

License

This codebase is licensed under the GNU GPL, version 3. This codebase is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Azimuth is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

The complete license can be found in the LICENSE file.

Music

Additionally, the music for Azimuth (found in the data/music directory) may optionally be used under a Creative Commons Attribution 4.0 (CC-BY 4.0) license. When attributing, I'd appreciate it if you would link back to https://mdsteele.games/azimuth/ or to this repository.

azimuth's People

Contributors

dbandstra avatar genpfault avatar lowagner avatar mailaender avatar marius851000 avatar mdsteele avatar popey avatar susnux avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

azimuth's Issues

Musics

Hmm that isn't a real issue, but I don't found any music file under a format I know : only musicXX.txt files in ./data/music, where I read a title, tempo, and raw notes (abcdefg).

Where can I find them ? (I've seen "WAVE file generation" in ./src/muse, so I think I could have find them...)

I actually really enjoyed them (the game, too =), and I wanted to share them to my friend (in accordance with license terms of course).

Another question : the license talks about the program and code, but what about the music ? I actually already covered three of them (attached in pdf), that I didn't published yet (sheet music may don't look very finished, but I mostly didn't want to make mistake with license).
Am I allowed to publish them, for example making records on YouTube or post the sheet music on Musescore ?

I truly congratulate you for this game, that I enjoyed. I know C, I think making a game like that will take me years !

Rayerdyne.

Azimuth-Barrag.pdf
Azimuth-Sarvari.pdf
Azimuth-Title_screen.pdf

An install target for make

Hello. I recently packaged your game for the nix package manager (NixOS/nixpkgs#59071), and I think it'll be interesing to add an install target. The one I made is :

mkdir -p $out/bin
cp out/release/host/bin/azimuth $out/bin/azimuth
cp out/release/host/bin/editor $out/bin/azimuth-editor
cp out/release/host/bin/muse $out/bin/azimuth-muse
cp out/release/host/bin/zfxr $out/bin/azimuth-zfxr
mkdir -p $out/share/doc/azimuth
cp doc/* README.md LICENSE $out/share/doc/azimuth
mkdir -p $out/share/icons/hicolor/128x128/apps $out/share/icons/hicolor/64x64/apps $out/share/icons/hicolor/48x48/apps $out/share/icons/hicolor/32x32/apps
cp data/icons/icon_128x128.png $out/share/icons/hicolor/128x128/apps/azimuth.png
cp data/icons/icon_64x64.png $out/share/icons/hicolor/64x64/apps/azimuth.png
cp data/icons/icon_48x48.png $out/share/icons/hicolor/48x48/apps/azimuth.png
cp data/icons/icon_32x32.png $out/share/icons/hicolor/32x32/apps/azimuth.png
mkdir -p $out/share/applications
cp data/azimuth.desktop $out/share/applications

and

substituteInPlace data/azimuth.desktop \
  --replace Exec=azimuth "Exec=$out/bin/azimuth" \
  --replace "Version=%AZ_VERSION_NUMBER" "Version=${version}"

Information about azimuth?

Apologies for putting this in the Issues log. Not sure how else to get in touch with you.

Matt from metroidvanias.com here. I have no idea how to build your game, but have been dropping by every few months in hopes of there being a playable build of azimuth.

Would you mind getting in touch with me if you're still working on this? Would love to see screens/video if you have them.

compilation error: unused typedef 'az_static_assertion_207'

clang version 3.6.2 (tags/RELEASE_362/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix


Compiling out/debug/obj/azimuth/state/upgrade.o
src/azimuth/state/upgrade.c:207:9: error: unused typedef 'az_static_assertion_207'
      [-Werror,-Wunused-local-typedef]
      { AZ_STATIC_ASSERT(AZ_ROCKETS_PER_HYPER_ROCKET == 3); }
        ^
src/azimuth/util/misc.h:71:15: note: expanded from macro 'AZ_STATIC_ASSERT'
  typedef int AZ_JOIN(az_static_assertion_, __LINE__)[(condition) ? 1 : -1]
              ^
src/azimuth/util/misc.h:76:23: note: expanded from macro 'AZ_JOIN'
#define AZ_JOIN(a, b) AZ_JOIN2_(a, b)
                      ^
src/azimuth/util/misc.h:77:25: note: expanded from macro 'AZ_JOIN2_'
#define AZ_JOIN2_(a, b) a##b
                        ^
<scratch space>:13:1: note: expanded from here
az_static_assertion_207
^
src/azimuth/state/upgrade.c:211:9: error: unused typedef 'az_static_assertion_211'
      [-Werror,-Wunused-local-typedef]
      { AZ_STATIC_ASSERT(AZ_BOMBS_PER_MEGA_BOMB == 3); }
        ^
src/azimuth/util/misc.h:71:15: note: expanded from macro 'AZ_STATIC_ASSERT'
  typedef int AZ_JOIN(az_static_assertion_, __LINE__)[(condition) ? 1 : -1]
              ^
src/azimuth/util/misc.h:76:23: note: expanded from macro 'AZ_JOIN'
#define AZ_JOIN(a, b) AZ_JOIN2_(a, b)
                      ^
src/azimuth/util/misc.h:77:25: note: expanded from macro 'AZ_JOIN2_'
#define AZ_JOIN2_(a, b) a##b
                        ^
<scratch space>:15:1: note: expanded from here
az_static_assertion_211
^
src/azimuth/state/upgrade.c:215:9: error: unused typedef 'az_static_assertion_215'
      [-Werror,-Wunused-local-typedef]
      { AZ_STATIC_ASSERT(AZ_HIGH_EXPLOSIVES_POWER_MULTIPLIER == 1.5); }
        ^
src/azimuth/util/misc.h:71:15: note: expanded from macro 'AZ_STATIC_ASSERT'
  typedef int AZ_JOIN(az_static_assertion_, __LINE__)[(condition) ? 1 : -1]
              ^
src/azimuth/util/misc.h:76:23: note: expanded from macro 'AZ_JOIN'
#define AZ_JOIN(a, b) AZ_JOIN2_(a, b)
                      ^
src/azimuth/util/misc.h:77:25: note: expanded from macro 'AZ_JOIN2_'
#define AZ_JOIN2_(a, b) a##b
                        ^
<scratch space>:17:1: note: expanded from here
az_static_assertion_215
^
src/azimuth/state/upgrade.c:218:9: error: unused typedef 'az_static_assertion_218'
      [-Werror,-Wunused-local-typedef]
      { AZ_STATIC_ASSERT(AZ_ATTUNED_EXPLOSIVES_RADIUS_FACTOR == 1.5); }
        ^
src/azimuth/util/misc.h:71:15: note: expanded from macro 'AZ_STATIC_ASSERT'
  typedef int AZ_JOIN(az_static_assertion_, __LINE__)[(condition) ? 1 : -1]
              ^
src/azimuth/util/misc.h:76:23: note: expanded from macro 'AZ_JOIN'
#define AZ_JOIN(a, b) AZ_JOIN2_(a, b)
                      ^
src/azimuth/util/misc.h:77:25: note: expanded from macro 'AZ_JOIN2_'
#define AZ_JOIN2_(a, b) a##b
                        ^
<scratch space>:19:1: note: expanded from here
az_static_assertion_218
^
src/azimuth/state/upgrade.c:219:9: error: unused typedef 'az_static_assertion_219'
      [-Werror,-Wunused-local-typedef]
      { AZ_STATIC_ASSERT(AZ_ATTUNED_EXPLOSIVES_DAMAGE_FACTOR == 0.25); }
        ^
src/azimuth/util/misc.h:71:15: note: expanded from macro 'AZ_STATIC_ASSERT'
  typedef int AZ_JOIN(az_static_assertion_, __LINE__)[(condition) ? 1 : -1]
              ^
src/azimuth/util/misc.h:76:23: note: expanded from macro 'AZ_JOIN'
#define AZ_JOIN(a, b) AZ_JOIN2_(a, b)
                      ^
src/azimuth/util/misc.h:77:25: note: expanded from macro 'AZ_JOIN2_'
#define AZ_JOIN2_(a, b) a##b
                        ^
<scratch space>:21:1: note: expanded from here
az_static_assertion_219
^
src/azimuth/state/upgrade.c:228:9: error: unused typedef 'az_static_assertion_228'
      [-Werror,-Wunused-local-typedef]
      { AZ_STATIC_ASSERT(AZ_BOMBS_PER_ORION_BOOST == 2); }
        ^
src/azimuth/util/misc.h:71:15: note: expanded from macro 'AZ_STATIC_ASSERT'
  typedef int AZ_JOIN(az_static_assertion_, __LINE__)[(condition) ? 1 : -1]
              ^
src/azimuth/util/misc.h:76:23: note: expanded from macro 'AZ_JOIN'
#define AZ_JOIN(a, b) AZ_JOIN2_(a, b)
                      ^
src/azimuth/util/misc.h:77:25: note: expanded from macro 'AZ_JOIN2_'
#define AZ_JOIN2_(a, b) a##b
                        ^
<scratch space>:23:1: note: expanded from here
az_static_assertion_228
^
src/azimuth/state/upgrade.c:232:9: error: unused typedef 'az_static_assertion_232'
      [-Werror,-Wunused-local-typedef]
      { AZ_STATIC_ASSERT(AZ_ARMOR_DAMAGE_FACTOR == 0.8); }
        ^
src/azimuth/util/misc.h:71:15: note: expanded from macro 'AZ_STATIC_ASSERT'
  typedef int AZ_JOIN(az_static_assertion_, __LINE__)[(condition) ? 1 : -1]
              ^
src/azimuth/util/misc.h:76:23: note: expanded from macro 'AZ_JOIN'
#define AZ_JOIN(a, b) AZ_JOIN2_(a, b)
                      ^
src/azimuth/util/misc.h:77:25: note: expanded from macro 'AZ_JOIN2_'
#define AZ_JOIN2_(a, b) a##b
                        ^
<scratch space>:25:1: note: expanded from here
az_static_assertion_232
^
src/azimuth/state/upgrade.c:233:9: error: unused typedef 'az_static_assertion_233'
      [-Werror,-Wunused-local-typedef]
      { AZ_STATIC_ASSERT(AZ_HARDENED_ARMOR_WALL_DAMAGE_FACTOR == 0.5); }
        ^
src/azimuth/util/misc.h:71:15: note: expanded from macro 'AZ_STATIC_ASSERT'
  typedef int AZ_JOIN(az_static_assertion_, __LINE__)[(condition) ? 1 : -1]
              ^
src/azimuth/util/misc.h:76:23: note: expanded from macro 'AZ_JOIN'
#define AZ_JOIN(a, b) AZ_JOIN2_(a, b)
                      ^
src/azimuth/util/misc.h:77:25: note: expanded from macro 'AZ_JOIN2_'
#define AZ_JOIN2_(a, b) a##b
                        ^
<scratch space>:27:1: note: expanded from here
az_static_assertion_233
^
src/azimuth/state/upgrade.c:292:9: error: unused typedef 'az_static_assertion_292'
      [-Werror,-Wunused-local-typedef]
      { AZ_STATIC_ASSERT(AZ_ROCKETS_PER_AMMO_UPGRADE == 5); }
        ^
src/azimuth/util/misc.h:71:15: note: expanded from macro 'AZ_STATIC_ASSERT'
  typedef int AZ_JOIN(az_static_assertion_, __LINE__)[(condition) ? 1 : -1]
              ^
src/azimuth/util/misc.h:76:23: note: expanded from macro 'AZ_JOIN'
#define AZ_JOIN(a, b) AZ_JOIN2_(a, b)
                      ^
src/azimuth/util/misc.h:77:25: note: expanded from macro 'AZ_JOIN2_'
#define AZ_JOIN2_(a, b) a##b
                        ^
<scratch space>:29:1: note: expanded from here
az_static_assertion_292
^
src/azimuth/state/upgrade.c:326:9: error: unused typedef 'az_static_assertion_326'
      [-Werror,-Wunused-local-typedef]
      { AZ_STATIC_ASSERT(AZ_BOMBS_PER_AMMO_UPGRADE == 3); }
        ^
src/azimuth/util/misc.h:71:15: note: expanded from macro 'AZ_STATIC_ASSERT'
  typedef int AZ_JOIN(az_static_assertion_, __LINE__)[(condition) ? 1 : -1]
              ^
src/azimuth/util/misc.h:76:23: note: expanded from macro 'AZ_JOIN'
#define AZ_JOIN(a, b) AZ_JOIN2_(a, b)
                      ^
src/azimuth/util/misc.h:77:25: note: expanded from macro 'AZ_JOIN2_'
#define AZ_JOIN2_(a, b) a##b
                        ^
<scratch space>:31:1: note: expanded from here
az_static_assertion_326
^
src/azimuth/state/upgrade.c:352:9: error: unused typedef 'az_static_assertion_352'
      [-Werror,-Wunused-local-typedef]
      { AZ_STATIC_ASSERT(AZ_ENERGY_PER_CAPACITOR == 25); }
        ^
src/azimuth/util/misc.h:71:15: note: expanded from macro 'AZ_STATIC_ASSERT'
  typedef int AZ_JOIN(az_static_assertion_, __LINE__)[(condition) ? 1 : -1]
              ^
src/azimuth/util/misc.h:76:23: note: expanded from macro 'AZ_JOIN'
#define AZ_JOIN(a, b) AZ_JOIN2_(a, b)
                      ^
src/azimuth/util/misc.h:77:25: note: expanded from macro 'AZ_JOIN2_'
#define AZ_JOIN2_(a, b) a##b
                        ^
<scratch space>:33:1: note: expanded from here
az_static_assertion_352
^
src/azimuth/state/upgrade.c:366:9: error: unused typedef 'az_static_assertion_366'
      [-Werror,-Wunused-local-typedef]
      { AZ_STATIC_ASSERT(AZ_SHIELDS_PER_BATTERY == 25); }
        ^
src/azimuth/util/misc.h:71:15: note: expanded from macro 'AZ_STATIC_ASSERT'
  typedef int AZ_JOIN(az_static_assertion_, __LINE__)[(condition) ? 1 : -1]
              ^
src/azimuth/util/misc.h:76:23: note: expanded from macro 'AZ_JOIN'
#define AZ_JOIN(a, b) AZ_JOIN2_(a, b)
                      ^
src/azimuth/util/misc.h:77:25: note: expanded from macro 'AZ_JOIN2_'
#define AZ_JOIN2_(a, b) a##b
                        ^
<scratch space>:35:1: note: expanded from here
az_static_assertion_366

I fixed it with:

+++ b/Makefile
@@ -33,7 +33,7 @@ ALL_TARGETS = $(BINDIR)/azimuth $(BINDIR)/editor $(BINDIR)/unit_tests \

 CFLAGS = -I$(SRCDIR) -Wall -Werror -Wempty-body -Winline \
          -Wmissing-field-initializers -Wold-style-definition -Wshadow \
-         -Wsign-compare -Wstrict-prototypes -Wundef
+         -Wsign-compare -Wstrict-prototypes -Wundef -Wno-unused-local-typedef

 ifeq "$(BUILDTYPE)" "debug"
   CFLAGS += -O1 -g

glFinish causes CPU saturation

Azimuth has 100% CPU usage on my machine. (Annoying because my PC has always had a problem where it gets super noisy and then dies under prolonged excessive load (underpowered PSU maybe, I don't know). Azimuth manages to kill it in about 10 minutes :) ). The problem goes away if I comment out the glFinish call.

I don't believe glFlush and glFinish are needed in modern times, when you have vsync and SDL_GL_SwapBuffers. I think glFinish blocks until all draw commands are completed, which is not something you need, and it seems to do this in a very wasteful way.

Couple random links:

My machine: Ubuntu 18 and GeForce GTX 750 Ti. No idea if my drivers are up to date.

Stuck...

Hello,

I loved the game Azimuth. My son plays it with my little support.
However, it became really frustrating when we cannot progress forward.

Could you give some tip to move forward?

We beated Oth space gun boss. Collected:

  • dynamic armor,
    and then:
  • infrascanner
  • retro thrusters
  • and tractor beam.

One way to go is to overcome this difficult location pointed by the arrow where waves of force field keep pushing me away though tried some times. Is it the place that I should now go?

Thanks a lot for your help.
Zrzut ekranu z 2024-06-09 08-54-47

I'm stuck... any walkthroughs available?

The hints system has been invaluable so far but I'm in the part where I have all weapons but one (I can see where it is) and all other power-ups but one, in the red part of the map. No idea how to break through the white girders. I'm hoping to get to finish the game before reviewing it for a site I write reviews for.

Compilation fails on Debian Buster

Trying to build the current master (89f9b48) on Debian Buster, amd64.

GCC version info:

$ gcc --version
gcc (Debian 8.2.0-16) 8.2.0

Error:

src/editor/audit.c: In function ‘az_audit_scenario’:
src/editor/audit.c:150:10: error: ‘console_kind’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
       if (console_kind == AZ_CONS_SAVE) {
          ^

Setting console_kind to AZ_NODE_NOTHING on audit.c:146 fixes it for me.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.