├── NullSoundSystem
├── AudioSink.h
├── SoundListener.cpp
├── SoundClip.cpp
├── SoundUtils.h
├── SoundUtils.cpp
├── SoundListener.h
├── SoundClip.h
├── SoundEmitter.cpp
└── SoundEmitter.h
├── DungeonsOfNoudarNDK
├── app
│ ├── .gitignore
│ ├── src
│ │ └── main
│ │ │ ├── res
│ │ │ ├── values
│ │ │ │ ├── strings.xml
│ │ │ │ ├── colors.xml
│ │ │ │ └── styles.xml
│ │ │ ├── drawable
│ │ │ │ ├── aim.png
│ │ │ │ ├── back.png
│ │ │ │ ├── down.png
│ │ │ │ ├── fill.png
│ │ │ │ ├── fire.png
│ │ │ │ ├── icon.png
│ │ │ │ ├── left.png
│ │ │ │ ├── pick.png
│ │ │ │ ├── up.png
│ │ │ │ ├── right.png
│ │ │ │ ├── screen.png
│ │ │ │ ├── bgrepeat.jpg
│ │ │ │ ├── action_hit.png
│ │ │ │ ├── action_pick.png
│ │ │ │ ├── border_left.png
│ │ │ │ ├── border_top.png
│ │ │ │ ├── strafe_left.png
│ │ │ │ ├── action_button.png
│ │ │ │ ├── action_enter.png
│ │ │ │ ├── border_bottom.png
│ │ │ │ ├── border_right.png
│ │ │ │ ├── strafe_right.png
│ │ │ │ ├── action_next_item.png
│ │ │ │ ├── base_key_dark_grey.png
│ │ │ │ ├── base_key_light_grey.png
│ │ │ │ ├── border_left_repeat.xml
│ │ │ │ ├── border_top_repeat.xml
│ │ │ │ ├── border_bottom_repeat.xml
│ │ │ │ └── border_right_repeat.xml
│ │ │ ├── raw
│ │ │ │ ├── i114t1o8f.wav
│ │ │ │ ├── t200i98a.wav
│ │ │ │ ├── t200i9o1fa.wav
│ │ │ │ ├── t200i52o4defg.wav
│ │ │ │ ├── t200i53o3fo1f.wav
│ │ │ │ ├── t200i101o3afo1a.wav
│ │ │ │ └── t200i101o8ao4ao2ao1a.wav
│ │ │ └── xml
│ │ │ │ └── backup_descriptor.xml
│ │ │ ├── assets
│ │ │ └── data.pfs
│ │ │ ├── java
│ │ │ └── pt
│ │ │ │ └── b13h
│ │ │ │ └── noudar
│ │ │ │ ├── NoudarJNI.kt
│ │ │ │ ├── GamePresentation.kt
│ │ │ │ └── NoudarApplication.kt
│ │ │ ├── AndroidManifest.xml
│ │ │ └── cpp
│ │ │ └── CMakeLists.txt
│ ├── proguard-rules.pro
│ └── build.gradle.kts
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── .gitignore
├── build.gradle.kts
├── settings.gradle.kts
├── gradle.properties
└── gradlew.bat
├── screenshot1.png
├── screenshot2.png
├── DungeonsOfNoudar486
├── res
│ ├── arch.png
│ ├── bars.png
│ ├── bricks.png
│ ├── clouds.png
│ ├── fence.png
│ ├── font.png
│ ├── grass.png
│ ├── grass2.png
│ ├── intro.png
│ ├── lava0.png
│ ├── lava1.png
│ ├── logo.png
│ ├── rope.png
│ ├── seal.png
│ ├── shield.png
│ ├── slot.png
│ ├── splat0.png
│ ├── splat1.png
│ ├── splat2.png
│ ├── tile.png
│ ├── token.png
│ ├── bricks2.png
│ ├── ceiling.png
│ ├── crossbow.png
│ ├── falcata.png
│ ├── MonkAttack0.png
│ ├── ceilingbars.png
│ ├── ceilingdoor.png
│ ├── ceilingend.png
│ ├── cobblestone.png
│ ├── stonefloor.png
│ ├── FallenAttack0.png
│ ├── bricks_blood.png
│ ├── ceilingbegin.png
│ ├── in_ictu_oculi.png
│ ├── stoneceiling.png
│ ├── CocoonStanding0.png
│ ├── WarthogAttack0.png
│ ├── WeakDemonAttack0.png
│ ├── bricks_candles.png
│ ├── EvilSpiritAttack0.png
│ ├── StrongDemonAttack0.png
│ ├── finis_gloriae_mundi.png
│ ├── title.txt
│ ├── chapter0.txt
│ ├── chapter4.txt
│ ├── chapter6.txt
│ ├── chapter1.txt
│ ├── chapter2.txt
│ ├── chapter3.txt
│ ├── chapter5.txt
│ ├── gameover.txt
│ ├── tiles1.lst
│ ├── tiles5.lst
│ ├── tiles6.lst
│ ├── tiles0.lst
│ ├── tiles2.lst
│ ├── tiles3.lst
│ ├── tiles4.lst
│ ├── chapter7.txt
│ ├── map0.txt
│ ├── map1.txt
│ ├── map2.txt
│ ├── map3.txt
│ ├── map4.txt
│ ├── map5.txt
│ ├── map6.txt
│ ├── map7.txt
│ ├── tiles4.prp
│ ├── tiles2.prp
│ ├── tiles0.prp
│ ├── tiles3.prp
│ ├── tiles6.prp
│ ├── tiles5.prp
│ └── tiles1.prp
├── OPL2LPT
│ ├── timer.h
│ ├── controller.h
│ ├── MusicSDL.cpp
│ ├── timer.cpp
│ └── OPL2.h
├── include
│ ├── RaycastCommon.h
│ ├── RasterizerCommon.h
│ ├── CPackedFileReader.h
│ ├── CTile3DProperties.h
│ ├── VisibilityStrategy.h
│ └── MapWithCharKey.h
├── src
│ ├── RasterizerCommon.cpp
│ ├── NativeBitmap.cpp
│ ├── CPackedFileReader.cpp
│ ├── CTile3DProperties.cpp
│ └── VisibilityStrategy.cpp
├── .gitignore
├── Makefile
├── packer.cpp
├── Makefile.SDL
├── cmake_find
│ ├── FindSDL2_ttf.cmake
│ ├── FindSDL2_mixer.cmake
│ └── FindSDL2_image.cmake
├── CMakeLists.txt
└── main.cpp
├── noudar-rendering
├── LoadPNG.h
├── VBORegister.h
├── Logger.h
├── CLerp.h
├── NoudarGLES2Bridge.h
├── SplatAnimation.h
├── NativeBitmap.h
├── LightningStrategy.h
├── ETextures.h
├── CLerp.cpp
├── CTile3DProperties.h
├── SplatAnimation.cpp
├── Logger.cpp
├── VBORenderingJob.h
├── Camera.h
├── VisibilityStrategy.h
├── NativeBitmap.cpp
├── VBORenderingJob.cpp
├── NoudarDungeonSnapshot.cpp
├── LoadPNG.cpp
├── GameNativeAPI.h
├── RenderingJobSnapshotAdapter.h
├── NoudarDungeonSnapshot.h
├── CTile3DProperties.cpp
├── LightningStrategy.cpp
├── DungeonGLES2Renderer.h
└── Camera.cpp
├── .gitmodules
├── License.md
├── .gitignore
└── README.md
/NullSoundSystem/AudioSink.h:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/screenshot1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/screenshot1.png
--------------------------------------------------------------------------------
/screenshot2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/screenshot2.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/arch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/arch.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/bars.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/bars.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/bricks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/bricks.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/clouds.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/clouds.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/fence.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/fence.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/font.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/font.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/grass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/grass.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/grass2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/grass2.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/intro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/intro.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/lava0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/lava0.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/lava1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/lava1.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/logo.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/rope.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/rope.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/seal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/seal.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/shield.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/shield.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/slot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/slot.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/splat0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/splat0.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/splat1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/splat1.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/splat2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/splat2.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/tile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/tile.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/token.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/token.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/bricks2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/bricks2.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/ceiling.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/ceiling.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/crossbow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/crossbow.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/falcata.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/falcata.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Dungeons of Noudar
3 |
4 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/MonkAttack0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/MonkAttack0.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/ceilingbars.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/ceilingbars.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/ceilingdoor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/ceilingdoor.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/ceilingend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/ceilingend.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/cobblestone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/cobblestone.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/stonefloor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/stonefloor.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/FallenAttack0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/FallenAttack0.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/bricks_blood.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/bricks_blood.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/ceilingbegin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/ceilingbegin.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/in_ictu_oculi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/in_ictu_oculi.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/stoneceiling.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/stoneceiling.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/CocoonStanding0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/CocoonStanding0.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/WarthogAttack0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/WarthogAttack0.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/WeakDemonAttack0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/WeakDemonAttack0.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/bricks_candles.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/bricks_candles.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/EvilSpiritAttack0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/EvilSpiritAttack0.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/StrongDemonAttack0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/StrongDemonAttack0.png
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/finis_gloriae_mundi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudar486/res/finis_gloriae_mundi.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/assets/data.pfs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/assets/data.pfs
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/aim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/aim.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/back.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/down.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/fill.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/fill.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/fire.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/fire.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/icon.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/left.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/pick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/pick.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/up.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/raw/i114t1o8f.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/raw/i114t1o8f.wav
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/raw/t200i98a.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/raw/t200i98a.wav
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/right.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/screen.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/raw/t200i9o1fa.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/raw/t200i9o1fa.wav
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/bgrepeat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/bgrepeat.jpg
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/raw/t200i52o4defg.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/raw/t200i52o4defg.wav
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/raw/t200i53o3fo1f.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/raw/t200i53o3fo1f.wav
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/action_hit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/action_hit.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/action_pick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/action_pick.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/border_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/border_left.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/border_top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/border_top.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/strafe_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/strafe_left.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/raw/t200i101o3afo1a.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/raw/t200i101o3afo1a.wav
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/action_button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/action_button.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/action_enter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/action_enter.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/border_bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/border_bottom.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/border_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/border_right.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/strafe_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/strafe_right.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/action_next_item.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/action_next_item.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/raw/t200i101o8ao4ao2ao1a.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/raw/t200i101o8ao4ao2ao1a.wav
--------------------------------------------------------------------------------
/NullSoundSystem/SoundListener.cpp:
--------------------------------------------------------------------------------
1 |
2 | #include "glm/glm.hpp"
3 |
4 | #include "SoundListener.h"
5 |
6 | namespace odb {
7 | SoundListener::SoundListener() {
8 |
9 |
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/base_key_dark_grey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/base_key_dark_grey.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/base_key_light_grey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/TheFakeMontyOnTheRun/dungeons-of-noudar/HEAD/DungeonsOfNoudarNDK/app/src/main/res/drawable/base_key_light_grey.png
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/xml/backup_descriptor.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/border_left_repeat.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/border_top_repeat.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/border_bottom_repeat.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/drawable/border_right_repeat.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/NullSoundSystem/SoundClip.cpp:
--------------------------------------------------------------------------------
1 |
2 |
3 | #include "SoundClip.h"
4 |
5 | namespace odb {
6 | SoundClip::SoundClip(unsigned char *buffer, int size, int offset, int bits, int channels,
7 | int frequency) {
8 |
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/OPL2LPT/timer.h:
--------------------------------------------------------------------------------
1 | #ifndef TIMER_H_
2 | #define TIMER_H_
3 |
4 | void timer_setup(unsigned short frequency);
5 | void timer_shutdown();
6 | unsigned long timer_get();
7 | void timer_reset(unsigned short frequency);
8 |
9 | void hlt(void);
10 | #endif
11 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/OPL2LPT/controller.h:
--------------------------------------------------------------------------------
1 | #ifndef DEMOTUNE_H_
2 | #define DEMOTUNE_H_
3 | extern void music_set(const char* melody1, const char* melody2, const char* melody3);
4 | extern void music_setup();
5 | extern void music_loop();
6 | extern void music_shutdown();
7 | #endif
8 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #008577
4 | #00574B
5 | #D81B60
6 |
7 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/caches
5 | /.idea/libraries
6 | /.idea/modules.xml
7 | /.idea/workspace.xml
8 | /.idea/navEditor.xml
9 | /.idea/assetWizardSettings.xml
10 | .DS_Store
11 | /build
12 | /captures
13 | .externalNativeBuild
14 | .cxx
15 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/build.gradle.kts:
--------------------------------------------------------------------------------
1 | buildscript {
2 | }
3 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
4 | plugins {
5 | id("com.android.application") version "8.10.1" apply false
6 | id("org.jetbrains.kotlin.android") version "1.9.0" apply false
7 | }
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sun Jun 01 15:45:03 WEST 2025
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
5 | zipStoreBase=GRADLE_USER_HOME
6 | zipStorePath=wrapper/dists
7 |
--------------------------------------------------------------------------------
/NullSoundSystem/SoundUtils.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 10/10/16.
3 | //
4 |
5 | #ifndef TIC_TAC_TOE_GLES_SOUNDUTILS_H
6 | #define TIC_TAC_TOE_GLES_SOUNDUTILS_H
7 | namespace odb {
8 | std::shared_ptr makeSoundClipFrom(FILE *fileHandle);
9 | }
10 | #endif //TIC_TAC_TOE_GLES_SOUNDUTILS_H
11 |
--------------------------------------------------------------------------------
/noudar-rendering/LoadPNG.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 06/10/16.
3 | //
4 |
5 | #ifndef NOUDAR_CORE_LOADPNG_H
6 | #define NOUDAR_CORE_LOADPNG_H
7 |
8 | std::shared_ptr
9 | loadPNG(const std::string filename, std::shared_ptr fileLoader);
10 |
11 | #endif //NOUDAR_CORE_LOADPNG_H
12 |
--------------------------------------------------------------------------------
/noudar-rendering/VBORegister.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 14/01/17.
3 | //
4 |
5 | #ifndef DUNGEONSOFNOUDAR_NDK_VBOREGISTER_H
6 | #define DUNGEONSOFNOUDAR_NDK_VBOREGISTER_H
7 |
8 | using VBORegister = std::tuple;
9 |
10 | using VBORegisterId = std::string;
11 |
12 | #endif //DUNGEONSOFNOUDAR_NDK_VBOREGISTER_H
13 |
--------------------------------------------------------------------------------
/NullSoundSystem/SoundUtils.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 10/10/16.
3 | //
4 | #include
5 |
6 | #include "SoundClip.h"
7 | #include "SoundUtils.h"
8 |
9 | namespace odb {
10 | std::shared_ptr makeSoundClipFrom(FILE *source) {
11 | return std::make_shared(nullptr, 0, 0, 0, 0, 0);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/NullSoundSystem/SoundListener.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 10/10/16.
3 | //
4 |
5 | #ifndef TIC_TAC_TOE_GLES_SOUNDLISTENER_H
6 | #define TIC_TAC_TOE_GLES_SOUNDLISTENER_H
7 |
8 | namespace odb {
9 | class SoundListener {
10 | public:
11 | glm::vec3 mPosition{0, 0, 0};
12 |
13 | SoundListener();
14 | };
15 | }
16 |
17 | #endif //TIC_TAC_TOE_GLES_SOUNDLISTENER_H
18 |
--------------------------------------------------------------------------------
/noudar-rendering/Logger.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 26/09/16.
3 | //
4 |
5 | #ifndef DUNGEONSOFNOUDAR_NDK_LOGGER_H
6 | #define DUNGEONSOFNOUDAR_NDK_LOGGER_H
7 |
8 | namespace odb {
9 | class Logger {
10 | public:
11 | static void log(const char *format, ...);
12 |
13 | static void log(std::string format, ...);
14 | };
15 | }
16 |
17 | #endif //DUNGEONSOFNOUDAR_NDK_LOGGER_H
18 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/title.txt:
--------------------------------------------------------------------------------
1 |
2 | (c) 2014-2018
3 |
4 | A game by Daniel Monteiro.
5 | Art by Stone Soup project.
6 |
7 | Controls:
8 | - arrows to move and turn.
9 | - z and x to strafe left and right.
10 | - s (or 1 - 3) to cycle the inventory.
11 | - a to pick items.
12 | - space to use the current item.
13 | - esc to quit (but why?!).
14 |
15 | Many thanks to the folks at
16 | Serdaco, Retromania.pt and DOSHaven.eu!
17 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | repositories {
3 | google()
4 | mavenCentral()
5 | gradlePluginPortal()
6 | }
7 | }
8 | dependencyResolutionManagement {
9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
10 | repositories {
11 | google()
12 | mavenCentral()
13 | }
14 | }
15 |
16 | rootProject.name = "Dungeons of Noudar"
17 | include(":app")
18 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/java/pt/b13h/noudar/NoudarJNI.kt:
--------------------------------------------------------------------------------
1 | package pt.b13h.noudar
2 |
3 | import android.content.res.AssetManager
4 |
5 | object NoudarJNI {
6 | init {
7 | System.loadLibrary("native-lib")
8 | }
9 |
10 | external fun initAssets(assetManager: AssetManager?)
11 | external fun getPixelsFromNative(javaSide: ByteArray?)
12 | external fun sendCommand(cmd: Char)
13 | external fun getSoundToPlay(): Int
14 | }
15 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/chapter0.txt:
--------------------------------------------------------------------------------
1 | - The Citadel -
2 | You, a former priest and crusader, were
3 | summoned to investigate and ultimately
4 | perform the ancient pagan rituals
5 | required to purge the sacred citadel
6 | from once again falling into demoniac
7 | hands.
8 |
9 | Like the ones that came before you,
10 | generation after generation, you will
11 | have to assess the situation and
12 | preserve your own faith.
13 |
14 | This holy land is at your hands now.
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/chapter4.txt:
--------------------------------------------------------------------------------
1 | - Dungeon of despair -
2 | The poisonous seeds can only grow if
3 | fed with the most slovenly of the
4 | living souls.
5 |
6 | Even the most resilient flame require
7 | fanning to thrust new life into these
8 | cold walls. The cry from the damned
9 | drips from between the moldy bricks.
10 |
11 | Whispers and howls defy your bravery,
12 | but also pull you further into it's
13 | nurturing womb.
14 | May fire consume this scourge.
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/chapter6.txt:
--------------------------------------------------------------------------------
1 | - Under the sheltering mercy -
2 | May the coat of pride clouding your
3 | horizons have faded with your scars.
4 |
5 | Only by standing in the shoes of any
6 | giving soul you can experience the joy
7 | of this uplifting gesture.
8 |
9 | In this fiery will lies the utmost
10 | chance to grant the eternal penitent
11 | another chance for redemption. At least
12 | until it's next trial.
13 |
14 | Even your existance must have a reason.
--------------------------------------------------------------------------------
/NullSoundSystem/SoundClip.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 10/10/16.
3 | //
4 | #ifndef TIC_TAC_TOE_GLES_SOUNDCLIP_H
5 | #define TIC_TAC_TOE_GLES_SOUNDCLIP_H
6 |
7 | namespace odb {
8 | class SoundClip {
9 | public:
10 | unsigned int mBufferHandle;
11 |
12 | SoundClip(unsigned char *bufferData, int size, int offset, int bits, int channels,
13 | int frequency);
14 | };
15 | }
16 |
17 | #endif //TIC_TAC_TOE_GLES_SOUNDCLIP_H
18 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/chapter1.txt:
--------------------------------------------------------------------------------
1 | - Monastery -
2 | The sudden realization that you might
3 | be late brings tears into your eyes and
4 | fear into your heart.
5 |
6 | In other times, your faith would be on
7 | trial. What's left of it, after so many
8 | years doesn't feel threatened, but
9 | rather vindicated.
10 |
11 | You expected the priests, but not a
12 | soldier to be present. Something more
13 | lies beath this. You have to seek the
14 | fate of this congregation's leadership.
--------------------------------------------------------------------------------
/NullSoundSystem/SoundEmitter.cpp:
--------------------------------------------------------------------------------
1 |
2 | #include "glm/glm.hpp"
3 | #include
4 |
5 |
6 | #include "SoundClip.h"
7 | #include "SoundListener.h"
8 | #include "SoundEmitter.h"
9 |
10 | namespace odb {
11 | void playSource(void *arg) {
12 |
13 | }
14 |
15 |
16 | SoundEmitter::SoundEmitter(std::shared_ptr aSample) : mSample(aSample) {
17 |
18 | }
19 |
20 | void SoundEmitter::play(std::shared_ptr listener) {
21 |
22 |
23 | }
24 | }
25 |
26 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/chapter2.txt:
--------------------------------------------------------------------------------
1 | - Prison -
2 | The situation is much worse then your
3 | biggest fears and the more you look,
4 | the less you expect to find a solution.
5 |
6 | There is, it seems, a source to all
7 | this tainted web of befallen counter
8 | measures. It must be somewhere in here.
9 |
10 | In previous times, a guardian would
11 | personally hand over the token of it's
12 | faith and finish it's pupil training,
13 | but your journey here and your pagan
14 | roots are your only tool now.
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/chapter3.txt:
--------------------------------------------------------------------------------
1 | - Graveyard -
2 | As you gazed into the eternal lava, new
3 | perspectives hit fathoms deep into the
4 | core of your presumedly failed creed.
5 |
6 | If that crossbow, such icon of hope,
7 | stood by the well unscathed, so will
8 | the pure shimmering strength you have
9 | in store for such dark forces.
10 |
11 | From afar, you could see the temple of
12 | such perversions - so close you could
13 | almost hear it's whisper. There must be
14 | a new route for your new crusade.
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/chapter5.txt:
--------------------------------------------------------------------------------
1 | - Sanctuary vaults -
2 | The woeful visage may tear the enamel
3 | of your essence, but you survived this
4 | clash. May it be the nadir on this.
5 |
6 | As strong as the crossbow is, time is
7 | an important ally now. The thickest of
8 | the skins will eventually stretch if
9 | to become more sensitive to the sun.
10 |
11 | The letter that summoned you gave
12 | hints of a protective implement.
13 | Something that sounded like a metaphor
14 | The path of the righteous takes a turn
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/java/pt/b13h/noudar/GamePresentation.kt:
--------------------------------------------------------------------------------
1 | package pt.b13h.noudar
2 |
3 | import android.app.Presentation
4 | import android.content.Context
5 | import android.os.Bundle
6 | import android.view.Display
7 | import android.widget.ImageView
8 |
9 | class GamePresentation(context: Context?, display: Display?, private val canvas: ImageView) :
10 | Presentation(context, display) {
11 | override fun onCreate(savedInstanceState: Bundle) {
12 | super.onCreate(savedInstanceState)
13 | setContentView(canvas)
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/gameover.txt:
--------------------------------------------------------------------------------
1 | - Epilogue -
2 | A meandering soul
3 | found way into the
4 | gates of
5 | absolution way too
6 | early into it's
7 | mission.
8 |
9 | Do not feel
10 | discouraged by
11 | whatever setback
12 | in your journey.
13 |
14 | Into the dark
15 | reigns of DOS for
16 | now.
17 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/tiles1.lst:
--------------------------------------------------------------------------------
1 | grass.png
2 | grass2.png
3 | stonefloor.png
4 | bricks.png
5 | arch.png
6 | bars.png
7 | bricks2.png
8 | bricks_candles.png
9 | StrongDemonAttack0.png
10 | WeakDemonAttack0.png
11 | WarthogAttack0.png
12 | EvilSpiritAttack0.png
13 | FallenAttack0.png
14 | MonkAttack0.png
15 | CocoonStanding0.png
16 | ceiling.png
17 | ceilingdoor.png
18 | ceilingbegin.png
19 | ceilingend.png
20 | splat0.png
21 | splat1.png
22 | splat2.png
23 | ceilingbars.png
24 | clouds.png
25 | crossbow.png
26 | falcata.png
27 | shield.png
28 | rope.png
29 | slot.png
30 | seal.png
31 | cobblestone.png
32 | fence.png
33 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/tiles5.lst:
--------------------------------------------------------------------------------
1 | grass.png
2 | lava0.png
3 | stonefloor.png
4 | bricks.png
5 | arch.png
6 | bars.png
7 | bricks_blood.png
8 | bricks_candles.png
9 | StrongDemonAttack0.png
10 | WeakDemonAttack0.png
11 | WarthogAttack0.png
12 | EvilSpiritAttack0.png
13 | FallenAttack0.png
14 | MonkAttack0.png
15 | CocoonStanding0.png
16 | ceiling.png
17 | ceilingdoor.png
18 | ceilingbegin.png
19 | ceilingend.png
20 | splat0.png
21 | splat1.png
22 | splat2.png
23 | ceilingbars.png
24 | clouds.png
25 | crossbow.png
26 | falcata.png
27 | shield.png
28 | rope.png
29 | slot.png
30 | seal.png
31 | cobblestone.png
32 | fence.png
33 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/tiles6.lst:
--------------------------------------------------------------------------------
1 | grass.png
2 | lava0.png
3 | stonefloor.png
4 | bricks.png
5 | arch.png
6 | bars.png
7 | bricks_blood.png
8 | bricks_candles.png
9 | StrongDemonAttack0.png
10 | WeakDemonAttack0.png
11 | WarthogAttack0.png
12 | EvilSpiritAttack0.png
13 | FallenAttack0.png
14 | MonkAttack0.png
15 | CocoonStanding0.png
16 | ceiling.png
17 | ceilingdoor.png
18 | ceilingbegin.png
19 | ceilingend.png
20 | splat0.png
21 | splat1.png
22 | splat2.png
23 | ceilingbars.png
24 | clouds.png
25 | crossbow.png
26 | falcata.png
27 | shield.png
28 | rope.png
29 | slot.png
30 | seal.png
31 | cobblestone.png
32 | fence.png
33 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/tiles0.lst:
--------------------------------------------------------------------------------
1 | grass.png
2 | grass2.png
3 | stonefloor.png
4 | bricks.png
5 | arch.png
6 | bars.png
7 | bricks_blood.png
8 | bricks_candles.png
9 | StrongDemonAttack0.png
10 | WeakDemonAttack0.png
11 | WarthogAttack0.png
12 | EvilSpiritAttack0.png
13 | FallenAttack0.png
14 | MonkAttack0.png
15 | CocoonStanding0.png
16 | ceiling.png
17 | ceilingdoor.png
18 | ceilingbegin.png
19 | ceilingend.png
20 | splat0.png
21 | splat1.png
22 | splat2.png
23 | ceilingbars.png
24 | clouds.png
25 | crossbow.png
26 | falcata.png
27 | shield.png
28 | rope.png
29 | slot.png
30 | seal.png
31 | cobblestone.png
32 | fence.png
33 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/tiles2.lst:
--------------------------------------------------------------------------------
1 | grass.png
2 | lava0.png
3 | ceiling.png
4 | bricks2.png
5 | arch.png
6 | bars.png
7 | bricks_blood.png
8 | bricks_candles.png
9 | StrongDemonAttack0.png
10 | WeakDemonAttack0.png
11 | WarthogAttack0.png
12 | EvilSpiritAttack0.png
13 | FallenAttack0.png
14 | MonkAttack0.png
15 | CocoonStanding0.png
16 | stoneceiling.png
17 | ceilingdoor.png
18 | ceilingbegin.png
19 | ceilingend.png
20 | splat0.png
21 | splat1.png
22 | splat2.png
23 | ceilingbars.png
24 | clouds.png
25 | crossbow.png
26 | falcata.png
27 | shield.png
28 | rope.png
29 | slot.png
30 | seal.png
31 | cobblestone.png
32 | bricks.png
33 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/tiles3.lst:
--------------------------------------------------------------------------------
1 | grass.png
2 | grass2.png
3 | stonefloor.png
4 | bricks.png
5 | arch.png
6 | bars.png
7 | bricks_blood.png
8 | bricks_candles.png
9 | StrongDemonAttack0.png
10 | WeakDemonAttack0.png
11 | WarthogAttack0.png
12 | EvilSpiritAttack0.png
13 | FallenAttack0.png
14 | MonkAttack0.png
15 | CocoonStanding0.png
16 | ceiling.png
17 | ceilingdoor.png
18 | ceilingbegin.png
19 | ceilingend.png
20 | splat0.png
21 | splat1.png
22 | splat2.png
23 | ceilingbars.png
24 | clouds.png
25 | crossbow.png
26 | falcata.png
27 | shield.png
28 | rope.png
29 | slot.png
30 | bricks2.png
31 | cobblestone.png
32 | fence.png
33 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/tiles4.lst:
--------------------------------------------------------------------------------
1 | grass.png
2 | lava0.png
3 | ceiling.png
4 | bricks2.png
5 | arch.png
6 | bars.png
7 | bricks_blood.png
8 | bricks_candles.png
9 | StrongDemonAttack0.png
10 | WeakDemonAttack0.png
11 | WarthogAttack0.png
12 | EvilSpiritAttack0.png
13 | FallenAttack0.png
14 | MonkAttack0.png
15 | CocoonStanding0.png
16 | stoneceiling.png
17 | ceilingdoor.png
18 | ceilingbegin.png
19 | ceilingend.png
20 | splat0.png
21 | splat1.png
22 | splat2.png
23 | ceilingbars.png
24 | clouds.png
25 | crossbow.png
26 | falcata.png
27 | shield.png
28 | rope.png
29 | slot.png
30 | bricks.png
31 | cobblestone.png
32 | fence.png
33 |
--------------------------------------------------------------------------------
/NullSoundSystem/SoundEmitter.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 10/10/16.
3 | //
4 |
5 | #ifndef TIC_TAC_TOE_GLES_SOUNDEMITTER_H
6 | #define TIC_TAC_TOE_GLES_SOUNDEMITTER_H
7 |
8 | namespace odb {
9 | class SoundEmitter {
10 | std::shared_ptr mSample = nullptr;
11 | unsigned int mEmitterHandle;
12 | public:
13 | glm::vec3 mPosition{0, 0, 0};
14 | float mVolume = 1.0f;
15 |
16 | SoundEmitter(std::shared_ptr aSample);
17 |
18 | void play(std::shared_ptr listener);
19 | };
20 | }
21 |
22 | #endif //TIC_TAC_TOE_GLES_SOUNDEMITTER_H
23 |
--------------------------------------------------------------------------------
/noudar-rendering/CLerp.h:
--------------------------------------------------------------------------------
1 | #ifndef CLERP_H
2 | #define CLERP_H
3 |
4 | namespace odb {
5 | class CLerp {
6 | public:
7 | float mDelta;
8 | float mDuration;
9 | float mInitialValue;
10 | long mEllapsed;
11 |
12 | explicit CLerp(long initialValue, long finalValue, long duration);
13 |
14 | float getValue(long ellapsed);
15 |
16 | float getFinalValue();
17 |
18 | bool isFinished();
19 |
20 | float getCurrentValue();
21 |
22 | long getEllapsed();
23 |
24 | long getDuration();
25 |
26 | void update(long ms);
27 | };
28 | }
29 | #endif
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/OPL2LPT/MusicSDL.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 |
11 | using std::vector;
12 |
13 | #include "IFileLoaderDelegate.h"
14 | #include "CPackedFileReader.h"
15 |
16 | #include
17 | #include
18 |
19 | void playMusic(const std::string &music) {
20 | }
21 |
22 | void setupOPL2(int port) {
23 | }
24 |
25 | void stopSounds() {
26 | }
27 |
28 | void playTune(const std::string &music) {
29 |
30 | }
31 |
32 | void soundTick() {
33 |
34 | }
35 |
36 | void muteSound() {
37 |
38 | }
--------------------------------------------------------------------------------
/noudar-rendering/NoudarGLES2Bridge.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 06/10/16.
3 | //
4 |
5 | #ifndef NOUDAR_CORE_NOUDARGLES2BRIDGE_H
6 | #define NOUDAR_CORE_NOUDARGLES2BRIDGE_H
7 |
8 | namespace odb {
9 | class NoudarGLES2Bridge : public Knights::IRenderer {
10 | char mNextCmd = '.';
11 | bool mPerformVisibilityCheck = true;
12 | public:
13 | NoudarGLES2Bridge();
14 |
15 | void drawMap(Knights::CMap &map, std::shared_ptr current) override;
16 |
17 | char getInput() override;
18 |
19 | char peekInput() override;
20 |
21 | void setNextCommand(char cmd);
22 |
23 | void reset();
24 |
25 | void setVisibilityChecks(bool visibilityCheck);
26 | };
27 | }
28 |
29 |
30 | #endif //NOUDAR_CORE_NOUDARGLES2BRIDGE_H
31 |
--------------------------------------------------------------------------------
/noudar-rendering/SplatAnimation.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 22/10/16.
3 | //
4 |
5 | #ifndef DUNGEONSOFNOUDAR_NDK_SPLATANIMATION_H
6 | #define DUNGEONSOFNOUDAR_NDK_SPLATANIMATION_H
7 |
8 |
9 | namespace odb {
10 | class SplatAnimation {
11 |
12 | public:
13 | SplatAnimation(Knights::Vec2i position);
14 |
15 | void update(long ms);
16 |
17 | void startSplatAnimation();
18 |
19 | int getSplatFrame();
20 |
21 | bool isFinished();
22 |
23 | Knights::Vec2i getPosition();
24 |
25 | private:
26 | const int TOTAL_ANIMATION_TIME = 500;
27 | const int NUMBER_OF_FRAMES = 3;
28 | Knights::Vec2i mPosition{0, 0};
29 |
30 | long showSplatTime = 0;
31 | };
32 | }
33 |
34 | #endif //DUNGEONSOFNOUDAR_NDK_SPLATANIMATION_H
35 |
--------------------------------------------------------------------------------
/noudar-rendering/NativeBitmap.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 28/02/16.
3 | //
4 |
5 | #ifndef LESSON10_NATIVEBITMAP_H
6 | #define LESSON10_NATIVEBITMAP_H
7 | namespace odb {
8 | class NativeBitmap {
9 | std::string mId;
10 | int mWidth;
11 | int mHeight;
12 | int *mRawData;
13 |
14 | public:
15 | NativeBitmap(std::string aId, int aWidth, int aHeight, int *aRawData);
16 |
17 | std::shared_ptr makeBitmapWithHalfDimensions() const;
18 |
19 | int getWidth() const;
20 |
21 | int getHeight() const;
22 |
23 | int *getPixelData() const;
24 |
25 | std::string getId() const;
26 |
27 | void releaseTextureData();
28 |
29 | ~NativeBitmap();
30 | };
31 | }
32 |
33 | #endif //LESSON10_NATIVEBITMAP_H
34 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/res/chapter7.txt:
--------------------------------------------------------------------------------
1 | - Epilogue -
2 | After such gruesome
3 | and soul-searching
4 | battle, you did it.
5 | The demon is gone.
6 |
7 | You barely had time
8 | to breathe as the
9 | ground began to
10 | rumble. A split
11 | second later,
12 | anything beneath
13 | you simply
14 | collapsed into a
15 | big amorphous plot
16 | of land.
17 |
18 | Finally peace and
19 | redemption savory.
20 | Embrace eternity.
21 |
22 | Thanks for playing!
23 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "DungeonsOfNoudar-NDK/app/src/main/jni/gles2-renderer"]
2 | path = DungeonsOfNoudar-NDK/app/src/main/jni/gles2-renderer
3 | url = https://github.com/TheFakeMontyOnTheRun/gles2-renderer.git
4 | [submodule "DungeonsOfNoudar-NDK/common_includes/glm-head"]
5 | path = DungeonsOfNoudar-NDK/common_includes/glm-head
6 | url = https://github.com/g-truc/glm.git
7 | [submodule "stb"]
8 | path = stb
9 | url = https://github.com/TheFakeMontyOnTheRun/stb.git
10 | [submodule "noudar-core"]
11 | path = noudar-core
12 | url = https://github.com/TheFakeMontyOnTheRun/noudar-core
13 | [submodule "DungeonsOfNoudar486/uGLy"]
14 | path = DungeonsOfNoudar486/uGLy
15 | url = https://github.com/TheFakeMontyOnTheRun/uGLy.git
16 | [submodule "fixed_point"]
17 | path = fixed_point
18 | url = https://github.com/johnmcfarlane/fixed_point.git
19 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/include/RaycastCommon.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 27/08/16.
3 | //
4 |
5 | #ifndef BLANKSLATE_COMMON_H
6 | #define BLANKSLATE_COMMON_H
7 |
8 | #include
9 |
10 | namespace odb {
11 | enum class ECommand {
12 | kUp,
13 | kRight,
14 | kDown,
15 | kLeft,
16 | kFire1,
17 | kFire2
18 | };
19 |
20 | using FixP = fixed_point;
21 |
22 | class RayCollision {
23 | public:
24 | FixP mSquaredDistance = 0;
25 | Knights::Vec2i mCollisionPoint = {0,0};
26 | int mHeight = 0;
27 | int mElement = 0;
28 | };
29 |
30 | using CControlCallback = std::function< void(ECommand) >;
31 |
32 | int wrap360(int i);
33 |
34 | const int xRes = 255;
35 | const int yRes = 128;
36 | const FixP fixedYRes = FixP{128};
37 |
38 | }
39 | #endif //BLANKSLATE_COMMON_H
40 |
--------------------------------------------------------------------------------
/noudar-rendering/LightningStrategy.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 30/07/16.
3 | //
4 |
5 |
6 | #ifndef KNIGHTSOFALENTEJOANDROID_AS_LIGHTNINGSTRATEGY_H
7 | #define KNIGHTSOFALENTEJOANDROID_AS_LIGHTNINGSTRATEGY_H
8 |
9 | namespace odb {
10 |
11 | class LightningStrategy {
12 |
13 |
14 | enum Direction : uint8_t {
15 | N,
16 | E,
17 | S,
18 | W,
19 | TOP,
20 | BOTTOM
21 | };
22 |
23 | static bool isValid(Knights::Vec2i pos);
24 |
25 | static void castLight(Direction from, LightMap &lightMap, int emission,
26 | IntMap occluders, Knights::Vec2i pos);
27 |
28 | public:
29 | static void castPointLight(LightMap &lightMap, int emission, IntMap occluders,
30 | int x, int y);
31 | };
32 | }
33 |
34 | #endif //KNIGHTSOFALENTEJOANDROID_AS_LIGHTNINGSTRATEGY_H
35 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/include/RasterizerCommon.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 27/08/16.
3 | //
4 |
5 | #ifndef BLANKSLATE_COMMON_H
6 | #define BLANKSLATE_COMMON_H
7 |
8 | namespace odb {
9 |
10 | using FixP16 = fixed_point;
11 | using FixP32 = fixed_point;
12 | using TextureFixP = fixed_point;
13 |
14 | #ifdef LOWRES
15 | using FixP = FixP16;
16 | #else
17 | using FixP = FixP32;
18 | #endif
19 |
20 |
21 | class Vec3 {
22 | public:
23 | FixP mX;
24 | FixP mY;
25 | FixP mZ;
26 | };
27 |
28 | Vec3 operator+(const Vec3 &v1, const Vec3 &v2);
29 |
30 | Vec3 operator-(const Vec3 &v1, const Vec3 &v2);
31 |
32 | Vec3 &operator+=(Vec3 &v1, const Vec3 &v2);
33 |
34 | Vec3 &operator-=(Vec3 &v1, const Vec3 &v2);
35 |
36 | class Vec2 {
37 | public:
38 | FixP mX;
39 | FixP mY;
40 | };
41 | }
42 | #endif //BLANKSLATE_COMMON_H
43 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/include/CPackedFileReader.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 06-12-2017.
3 | //
4 |
5 | #ifndef DUNGEONSOFNOUDAR486_CPACKEDFILEREADER_H
6 | #define DUNGEONSOFNOUDAR486_CPACKEDFILEREADER_H
7 |
8 | namespace odb {
9 | class CPackedFileReader : public Knights::IFileLoaderDelegate {
10 | FILE *mDataPack = nullptr;
11 | std::string mPackPath;
12 | std::unordered_map mOffsets;
13 | public:
14 | CPackedFileReader() = delete;
15 | size_t sizeOfFile(const std::string& path) override;
16 | explicit CPackedFileReader( std::string dataFilePath );
17 | uint8_t* loadBinaryFileFromPath( const std::string& path ) override;
18 | std::string loadFileFromPath( const std::string& path ) override ;
19 | std::string getFilePathPrefix() override;
20 | virtual ~CPackedFileReader();
21 |
22 | };
23 | }
24 |
25 | #endif //DUNGEONSOFNOUDAR486_CPACKEDFILEREADER_H
26 |
--------------------------------------------------------------------------------
/noudar-rendering/ETextures.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 14/01/17.
3 | //
4 |
5 | #ifndef DUNGEONSOFNOUDAR_NDK_ETEXTURES_H
6 | #define DUNGEONSOFNOUDAR_NDK_ETEXTURES_H
7 | namespace odb {
8 | enum ETextures : uint8_t {
9 | Grass,
10 | Lava,
11 | Floor,
12 | Bricks,
13 | Arch,
14 | Bars,
15 | BricksBlood,
16 | BricksCandles,
17 | StrongDemonAttack0,
18 | WeakDemonAttack0,
19 | WarthogAttack0,
20 | EvilSpiritAttack0,
21 | FallenAttack0,
22 | MonkAttack0,
23 | CocoonStanding0,
24 | Ceiling,
25 | CeilingDoor,
26 | CeilingBegin,
27 | CeilingEnd,
28 | Splat0,
29 | Splat1,
30 | Splat2,
31 | CeilingBars,
32 | Skybox,
33 | Crossbow,
34 | Falcata,
35 | Shield,
36 | Rope,
37 | Slot,
38 | MagicSeal,
39 | Cobblestone,
40 | Fence,
41 | Cross
42 | };
43 | }
44 | #endif //DUNGEONSOFNOUDAR_NDK_ETEXTURES_H
45 |
--------------------------------------------------------------------------------
/noudar-rendering/CLerp.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include "CLerp.h"
5 |
6 | namespace odb {
7 | CLerp::CLerp(long initialValue, long finalValue, long duration) :
8 | mDelta(std::abs(finalValue - initialValue)), mDuration(duration),
9 | mInitialValue(initialValue), mEllapsed(0) {
10 | }
11 |
12 | float CLerp::getValue(long ellapsed) {
13 | return mInitialValue + std::min(((mDelta * ellapsed) / mDuration), mDelta);
14 | }
15 |
16 | float CLerp::getFinalValue() {
17 | return mInitialValue + mDelta;
18 | }
19 |
20 | long CLerp::getEllapsed() {
21 | return mEllapsed;
22 | }
23 |
24 | float CLerp::getCurrentValue() {
25 | return getValue(mEllapsed);
26 | }
27 |
28 | void CLerp::update(long ms) {
29 | mEllapsed += ms;
30 | }
31 |
32 | long CLerp::getDuration() {
33 | return mDuration;
34 | }
35 |
36 | bool CLerp::isFinished() {
37 | return mEllapsed >= mDuration;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/noudar-rendering/CTile3DProperties.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 14/01/17.
3 | //
4 |
5 | #ifndef DUNGEONSOFNOUDAR_NDK_TILEPROPERTIES_H
6 | #define DUNGEONSOFNOUDAR_NDK_TILEPROPERTIES_H
7 | namespace odb {
8 |
9 | class CTile3DProperties;
10 |
11 | using CTileId = uint8_t;
12 |
13 | using CTilePropertyMap = std::map;
14 |
15 | using TextureName = std::string;
16 |
17 | class CTile3DProperties {
18 | public:
19 | bool mNeedsAlphaTest = true;
20 | TextureName mCeilingTexture;
21 | TextureName mFloorTexture;
22 | TextureName mMainWallTexture;
23 | VBORegisterId mVBOToRender;
24 | TextureName mCeilingRepeatedWallTexture;
25 | TextureName mFloorRepeatedWallTexture;
26 | uint8_t mCeilingRepetitions;
27 | uint8_t mFloorRepetitions;
28 | float mCeilingHeight;
29 | float mFloorHeight;
30 |
31 | static CTilePropertyMap parsePropertyList(std::string propertyFile);
32 | };
33 | }
34 |
35 |
36 | #endif //DUNGEONSOFNOUDAR_NDK_TILEPROPERTIES_H
37 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/src/RasterizerCommon.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 04-07-2017.
3 | //
4 |
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 | #include
11 | #include
12 |
13 | using std::vector;
14 | using std::array;
15 | using sg14::fixed_point;
16 |
17 | #include "RasterizerCommon.h"
18 |
19 | namespace odb {
20 |
21 | Vec3 operator+(const Vec3& v1, const Vec3& v2 ) {
22 | return { v1.mX + v2.mX, v1.mY + v2.mY, v1.mZ + v2.mZ };
23 | }
24 |
25 | Vec3 operator-(const Vec3& v1, const Vec3& v2 ) {
26 | return { v1.mX - v2.mX, v1.mY - v2.mY, v1.mZ - v2.mZ };
27 | }
28 |
29 | Vec3& operator+=(Vec3& v1, const Vec3& v2 ) {
30 |
31 | v1.mX += v2.mX;
32 | v1.mY += v2.mY;
33 | v1.mZ += v2.mZ;
34 |
35 | return v1;
36 | }
37 |
38 | Vec3& operator-=(Vec3& v1, const Vec3& v2 ) {
39 |
40 | v1.mX -= v2.mX;
41 | v1.mY -= v2.mY;
42 | v1.mZ -= v2.mZ;
43 |
44 | return v1;
45 | }
46 | }
47 |
48 |
--------------------------------------------------------------------------------
/noudar-rendering/SplatAnimation.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 22/10/16.
3 | //
4 | #include
5 | #include
6 | #include
7 | #include
8 |
9 | #include
10 | #include "Vec2i.h"
11 | #include "SplatAnimation.h"
12 |
13 | void odb::SplatAnimation::update(long ms) {
14 | showSplatTime -= ms;
15 | }
16 |
17 | void odb::SplatAnimation::startSplatAnimation() {
18 | showSplatTime = TOTAL_ANIMATION_TIME;
19 | }
20 |
21 | int odb::SplatAnimation::getSplatFrame() {
22 | if (showSplatTime > 0) {
23 | return (int) ((TOTAL_ANIMATION_TIME - showSplatTime) * NUMBER_OF_FRAMES) /
24 | TOTAL_ANIMATION_TIME;
25 | } else {
26 | return -1;
27 | }
28 | }
29 |
30 | bool odb::SplatAnimation::isFinished() {
31 | return showSplatTime <= 0;
32 | }
33 |
34 | odb::SplatAnimation::SplatAnimation(Knights::Vec2i aPosition) : mPosition(aPosition) {
35 | startSplatAnimation();
36 | }
37 |
38 | Knights::Vec2i odb::SplatAnimation::getPosition() {
39 | return mPosition;
40 | }
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/noudar-rendering/Logger.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 26/09/16.
3 | //
4 | #include
5 | #include
6 | #include
7 |
8 | #ifdef __ANDROID__
9 |
10 | #include
11 |
12 | #else
13 | #include
14 | #endif
15 |
16 | #include "Logger.h"
17 |
18 | namespace odb {
19 |
20 | void doLog(const char *format, va_list args) {
21 | char buffer[255];
22 | return;
23 | memset(&buffer[0], 0, 255);
24 | std::vsnprintf(buffer, 255, format, args);
25 |
26 | #ifdef __ANDROID__
27 | __android_log_print(ANDROID_LOG_INFO, "Logger::log", "%s", buffer);
28 | #else
29 | std::printf( "%s\n", buffer );
30 | #endif
31 |
32 |
33 | }
34 |
35 | void Logger::log(const char *format, ...) {
36 |
37 | va_list args;
38 | va_start(args, format);
39 |
40 | doLog(format, args);
41 | va_end(args);
42 | }
43 |
44 | void Logger::log(std::string format, ...) {
45 | va_list args;
46 | va_start(args, format);
47 | auto fmt = format.c_str();
48 | doLog(fmt, args);
49 | va_end(args);
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/noudar-rendering/VBORenderingJob.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by Daniel Monteiro on 12/11/16.
3 | //
4 |
5 | #ifndef DUNGEONSOFNOUDAR_NDK_VBORENDERINGJOB_H
6 | #define DUNGEONSOFNOUDAR_NDK_VBORENDERINGJOB_H
7 |
8 | namespace odb {
9 | class VBORenderingJob {
10 | public:
11 | explicit VBORenderingJob(int vboId, int vboIndicesId, int amount, glm::mat4 transform,
12 | float shade, bool needsAlphaTest, bool needsZBuffer);
13 |
14 | explicit VBORenderingJob(int vboId, int vboIndicesId, int amount, glm::mat4 transform,
15 | float shade, bool needsAlphaTest);
16 |
17 | glm::mat4 getTransform() const;
18 |
19 | int getVBOId() const;
20 |
21 | int getVBOIndicesId() const;
22 |
23 | float getShade() const;
24 |
25 | int getAmount() const;
26 |
27 | private:
28 | glm::mat4 mVBOInstanceTransform = glm::mat4(1.0f);
29 | float mShade = 1.0f;
30 | int mVBOId = -1;
31 | int mVBOIndicesId = -1;
32 | int mAmount = 0;
33 | public:
34 | bool mNeedsZBuffer = true;
35 | bool mNeedsAlphaTest = false;
36 | };
37 | }
38 |
39 | #endif //DUNGEONSOFNOUDAR_NDK_VBORENDERINGJOB_H
40 |
--------------------------------------------------------------------------------
/noudar-rendering/Camera.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 09/02/17.
3 | //
4 |
5 | #ifndef DUNGEONSOFNOUDAR_NDK_CAMERA_H
6 | #define DUNGEONSOFNOUDAR_NDK_CAMERA_H
7 |
8 | namespace odb {
9 | class Camera {
10 |
11 | glm::mat4 mTransform = glm::mat4(1.0f);
12 |
13 | glm::vec2 mCameraTarget;
14 | glm::vec2 cameraPosition;
15 |
16 | float *mEyeView = nullptr;
17 |
18 | float mAngleXZ = 0;
19 | float mAngleYZ = 0;
20 |
21 | int mCameraRotation = 0;
22 | int mRotationTarget = 0;
23 |
24 | public:
25 | void rotateBy(glm::vec3 axis, int degrees);
26 |
27 | void moveBy(glm::vec3 delta);
28 |
29 | void rotateTo(glm::vec3 axis, int degrees);
30 |
31 | void moveTo(glm::vec3 position);
32 |
33 | glm::mat4 getTransform();
34 |
35 | glm::vec3 getPosition();
36 |
37 | glm::mat4 getViewMatrix(glm::vec3 position);
38 |
39 | void update(long ms);
40 |
41 | void incrementRotateTarget(int delta);
42 |
43 | bool isAnimating();
44 |
45 | void setEyeView(float *eyeView);
46 |
47 | void reset();
48 |
49 | void setRotationXZ(float xz);
50 |
51 | void setRotationYZ(float yz);
52 |
53 | int getCameraRotationXZ() const;
54 | };
55 | }
56 |
57 | #endif //DUNGEONSOFNOUDAR_NDK_CAMERA_H
58 |
--------------------------------------------------------------------------------
/License.md:
--------------------------------------------------------------------------------
1 | BSD 2-Clause License
2 |
3 | Copyright (c) 2016, Daniel Monteiro
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 |
9 | * Redistributions of source code must retain the above copyright notice, this
10 | list of conditions and the following disclaimer.
11 |
12 | * Redistributions in binary form must reproduce the above copyright notice,
13 | this list of conditions and the following disclaimer in the documentation
14 | and/or other materials provided with the distribution.
15 |
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
20 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |
--------------------------------------------------------------------------------
/noudar-rendering/VisibilityStrategy.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 30/07/16.
3 | //
4 |
5 |
6 | #ifndef KNIGHTSOFALENTEJOANDROID_AS_VISIBILITYSTRATEGY_H
7 | #define KNIGHTSOFALENTEJOANDROID_AS_VISIBILITYSTRATEGY_H
8 |
9 | namespace odb {
10 |
11 | class VisibilityStrategy {
12 |
13 | static bool isValid(Knights::Vec2i pos);
14 |
15 | static void
16 | castVisibility(Knights::EDirection from, VisMap &visMap, const IntMap &occluders,
17 | Knights::Vec2i pos, Knights::Vec2i offset);
18 |
19 | static bool
20 | isBlock(const IntMap &occluders, Knights::EDirection from, Knights::Vec2i currentPos);
21 |
22 | static bool
23 | isVisibleAt(const VisMap &visMap, Knights::EDirection from, Knights::Vec2i currentPos);
24 |
25 | static void
26 | setIsVisible(VisMap &visMap, Knights::EDirection from, Knights::Vec2i currentPos);
27 |
28 | public:
29 | static Knights::Vec2i transform(Knights::EDirection from, Knights::Vec2i currentPos);
30 |
31 | static void castVisibility(VisMap &visMap, const IntMap &occluders, Knights::Vec2i pos,
32 | Knights::EDirection direction, bool cleanPrevious);
33 |
34 | static void mergeInto(const VisMap &map1, const VisMap &map2, VisMap &result);
35 |
36 | static void makeAllVisible(VisMap &array);
37 | };
38 | }
39 |
40 | #endif //KNIGHTSOFALENTEJOANDROID_AS_VISIBILITYSTRATEGY_H
41 |
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/include/CTile3DProperties.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 14/01/17.
3 | //
4 |
5 | #ifndef DUNGEONSOFNOUDAR_NDK_TILEPROPERTIES_H
6 | #define DUNGEONSOFNOUDAR_NDK_TILEPROPERTIES_H
7 | namespace odb {
8 |
9 | class CTile3DProperties;
10 |
11 | using CTileId = uint8_t;
12 | using TextureIndex = int16_t;
13 |
14 | using CTilePropertyMap = std::unordered_map< CTileId, CTile3DProperties >;
15 |
16 | using TextureName = std::string;
17 |
18 | enum GeometryType{ kNone, kCube, kLeftNearWall, kRightNearWall};
19 |
20 | class CTile3DProperties {
21 | public:
22 | bool mNeedsAlphaTest = true;
23 | TextureName mCeilingTexture;
24 | TextureName mFloorTexture;
25 | TextureName mMainWallTexture;
26 |
27 | TextureIndex mCeilingTextureIndex;
28 | TextureIndex mFloorTextureIndex;
29 | TextureIndex mMainWallTextureIndex;
30 |
31 | GeometryType mGeometryType;
32 |
33 | TextureName mCeilingRepeatedWallTexture;
34 | TextureName mFloorRepeatedWallTexture;
35 |
36 | TextureIndex mCeilingRepeatedTextureIndex;
37 | TextureIndex mFloorRepeatedTextureIndex;
38 |
39 | uint8_t mCeilingRepetitions;
40 | uint8_t mFloorRepetitions;
41 | FixP mCeilingHeight;
42 | FixP mFloorHeight;
43 |
44 | static CTilePropertyMap parsePropertyList( std::string propertyFile );
45 | };
46 | }
47 |
48 |
49 | #endif //DUNGEONSOFNOUDAR_NDK_TILEPROPERTIES_H
50 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
10 | # When configured, Gradle will run in incubating parallel mode.
11 | # This option should only be used with decoupled projects. More details, visit
12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13 | # org.gradle.parallel=true
14 | # AndroidX package structure to make it clearer which packages are bundled with the
15 | # Android operating system, and which are packaged with your app's APK
16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
17 | android.useAndroidX=true
18 | # Kotlin code style for this project: "official" or "obsolete":
19 | kotlin.code.style=official
20 | # Enables namespacing of each library's R class so that its R class includes only the
21 | # resources declared in the library itself and none from the library's dependencies,
22 | # thereby reducing the size of the R class for that library
23 | android.nonTransitiveRClass=true
24 | org.gradle.configuration-cache=true
--------------------------------------------------------------------------------
/noudar-rendering/NativeBitmap.cpp:
--------------------------------------------------------------------------------
1 | ////
2 | //// Created by monty on 28/02/16.
3 | ////
4 | #include
5 | #include
6 | #include "NativeBitmap.h"
7 |
8 | namespace odb {
9 | int NativeBitmap::getWidth() const {
10 | return this->mWidth;
11 | }
12 |
13 | int NativeBitmap::getHeight() const {
14 | return this->mHeight;
15 | }
16 |
17 | int *NativeBitmap::getPixelData() const {
18 | return this->mRawData;
19 | }
20 |
21 | std::string NativeBitmap::getId() const {
22 | return mId;
23 | }
24 |
25 | NativeBitmap::NativeBitmap(std::string aId, int aWidth, int aHeight, int *aRawData) :
26 | mId(aId), mWidth(aWidth), mHeight(aHeight), mRawData(aRawData) {
27 | }
28 |
29 | void NativeBitmap::releaseTextureData() {
30 | this->mWidth = 0;
31 | this->mHeight = 0;
32 | this->mRawData = nullptr;
33 | }
34 |
35 | NativeBitmap::~NativeBitmap() {
36 | delete[] mRawData;
37 | }
38 |
39 | std::shared_ptr NativeBitmap::makeBitmapWithHalfDimensions() const {
40 | int *rawData;
41 | int newWidth = mWidth / 2;
42 | int newHeight = mHeight / 2;
43 | rawData = new int[newHeight * newWidth];
44 |
45 | for (int y = 0; y < mHeight; ++y) {
46 | for (int x = 0; x < mWidth; ++x) {
47 | rawData[(newWidth * (y / 2)) + (x / 2)] = this->mRawData[(mWidth * y) + x];
48 | }
49 | }
50 |
51 | return std::make_shared(mId, newWidth, newHeight, rawData);
52 | }
53 | }
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/src/NativeBitmap.cpp:
--------------------------------------------------------------------------------
1 | ////
2 | //// Created by monty on 28/02/16.
3 | ////
4 | #include
5 | #include
6 | #include "NativeBitmap.h"
7 |
8 | namespace odb {
9 | int NativeBitmap::getWidth() const {
10 | return this->mWidth;
11 | }
12 |
13 | int NativeBitmap::getHeight() const {
14 | return this->mHeight;
15 | }
16 |
17 | int *NativeBitmap::getPixelData() const {
18 | return this->mRawData;
19 | }
20 |
21 | std::string NativeBitmap::getId() const {
22 | return mId;
23 | }
24 |
25 | NativeBitmap::NativeBitmap(std::string aId, int aWidth, int aHeight, int *aRawData) :
26 | mId(aId), mWidth(aWidth), mHeight(aHeight), mRawData(aRawData) {
27 | }
28 |
29 | void NativeBitmap::releaseTextureData() {
30 | this->mWidth = 0;
31 | this->mHeight = 0;
32 | this->mRawData = nullptr;
33 | }
34 |
35 | NativeBitmap::~NativeBitmap() {
36 | delete[] mRawData;
37 | }
38 |
39 | std::shared_ptr NativeBitmap::makeBitmapWithHalfDimensions() const {
40 | int *rawData;
41 | int newWidth = mWidth / 2;
42 | int newHeight = mHeight / 2;
43 | rawData = new int[newHeight * newWidth];
44 |
45 | for (int y = 0; y < mHeight; ++y) {
46 | for (int x = 0; x < mWidth; ++x) {
47 | rawData[(newWidth * (y / 2)) + (x / 2)] = this->mRawData[(mWidth * y) + x];
48 | }
49 | }
50 |
51 | return std::make_shared( mId, newWidth, newHeight, rawData);
52 | }
53 | }
--------------------------------------------------------------------------------
/DungeonsOfNoudar486/include/VisibilityStrategy.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 30/07/16.
3 | //
4 |
5 |
6 | #ifndef KNIGHTSOFALENTEJOANDROID_AS_VISIBILITYSTRATEGY_H
7 | #define KNIGHTSOFALENTEJOANDROID_AS_VISIBILITYSTRATEGY_H
8 |
9 | namespace odb {
10 | enum class EVisibility : uint8_t {kVisible, kInvisible};
11 | using IntMap = array, Knights::kMapSize >;
12 | using VisMap = array, Knights::kMapSize >;
13 |
14 | using DistanceDistribution = array, Knights::kMapSize + Knights::kMapSize >;
15 | class VisibilityStrategy {
16 |
17 | static bool isValid(const Knights::Vec2i& pos);
18 | static void castVisibility(Knights::EDirection from, VisMap &visMap, const IntMap& occluders, const Knights::Vec2i& pos, DistanceDistribution& distances);
19 | static bool isBlock(const IntMap& occluders, const Knights::Vec2i& transformed);
20 | static bool isVisibleAt(const VisMap& visMap, const Knights::Vec2i& transformed );
21 | static void setIsVisible(VisMap& visMap, const Knights::Vec2i& transformed );
22 | public:
23 | static void mergeInto(const VisMap &map1, const VisMap &map2, VisMap &result);
24 |
25 | static void makeAllVisible(VisMap& array);
26 | static Knights::Vec2i transform( Knights::EDirection from, const Knights::Vec2i& currentPos );
27 | static void castVisibility(VisMap &visMap, const IntMap& occluders, const Knights::Vec2i& pos, Knights::EDirection direction, bool cleanPrevious, DistanceDistribution& distances);
28 | };
29 | }
30 |
31 | #endif //KNIGHTSOFALENTEJOANDROID_AS_VISIBILITYSTRATEGY_H
32 |
--------------------------------------------------------------------------------
/DungeonsOfNoudarNDK/app/src/main/java/pt/b13h/noudar/NoudarApplication.kt:
--------------------------------------------------------------------------------
1 | package pt.b13h.noudar
2 |
3 | import android.app.Application
4 | import android.content.Context
5 | import android.content.pm.PackageManager
6 | import android.content.res.Configuration
7 | import android.media.AudioManager
8 | import android.view.InputDevice
9 |
10 | class NoudarApplication : Application() {
11 |
12 | fun mayEnableSound(): Boolean {
13 | val am = getSystemService(Context.AUDIO_SERVICE) as AudioManager
14 | return when (am.ringerMode) {
15 | AudioManager.RINGER_MODE_NORMAL -> true
16 | AudioManager.RINGER_MODE_SILENT, AudioManager.RINGER_MODE_VIBRATE -> false
17 | else -> false
18 | }
19 | }
20 |
21 | private fun hasTouchscreen(): Boolean {
22 | return packageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)
23 | }
24 |
25 | private fun hasPhysicalKeyboard(): Boolean {
26 | return resources.configuration.keyboard != Configuration.KEYBOARD_NOKEYS
27 | }
28 |
29 |
30 | private fun hasGamepad(): Boolean {
31 | for (deviceId in InputDevice.getDeviceIds()) {
32 | val dev = InputDevice.getDevice(deviceId)
33 | val sources = dev!!.sources
34 | if ((sources and InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD ||
35 | ((sources and InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK)
36 | ) {
37 | return true
38 | }
39 | }
40 | return false
41 | }
42 |
43 | fun hasPhysicalController(): Boolean {
44 | return hasPhysicalKeyboard() || hasGamepad() || !hasTouchscreen()
45 | }
46 | }
--------------------------------------------------------------------------------
/noudar-rendering/VBORenderingJob.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // Created by Daniel Monteiro on 12/11/16.
3 | //
4 | #include "glm/glm.hpp"
5 | #include "glm/gtc/matrix_transform.hpp"
6 |
7 | #include "VBORenderingJob.h"
8 |
9 | glm::mat4 odb::VBORenderingJob::getTransform() const {
10 | return mVBOInstanceTransform;
11 | }
12 |
13 | int odb::VBORenderingJob::getVBOId() const {
14 | return mVBOId;
15 | }
16 |
17 | odb::VBORenderingJob::VBORenderingJob(int aVBOId, int aVBOIndicesId, int aAmount,
18 | glm::mat4 aTransform, float aShade,
19 | bool needsAlphaTest, bool needsZBuffer) :
20 | mVBOInstanceTransform(aTransform),
21 | mShade(aShade),
22 | mVBOId(aVBOId),
23 | mVBOIndicesId(aVBOIndicesId),
24 | mAmount(aAmount),
25 | mNeedsZBuffer(needsZBuffer),
26 | mNeedsAlphaTest(needsAlphaTest) {
27 | }
28 |
29 | odb::VBORenderingJob::VBORenderingJob(int aVBOId, int aVBOIndicesId, int aAmount,
30 | glm::mat4 aTransform, float aShade,
31 | bool needsAlphaTest = false) :
32 | mVBOInstanceTransform(aTransform),
33 | mShade(aShade),
34 | mVBOId(aVBOId),
35 | mVBOIndicesId(aVBOIndicesId),
36 | mAmount(aAmount),
37 | mNeedsAlphaTest(needsAlphaTest) {
38 | }
39 |
40 | float odb::VBORenderingJob::getShade() const {
41 | return mShade;
42 | }
43 |
44 | int odb::VBORenderingJob::getAmount() const {
45 | return mAmount;
46 | }
47 |
48 | int odb::VBORenderingJob::getVBOIndicesId() const {
49 | return mVBOIndicesId;
50 | }
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/noudar-rendering/NoudarDungeonSnapshot.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // Created by monty on 06/12/16.
3 | //
4 | #include "glm/glm.hpp"
5 | #include "glm/gtc/matrix_transform.hpp"
6 |
7 | #include
8 | #include
9 |
10 | #include
11 | #include
12 | #include
13 | #include
14 | #include
15 | #include