All pastes #618105 Raw Edit

Something

public text v1 · immutable
·published 2007-07-13 19:13 UTC
rendered paste body
.extreq 0


.beginreses
.endreses


#########################################################
######## Apply incoming mode data to first timer ########
######## --------------------------------------- ########
########                                         ########
######## DON'T TOUCH MODE FUNCTIONS UNLESS YOU   ########
######## WANT A MODE TO DO SOMETHING SPECIFIC    ########
######## FOR THAT LEVEL!                         ########
########                                         ########
######## GFX EFFECTS APPLIED OUTSIDE OF VM SYS!  ########
#########################################################
.beginfunc applyMode
.endargs
.var sharedHTContainer              string ""
.var modeString                     string "__mode"
.var mode                           int 0
.var LAST_OBJECT                    string ""
.var LAST_INT_1                     int 0
.var LAST_INT                       int 0
.endvars
OP_POP_OBJECT
OP_POP_INT
OP_POP_INT

OP_SYSTEM_SHARED
OP_ASSIGN_OBJECT v:LAST_OBJECT v:sharedHTContainer
OP_POP_OBJECT

SUB_OP_ONE_HT_GET v:sharedHTContainer v:modeString
OP_CONST_INT 0
OP_SUB_EXTRACT_INT v:LAST_OBJECT v:LAST_INT_1
OP_ASSIGN_INT v:LAST_INT v:mode
OP_POP_INT
OP_POP_INT


OP_EQUALS_CONST_INT v:mode 0
OP_CONTROL_JUMP_CONDITIONAL l:mode0
OP_EQUALS_CONST_INT v:mode 1
OP_CONTROL_JUMP_CONDITIONAL l:mode1
OP_EQUALS_CONST_INT v:mode 2
OP_CONTROL_JUMP_CONDITIONAL l:mode2
OP_EQUALS_CONST_INT v:mode 3
OP_CONTROL_JUMP_CONDITIONAL l:mode3
OP_EQUALS_CONST_INT v:mode 4
OP_CONTROL_JUMP_CONDITIONAL l:mode4
OP_EQUALS_CONST_INT v:mode 5
OP_CONTROL_JUMP_CONDITIONAL l:mode5
OP_EQUALS_CONST_INT v:mode 6
OP_CONTROL_JUMP_CONDITIONAL l:mode6
OP_EQUALS_CONST_INT v:mode 7
OP_CONTROL_JUMP_CONDITIONAL l:mode7
OP_CONTROL_JUMP l:end

.label mode0
OP_CONTROL_JUMP l:end
.label mode1
OP_CONTROL_JUMP l:end
.label mode2
OP_CONTROL_JUMP l:end
.label mode3
SUB_OP_ONE_GAME_SET_TIMER_STATIC -1 f:fastForwardModeTimerHit 1000 0
OP_CONTROL_CALL 0 0 0 0 0 0 f:fastForwardModeTimerHit
OP_CONTROL_JUMP l:end
.label mode4
SUB_OP_ONE_GAME_SET_TIMER_STATIC -1 f:timeWarpModeTimerHit 1000 0
OP_CONTROL_CALL 0 0 0 0 0 0 f:timeWarpModeTimerHit
OP_CONTROL_JUMP l:end
.label mode5
SUB_OP_ONE_GAME_SET_TIMER_STATIC -1 f:superJumpModeTimerHit 1000 0
OP_CONTROL_CALL 0 0 0 0 0 0 f:superJumpModeTimerHit
OP_CONTROL_JUMP l:end
.label mode6
SUB_OP_ONE_GAME_SET_TIMER_STATIC -1 f:ultraShakeModeTimerHit 1000 0
OP_CONTROL_CALL 0 0 0 0 0 0 f:ultraShakeModeTimerHit
OP_CONTROL_JUMP l:end
.label mode7
SUB_OP_ONE_GAME_SET_TIMER_STATIC -1 f:psychoticModeTimerHit 500 0
OP_CONTROL_CALL 0 0 0 0 0 0 f:psychoticModeTimerHit
OP_CONTROL_JUMP l:end

