Skip to content

Instantly share code, notes, and snippets.

@pancelor
Last active February 5, 2022 23:01
Show Gist options
  • Save pancelor/5f24ecc10ecf47403ee123de91acce1f to your computer and use it in GitHub Desktop.
Save pancelor/5f24ecc10ecf47403ee123de91acce1f to your computer and use it in GitHub Desktop.
bubblegum dog
work in progress
title bubblegum dog
author droqen + pancelor
homepage droqen.com
background_color #fffcfd
text_color #ff7fd3
level_select
continue_is_level_select
(skip_title_screen)
again_interval 0.1
mouse_left click
( mouse_right debug_rm (debug) )
sprite_size 8x8
case_sensitive
run_rules_on_level_start
( verbose_logging )
========
objects
========
livedog
transparent
v_livedogr
#38f19c #000000
...000.0
...00000
...01001
0..01001
00000000
00000...
0.0.0...
0.0.0...
v_livedogl
#38f19c #000000
000.0...
00000...
10010...
10010..0
00000000
...00000
...0.0.0
...0.0.0
v_livedog_gumr
#ff7fd3 #fffcfd
...000.0
...00000
...01001
0..01001
00000000
00000...
0.0.0...
0.0.0...
v_livedog_guml
#ff7fd3 #fffcfd
000.0...
00000...
10010...
10010..0
00000000
...00000
...0.0.0
...0.0.0
falldog
transparent
v_falldogr
#38f19c #000000
...000.0
...01001
0..01001
0..01001
00000000
00000...
0.0..0..
........
v_falldogl
#38f19c #000000
000.0...
10010...
10010..0
10010..0
00000000
...00000
..0..0.0
........
deaddog
transparent
v_deaddogr
#38f19c #000000 transparent #db2c30
...000..
...01020
.0.01001
.0003003
.030302.
.3302032
.3202033
020.2.03
v_deaddogl
#38f19c #000000 transparent #db2c30
..000...
02010...
10010.0.
3003000.
.203030.
2302033.
3302023.
30.2.020
v_eatdogr
#38f19c #000000
........
........
...000.0
...00000
0..01001
00001001
00000000
0.0.0...
v_eatdogl
#38f19c #000000
........
........
0.000...
00000...
10010..0
10010000
00000000
...0.0.0
bowl
#bda084 #ea3b3b #bd3535
........
........
........
........
..0000..
.100002.
.111112.
.111122.
v_gumbowl
#fffcfd #ff7fd3
........
........
........
........
..0000..
.100001.
.111111.
.111111.
gumgrowth
#fbd1ed
gumsource
#fbd1ed
v_gumshine
transparent #fffcfd
00000000
00000000
00111100
00111100
00001100
00001100
00000000
00000000
wall
#dcdcdc #e5e5e5
00110000
01100000
11000000
10000001
00000011
00000110
00001100
00011000
spikesl
#a0a0a0
.....000
.0000000
........
...00000
........
......00
..000000
........
spikesr
#a0a0a0
........
000000..
00......
........
00000...
........
0000000.
000.....
spikesu
#a0a0a0
........
......0.
.0....0.
.0..0.0.
.0..0.0.
.0..0.00
.00.0.00
.00.0.00
spikesd
#a0a0a0
00.0.00.
00.0.00.
00.0..0.
.0.0..0.
.0.0..0.
.0....0.
.0......
........
crate
#a0a0a0 #e5e5e5
00000000
01111110
01111110
01111110
01111110
01111110
01111110
00000000
fallcrate
#a0a0a0 #e5e5e5
00000000
01111110
01111110
01111110
01111110
01111110
01111110
00000000
v_borderl
#ff7fd3
0.......
0.......
0.......
0.......
0.......
0.......
0.......
0.......
v_borderr
#ff7fd3
.......0
.......0
.......0
.......0
.......0
.......0
.......0
.......0
v_borderu
#ff7fd3
00000000
........
........
........
........
........
........
........
v_borderd
#ff7fd3
........
........
........
........
........
........
........
00000000
v_borderlu
#fffcfd
0.......
........
........
........
........
........
........
........
v_borderru
#fffcfd
.......0
........
........
........
........
........
........
........
v_borderld
#fffcfd
........
........
........
........
........
........
........
0.......
v_borderrd
#fffcfd
........
........
........
........
........
........
........
.......0
m_grewl
yellow
..00....
.000....
.00.....
.00.....
.00.....
.00.....
.000....
..00....
m_grewr
yellow
....00..
....000.
.....00.
.....00.
.....00.
.....00.
....000.
....00..
m_grewu
yellow
........
.000000.
00000000
00....00
........
........
........
........
m_grewd
yellow
........
........
........
........
00....00
00000000
.000000.
........
m_grow
green
........
........
...00...
..0..0..
..0..0..
...00...
........
........
m_pop
red
........
........
...00...
..0..0..
..0..0..
...00...
........
........
m_filml
transparent
m_filmr
transparent
m_filmu
transparent
m_filmd
transparent
m_cornerl_ok
transparent
m_cornerr_ok
transparent
m_corneru_ok
transparent
m_cornerd_ok
transparent
background
#fffcfd
click
transparent
debug_rm
transparent
m_facingl
transparent
m_facingr
transparent
=======
legend
=======
player = livedog
. = background
# = wall
@ = livedog and v_livedogr
* = gumsource
u = bowl and m_facingr
U = bowl and m_facingl
d = spikesl
a = spikesr
s = spikesu
w = spikesd
b = crate
(m_foo: invisible mark; often created and destoryed within the same turn)
(g_foo: group, used to refer to many things at once (to simplify rules))
(v_foo: visual-only)
g_fall = falldog or fallcrate
g_crate = crate or fallcrate
g_spikes = spikesl or spikesr or spikesu or spikesd
g_spikesh = spikesl or spikesr
g_spikesv = spikesu or spikesd
g_dog = livedog or falldog or deaddog
g_gum = gumsource or gumgrowth
g_platform = g_gum or wall or crate
g_pushable = livedog or crate
g_push_blocker = wall or g_gum or g_pushable
gm_film = m_filml or m_filmr or m_filmu or m_filmd (walls to prevent separate gums from blobbing together)
gm_grew = m_grewl or m_grewr or m_grewu or m_grewd (todo: we don't actually use these separately rn -- we only care about gm_grew)
gv_dog = v_livedogl or v_livedogr or v_falldogl or v_falldogr or v_deaddogl or v_deaddogr or v_livedog_guml or v_livedog_gumr or v_eatdogl or v_eatdogr
gm_facing = m_facingl or m_facingr
gv_border = v_borderl or v_borderr or v_borderu or v_borderd or v_borderlu or v_borderru or v_borderld or v_borderrd
gv_cornerl = v_borderlu or v_borderld
gv_cornerr = v_borderru or v_borderrd
gv_corneru = v_borderlu or v_borderru
gv_cornerd = v_borderld or v_borderrd
gm_corner_ok = m_cornerl_ok or m_cornerr_ok or m_corneru_ok or m_cornerd_ok
g_anticorner = wall or g_gum or crate
=======
sounds
=======
gm_grew create 68129502
deaddog create 4118704
endlevel 12262902
falldog move 6695707
m_pop create 83057900 (99944902) (18736702)
================
collisionlayers
================
background
wall, g_spikes, bowl
g_gum
g_crate
v_borderl
v_borderr
v_borderu
v_borderd
v_borderlu
v_borderru
v_borderld
v_borderrd
g_dog
gv_dog
v_gumbowl
v_gumshine
(invisible:)
m_filml
m_filmr
m_filmu
m_filmd
m_grow, m_pop
m_grewl
m_grewr
m_grewu
m_grewd
click, debug_rm
gm_facing
m_cornerl_ok
m_cornerr_ok
m_corneru_ok
m_cornerd_ok
======
rules
======
(bugs:
* you can push crates into spikes sideways - half-fixed
* dropping a crate on a dog doesnt work
* spikes in a crate still pop gum
* can't ride crate on gum pillar - gum should have power push, but dog does not(?)
)
(facing direction)
[vertical player] -> cancel
[left player][m_facingr] -> [left player][m_facingl]
[right player][m_facingl] -> [right player][m_facingr]
(falling)
[g_fall] -> [down g_fall]
[> falldog | g_platform] -> [livedog | g_platform]
[> fallcrate | g_platform] -> [crate | g_platform]
(livedog movement)
[> livedog g_gum] -> [livedog g_gum]
[> livedog | g_pushable no g_gum] -> [> livedog | > g_pushable]
[> g_pushable | stationary g_push_blocker] -> [g_pushable | g_push_blocker]
horizontal [> g_pushable | g_spikesv] -> [g_pushable | g_spikesv] (wip)
(grow)
[g_gum click] -> [g_gum click m_grow]
(flood fill m_grow)
left [g_gum m_grow no m_filml | no wall g_gum] -> [g_gum m_grow | g_gum m_grow]
+right [g_gum m_grow no m_filmr | no wall g_gum] -> [g_gum m_grow | g_gum m_grow]
+up [g_gum m_grow no m_filmu | no wall g_gum] -> [g_gum m_grow | g_gum m_grow]
+down [g_gum m_grow no m_filmd | no wall g_gum] -> [g_gum m_grow | g_gum m_grow]
(find all possible growth directions)
left [g_gum m_grow no m_filml | no wall no g_gum] -> [g_gum m_grow | m_grewl]
+right [g_gum m_grow no m_filmr | no wall no g_gum] -> [g_gum m_grow | m_grewr]
+up [g_gum m_grow no m_filmu | no wall no g_gum] -> [g_gum m_grow | m_grewu]
+down [g_gum m_grow no m_filmd | no wall no g_gum] -> [g_gum m_grow | m_grewd]
[gm_grew] -> [gm_grew gumgrowth]
(shove in each possible growth direction)
up [m_grewu g_pushable | no g_push_blocker] -> [m_grewu | g_pushable]
down [m_grewd g_pushable | no g_push_blocker] -> [m_grewd | g_pushable]
left [m_grewl g_pushable | no g_push_blocker] -> [m_grewl | g_pushable]
right [m_grewr g_pushable | no g_push_blocker] -> [m_grewr | g_pushable]
(create film)
left [g_gum gm_grew | g_gum no m_grow no gm_grew] -> [g_gum gm_grew m_filml | g_gum m_filmr]
right [g_gum gm_grew | g_gum no m_grow no gm_grew] -> [g_gum gm_grew m_filmr | g_gum m_filml]
up [g_gum gm_grew | g_gum no m_grow no gm_grew] -> [g_gum gm_grew m_filmu | g_gum m_filmd]
down [g_gum gm_grew | g_gum no m_grow no gm_grew] -> [g_gum gm_grew m_filmd | g_gum m_filmu]
(cleanup)
[m_grow] -> []
[gm_grew] -> []
(pop on spikes)
[g_gum g_spikes] -> [g_gum m_pop g_spikes]
left [g_gum m_pop no m_filml | g_gum] -> [g_gum m_pop | g_gum m_pop]
+right [g_gum m_pop no m_filmr | g_gum] -> [g_gum m_pop | g_gum m_pop]
+up [g_gum m_pop no m_filmu | g_gum] -> [g_gum m_pop | g_gum m_pop]
+down [g_gum m_pop no m_filmd | g_gum] -> [g_gum m_pop | g_gum m_pop]
[debug_rm gumgrowth] -> [debug_rm gumgrowth m_pop]
left [m_filml | gumgrowth m_pop] -> [ | gumgrowth m_pop]
right [m_filmr | gumgrowth m_pop] -> [ | gumgrowth m_pop]
up [m_filmu | gumgrowth m_pop] -> [ | gumgrowth m_pop]
down [m_filmd | gumgrowth m_pop] -> [ | gumgrowth m_pop]
[gumgrowth m_pop] -> [m_pop]
[gm_film m_pop] -> [m_pop]
[m_pop] -> []
(fall)
late down [livedog no g_gum | no g_platform] -> [falldog | ]
late down [crate no g_gum | no g_platform] -> [fallcrate | ]
late [g_fall] -> again
(die)
late [g_dog g_spikes] -> [deaddog g_spikes]
(film between sources - must be after pop. this is why we run_rules_on_level_start)
left [gumsource | gumsource] -> [gumsource m_filml | gumsource m_filmr]
right [gumsource | gumsource] -> [gumsource m_filmr | gumsource m_filml]
up [gumsource | gumsource] -> [gumsource m_filmu | gumsource m_filmd]
down [gumsource | gumsource] -> [gumsource m_filmd | gumsource m_filmu]
(sprites)
(bowl)
late [v_gumbowl] -> []
late [bowl g_gum] -> [bowl g_gum v_gumbowl]
(dog)
late [gv_dog] -> []
late [m_facingr][livedog no bowl no g_gum]-> [m_facingr][livedog v_livedogr]
late [m_facingl][livedog no bowl no g_gum]-> [m_facingl][livedog v_livedogl]
late [m_facingl][livedog bowl no g_gum]-> [m_facingl][livedog bowl v_eatdogl]
late [m_facingr][livedog bowl no g_gum]-> [m_facingr][livedog bowl v_eatdogr]
late [m_facingr][livedog g_gum]-> [m_facingr][livedog g_gum v_livedog_gumr]
late [m_facingl][livedog g_gum]-> [m_facingl][livedog g_gum v_livedog_guml]
late [m_facingr][falldog]-> [m_facingr][falldog v_falldogr]
late [m_facingl][falldog]-> [m_facingl][falldog v_falldogl]
late [m_facingr][deaddog]-> [m_facingr][deaddog v_deaddogr]
late [m_facingl][deaddog]-> [m_facingl][deaddog v_deaddogl]
(borders)
(note: nonlate bc of movement rules)
[gv_border] -> []
(detect level borders)
left [gumsource | ] -> [> gumsource | ]
[stationary gumsource] -> [gumsource v_borderl]
right [gumsource | ] -> [> gumsource | ]
[left gumsource] -> [gumsource v_borderr]
up [gumsource | ] -> [> gumsource | ]
[right gumsource] -> [gumsource v_borderu]
down [gumsource | ] -> [> gumsource | ]
[up gumsource] -> [gumsource v_borderd]
[gumsource] -> [stationary gumsource]
late left [g_gum | no g_gum] -> [g_gum v_borderl | ]
late right [g_gum | no g_gum] -> [g_gum v_borderr | ]
late up [g_gum | no g_gum] -> [g_gum v_borderu | ]
late down [g_gum | no g_gum] -> [g_gum v_borderd | ]
late [m_filml] -> [m_filml v_borderl]
late [m_filmr] -> [m_filmr v_borderr]
late [m_filmu] -> [m_filmu v_borderu]
late [m_filmd] -> [m_filmd v_borderd]
(bend corners)
late left [g_gum | no g_gum] -> [g_gum v_borderl | ]
late right [g_gum | no g_gum] -> [g_gum v_borderr | ]
late up [g_gum | no g_gum] -> [g_gum v_borderu | ]
late down [g_gum | no g_gum] -> [g_gum v_borderd | ]
late [v_gumshine] -> []
late [v_borderl v_borderu] -> [v_borderl v_borderu v_borderlu]
late [v_borderr v_borderu] -> [v_borderr v_borderu v_borderru v_gumshine] (v_gumshine is separate b/c v_borderru might get deleted later)
late [v_borderl v_borderd] -> [v_borderl v_borderd v_borderld]
late [v_borderr v_borderd] -> [v_borderr v_borderd v_borderrd]
(flush with walls)
late [gm_corner_ok] -> []
late left [gv_cornerl | no g_anticorner] -> [gv_cornerl m_cornerl_ok | ]
late right [gv_cornerr | no g_anticorner] -> [gv_cornerr m_cornerr_ok | ]
late up [gv_corneru | no g_anticorner] -> [gv_corneru m_corneru_ok | ]
late down [gv_cornerd | no g_anticorner] -> [gv_cornerd m_cornerd_ok | ]
(flush with film)
late [v_borderlu no m_cornerl_ok no m_corneru_ok] -> []
late [v_borderru no m_cornerr_ok no m_corneru_ok] -> []
late [v_borderld no m_cornerl_ok no m_cornerd_ok] -> []
late [v_borderrd no m_cornerr_ok no m_cornerd_ok] -> []
late [click] -> []
late [debug_rm] -> []
==============
winconditions
==============
all bowl on livedog
=======
levels
=======
message press escape anytime to return to level select
section droqen 1
################
##............##
##............##
##.@........u.##
######....######
#####*....######
######....*#####
######....######
######....######
######ssss######
################
section droqen 2
(cheese - my solution (or sylvie's, which works even with 1-higher spikes))
######*#*#######
##............##
##............##
##.@........u.##
######....######
#####*....######
######....######
######....######
######....######
######ssss######
################
section droqen 3
##************##
##............##
##............##
##.@........u.##
######....######
######....######
######....######
######....######
######....######
######ssss######
################
section droqen 4
################
#..............#
#..............#
#.@..........u.#
####........####
###*........####
###*........####
####........####
####........####
####ssssssss####
################
section pancelor 5
################
#..............#
#..............#
#.......###....#
#####...ww#....#
#####.....#....#
#####.....#..U.#
####*.....@.####
#####.....######
####*.....######
################
section pancelor 6
#####*#*########
##a...........##
##a...........##
##a.........u.##
##a.......d#####
##a.......d#####
##a.......d#####
##a.......d#####
##a.......d#####
##a...@...d#####
###*******######
section pancelor 7
#########*######
#..............#
#..............#
#.@..........u.#
#####......#####
####*......*####
#####......#####
#####......#####
#####......#####
#####ssssss#####
################
section pancelor 8
################
###............#
###..........U.#
###.........####
###.###.....####
##...w......####
##..........####
#*........@.####
##......########
#*......########
################
section droqen 9
################
#...........####
#u.....####.####
##.....####.####
##.....####.####
##.....w.....###
##...........###
##.@.........*##
#####........###
#####........*##
################
section pancelor 10
#####*#*########
##..........u.##
##.........#####
##.........#####
##.........#####
##.........#####
##.........#####
##....@....#####
##....#....#w###
##............*#
################
message sketches / debug levels
section sketches / debug levels
(testing border detection)
*##**#*###**####
##............#*
##............#*
*#.@........u.##
*#####....#####*
*#####....######
######....######
######....#####*
*#####....#####*
######ssss######
*##**####**#****
##########
#u.......#
##..@....#
######...#
######..*#
#############
#...........#
#...........#
#.@.......u.#
#####...#####
####*...#####
#####...*####
###.....#####
###........##
###........##
#############
#############
#...........#
#...........#
#.........u.#
#.........###
#.........###
#.........###
#a.......d###
#a.......d###
#a...@...d###
###*#*#*#####
(cheese - just walk across)
#######*#######
#.............#
#.............#
#.@.........u.#
#####.....#####
####*.....*####
#####.....#####
#####.....#####
#####.....#####
#####sssss#####
###############
(possible! extreme lvl 4)
#########################################
#.......................................#
#.......................................#
#.......................................#
#.......................................#
#.......................................#
#.......................................#
#.......................................#
#.......................................#
#.......................................#
#.@...................................u.#
#####...............................#####
####*...............................#####
####*...............................#####
####*...............................#####
####*...............................#####
#####...............................#####
#####...............................#####
#####sssssssssssssssssssssssssssssss#####
(possible! extreme lvl 4 (but less big))
####################################
#..................................#
#..................................#
#..................................#
#..................................#
#.@..............................u.#
#####..........................#####
####*..........................#####
####*..........................#####
####*..........................#####
####*..........................#####
#####..........................#####
#####..........................#####
#####ssssssssssssssssssssssssss#####
(possible, but this is just a worse lvl 3)
#******************#
#..................#
#..................#
#.@..............u.#
#####..........#####
#####..........#####
#####..........#####
#####ssssssssss#####
####################
###############
#......w......#
#.............#
#...@.......u.#
#####.....#####
####*.....*####
####*.....*####
####*.....*####
####*.....*####
#####.....#####
###############
(possible - a bit too straightforward)
################
#....wwwwww....#
#..............#
#..@.........u.#
#####......#####
#####......#####
#####......*####
#####......#####
#####......*####
#####......#####
################
################
#..@..........##
######.#....u.##
#...##.##.######
#...##.....#####
#..........#####
#.s........*####
######.....#####
######.....*####
######.....#####
################
################
#.@...........##
###.........u.##
#.....###.######
#......w...#####
#..........#####
#..........*####
######.....#####
######.....*####
######.....#####
################
################
#.............##
#..@..........##
######.#....u.##
#...##.##.######
#...##.....#####
#..........#####
#.s........*####
######.....#####
######.....*####
################
(possible! decent)
(see also pancelor 6)
################
##a...........##
##a...........##
##a...........##
##a.........u.##
##a.......d#####
##a.......d#####
##a.......d#####
##a.......d#####
##a...@...d#####
###*******######
################
#####.........##
#####.........##
#####.......u.##
#####.....d#####
#####.....d#####
#####.....d#####
#####.....d#####
#####.....d#####
#####..@..d#####
######****######
#####*#*########
##............##
##............##
##..........u.##
##.........##.*#
##.........##s##
##.........#####
##..........####
##..........####
##....@.....d###
###########*####
#####*#*########
##............##
##............##
##..........u.##
##.........#####
##.........#####
##.........#####
##.........#####
##.........#####
##..@......#####
####*#s#*#######
(possible; pretty easy)
################
##....w.......##
##............##
##..........u.##
##.........#####
##.........#####
##.........#####
##.........#####
##.........#####
##..@......#####
####*#s#*#######
(possible! not a very clear level but it has some cool stuff going on)
(see also pancelor 10)
#####*#*########
##..........u.##
##.........#####
##.........#####
##.........#####
##.........#####
##.........#####
##.........#####
##.........#####
##....@....#####
######*#s#######
(probably impossible...?)
(see also pancelor 10)
#####*##*#######
##..........u.##
##.........#####
##.........#####
##.........#####
##.........#####
##.........#####
##....@....#####
##....#....#w###
##............*#
################
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment