GithubHelp home page GithubHelp logo

jerboaburrow / jellycram Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 8.33 MB

A Tetris inspired jelly-physics game with button mashing elements and minor frustration

Home Page: https://jerboa-app.itch.io/jelly-cram

License: GNU General Public License v3.0

CMake 4.31% Shell 1.17% C++ 46.48% Kotlin 43.84% C 4.20%
2d-game casual opengl physics jelly itch-io itchio

jellycram's People

Contributors

jerboa-app avatar

Watchers

 avatar

jellycram's Issues

bake lua

  • bake lua in desktop as well - no need for all the files here

Fill mode

  • fill the world with pieces, score is "density" out of full board
  • controls (nudge left, right, up)
  • density (each piece has set count, number of 3x3's, a full board is score 100)
  • show next piece indicator
  • difficulty progression: speed
  • difficulty progression: fill line
  • difficulty option: hide next piece

plays more into the soft body physics aspect - "not just Tetris"

achievements, PGS

  • Achievements
  • Leaderboard
  • "soft landing"
  • "hard landing"
  • played a game with no touching/input
  • smasher used successfully
  • 20, 40, 60, 80, 100

check state in common, android will then call PGS.

Block colours

  • samplers for block colours rather than completely random

score achievements did not seem to work

  • got a score of 36 but no 20 ach
  • did get 5 mins at same time

Must be this insane code...

        renderViewModel.updateAchievement.observe(
            this, androidx.lifecycle.Observer {
                    s -> if(client.updateAchievement(s.first,s.second)){
                client.updatePlayServicesAchievement(this,s.first)
                client.updateLocalAchievement(s.first)
            }
            }
        )
        renderViewModel.updateAchievementSlot2.observe(
            this, androidx.lifecycle.Observer {
                    s -> if(client.updateAchievement(s.first,s.second)){
                client.updatePlayServicesAchievement(this,s.first)
                client.updateLocalAchievement(s.first)
            }
            }
        )

macOS crashes on checkDelete

==22049==ERROR: AddressSanitizer: container-overflow on address 0x6150000fb210 at pc 0x00010262b567 bp 0x7ff7bdaf3810 sp 0x7ff7bdaf3808
READ of size 8 at 0x6150000fb210 thread T0
    #0 0x10262b566 in std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>::operator->[abi:v160006]() const shared_ptr.h:857
    #1 0x102635e2b in Hop::System::Physics::CollisionMesh::getByTag(unsigned long long) collisionMesh.h:424
    #2 0x1026214ea in Hop::System::Physics::CollisionMesh::getBoundingBox(unsigned long long) collisionMesh.h:510
    #3 0x102620676 in checkDelete(std::__1::vector<Hop::Object::Id, std::__1::allocator<Hop::Object::Id>>&, Hop::Object::EntityComponentSystem&, double, unsigned char, double) common.cpp:85
    #4 0x102593b6d in JellyCramState::iteration(Hop::Object::EntityComponentSystem&, Hop::Console&, Hop::System::Physics::sCollision&, Hop::System::Physics::sPhysics&, std::__1::shared_ptr<Hop::World::AbstractWorld>, void (*)(Hop::Console&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>), unsigned char, bool) gameState.cpp:252
    #5 0x1024156f8 in main main.cpp:299
    #6 0x7ff80909f3a5 in start+0x795 (dyld:x86_64+0xfffffffffff5c3a5)

0x6150000fb210 is located 16 bytes inside of 512-byte region [0x6150000fb200,0x6150000fb400)
allocated by thread T0 here:
    #0 0x10398460d in wrap__Znwm+0x7d (libclang_rt.asan_osx_dynamic.dylib:x86_64h+0xec60d)
    #1 0x102451984 in void* std::__1::__libcpp_operator_new[abi:v160006]<unsigned long>(unsigned long) new:285
    #2 0x10245190c in std::__1::__libcpp_allocate[abi:v160006](unsigned long, unsigned long) new:311
    #3 0x1026391dc in std::__1::allocator<std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>>::allocate[abi:v160006](unsigned long) allocator.h:115
    #4 0x102638f7a in std::__1::__allocation_result<std::__1::allocator_traits<std::__1::allocator<std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>>>::pointer> std::__1::__allocate_at_least[abi:v160006]<std::__1::allocator<std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>>>(std::__1::allocator<std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>>&, unsigned long) allocate_at_least.h:55
    #5 0x10264da35 in std::__1::vector<std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>, std::__1::allocator<std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>>>::__vallocate[abi:v160006](unsigned long) vector:688
    #6 0x10265267e in void std::__1::vector<std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>, std::__1::allocator<std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>>>::assign<std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>*, 0>(std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>*, std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>*) vector:1388
    #7 0x1026508cb in std::__1::vector<std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>, std::__1::allocator<std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>>>::operator=[abi:v160006](std::__1::vector<std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>, std::__1::allocator<std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>>> const&) vector:1344
    #8 0x10267a7a5 in Hop::System::Physics::CollisionMesh::operator=(Hop::System::Physics::CollisionMesh const&) collisionMesh.h:89
    #9 0x10267a760 in Hop::Object::Component::cCollideable::operator=(Hop::Object::Component::cCollideable const&) cCollideable.h:11
    #10 0x10267a3e4 in Hop::Object::Component::ComponentArray<Hop::Object::Component::cCollideable>::insert(Hop::Object::Id&, Hop::Object::Component::cCollideable) componentArray.h:185
    #11 0x1026281e3 in void Hop::Object::EntityComponentSystem::addComponent<Hop::Object::Component::cCollideable>(Hop::Object::Id, Hop::Object::Component::cCollideable) entityComponentSystem.h:157
    #12 0x1027ef9b9 in Hop::Object::EntityComponentSystem::lua_loadObject(lua_State*)+0xe79 (JellyCram:x86_64+0x1003e99b9)
    #13 0x10244859c in int Hop::dispatchEntityComponentSystem<&Hop::Object::EntityComponentSystem::lua_loadObject(lua_State*)>(lua_State*) console.h:55
    #14 0x10282b7c9 in luaD_precall+0x1a9 (JellyCram:x86_64+0x1004257c9)
    #15 0x10284f75e in luaV_execute+0x462e (JellyCram:x86_64+0x10044975e)
    #16 0x10282baa3 in luaD_callnoyield+0x53 (JellyCram:x86_64+0x100425aa3)
    #17 0x10282a657 in luaD_rawrunprotected+0x57 (JellyCram:x86_64+0x100424657)
    #18 0x10282bf55 in luaD_pcall+0x35 (JellyCram:x86_64+0x100425f55)
    #19 0x10281dee2 in lua_pcallk+0xe2 (JellyCram:x86_64+0x100417ee2)
    #20 0x10240f2fd in Hop::Console::runString(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>) console.h:148
    #21 0x10240f04a in run_lua_loop(Hop::Console&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>) main.cpp:10
    #22 0x1025903ba in JellyCramState::iteration(Hop::Object::EntityComponentSystem&, Hop::Console&, Hop::System::Physics::sCollision&, Hop::System::Physics::sPhysics&, std::__1::shared_ptr<Hop::World::AbstractWorld>, void (*)(Hop::Console&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>), unsigned char, bool) gameState.cpp:64
    #23 0x1024156f8 in main main.cpp:299
    #24 0x7ff80909f3a5 in start+0x795 (dyld:x86_64+0xfffffffffff5c3a5)

HINT: if you don't care about these errors you may set ASAN_OPTIONS=detect_container_overflow=0.
If you suspect a false positive see also: https://github.com/google/sanitizers/wiki/AddressSanitizerContainerOverflow.
SUMMARY: AddressSanitizer: container-overflow shared_ptr.h:857 in std::__1::shared_ptr<Hop::System::Physics::CollisionPrimitive>::operator->[abi:v160006]() const
Shadow bytes around the buggy address:
  0x6150000faf80: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x6150000fb000: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x6150000fb080: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x6150000fb100: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x6150000fb180: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x6150000fb200: 00 00[fc]fc fc fc fc fc fc fc fc fc fc fc fc fc
  0x6150000fb280: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
  0x6150000fb300: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
  0x6150000fb380: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
  0x6150000fb400: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x6150000fb480: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==22049==ABORTING
8 8 8 zsh: abort      ( cd build/JellyCram/; ./JellyCram; )

tutorial

  • guide through touch controls on android

Pause with text stating to tap to "keep up"
unpause after a tap wait for piece to fall
Pause with text stating to swipe to "rotate"
unpause ...
Pause with text to move left or right
Indicate Jiggleometer
Done

macOS files

  • icons are not found in macOS
  • settings.json is not found in macOS (tutorial is always active)

split pieces when deleting them

currently if e.g. a line is split in the middle it is still one object.

  • detect splits
  • break into objects based upon contiguous pieces
  • resolve "bundling"

Settings

  • Select any key or mouse click for controls
  • select colour maps
  • show colour maps on some meshes
  • randomise button to randomise the colours on the shown meshes
  • msaa

JellyCram roadmap

  • Tetronimo Meshes
  • stable-ish params
  • deletion of matching pieces?
  • move active piece (no rotation)
  • if a piece goes above y=1 = game over
  • credits
  • welcome screen
  • settings menu (tetronimo colour maps)
  • sound?
  • better name
  • "fill" mode
  • "classic mode" (i.e. tetris)

Android control scheme

  • object centric touch controls
  • screen centric
  • toggle option between them
  • toggle option to invert controls (object moves to tap)

Object centric is if tap is left or right, up or down of object center + some padding
Screen centric is if tap is left or right, up or down of screen center + some padding

Bug report: blank screen

If the bug is mentioned in an issue already, please go to it and comment/ thumbs up it instead of opening a new issue.

Describe the bug

Android has a blank screen on startup sometimes

This appears connected only to the back button.

It turns out that android stores state between runs and we need to be certain to clear the shared ptrs

Android pieces size

y-axis is likely to be quite large, perhaps use 5 rather than 9 blocks for the width?

Feedback on unsettlement

  • Visual feedback on how "settled" the pieces must be?

The physics is feedback but is it clear enough?

only flash that which will be deleted

will need to:

  • remove the sub-meshes from the pieces
  • make them into temporary objects
  • pulse them
  • fully delete them (temporaries)
  • handle discontiguities in parents

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.