.label end
OP_CONTROL_RET
.endfunc


.beginfunc fastForwardModeTimerHit
.endargs
.endvars
SUB_OP_ONE_GAME_GET_PLAYER_X_RATE
OP_LESS_THAN_CONST_INT 0 0
OP_CONTROL_JUMP_CONDITIONAL l:neg
OP_CONTROL_JUMP l:pos

.label neg
SUB_OP_ONE_GAME_SET_PLAYER_X_RATE_STATIC -1 10
OP_CONTROL_JUMP l:end

.label pos
SUB_OP_ONE_GAME_SET_PLAYER_X_RATE_STATIC 1 10
OP_CONTROL_JUMP l:end

.label end
OP_CONTROL_RET
.endfunc

.beginfunc timeWarpModeTimerHit
.endargs
.endvars
SUB_OP_ONE_GAME_SET_SLOWDOWN_RATE_STATIC 0

SUB_OP_ONE_GAME_RAND_MAX_STATIC 3
OP_EQUALS_CONST_INT 0 0
OP_CONTROL_JUMP_CONDITIONAL l:timeflux
OP_EQUALS_CONST_INT 0 1
OP_CONTROL_JUMP_CONDITIONAL l:warpX
OP_EQUALS_CONST_INT 0 2
OP_CONTROL_JUMP_CONDITIONAL l:speedChange

## flux

.label timeflux
SUB_OP_ONE_GAME_RAND_MAX_STATIC 3       # 1
SUB_OP_ONE_GAME_SET_SLOWDOWN_RATE 1
OP_CONTROL_JUMP l:end

## warpX

.label warpX
SUB_OP_ONE_GAME_GET_PLAYER_X_POS    # 1
SUB_OP_ONE_GAME_RAND_MAX_STATIC 80  # 2
OP_SUBTRACT_CONST_INT 2 40          # 3
OP_ADDITION_INT 1 3                 # 4
SUB_OP_ONE_GAME_SET_PLAYER_X_POS 4
OP_CONTROL_JUMP l:end

## speedChange

.label speedChange
SUB_OP_ONE_GAME_GET_PLAYER_X_RATE       # 1 2
OP_LESS_THAN_CONST_INT 1 0
OP_CONTROL_JUMP_CONDITIONAL l:speedChange_neg

.label speedChange_pos
SUB_OP_ONE_GAME_SET_PLAYER_X_RATE_STATIC -1 23
OP_CONTROL_JUMP l:end

.label speedChange_neg
SUB_OP_ONE_GAME_SET_PLAYER_X_RATE_STATIC 1 23
OP_CONTROL_JUMP l:end

.label end
OP_CONTROL_RET
.endfunc

.beginfunc superJumpModeTimerHit
.endargs
.endvars
SUB_OP_ONE_GAME_SET_POWER_STATIC hx:700
OP_CONTROL_RET
.endfunc

.beginfunc ultraShakeModeTimerHit
.endargs
.endvars
SUB_OP_ONE_GAME_RAND_MAX_STATIC 30
SUB_OP_ONE_GAME_SET_SHAKE 0
OP_CONTROL_RET
.endfunc

.beginfunc psychoticModeTimerHit
.endargs
.endvars
SUB_OP_ONE_GAME_WHITE_OUT_STATIC -1
SUB_OP_ONE_GAME_SET_SHAKE_STATIC 0
SUB_OP_ONE_GAME_SET_SLOWDOWN_RATE_STATIC 0

# power modder

.label powerModder
SUB_OP_ONE_GAME_RAND_MAX_STATIC hx:27f       # 1
SUB_OP_ONE_GAME_SET_POWER 0
OP_POP_INT

.label shake
SUB_OP_ONE_GAME_RAND_MAX_STATIC 15
SUB_OP_ONE_GAME_SET_SHAKE 0
OP_POP_INT

SUB_OP_ONE_GAME_RAND_MAX_STATIC 6
OP_EQUALS_CONST_INT 0 0
OP_CONTROL_JUMP_CONDITIONAL l:whiteOut
OP_EQUALS_CONST_INT 0 1
OP_CONTROL_JUMP_CONDITIONAL l:timeflux
OP_EQUALS_CONST_INT 0 2
OP_CONTROL_JUMP_CONDITIONAL l:blackOut
OP_EQUALS_CONST_INT 0 3
OP_CONTROL_JUMP_CONDITIONAL l:warpX
OP_EQUALS_CONST_INT 0 4
OP_CONTROL_JUMP_CONDITIONAL l:changeDirection
OP_EQUALS_CONST_INT 0 5
OP_CONTROL_JUMP_CONDITIONAL l:changeSpeed

# whiteOut

.label whiteOut
SUB_OP_ONE_GAME_WHITE_OUT_STATIC hx:00FFFFFF
OP_CONTROL_JUMP l:end

## flux

.label timeflux
SUB_OP_ONE_GAME_RAND_MAX_STATIC 3       # 1
SUB_OP_ONE_GAME_SET_SLOWDOWN_RATE 1
OP_CONTROL_JUMP l:end

## warpX

.label warpX
SUB_OP_ONE_GAME_GET_PLAYER_X_POS    # 1
SUB_OP_ONE_GAME_RAND_MAX_STATIC 80  # 2
OP_SUBTRACT_CONST_INT 2 40          # 3
OP_ADDITION_INT 1 3                 # 4
SUB_OP_ONE_GAME_SET_PLAYER_X_POS 4
OP_CONTROL_JUMP l:end

## blackOut

.label blackOut
SUB_OP_ONE_GAME_WHITE_OUT_STATIC hx:00000000
OP_CONTROL_JUMP l:end

## changeDirection

.label changeDirection
SUB_OP_ONE_GAME_GET_PLAYER_X_RATE       # 1 2
OP_LESS_THAN_CONST_INT 1 0
OP_CONTROL_JUMP_CONDITIONAL l:changeDirection_neg

.label changeDirection_pos
SUB_OP_ONE_GAME_SET_PLAYER_X_RATE_STATIC -1 23
OP_CONTROL_JUMP l:end

.label changeDirection_neg
SUB_OP_ONE_GAME_SET_PLAYER_X_RATE_STATIC 1 23
OP_CONTROL_JUMP l:end

## changeSpeed

.label changeSpeed
SUB_OP_ONE_GAME_GET_PLAYER_X_RATE       # 1 2
OP_LESS_THAN_CONST_INT 1 0
OP_CONTROL_JUMP_CONDITIONAL l:changeSpeed_neg

.label changeSpeed_pos
SUB_OP_ONE_GAME_RAND_MAX_STATIC 15   # 3
OP_CONST_INT -1                      # 4
OP_ADDITION_CONST_INT 3 8            # 5
SUB_OP_ONE_GAME_SET_PLAYER_X_RATE 4 5
OP_CONTROL_JUMP l:end

.label changeSpeed_neg
SUB_OP_ONE_GAME_RAND_MAX_STATIC 15   # 3
OP_CONST_INT -1                      # 4
OP_ADDITION_CONST_INT 3 8            # 5
SUB_OP_ONE_GAME_SET_PLAYER_X_RATE 4 5
OP_CONTROL_JUMP l:end

.label end
OP_CONTROL_RET
.endfunc


























##################################################
########                                  ########
########     START EDITTING FROM HERE     ########
########                                  ########
##################################################



.beginreses
.resout     500 000000010000000100000000
.resout     600 000000010000000100000500
.resout     700 0000000000000000
.resout     701 00000500
.endreses



#############################
######## Scene setup ########
#############################
.beginfunc sceneGraphicsSetup
.endargs
.endvars

### resize db

OP_CONST_INT 1
OP_CONST_INT 1
OP_CONST_INT 2
OP_CONST_INT 1
SUB_OP_ONE_GAME_SCENE_RESIZE_DB 3 2 1 0
OP_MULTI_POP_INT 4




### load interpolators

OP_CONST_SHORT 700
OP_CONST_SHORT 701
OP_CONST_INT 0
OP_CONST_INT 1
OP_CONST_INT 0
OP_CONTROL_CALL 0 2 3 0 0 0 f:loadNewInterpolatorFromRes



### load up images

OP_CONST_INT 0
OP_CONST_STRING "JAR_RES:/z0_shared.script:0::0:"
SUB_OP_ONE_GAME_SCENE_LOAD_NEW_IMAGE 0 0
OP_POP_OBJECT
OP_POP_INT




### load up sequences

OP_CONST_SHORT 500
OP_CONST_INT 0
OP_CONTROL_CALL 0 1 1 0 0 0 f:loadNewSequenceFromRes

OP_CONST_SHORT 600
OP_CONST_INT 1
OP_CONTROL_CALL 0 1 1 0 0 0 f:loadNewSequenceFromRes



### load sprite

OP_CONST_INT 0
OP_CONST_INT 0
OP_CONST_INT 40
OP_CONST_INT 40
OP_CONST_INT 0
OP_CONST_INT 1
SUB_OP_ONE_GAME_SCENE_LOAD_NEW_SPRITE 5 4 3 2 1 0
OP_MULTI_POP_INT 6



### load layers

OP_CONST_INT 0
OP_CONST_INT 1 
SUB_OP_ONE_GAME_SCENE_RESIZE_LAYER 1 0
OP_MULTI_POP_INT 2

OP_CONST_INT 0
OP_CONST_INT 0
OP_CONST_INT 5
SUB_OP_ONE_GAME_SCENE_RESIZE_LAYER_ITEMS 2 1 0
OP_MULTI_POP_INT 3

OP_CONST_INT 0
OP_CONST_INT 0
OP_CONST_INT 0
OP_CONST_INT 0
OP_CONST_INT 5
OP_CONST_INT 40
OP_CONST_INT 10
OP_CONTROL_CALL 0 0 7 0 0 0 f:setLinkedParallaxLayerLoop

### load layer items

SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0 3 0 0 0
SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0 2 0 0 0
SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0 1 0 0 0
SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0 0 0 0 0

SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0  3 1 0 0
SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 40 2 1 0 0
SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0  1 1 0 0
SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0  0 1 0 0

SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0  3 2 0 0
SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 80 2 2 0 0
SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0  1 2 0 0
SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0  0 2 0 0

SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0   3 3 0 0
SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 120 2 3 0 0
SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0   1 3 0 0
SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0   0 3 0 0

SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0   3 4 0 0
SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 160 2 4 0 0
SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0   1 4 0 0
SUB_OP_ONE_GAME_SCENE_SET_ITEM_STATIC 0   0 4 0 0

OP_CONTROL_RET 
.endfunc


.beginfunc setNoneLayer
.arg setIndex          int
.arg layerIndex        int
.endargs
.var pos               int 0
.var data              int 0
.endvars
OP_MULTI_POP_INT 2

OP_CONST_INT 0
OP_CONST_INT 0
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 3
OP_CONST_INT 1
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONTROL_RET
.endfunc

.beginfunc setStaticLayer
.arg setIndex          int
.arg layerIndex        int
.arg transX            int
.arg transY            int
.endargs
.var pos               int 0
.var data              int 0
.endvars
OP_MULTI_POP_INT 2

OP_CONST_INT 0
OP_CONST_INT 1
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 1
OP_CONST_INT 0 # unused
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:transX v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 2
OP_CONST_INT 0 # unused
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:transY v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 3
OP_CONST_INT 1
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONTROL_RET
.endfunc

.beginfunc setScrollLayer
.arg setIndex          int
.arg layerIndex        int
.arg transX            int
.arg transY            int
.arg xRate             int
.arg yRate             int
.endargs
.var pos               int 0
.var data              int 0
.endvars
OP_MULTI_POP_INT 2

OP_CONST_INT 0
OP_CONST_INT 2
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 1
OP_CONST_INT 0 # unused
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:transX v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 2
OP_CONST_INT 0 # unused
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:transY v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 3
OP_CONST_INT 1
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 4
OP_CONST_INT 0
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 5
OP_CONST_INT 0
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 6
OP_CONST_INT 0 # unused
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:xRate v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 7
OP_CONST_INT 0 # unused
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:yRate v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 8
OP_CONST_INT 0
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 9
OP_CONST_INT 0
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONTROL_RET
.endfunc

.beginfunc setLinkedParallaxLayer
.arg setIndex          int
.arg layerIndex        int
.arg transX            int
.arg transY            int
.arg slowDownRate      int
.endargs
.var pos               int 0
.var data              int 0
.endvars
OP_MULTI_POP_INT 2

OP_CONST_INT 0
OP_CONST_INT 3
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 1
OP_CONST_INT 0 # unused
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:transX v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 2
OP_CONST_INT 0 # unused
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:transY v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 3
OP_CONST_INT 1
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 4
OP_CONST_INT 0 # unused
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:slowDownRate v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 5
OP_CONST_INT 0
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONTROL_RET
.endfunc

.beginfunc setLinkedParallaxLayerLoop
.arg setIndex          int
.arg layerIndex        int
.arg transX            int
.arg transY            int
.arg slowDownRate      int
.arg loopLength        int
.arg repeatCount       int
.endargs
.var pos               int 0
.var data              int 0
.endvars
OP_MULTI_POP_INT 2

OP_CONST_INT 0
OP_CONST_INT 4
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 1
OP_CONST_INT 0 # unused
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:transX v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 2
OP_CONST_INT 0 # unused
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:transY v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 3
OP_CONST_INT 1
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 4
OP_CONST_INT 0 # unused
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:slowDownRate v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 5
OP_CONST_INT 0
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:data v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 6
OP_CONST_INT 0 # unused
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:loopLength v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONST_INT 7
OP_CONST_INT 0 # unused
SUB_OP_ONE_GAME_SCENE_SET_LAYER_PARAM v:repeatCount v:pos v:layerIndex v:setIndex
OP_MULTI_POP_INT 2

OP_CONTROL_RET
.endfunc

.beginfunc loadNewInterpolatorFromRes
.arg xyResId          short
.arg timeResId        short
.arg loadPos          int
.arg repeat           int
.arg smoothInt        int
.endargs
.endvars
OP_SYSTEM_DIRECT_LOAD_RES_POSITION 0                # 0obj  = barray
OP_SIZE_OF 0                                        # 3int  = barray size
OP_DIVIDE_CONST_INT 3 4                             # 4int  = iarray size
OP_CONST_INT 0                                      # 5int  = start offset
SUB_OP_ONE_ARRAY_BYTE_TO_INT 4 5 0                  # 1obj  = iarray
OP_ASSIGN_OBJECT 1 0
OP_POP_OBJECT
OP_MULTI_POP_INT 3

OP_SYSTEM_DIRECT_LOAD_RES_POSITION 1                # 1obj  = barray
OP_SIZE_OF 1                                        # 3int  = barray size
OP_DIVIDE_CONST_INT 3 4                             # 4int  = iarray size
OP_CONST_INT 0                                      # 5int  = start offset
SUB_OP_ONE_ARRAY_BYTE_TO_INT 4 5 1                  # 2obj  = iarray
OP_ASSIGN_OBJECT 2 1
OP_POP_OBJECT
OP_MULTI_POP_INT 3

SUB_OP_ONE_GAME_SCENE_LOAD_NEW_INTERPOLATION_POINTS v:smoothInt v:repeat 1 0 v:loadPos

OP_CONTROL_RET
.endfunc


.beginfunc loadNewSequenceFromRes
.arg resId            short
.arg loadPos          int
.endargs
.endvars
OP_SYSTEM_DIRECT_LOAD_RES_POSITION 0                # 0obj  = barray
OP_SIZE_OF 0                                        # 1int  = barray size
OP_DIVIDE_CONST_INT 1 4                             # 2int  = iarray size
OP_CONST_INT 0                                      # 3int  = start offset
SUB_OP_ONE_ARRAY_BYTE_TO_INT 2 3 0                  # 1obj  = iarray
SUB_OP_ONE_GAME_SCENE_LOAD_NEW_SEQUENCE 1 0
OP_CONTROL_RET
.endfunc



####################################
######## Post process setup ########
####################################
.beginfunc postProcessSetup
.endargs
.endvars
OP_CONTROL_CALL 0 0 0 0 0 0 f:applyMode

SUB_OP_ONE_GAME_SET_GAME_FLAGS_STATIC hx:00000001
SUB_OP_ONE_GAME_SET_GAME_FLAGS_2_STATIC hx:0000003F
SUB_OP_ONE_GAME_ON_DIE_STATIC f:onDie

OP_CONTROL_RET
.endfunc

.beginfunc onDie
.endargs
.endvars
SUB_OP_ONE_GAME_SET_RET_STATIC 2    # passed
SUB_OP_ONE_GAME_SET_STATE_STATIC 3  # game finished
OP_CONTROL_RET
.endfunc








#########################################################
######## Entry point                             ########
######## -----------                             ########
######## - Fill in stack lengths for all other   ########
########   calls                                 ########
######## - Add in basic images                   ########
######## - Add in maximum timer count            ########
######## - Add in basic image properties         ########
######## - Add in map data                       ########
######## - Add in post/scene setup addresses     ########
########                                         ########
#########################################################
.beginfunc main
.endargs
.var zeroItem                       int 0
.var imageIdString                  string "imageIds"
.var mapDataString                  string "mapData"
.var maxTimersString                string "maxTimers"
.var stackLengthsString             string "stackLengths"
.var spriteFrameWidthString         string "spriteFrameWidth"
.var postSetupEntryPointString      string "postSetupEntryPoint"
.var sceneSetupEntryPointString     string "sceneSetupEntryPoint"
.var sharedHTContainer              string ""
.var imageIdsArray                  string ""
.var mapDataArray                   string ""
.var maxTimersArray                 string ""
.var stackLengthsArray              string ""
.var postSetupEntryPointArray       string ""
.var sceneSetupEntryPointArray      string ""
.var spriteFrameWidthArray          string ""
.var singleCount                    int 1
.var timerCounter                   int 0
.var LAST_OBJECT                    string ""
.var LAST_INT                       int 0
.var LAST_LONG                      long 0
.endvars

### LAST_* should be invalid after this
OP_POP_OBJECT
OP_POP_INT
OP_POP_LONG

### move shared into setup var
OP_SYSTEM_SHARED
OP_ASSIGN_OBJECT v:LAST_OBJECT v:sharedHTContainer
OP_POP_OBJECT

### setup timers
OP_CONST_INT     1
OP_NEW_INT_ARRAY v:LAST_INT
OP_POP_INT

OP_CONST_INT     5   ### timer numbers
OP_SUB_ASSIGN_INT v:LAST_OBJECT v:LAST_INT v:timerCounter
OP_POP_INT
OP_INC_INT v:timerCounter 1

OP_ASSIGN_OBJECT v:LAST_OBJECT v:maxTimersArray
OP_POP_OBJECT

