Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Making your game general

Name: Anonymous 2018-08-08 9:11

ITT we discuss how to collaboratively design our games.

Name: Anonymous 2020-04-21 4:00

>>527
Actual save/load code
PlayerSerFields = list serial index name human gold debt color_name alt_color

CellSerFields = list x y biome type seed

UnitSerFields = list serial site type hp_loss flags hired used demand slot

SiteSerFields = list serial seed owner gold flags quest_context
turn cell ap ap_max

QuestSerFields = list serial seed type turn owner src dst reward flags

ItemSerFields = list serial type owner count slot flags quest renamed
color

WorldSerFields = list root_seed seed turn turn_seed player neutral human
nil picked serial quest_serial unit_serial cycle

item.ser =
| GT = getters_ Me
| Fs = map F ItemSerFields:
| V = (GT.F){Me}
| when V.is_wsite: V <= s,V.serial
| when V.is_wplayer: V <= p,V.index
| when V.is_wunit: V <= u,V.serial
| V
| Fs

wquest.ser =
| GT = getters_ Me
| Fs = map F QuestSerFields:
| V = (GT.F){Me}
| when V.is_wsite: V <= s,V.serial
| when V.is_wplayer: V <= p,V.index
| V
| Fs

wsite.ser =
| GT = $getter
| Fs = map F SiteSerFields:
| V = (GT.F){Me}
| when V.is_wcell: V <= c,V.x,V.y
| when V.is_wquest: V <= q,V.serial
| when V.is_wplayer: V <= p,V.index
| V
| $class.type,$data.unheap.list,Fs

wunit.ser =
| GT = getters_ Me
| Fs = map F UnitSerFields:
| V = (GT.F){Me}
| when V.is_wsite: V <= s,V.serial
| V
| $data.unheap.list,Fs

wcell.ser =
| when $void: leave 0
| GT = $getter
| map F CellSerFields:
| V = (GT.F){Me}
| when V.is_wsite: V <= s,V.serial
| V

wplayer.ser =
| GT = $getter
| map F PlayerSerFields: (GT.F){Me}

world.ser =
| GT = $getter
| for F WorldSerFields:
| V = (GT.F){Me}
| when V.is_wplayer: V <= p,V.index
| when V.is_wsite: V <= s,V.serial
| $data.F <= V
| list version("0.1")
data | $data.list
cells | $cells{}{?ser}.skip{0}
players | $players.list{}{?ser}
units | $units.list{}{?ser}
sites | $sites.list{}{?ser}
items | $witems.list{}{?ser}
quests | $quests.list{}{?ser}

world.save File =
| say "Saving to [File]"
| "[File].txt".set{$ser.as_text}
//| $bg.save{"[File].png"}

SiteLUT =
UnitLUT =
QuestLUT =

wplayer.unser Ser =
| ST = $setter
| map F,V zip{PlayerSerFields Ser}: (ST.F){Me V}
| $color <= $color_name
| Me

wsite.unser Ser =
| $class <= $world.classes.(Ser.0)
| $data <= Ser.1.enheap
| ST = $setter
| map F,V zip{SiteSerFields Ser.2}: (ST.F){Me $world.unsref{V}}
| SiteLUT.($serial) <= Me
| $place{$cell}
| Me

wcell.unser Ser =
| ST = $setter
| map F,V zip{CellSerFields Ser}: (ST.F){Me $world.unsref{V}}
| Me

wunit.unser Ser =
| $data <= Ser.0.enheap
| ST = setters_ Me
| map F,V zip{UnitSerFields Ser.1}: (ST.F){Me $world.unsref{V}}
| UnitLUT.($serial) <= Me
| Act = $world.main.acts.$type
| when no Act: bad "wunit.unser: no act associated with [$type]"
| $act <= Act
| $class <= $world.main.classes.$type
| Me

wquest.unser Ser =
| ST = $setter
| map F,V zip{QuestSerFields Ser}: (ST.F){Me $world.unsref{V}}
| QuestLUT.$serial <= Me
| Me

item.unser Ser =
| ST = $setter
| map F,V zip{ItemSerFields Ser}: (ST.F){Me $world.unsref{V}}
| $class <= $main.classes.$type
| $base <= $class.item
| $owner.equip{Me}
| Me

world.unsref Item = //unserialize unsref
| case Item
[c X Y] | $cellsMap.Y.X
[s Serial] | SiteLUT.Serial
[q Serial] | QuestLUT.Serial^~{Item}
[p Index] | $players.Index
[u Serial] | UnitLUT.Serial
Else | Item

world.regenerate_bg Seed =
| $clear
| $root_seed <= Seed
| rand_push $root_seed
| $seed <= rand_get
| $create_island{$bg} //regenerate background image
| $clear
| rand_pop

world.load File =
| say "Loading from [File]"
//| $bg.load{"[File].png"}
| SiteLUT <= t
| UnitLUT <= t
| QuestLUT <= t
| Save = $main.load_save_file{"[File].txt"}
| Data = Save.data.table
| $regenerate_bg{Data.root_seed}
| for C Save.cells: $cellsMap.(C.1).(C.0).unser{C}
| for Ser Save.players: $players_pool.alloc.unser{Ser}
| for Ser Save.sites: $sites.alloc.unser{Ser}
| for Ser Save.units: $units.alloc.unser{Ser}
| for Ser Save.quests: $quests.alloc.unser{Ser}
| for Ser Save.items: $witems.alloc.unser{Ser}
| for S $sites: when S.quest_context: //backpatch it
| S.quest_context <= $unsref{S.quest_context}
| ST = $setter
| for F WorldSerFields:
| V = Data.F
| (ST.F){Me $unsref{V}}
| Data.F <= No
| for K,V Data.list: when got V: $data.K <= V
//| say $players{}{?index,?name,?serial}
| SiteLUT <= No
| UnitLUT <= No
| QuestLUT <= No

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List