Venture Examples
Venture Examples
Section titled “Venture Examples”This guide provides complete, copy-paste ready venture configurations organized by complexity level.
Simple: Solo Training Venture
Section titled “Simple: Solo Training Venture”A basic venture where one Pokémon trains and gains experience.
id: "forest_training"name: "Forest Training"description: [ "Send a Pokémon into the forest for basic training.", "Your Pokémon will gain experience and improve its Speed."]icon: "minecraft:oak_sapling"duration: 60000 # 1 minutecooldown: 120 # 2 minutesrequired_pokemon_amount: 1
visibility_requirements: ["1.0"]click_requirements: ["1.0"]
pokemon_requirements: [ """ q.pokemon.level >= 10.0 ? 1.0 : { q.append_fail_message('Pokemon must be at least level 10!'); return 0.0; }; """]
requirements: [ "q.add_requirement('Pokemon must be level 10 or higher');", "1.0;"]
reward_builder: [ "q.add_reward_line('150 XP');", "q.add_reward_line('5 Speed EVs');"]
rewards: [ { type: script reward_string: "XP and EVs" scripts: [ """ q.pokemon(0).add_xp(150); q.pokemon(0).set_ev('spe', math.min(252, q.pokemon(0).evs.spe + 5.0)); """ ] }]Intermediate: Type-Based Team Venture
Section titled “Intermediate: Type-Based Team Venture”A venture requiring multiple Pokémon of specific types with type-based rewards.
id: "elemental_training"name: "Elemental Training Grounds"description: [ "Send a team to train in diverse environments.", "Fire, Water, and Grass types will benefit most."]icon: "cobblemon:fire_stone"duration: 180000 # 3 minutescooldown: 600required_pokemon_amount: 3allow_less_than_required: false
visibility_requirements: ["1.0"]
click_requirements: [ """ t.has_fire = q.player.pc.find_by_properties('type=fire') >= 1.0; t.has_water = q.player.pc.find_by_properties('type=water') >= 1.0; t.has_grass = q.player.pc.find_by_properties('type=grass') >= 1.0;
t.has_fire && t.has_water && t.has_grass ? 1.0 : { q.player.tell('<red>You need at least 1 Fire, Water, and Grass type in your PC!'); return 0.0; }; """]
pokemon_requirements: [ """ // Must be a valid type t.valid = q.pokemon.is_type('fire') || q.pokemon.is_type('water') || q.pokemon.is_type('grass');
t.valid == 0.0 ? { q.append_fail_message('Must be Fire, Water, or Grass type!'); return 0.0; };
// Level requirement q.pokemon.level < 20.0 ? { q.append_fail_message(q.pokemon.species.name + ' must be level 20+!'); return 0.0; };
// Ensure balanced team t.fire_count = 0.0; t.water_count = 0.0; t.grass_count = 0.0;
for_each(t.p, q.selected_pokemon, { t.fire_count = t.p.is_type('fire') ? t.fire_count + 1.0 : t.fire_count; t.water_count = t.p.is_type('water') ? t.water_count + 1.0 : t.water_count; t.grass_count = t.p.is_type('grass') ? t.grass_count + 1.0 : t.grass_count; });
t.fire_count > 0.0 && t.water_count > 0.0 && t.grass_count > 0.0 ? 1.0 : { q.append_fail_message('Team must include Fire, Water, AND Grass types!'); return 0.0; }; """]
requirements: [ "q.add_requirement('All Pokemon must be level 20+');", "q.add_requirement('Must have Fire, Water, and Grass types');", "q.add_requirement('Requires exactly 3 Pokemon');", "1.0;"]
tick_script: [ """ q.ticks_elapsed == 100.0 ? { q.player.tell('<gray>Your Pokemon begin their elemental training...'); }; q.ticks_elapsed == 1800.0 ? { q.player.tell('<gray>The training is intensifying!'); }; """]
reward_builder: [ "q.add_reward_line('200 XP per Pokemon');", "q.add_reward_line('10 Special Attack EVs per Pokemon');", "q.add_reward_line('Type-specific held items');"]
rewards: [ { type: script reward_string: "XP, EVs, and items" scripts: [ """ for_each(t.pkmn, q.pokemon, { // Add XP t.pkmn.add_xp(200);
// Add Special Attack EVs t.current_spa = t.pkmn.evs.spa; t.pkmn.set_ev('spa', math.min(252, t.current_spa + 10.0));
// Give type-specific items t.pkmn.is_type('fire') ? { q.run_command('give ' + q.player.name + ' cobblemon:charcoal 1'); }; t.pkmn.is_type('water') ? { q.run_command('give ' + q.player.name + ' cobblemon:mystic_water 1'); }; t.pkmn.is_type('grass') ? { q.run_command('give ' + q.player.name + ' cobblemon:miracle_seed 1'); }; });
q.player.tell('<gold>Your team completed elemental training!'); """ ] }]Advanced: Treasure Hunt with Dynamic Rewards
Section titled “Advanced: Treasure Hunt with Dynamic Rewards”A venture with random treasure discoveries tracked via venture variables.
id: "treasure_expedition"name: "Mysterious Treasure Hunt"description: [ "Send a team of 6 Pokemon to explore ancient ruins.", "They might discover rare treasures during the expedition!", "Larger teams have better chances of finding treasure."]icon: "minecraft:chest"duration: 240000 # 4 minutescooldown: 900required_pokemon_amount: 6allow_less_than_required: true
visibility_requirements: [ "q.player.pc.count >= 6.0 ? 1.0 : 0.0;"]
click_requirements: ["1.0"]
pokemon_requirements: [ """ q.pokemon.level < 30.0 ? { q.append_fail_message(q.pokemon.species.name + ' must be level 30+!'); return 0.0; }; 1.0; """]
requirements: [ "q.add_requirement('All Pokemon must be level 30+');", "q.add_requirement('1-6 Pokemon can participate');", "q.add_requirement('More Pokemon = better treasure chance');", "1.0;"]
tick_script: [ """ // Initialize variables v.treasures_found == 0.0 ? { v.treasures_found = 0.0; v.last_check = 0.0; };
// Check every 10 seconds (200 ticks) t.current_time = q.ticks_elapsed; t.time_since_check = t.current_time - v.last_check;
t.time_since_check >= 200.0 ? { v.last_check = t.current_time;
// Calculate treasure chance based on team size t.team_size = q.pokemon.size; t.base_chance = 5.0; // 5% base t.bonus_per_pokemon = 3.0; // +3% per Pokemon t.total_chance = t.base_chance + (t.team_size * t.bonus_per_pokemon);
// Roll for treasure t.roll = math.random_integer(1, 100); t.roll <= t.total_chance ? { v.treasures_found = v.treasures_found + 1.0;
// Randomly select treasure type t.treasure_roll = math.random_integer(1, 5); t.treasures = q.array( 'minecraft:diamond', 'Diamond', 'minecraft:emerald', 'Emerald', 'minecraft:gold_ingot', 'Gold Ingot', 'cobblemon:rare_candy', 'Rare Candy', 'cobblemon:nugget', 'Nugget' );
t.index = (t.treasure_roll - 1.0) * 2.0; t.item_id = t.treasures[t.index]; t.item_name = t.treasures[t.index + 1.0];
// Store for reward t.var_name = 'treasure_' + v.treasures_found; v.set(t.var_name, t.item_id);
q.player.tell('<gold>Your Pokemon found a ' + t.item_name + '!'); }; };
// Progress messages q.ticks_elapsed == 100.0 ? { q.player.tell('<gray>Your Pokemon begin exploring the ruins...'); }; q.ticks_elapsed == 2400.0 ? { q.player.tell('<gray>They dig deeper into the ancient chambers!'); }; q.ticks_elapsed == 4600.0 ? { q.player.tell('<gray>They head back with their findings!'); }; """]
reward_builder: [ """ t.team_size = q.pokemon.size; t.base_xp = 300.0; t.xp_total = t.base_xp * t.team_size;
q.add_reward_line(t.xp_total + ' XP (split among team)'); q.add_reward_line('Random treasures based on discoveries'); q.add_reward_line('+5 Speed EVs per Pokemon'); """]
rewards: [ { type: script reward_string: "XP, treasures, and EVs" scripts: [ """ // Distribute XP evenly t.team_size = q.pokemon.size; t.xp_per_mon = math.floor(300.0 * t.team_size / t.team_size);
for_each(t.pkmn, q.pokemon, { t.pkmn.add_xp(t.xp_per_mon);
// Add Speed EVs t.current_spe = t.pkmn.evs.spe; t.pkmn.set_ev('spe', math.min(252, t.current_spe + 5.0)); });
// Give treasures t.treasures_found = v.treasures_found;
t.treasures_found > 0.0 ? { t.counter = 1.0;
// Loop through treasures (MoLang doesn't have traditional for loops) t.counter <= t.treasures_found ? { t.var_name = 'treasure_' + t.counter; t.item = v.get(t.var_name); q.run_command('give ' + q.player.name + ' ' + t.item + ' 1'); t.counter = t.counter + 1.0;
t.counter <= t.treasures_found ? { t.var_name = 'treasure_' + t.counter; t.item = v.get(t.var_name); q.run_command('give ' + q.player.name + ' ' + t.item + ' 1'); t.counter = t.counter + 1.0;
t.counter <= t.treasures_found ? { t.var_name = 'treasure_' + t.counter; t.item = v.get(t.var_name); q.run_command('give ' + q.player.name + ' ' + t.item + ' 1'); t.counter = t.counter + 1.0; }; }; };
q.player.tell('<gold>Your Pokemon brought back ' + t.treasures_found + ' treasure(s)!'); } : { q.player.tell('<gray>Your Pokemon didn\\'t find any treasures this time.'); q.run_command('give ' + q.player.name + ' minecraft:iron_ingot 3'); }; """ ] }]Expert: IV Breeding Program
Section titled “Expert: IV Breeding Program”A complex venture that improves Pokemon IVs based on team composition.
id: "iv_breeding_program"name: "Advanced IV Breeding Program"description: [ "Send Pokemon with good IVs to improve the entire team.", "Pokemon with higher IVs contribute more to the program.", "All participants gain IV improvements!"]icon: "cobblemon:destiny_knot"duration: 300000 # 5 minutescooldown: 1800required_pokemon_amount: 6allow_less_than_required: false
visibility_requirements: ["1.0"]click_requirements: ["1.0"]
pokemon_requirements: [ """ q.pokemon.level < 50.0 ? { q.append_fail_message(q.pokemon.species.name + ' must be level 50+!'); return 0.0; };
// Calculate total IVs t.total_ivs = q.pokemon.ivs.hp + q.pokemon.ivs.atk + q.pokemon.ivs.def + q.pokemon.ivs.spa + q.pokemon.ivs.spd + q.pokemon.ivs.spe;
t.total_ivs < 90.0 ? { q.append_fail_message(q.pokemon.species.name + ' IVs too low (need 90+ total)'); return 0.0; };
1.0; """]
requirements: [ "q.add_requirement('All Pokemon must be level 50+');", "q.add_requirement('Each Pokemon must have 90+ total IVs');", "q.add_requirement('Higher team IVs = better improvements');", "q.add_requirement('Requires exactly 6 Pokemon');", "1.0;"]
tick_script: [ """ v.iv_total == 0.0 ? { // Calculate team IV average on start v.iv_total = 0.0; for_each(t.p, q.pokemon, { v.iv_total = v.iv_total + t.p.ivs.hp + t.p.ivs.atk + t.p.ivs.def + t.p.ivs.spa + t.p.ivs.spd + t.p.ivs.spe; }); v.iv_average = v.iv_total / 6.0; q.player.tell('<aqua>Team IV Average: ' + math.floor(v.iv_average)); };
q.ticks_elapsed == 3000.0 ? { q.player.tell('<gray>The breeding program is analyzing genetics...'); }; """]
reward_builder: [ """ q.add_reward_line('IV improvements based on team quality'); q.add_reward_line('500 XP per Pokemon'); q.add_reward_line('Chance for Destiny Knot (high IV teams)'); """]
rewards: [ { type: script reward_string: "IV improvements and XP" scripts: [ """ // Calculate IV improvement amount based on team average t.iv_avg = v.iv_average;
// Determine IV boost (2-5 based on team quality) t.iv_boost = 2.0; t.iv_avg >= 120.0 ? t.iv_boost = 3.0; t.iv_avg >= 150.0 ? t.iv_boost = 4.0; t.iv_avg >= 170.0 ? t.iv_boost = 5.0;
// Apply improvements to each Pokemon for_each(t.pkmn, q.pokemon, { // Add XP t.pkmn.add_xp(500);
// Randomly select stats to improve t.stats = q.array('hp', 'atk', 'def', 'spa', 'spd', 'spe'); t.improvements_left = t.iv_boost;
// Improve random stats (unroll loop for MoLang) t.improvements_left > 0.0 ? { t.stat_index = math.random_integer(0, 5); t.stat = t.stats[t.stat_index]; t.pkmn.add_iv(t.stat, 1); t.improvements_left = t.improvements_left - 1.0;
t.improvements_left > 0.0 ? { t.stat_index = math.random_integer(0, 5); t.stat = t.stats[t.stat_index]; t.pkmn.add_iv(t.stat, 1); t.improvements_left = t.improvements_left - 1.0;
t.improvements_left > 0.0 ? { t.stat_index = math.random_integer(0, 5); t.stat = t.stats[t.stat_index]; t.pkmn.add_iv(t.stat, 1); t.improvements_left = t.improvements_left - 1.0;
t.improvements_left > 0.0 ? { t.stat_index = math.random_integer(0, 5); t.stat = t.stats[t.stat_index]; t.pkmn.add_iv(t.stat, 1); t.improvements_left = t.improvements_left - 1.0;
t.improvements_left > 0.0 ? { t.stat_index = math.random_integer(0, 5); t.stat = t.stats[t.stat_index]; t.pkmn.add_iv(t.stat, 1); }; }; }; }; };
q.player.tell('<aqua>' + t.pkmn.species.name + ' gained ' + t.iv_boost + ' random IV points!'); });
// Bonus Destiny Knot for exceptional teams t.iv_avg >= 170.0 ? { t.roll = math.random_integer(1, 100); t.roll <= 25.0 ? { q.run_command('give ' + q.player.name + ' cobblemon:destiny_knot 1'); q.player.tell('<rainbow>Exceptional breeding! Received Destiny Knot!'); }; }; """ ] }]Tips for Creating Ventures
Section titled “Tips for Creating Ventures”Performance
Section titled “Performance”- Use modulo checks in tick_script:
(q.ticks_elapsed % 200) == 0.0 - Cache calculated values in temporary variables
- Avoid complex calculations every tick
User Experience
Section titled “User Experience”- Provide clear failure messages in requirements
- Send progress messages during long ventures
- Give meaningful rewards scaled to duration and difficulty
Testing
Section titled “Testing”- Start with simple ventures and add complexity
- Test with different team compositions
- Verify reward scaling makes sense
Balance
Section titled “Balance”- Consider venture duration vs cooldown ratio
- Scale rewards with difficulty and time investment
- Make requirements clear and achievable