# load stack lengths
OP_CONTROL_CALL 0 0 0 0 0 0 f:loadStackLengths
OP_GET_RET 4
OP_ASSIGN_OBJECT v:LAST_OBJECT v:stackLengthsArray
OP_POP_OBJECT

# post process func
OP_NEW_INT_ARRAY v:singleCount
OP_ASSIGN_OBJECT v:LAST_OBJECT v:postSetupEntryPointArray
OP_POP_OBJECT

OP_CONST_INT f:postProcessSetup
OP_SUB_ASSIGN_INT v:postSetupEntryPointArray v:LAST_INT v:zeroItem
OP_POP_INT

# scene setup func
OP_NEW_INT_ARRAY v:singleCount
OP_ASSIGN_OBJECT v:LAST_OBJECT v:sceneSetupEntryPointArray
OP_POP_OBJECT

OP_CONST_INT f:sceneGraphicsSetup
OP_SUB_ASSIGN_INT v:sceneSetupEntryPointArray v:LAST_INT v:zeroItem
OP_POP_INT

# block image data
OP_CONTROL_CALL 0 0 0 0 0 0 f:loadMainImages
OP_GET_RET 4
OP_ASSIGN_OBJECT v:LAST_OBJECT v:imageIdsArray
OP_POP_OBJECT

# load map data
OP_CONTROL_CALL 0 0 0 0 0 0 f:loadMapData
OP_GET_RET 4
OP_ASSIGN_OBJECT v:LAST_OBJECT v:mapDataArray
OP_POP_OBJECT

# shared hash fill
SUB_OP_ONE_HT_PUT v:sharedHTContainer v:imageIdString v:imageIdsArray
SUB_OP_ONE_HT_PUT v:sharedHTContainer v:mapDataString v:mapDataArray
SUB_OP_ONE_HT_PUT v:sharedHTContainer v:maxTimersString v:maxTimersArray
SUB_OP_ONE_HT_PUT v:sharedHTContainer v:stackLengthsString v:stackLengthsArray
SUB_OP_ONE_HT_PUT v:sharedHTContainer v:postSetupEntryPointString v:postSetupEntryPointArray
SUB_OP_ONE_HT_PUT v:sharedHTContainer v:sceneSetupEntryPointString v:sceneSetupEntryPointArray



OP_CONTROL_RET
.endfunc


.beginfunc loadMainImages
.endargs
.var imageIdCounter                 int 0
.var imageIdCount                   int 17
.var imageIdsArray                  string ""
.var LAST_OBJECT                    string ""
.endvars
OP_POP_OBJECT

OP_NEW_OBJECT_ARRAY v:imageIdCount
OP_ASSIGN_OBJECT v:LAST_OBJECT v:imageIdsArray
OP_POP_OBJECT

OP_CONST_STRING "JAR:/kazwalk.png::1:"
OP_SUB_ASSIGN_OBJECT v:imageIdsArray v:LAST_OBJECT v:imageIdCounter
OP_INC_INT v:imageIdCounter 1
OP_POP_OBJECT

OP_CONST_STRING "JAR:/block1.png::1:"
OP_SUB_ASSIGN_OBJECT v:imageIdsArray v:LAST_OBJECT v:imageIdCounter
OP_INC_INT v:imageIdCounter 1
OP_POP_OBJECT

OP_SET_RET 4 v:imageIdsArray
OP_CONTROL_RET
.endfunc

.beginfunc loadStackLengths
.endargs
.var stackLengthCounter             int 0
.var tempInt                        int 0
.var stackLengthsArray              string ""
.endvars
OP_POP_INT
OP_POP_OBJECT

OP_CONST_INT     8
OP_NEW_INT_ARRAY v:tempInt
OP_POP_INT

OP_CONST_INT     64
OP_SUB_ASSIGN_INT v:stackLengthsArray v:tempInt v:stackLengthCounter
OP_POP_INT
OP_INC_INT v:stackLengthCounter 1

