first commit
This commit is contained in:
189
game_logic.s
Normal file
189
game_logic.s
Normal file
@@ -0,0 +1,189 @@
|
||||
; Game Logic Module
|
||||
; ---------------------------------------------------------------------------
|
||||
|
||||
INCDIR "c:/Users/capitano/Documents/giochino/"
|
||||
INCLUDE "custom.i"
|
||||
|
||||
; XDEF InitGameLogic
|
||||
; XDEF UpdateGame
|
||||
; XDEF GameState
|
||||
; XDEF Stress
|
||||
; XDEF Satisfaction
|
||||
; XDEF GameTime
|
||||
; XDEF EmailCount
|
||||
|
||||
; XREF ReadInput
|
||||
; XREF LastKey
|
||||
; XREF DrawText
|
||||
; XREF ClearScreen
|
||||
; XREF EmailList
|
||||
|
||||
; SECTION Code,CODE_C
|
||||
|
||||
; Constants
|
||||
STATE_TITLE EQU 0
|
||||
STATE_PLAYING EQU 1
|
||||
STATE_GAMEOVER EQU 2
|
||||
|
||||
START_TIME EQU 9*60 ; 9:00 AM in minutes
|
||||
END_TIME EQU 17*60 ; 5:00 PM in minutes
|
||||
MAX_STRESS EQU 100
|
||||
START_SATIS EQU 50
|
||||
|
||||
InitGameLogic:
|
||||
move.b #STATE_TITLE,GameState
|
||||
rts
|
||||
|
||||
StartGame:
|
||||
move.b #STATE_PLAYING,GameState
|
||||
move.b #0,Stress
|
||||
move.b #START_SATIS,Satisfaction
|
||||
move.w #START_TIME,GameTime
|
||||
move.w #0,EmailCount
|
||||
|
||||
bsr ClearScreen
|
||||
bsr SpawnEmail
|
||||
rts
|
||||
|
||||
SpawnEmail:
|
||||
; For now, just pick the first email always, or cycle
|
||||
; TODO: Randomize
|
||||
lea EmailList,a0
|
||||
move.l a0,CurrentEmail
|
||||
|
||||
bsr DrawEmail
|
||||
rts
|
||||
|
||||
DrawEmail:
|
||||
move.l CurrentEmail,a0
|
||||
cmp.l #0,a0
|
||||
beq .done
|
||||
|
||||
; Draw Sender (at 2, 12)
|
||||
move.l 2(a0),a0 ; Get Sender Ptr
|
||||
moveq #2,d0 ; X
|
||||
moveq #12,d1 ; Y
|
||||
bsr DrawText
|
||||
|
||||
; Draw Subject (at 2, 14)
|
||||
move.l CurrentEmail,a0
|
||||
move.l 6(a0),a0 ; Get Subject Ptr
|
||||
moveq #2,d0
|
||||
moveq #14,d1
|
||||
bsr DrawText
|
||||
|
||||
; Draw Body (at 2, 16)
|
||||
move.l CurrentEmail,a0
|
||||
move.l 10(a0),a0 ; Get Body Ptr
|
||||
moveq #2,d0
|
||||
moveq #16,d1
|
||||
bsr DrawText
|
||||
|
||||
; Draw Options (at 2, 20 and 2, 22)
|
||||
move.l CurrentEmail,a0
|
||||
move.l 14(a0),a0 ; Opt1
|
||||
moveq #2,d0
|
||||
moveq #20,d1
|
||||
bsr DrawText
|
||||
|
||||
move.l CurrentEmail,a0
|
||||
move.l 18(a0),a0 ; Opt2
|
||||
moveq #2,d0
|
||||
moveq #22,d1
|
||||
bsr DrawText
|
||||
|
||||
.done:
|
||||
rts
|
||||
|
||||
UpdateGame:
|
||||
move.b GameState,d0
|
||||
cmp.b #STATE_TITLE,d0
|
||||
beq UpdateTitle
|
||||
cmp.b #STATE_PLAYING,d0
|
||||
beq UpdatePlaying
|
||||
cmp.b #STATE_GAMEOVER,d0
|
||||
beq UpdateGameOver
|
||||
rts
|
||||
|
||||
UpdateTitle:
|
||||
; Check for Space or Return to start
|
||||
; For now, auto-start
|
||||
bsr StartGame
|
||||
rts
|
||||
|
||||
UpdatePlaying:
|
||||
; 1. Check Win/Loss
|
||||
move.b Stress,d0
|
||||
cmp.b #MAX_STRESS,d0
|
||||
bge SetGameOver
|
||||
|
||||
move.b Satisfaction,d0
|
||||
beq SetGameOver
|
||||
|
||||
move.w GameTime,d0
|
||||
cmp.w #END_TIME,d0
|
||||
bge SetGameOver
|
||||
|
||||
; 2. Check Input for Options
|
||||
move.b LastKey,d0
|
||||
cmp.b #0,d0
|
||||
beq .noInput
|
||||
|
||||
; Clear LastKey immediately to prevent re-processing
|
||||
move.b #0,LastKey
|
||||
|
||||
; Check '1' and '2' keys
|
||||
; Amiga raw keycodes: '1' = $01, '2' = $02
|
||||
|
||||
cmp.b #$01,d0 ; '1'
|
||||
beq .opt1
|
||||
cmp.b #$02,d0 ; '2'
|
||||
beq .opt2
|
||||
|
||||
bra .noInput
|
||||
|
||||
.opt1:
|
||||
; Apply effects
|
||||
; TODO: Read effects from CurrentEmail
|
||||
bsr NextEmail
|
||||
bra .noInput
|
||||
|
||||
.opt2:
|
||||
bsr NextEmail
|
||||
bra .noInput
|
||||
|
||||
.noInput:
|
||||
; 3. Update Time
|
||||
addq.w #1,FrameCounter
|
||||
cmp.w #250,FrameCounter
|
||||
blt.s .noTimeUpdate
|
||||
|
||||
move.w #0,FrameCounter
|
||||
addq.w #1,GameTime
|
||||
.noTimeUpdate:
|
||||
rts
|
||||
|
||||
NextEmail:
|
||||
; Clear screen area (or full screen)
|
||||
bsr ClearScreen
|
||||
bsr SpawnEmail
|
||||
rts
|
||||
|
||||
UpdateGameOver:
|
||||
; Wait for restart
|
||||
rts
|
||||
|
||||
SetGameOver:
|
||||
move.b #STATE_GAMEOVER,GameState
|
||||
rts
|
||||
|
||||
; SECTION Data,DATA_C
|
||||
|
||||
GameState: dc.b 0
|
||||
Stress: dc.b 0
|
||||
Satisfaction: dc.b 0
|
||||
ALIGN 2
|
||||
GameTime: dc.w 0
|
||||
EmailCount: dc.w 0
|
||||
FrameCounter: dc.w 0
|
||||
CurrentEmail: dc.l 0
|
||||
Reference in New Issue
Block a user