OP_CONST_INT     64
OP_SUB_ASSIGN_INT v:stackLengthsArray v:tempInt v:stackLengthCounter
OP_POP_INT
OP_INC_INT v:stackLengthCounter 1

OP_CONST_INT     64
OP_SUB_ASSIGN_INT v:stackLengthsArray v:tempInt v:stackLengthCounter
OP_POP_INT
OP_INC_INT v:stackLengthCounter 1

OP_CONST_INT     64
OP_SUB_ASSIGN_INT v:stackLengthsArray v:tempInt v:stackLengthCounter
OP_POP_INT
OP_INC_INT v:stackLengthCounter 1

OP_CONST_INT     64
OP_SUB_ASSIGN_INT v:stackLengthsArray v:tempInt v:stackLengthCounter
OP_POP_INT
OP_INC_INT v:stackLengthCounter 1

OP_CONST_INT     64
OP_SUB_ASSIGN_INT v:stackLengthsArray v:tempInt v:stackLengthCounter
OP_POP_INT
OP_INC_INT v:stackLengthCounter 1

OP_CONST_INT     64
OP_SUB_ASSIGN_INT v:stackLengthsArray v:tempInt v:stackLengthCounter
OP_POP_INT
OP_INC_INT v:stackLengthCounter 1

OP_CONST_INT     64
OP_SUB_ASSIGN_INT v:stackLengthsArray v:tempInt v:stackLengthCounter
OP_POP_INT
OP_INC_INT v:stackLengthCounter 1

OP_SET_RET 4 v:stackLengthsArray
OP_CONTROL_RET
.endfunc

.beginfunc loadMapData
.endargs
.var mapFloorCount                  int 200
.var floorCounter                   int 0
.var floorNew                       int hx:00000001
.var floorEmpty                     int hx:00000000
.var floorFull                      int hx:11111111
.var randShifter                    int 0
.var mapDataArray                   string ""
.var LAST_OBJECT                    string ""
.var LAST_INT                       int 0
.var LAST_LONG                      long 0
.endvars

### LAST_* should be invalid after this
OP_POP_OBJECT
OP_POP_INT
OP_POP_LONG

OP_NEW_INT_ARRAY v:mapFloorCount
OP_ASSIGN_OBJECT v:LAST_OBJECT v:mapDataArray
OP_POP_OBJECT

# set seed
OP_SYSTEM_TIME
OP_CONV_LONG_TO_INT v:LAST_LONG
OP_POP_LONG
SUB_OP_ONE_GAME_RAND_SEED v:LAST_INT
OP_POP_INT

# set top and bottom tiles
OP_PLACE_CONST_INT v:floorCounter 199
OP_SUB_ASSIGN_INT v:mapDataArray v:floorFull v:floorCounter

# initalize counter to 2
OP_PLACE_CONST_INT v:floorCounter 0

.label whileLessThan199
OP_GREATER_THAN_CONST_INT v:floorCounter 199
OP_CONTROL_JUMP_CONDITIONAL l:whileLessThan199End

# create random shift amount
SUB_OP_ONE_GAME_RAND_MAX_STATIC 8
OP_ASSIGN_INT v:LAST_INT v:randShifter
OP_POP_INT

OP_MULTIPLY_CONST_INT v:randShifter hx:FFFFFFFC
OP_ASSIGN_INT v:LAST_INT v:randShifter
OP_POP_INT
OP_CONTROL_JUMP l:done

.label done

# apply shift and place
OP_SHIFT_LEFT_INT v:randShifter v:floorNew
OP_SUB_ASSIGN_INT v:mapDataArray v:LAST_INT v:floorCounter
OP_POP_INT

# move up floor counter for next iteration
OP_INC_INT v:floorCounter 2

OP_CONTROL_JUMP l:whileLessThan199
.label whileLessThan199End

OP_SET_RET 4 v:mapDataArray
OP_CONTROL_RET
.endfunc